diff options
author | Simon Glass <sjg@chromium.org> | 2013-11-10 10:27:01 -0700 |
---|---|---|
committer | Simon Glass <sjg@chromium.org> | 2014-01-08 17:24:50 -0700 |
commit | 91b136c7989e763b01632ca3de6fca8ead0b847b (patch) | |
tree | e604715f70bf272c800568380aa6bfb9ddd6d674 | |
parent | 88bd0e9d15d2f7e8c040931b06497878f9ed0550 (diff) | |
download | u-boot-imx-91b136c7989e763b01632ca3de6fca8ead0b847b.zip u-boot-imx-91b136c7989e763b01632ca3de6fca8ead0b847b.tar.gz u-boot-imx-91b136c7989e763b01632ca3de6fca8ead0b847b.tar.bz2 |
sandbox: Allow the console to work earlier
With sandbox, errors and problems may be reported before console_init_f()
is executed. For example, an argument may not parse correctly or U-Boot may
panic(). At present this output is swallowed so there is no indication what
is going wrong.
Adjust the console to deal with a very early sandbox setup, by detecting that
there is no global_data yet, and calling os functions in that case.
Signed-off-by: Simon Glass <sjg@chromium.org>
Signed-off-by: Simon Glass <sjg@chromium.org>
-rw-r--r-- | arch/sandbox/cpu/os.c | 11 | ||||
-rw-r--r-- | common/console.c | 16 | ||||
-rw-r--r-- | include/os.h | 20 |
3 files changed, 46 insertions, 1 deletions
diff --git a/arch/sandbox/cpu/os.c b/arch/sandbox/cpu/os.c index 88dd371..ef6a651 100644 --- a/arch/sandbox/cpu/os.c +++ b/arch/sandbox/cpu/os.c @@ -388,3 +388,14 @@ ssize_t os_get_filesize(const char *fname) return ret; return buf.st_size; } + +void os_putc(int ch) +{ + putchar(ch); +} + +void os_puts(const char *str) +{ + while (*str) + os_putc(*str++); +} diff --git a/common/console.c b/common/console.c index cc55068..2dfb788 100644 --- a/common/console.c +++ b/common/console.c @@ -8,6 +8,7 @@ #include <common.h> #include <stdarg.h> #include <malloc.h> +#include <os.h> #include <serial.h> #include <stdio_dev.h> #include <exports.h> @@ -415,6 +416,12 @@ static inline void print_pre_console_buffer(void) {} void putc(const char c) { +#ifdef CONFIG_SANDBOX + if (!gd) { + os_putc(c); + return; + } +#endif #ifdef CONFIG_SILENT_CONSOLE if (gd->flags & GD_FLG_SILENT) return; @@ -439,6 +446,13 @@ void putc(const char c) void puts(const char *s) { +#ifdef CONFIG_SANDBOX + if (!gd) { + os_puts(s); + return; + } +#endif + #ifdef CONFIG_SILENT_CONSOLE if (gd->flags & GD_FLG_SILENT) return; @@ -467,7 +481,7 @@ int printf(const char *fmt, ...) uint i; char printbuffer[CONFIG_SYS_PBSIZE]; -#ifndef CONFIG_PRE_CONSOLE_BUFFER +#if !defined(CONFIG_SANDBOX) && !defined(CONFIG_PRE_CONSOLE_BUFFER) if (!gd->have_console) return 0; #endif diff --git a/include/os.h b/include/os.h index 1575a96..d302b36 100644 --- a/include/os.h +++ b/include/os.h @@ -209,4 +209,24 @@ const char *os_dirent_get_typename(enum os_dirent_t type); */ ssize_t os_get_filesize(const char *fname); +/** + * Write a character to the controlling OS terminal + * + * This bypasses the U-Boot console support and writes directly to the OS + * stdout file descriptor. + * + * @param ch Character to write + */ +void os_putc(int ch); + +/** + * Write a string to the controlling OS terminal + * + * This bypasses the U-Boot console support and writes directly to the OS + * stdout file descriptor. + * + * @param str String to write (note that \n is not appended) + */ +void os_puts(const char *str); + #endif |