/*
- * Bootstrap code for the INTEL
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2003 Eric Biederman
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#include <arch/io.h>
#include <console/console.h>
+#include <build.h>
+#include <arch/hlt.h>
+#include <arch/io.h>
+
+#ifndef __PRE_RAM__
#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;
+ console_loglevel=CONFIG_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)
+void console_tx_flush(void)
{
struct console_driver *driver;
for(driver = console_drivers; driver < econsole_drivers; driver++) {
- driver->tx_byte(byte);
+ if (!driver->tx_flush)
+ continue;
+ driver->tx_flush();
}
}
-void console_tx_flush(void)
+static void __console_tx_byte(unsigned char byte)
{
struct console_driver *driver;
for(driver = console_drivers; driver < econsole_drivers; driver++) {
- if (!driver->tx_flush)
- continue;
- driver->tx_flush();
+ driver->tx_byte(byte);
}
}
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)
+unsigned char console_rx_byte(void)
{
-#ifdef CONFIG_SERIAL_POST
- printk_info("POST: 0x%02x\n", value);
-#elsif !define(NO_POST)
- outb(value, 0x80);
-#endif
+ struct console_driver *driver;
+ for(driver = console_drivers; driver < econsole_drivers; driver++) {
+ if (driver->tst_byte)
+ break;
+ }
+ if (driver == econsole_drivers)
+ return 0;
+ while (!driver->tst_byte());
+ return driver->rx_byte();
+}
+
+int console_tst_byte(void)
+{
+ struct console_driver *driver;
+ for(driver = console_drivers; driver < econsole_drivers; driver++)
+ if (driver->tst_byte)
+ return driver->tst_byte();
+ return 0;
}
-/* Report a fatal error */
-void die(char *msg)
+#else // __PRE_RAM__ ^^^ NOT defined vvv defined
+
+void console_init(void)
{
- printk_emerg("%s", msg);
- post_code(0xff);
- while (1); /* Halt */
+#if CONFIG_USBDEBUG
+ enable_usbdebug(CONFIG_USBDEBUG_DEFAULT_PORT);
+ early_usbdebug_init();
+#endif
+#if CONFIG_CONSOLE_SERIAL8250
+ uart_init();
+#endif
+#if CONFIG_DRIVERS_OXFORD_OXPCIE && CONFIG_CONSOLE_SERIAL8250MEM
+ oxford_init();
+#endif
+#if CONFIG_CONSOLE_NE2K
+ ne2k_init(CONFIG_CONSOLE_NE2K_IO_PORT);
+#endif
+#if CONFIG_CONSOLE_CBMEM
+ cbmemc_init();
+#endif
+ static const char console_test[] =
+ "\n\ncoreboot-"
+ COREBOOT_VERSION
+ COREBOOT_EXTRA_VERSION
+ " "
+ COREBOOT_BUILD
+ " starting...\n";
+ print_info(console_test);
}
+#endif