diff options
Diffstat (limited to 'roms/u-boot/common/log_console.c')
-rw-r--r-- | roms/u-boot/common/log_console.c | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/roms/u-boot/common/log_console.c b/roms/u-boot/common/log_console.c new file mode 100644 index 000000000..3f6177499 --- /dev/null +++ b/roms/u-boot/common/log_console.c @@ -0,0 +1,53 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Logging support + * + * Copyright (c) 2017 Google, Inc + * Written by Simon Glass <sjg@chromium.org> + */ + +#include <common.h> +#include <log.h> +#include <asm/global_data.h> + +DECLARE_GLOBAL_DATA_PTR; + +static int log_console_emit(struct log_device *ldev, struct log_rec *rec) +{ + int fmt = gd->log_fmt; + bool add_space = false; + + /* + * The output format is designed to give someone a fighting chance of + * figuring out which field is which: + * - level is in CAPS + * - cat is lower case and ends with comma + * - file normally has a .c extension and ends with a colon + * - line is integer and ends with a - + * - function is an identifier and ends with () + * - message has a space before it unless it is on its own + */ + if (!(rec->flags & LOGRECF_CONT) && fmt != BIT(LOGF_MSG)) { + add_space = true; + if (fmt & BIT(LOGF_LEVEL)) + printf("%s.", log_get_level_name(rec->level)); + if (fmt & BIT(LOGF_CAT)) + printf("%s,", log_get_cat_name(rec->cat)); + if (fmt & BIT(LOGF_FILE)) + printf("%s:", rec->file); + if (fmt & BIT(LOGF_LINE)) + printf("%d-", rec->line); + if (fmt & BIT(LOGF_FUNC)) + printf("%s()", rec->func); + } + if (fmt & BIT(LOGF_MSG)) + printf("%s%s", add_space ? " " : "", rec->msg); + + return 0; +} + +LOG_DRIVER(console) = { + .name = "console", + .emit = log_console_emit, + .flags = LOGDF_ENABLE, +}; |