diff --git a/common/console.c b/common/console.c index f83528c..d763f2c 100644 --- a/common/console.c +++ b/common/console.c @@ -450,6 +450,12 @@ static void pre_console_putc(const char c) unmap_sysmem(buffer); } +static void pre_console_puts(const char *s) +{ + while (*s) + pre_console_putc(*s++); +} + static void print_pre_console_buffer(int flushpoint) { unsigned long in = 0, out = 0; @@ -477,6 +483,7 @@ static void print_pre_console_buffer(int flushpoint) } #else static inline void pre_console_putc(const char c) {} +static inline void pre_console_puts(const char *s) {} static inline void print_pre_console_buffer(int flushpoint) {} #endif @@ -518,8 +525,41 @@ void putc(const char c) void puts(const char *s) { - while (*s) - putc(*s++); +#ifdef CONFIG_DEBUG_UART + if (!gd || !(gd->flags & GD_FLG_SERIAL_READY)) { + while (*s) { + int ch = *s++; + + printch(ch); + } + return; + } +#endif +#ifdef CONFIG_CONSOLE_RECORD + if (gd && (gd->flags & GD_FLG_RECORD) && gd->console_out.start) + membuff_put(&gd->console_out, s, strlen(s)); +#endif +#ifdef CONFIG_SILENT_CONSOLE + if (gd->flags & GD_FLG_SILENT) + return; +#endif + +#ifdef CONFIG_DISABLE_CONSOLE + if (gd->flags & GD_FLG_DISABLE_CONSOLE) + return; +#endif + + if (!gd->have_console) + return pre_console_puts(s); + + if (gd->flags & GD_FLG_DEVINIT) { + /* Send to the standard output */ + fputs(stdout, s); + } else { + /* Send directly to the handler */ + pre_console_puts(s); + serial_puts(s); + } } #ifdef CONFIG_CONSOLE_RECORD