summaryrefslogtreecommitdiffstats
path: root/src/console
diff options
context:
space:
mode:
authorJulius Werner <jwerner@chromium.org>2022-01-21 15:15:29 -0800
committerFelix Held <felix-coreboot@felixheld.de>2022-02-07 14:11:44 +0000
commit7cd8ba6eda6979d61a3a0685057b20bf2da9be31 (patch)
tree9366479b45a370531d82d42b39a034d6b309b184 /src/console
parent1ee6e4ab6cd147bc7adb201426039e2920c317dc (diff)
downloadcoreboot-7cd8ba6eda6979d61a3a0685057b20bf2da9be31.tar.gz
coreboot-7cd8ba6eda6979d61a3a0685057b20bf2da9be31.tar.bz2
coreboot-7cd8ba6eda6979d61a3a0685057b20bf2da9be31.zip
console: Add loglevel prefix to interactive consoles
In an attempt to make loglevels more visible (and therefore useful, hopefully), this patch adds a prefix indicating the log level to every line sent to an "interactive" console (such as a UART). If the code contains a `printk(BIOS_DEBUG, "This is a debug message!\n"), it will now show up as [DEBUG] This is a debug message! on the UART output. "Stored" consoles (such as in CBMEM) will get a similar but more space-efficient feature in a later CL. Signed-off-by: Julius Werner <jwerner@chromium.org> Change-Id: Ic83413475400821f8097ef1819a293ee8926bb0b Reviewed-on: https://review.coreboot.org/c/coreboot/+/61306 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Raul Rangel <rrangel@chromium.org>
Diffstat (limited to 'src/console')
-rw-r--r--src/console/console.c25
-rw-r--r--src/console/printk.c26
2 files changed, 42 insertions, 9 deletions
diff --git a/src/console/console.c b/src/console/console.c
index 67da10794e95..5b8a872e0e67 100644
--- a/src/console/console.c
+++ b/src/console/console.c
@@ -25,28 +25,35 @@ void console_hw_init(void)
__system76_ec_init();
}
-void console_tx_byte(unsigned char byte)
+void console_interactive_tx_byte(unsigned char byte, void *data_unused)
{
- __cbmemc_tx_byte(byte);
- __spkmodem_tx_byte(byte);
- __qemu_debugcon_tx_byte(byte);
-
- /* Some consoles want newline conversion
- * to keep terminals happy.
- */
if (byte == '\n') {
+ /* Some consoles want newline conversion to keep terminals happy. */
__uart_tx_byte('\r');
__usb_tx_byte('\r');
}
+ __spkmodem_tx_byte(byte);
+ __qemu_debugcon_tx_byte(byte);
__uart_tx_byte(byte);
__ne2k_tx_byte(byte);
__usb_tx_byte(byte);
__spiconsole_tx_byte(byte);
- __flashconsole_tx_byte(byte);
__system76_ec_tx_byte(byte);
}
+void console_stored_tx_byte(unsigned char byte, void *data_unused)
+{
+ __flashconsole_tx_byte(byte);
+ __cbmemc_tx_byte(byte);
+}
+
+void console_tx_byte(unsigned char byte)
+{
+ console_interactive_tx_byte(byte, NULL);
+ console_stored_tx_byte(byte, NULL);
+}
+
void console_tx_flush(void)
{
__uart_tx_flush();
diff --git a/src/console/printk.c b/src/console/printk.c
index ef3d29f49049..ddd14c05891a 100644
--- a/src/console/printk.c
+++ b/src/console/printk.c
@@ -67,9 +67,35 @@ union log_state {
};
};
+static void wrap_interactive_printf(const char *fmt, ...)
+{
+ va_list args;
+ va_start(args, fmt);
+ vtxprintf(console_interactive_tx_byte, fmt, args, NULL);
+}
+
+static void line_start(union log_state state)
+{
+ if (state.level > BIOS_LOG_PREFIX_MAX_LEVEL)
+ return;
+ if (state.speed == CONSOLE_LOG_FAST)
+ return;
+
+ /* Interactive consoles get a `[DEBUG] ` style readable prefix. */
+ wrap_interactive_printf(BIOS_LOG_PREFIX_PATTERN, bios_log_prefix[state.level]);
+}
+
static void wrap_putchar(unsigned char byte, void *data)
{
union log_state state = { .as_ptr = data };
+ static bool line_started = false;
+
+ if (byte == '\n') {
+ line_started = false;
+ } else if (!line_started) {
+ line_start(state);
+ line_started = true;
+ }
if (state.speed == CONSOLE_LOG_FAST)
__cbmemc_tx_byte(byte);