diff options
Diffstat (limited to 'src/console/console.c')
-rw-r--r-- | src/console/console.c | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/src/console/console.c b/src/console/console.c new file mode 100644 index 0000000000..458fbb8fff --- /dev/null +++ b/src/console/console.c @@ -0,0 +1,75 @@ +/* + * Bootstrap code for the INTEL + * $Id$ + * + */ + +#include <arch/io.h> +#include <console/console.h> +#include <string.h> +#include <pc80/mc146818rtc.h> + + +static int initialized; + +/* initialize the console */ +void console_init(void) +{ + struct console_driver *driver; + if(get_option(&console_loglevel, "debug_level")) + console_loglevel=DEFAULT_CONSOLE_LOGLEVEL; + + for(driver = console_drivers; driver < econsole_drivers; driver++) { + if (!driver->init) + continue; + driver->init(); + } + initialized = 1; +} + +static void __console_tx_byte(unsigned char byte) +{ + struct console_driver *driver; + for(driver = console_drivers; driver < econsole_drivers; driver++) { + driver->tx_byte(byte); + } +} + +void console_tx_flush(void) +{ + struct console_driver *driver; + for(driver = console_drivers; driver < econsole_drivers; driver++) { + if (!driver->tx_flush) + continue; + driver->tx_flush(); + } +} + +void console_tx_byte(unsigned char byte) +{ + if (!initialized) + return; + if (byte == '\n') + __console_tx_byte('\r'); + __console_tx_byte(byte); +} + +/* + * Write POST information + */ +void post_code(uint8_t value) +{ +#ifdef CONFIG_SERIAL_POST + printk_info("POST: 0x%02x\n", value); +#elsif !define(NO_POST) + outb(value, 0x80); +#endif +} + +/* Report a fatal error */ +void die(char *msg) +{ + printk_emerg("%s", msg); + post_code(0xff); + while (1); /* Halt */ +} |