This patch adds the macros __ROMSTAGE__ and __RAMSTAGE__ which get predefined in their respective stages by make, so that we have one specific macro for every stage. It also renames __BOOT_BLOCK__ and __VER_STAGE__ to __BOOTBLOCK__ and __VERSTAGE__ for consistency. This change is intended to provided finer control and clearer communication of intent after we added a new (optional) stage that falls under __PRE_RAM__, and will hopefully provide some robustness for the future (we don't want to end up always checking for romstage with #if defined(__PRE_RAM__) && !defined(__BOOT_BLOCK__) && !defined(__VER_STAGE__) && !defined(__YET_ANOTHER_PRERAM_STAGE__)). The __PRE_RAM__ macro stays as it is since many features do in fact need to differentiate on whether RAM is available. (Some also depend on whether RAM is available at the end of a stage, in which case #if !defined(__PRE_RAM__) || defined(__ROMSTAGE__) should now be authoritative.) It's unfeasable to change all existing occurences of __PRE_RAM__ that would be better described with __ROMSTAGE__, so this patch only demonstratively changes a few obvious ones in core code. BUG=None TEST=None (tested together with dependent patch). Change-Id: I6a1f25f7077328a8b5201a79b18fc4c2e22d0b06 Signed-off-by: Julius Werner <jwerner@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/219172 Reviewed-by: Aaron Durbin <adurbin@chromium.org>
140 lines
3.3 KiB
C
140 lines
3.3 KiB
C
/*
|
|
* 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 <console/console.h>
|
|
#include <build.h>
|
|
#include <arch/hlt.h>
|
|
#include <arch/io.h>
|
|
|
|
#ifndef __PRE_RAM__
|
|
#include <string.h>
|
|
|
|
/*
|
|
* FIXME: get_option() needs to be abstracted better so that other non-volatile
|
|
* storage can be used. This will benefit machines without CMOS as well as those
|
|
* without a battery-backed CMOS (e.g. some laptops).
|
|
*/
|
|
#if CONFIG_USE_OPTION_TABLE
|
|
#include <pc80/mc146818rtc.h>
|
|
#else
|
|
static inline int get_option(void *dest, const char *name) { return -1; }
|
|
#endif
|
|
|
|
/* initialize the console */
|
|
void console_init(void)
|
|
{
|
|
struct console_driver *driver;
|
|
if(get_option(&console_loglevel, "debug_level"))
|
|
console_loglevel=CONFIG_DEFAULT_CONSOLE_LOGLEVEL;
|
|
|
|
for(driver = console_drivers; driver < econsole_drivers; driver++) {
|
|
if (!driver->init)
|
|
continue;
|
|
driver->init();
|
|
}
|
|
}
|
|
|
|
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();
|
|
}
|
|
}
|
|
|
|
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_byte(unsigned char byte)
|
|
{
|
|
if (byte == '\n')
|
|
__console_tx_byte('\r');
|
|
__console_tx_byte(byte);
|
|
}
|
|
|
|
unsigned char console_rx_byte(void)
|
|
{
|
|
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;
|
|
}
|
|
|
|
#else // __PRE_RAM__ ^^^ NOT defined vvv defined
|
|
|
|
void console_init(void)
|
|
{
|
|
#if defined(__BOOTBLOCK__) && CONFIG_BOOTBLOCK_CONSOLE || \
|
|
!defined(__BOOTBLOCK__) && CONFIG_EARLY_CONSOLE
|
|
|
|
#if CONFIG_USBDEBUG
|
|
enable_usbdebug(CONFIG_USBDEBUG_DEFAULT_PORT);
|
|
early_usbdebug_init();
|
|
#endif
|
|
#if CONFIG_CONSOLE_SERIAL
|
|
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
|
|
#if defined(__BOOTBLOCK__)
|
|
" bootblock "
|
|
#elif defined(__VERSTAGE__)
|
|
" verstage "
|
|
#else
|
|
" romstage "
|
|
#endif
|
|
COREBOOT_BUILD
|
|
" starting...\n";
|
|
print_info(console_test);
|
|
|
|
#endif /* CONFIG_EARLY_CONSOLE */
|
|
}
|
|
#endif
|