coreboot/src/include/console/console.h
<<
>>
Prefs
   1/*
   2 * This file is part of the coreboot project.
   3 *
   4 * Copyright (C) 2003 Eric Biederman
   5 *
   6 * This program is free software; you can redistribute it and/or modify
   7 * it under the terms of the GNU General Public License as published by
   8 * the Free Software Foundation; version 2 of the License.
   9 *
  10 * This program is distributed in the hope that it will be useful,
  11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13 * GNU General Public License for more details.
  14 *
  15 * You should have received a copy of the GNU General Public License
  16 * along with this program; if not, write to the Free Software
  17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
  18 */
  19
  20#ifndef CONSOLE_CONSOLE_H_
  21#define CONSOLE_CONSOLE_H_
  22
  23#include <stdint.h>
  24#include <console/loglevel.h>
  25#include <console/post_codes.h>
  26
  27#ifndef __PRE_RAM__
  28void console_tx_byte(unsigned char byte);
  29void console_tx_flush(void);
  30unsigned char console_rx_byte(void);
  31int console_tst_byte(void);
  32#if CONFIG_USBDEBUG
  33#include <usbdebug.h>
  34#endif
  35
  36struct console_driver {
  37        void (*init)(void);
  38        void (*tx_byte)(unsigned char byte);
  39        void (*tx_flush)(void);
  40        unsigned char (*rx_byte)(void);
  41        int (*tst_byte)(void);
  42};
  43
  44#define __console       __attribute__((used, __section__ (".rodata.console_drivers")))
  45
  46/* Defined by the linker... */
  47extern struct console_driver console_drivers[];
  48extern struct console_driver econsole_drivers[];
  49
  50extern int console_loglevel;
  51#else
  52/* __PRE_RAM__ */
  53/* Using a global varible can cause problems when we reset the stack
  54 * from cache as ram to ram. If we make this a define USE_SHARED_STACK
  55 * we could use the same code on all architectures.
  56 */
  57#define console_loglevel CONFIG_DEFAULT_CONSOLE_LOGLEVEL
  58#if CONFIG_CONSOLE_SERIAL8250
  59#include <uart8250.h>
  60#endif
  61#endif
  62
  63#ifndef __ROMCC__
  64void console_init(void);
  65void post_code(u8 value);
  66void __attribute__ ((noreturn)) die(const char *msg);
  67int do_printk(int msg_level, const char *fmt, ...) __attribute__((format(printf, 2, 3)));
  68
  69#undef WE_CLEANED_UP_ALL_SIDE_EFFECTS
  70/* We saw some strange effects in the past like coreboot crashing while
  71 * disabling cache as ram for a maximum console log level of 6 and above while
  72 * it worked fine without. In order to catch such issues reliably we are
  73 * always doing a function call to do_printk with the full number of arguments.
  74 * Our favorite reason to do it this way was:
  75 *   disable_car();
  76 *   printk(BIOS_DEBUG, "CAR disabled\n"); // oops, garbage stack pointer
  77 *   move_stack();
  78 * This slightly increases the code size and some unprinted strings will end
  79 * up in the final coreboot binary (most of them compressed). If you want to
  80 * avoid this, do a
  81 * #define WE_CLEANED_UP_ALL_SIDE_EFFECTS
  82 */
  83#ifdef WE_CLEANED_UP_ALL_SIDE_EFFECTS
  84
  85#define printk(LEVEL, fmt, args...)                             \
  86        do {                                                    \
  87                if (CONFIG_MAXIMUM_CONSOLE_LOGLEVEL >= LEVEL) { \
  88                        do_printk(LEVEL, fmt, ##args);          \
  89                }                                               \
  90        } while(0)
  91
  92#else
  93
  94#define printk(LEVEL, fmt, args...)                             \
  95        do {                                                    \
  96                if (CONFIG_MAXIMUM_CONSOLE_LOGLEVEL >= LEVEL) { \
  97                        do_printk(LEVEL, fmt, ##args);          \
  98                } else {                                        \
  99                        do_printk(BIOS_NEVER, fmt, ##args);     \
 100                }                                               \
 101        } while(0)
 102#endif
 103
 104#define print_emerg(STR)         printk(BIOS_EMERG,  "%s", (STR))
 105#define print_alert(STR)         printk(BIOS_ALERT,  "%s", (STR))
 106#define print_crit(STR)          printk(BIOS_CRIT,   "%s", (STR))
 107#define print_err(STR)           printk(BIOS_ERR,    "%s", (STR))
 108#define print_warning(STR)       printk(BIOS_WARNING,"%s", (STR))
 109#define print_notice(STR)        printk(BIOS_NOTICE, "%s", (STR))
 110#define print_info(STR)          printk(BIOS_INFO,   "%s", (STR))
 111#define print_debug(STR)         printk(BIOS_DEBUG,  "%s", (STR))
 112#define print_spew(STR)          printk(BIOS_SPEW,   "%s", (STR))
 113
 114#define print_emerg_char(CH)     printk(BIOS_EMERG,  "%c", (CH))
 115#define print_alert_char(CH)     printk(BIOS_ALERT,  "%c", (CH))
 116#define print_crit_char(CH)      printk(BIOS_CRIT,   "%c", (CH))
 117#define print_err_char(CH)       printk(BIOS_ERR,    "%c", (CH))
 118#define print_warning_char(CH)   printk(BIOS_WARNING,"%c", (CH))
 119#define print_notice_char(CH)    printk(BIOS_NOTICE, "%c", (CH))
 120#define print_info_char(CH)      printk(BIOS_INFO,   "%c", (CH))
 121#define print_debug_char(CH)     printk(BIOS_DEBUG,  "%c", (CH))
 122#define print_spew_char(CH)      printk(BIOS_SPEW,   "%c", (CH))
 123
 124#define print_emerg_hex8(HEX)    printk(BIOS_EMERG,  "%02x",  (HEX))
 125#define print_alert_hex8(HEX)    printk(BIOS_ALERT,  "%02x",  (HEX))
 126#define print_crit_hex8(HEX)     printk(BIOS_CRIT,   "%02x",  (HEX))
 127#define print_err_hex8(HEX)      printk(BIOS_ERR,    "%02x",  (HEX))
 128#define print_warning_hex8(HEX)  printk(BIOS_WARNING,"%02x",  (HEX))
 129#define print_notice_hex8(HEX)   printk(BIOS_NOTICE, "%02x",  (HEX))
 130#define print_info_hex8(HEX)     printk(BIOS_INFO,   "%02x",  (HEX))
 131#define print_debug_hex8(HEX)    printk(BIOS_DEBUG,  "%02x",  (HEX))
 132#define print_spew_hex8(HEX)     printk(BIOS_SPEW,   "%02x",  (HEX))
 133
 134#define print_emerg_hex16(HEX)   printk(BIOS_EMERG,  "%04x", (HEX))
 135#define print_alert_hex16(HEX)   printk(BIOS_ALERT,  "%04x", (HEX))
 136#define print_crit_hex16(HEX)    printk(BIOS_CRIT,   "%04x", (HEX))
 137#define print_err_hex16(HEX)     printk(BIOS_ERR,    "%04x", (HEX))
 138#define print_warning_hex16(HEX) printk(BIOS_WARNING,"%04x", (HEX))
 139#define print_notice_hex16(HEX)  printk(BIOS_NOTICE, "%04x", (HEX))
 140#define print_info_hex16(HEX)    printk(BIOS_INFO,   "%04x", (HEX))
 141#define print_debug_hex16(HEX)   printk(BIOS_DEBUG,  "%04x", (HEX))
 142#define print_spew_hex16(HEX)    printk(BIOS_SPEW,   "%04x", (HEX))
 143
 144#define print_emerg_hex32(HEX)   printk(BIOS_EMERG,  "%08x", (HEX))
 145#define print_alert_hex32(HEX)   printk(BIOS_ALERT,  "%08x", (HEX))
 146#define print_crit_hex32(HEX)    printk(BIOS_CRIT,   "%08x", (HEX))
 147#define print_err_hex32(HEX)     printk(BIOS_ERR,    "%08x", (HEX))
 148#define print_warning_hex32(HEX) printk(BIOS_WARNING,"%08x", (HEX))
 149#define print_notice_hex32(HEX)  printk(BIOS_NOTICE, "%08x", (HEX))
 150#define print_info_hex32(HEX)    printk(BIOS_INFO,   "%08x", (HEX))
 151#define print_debug_hex32(HEX)   printk(BIOS_DEBUG,  "%08x", (HEX))
 152#define print_spew_hex32(HEX)    printk(BIOS_SPEW,   "%08x", (HEX))
 153
 154#else
 155
 156/* __ROMCC__ */
 157
 158#define print_emerg(STR)         __console_tx_string(BIOS_EMERG, STR)
 159#define print_alert(STR)         __console_tx_string(BIOS_ALERT, STR)
 160#define print_crit(STR)          __console_tx_string(BIOS_CRIT, STR)
 161#define print_err(STR)           __console_tx_string(BIOS_ERR, STR)
 162#define print_warning(STR)       __console_tx_string(BIOS_WARNING, STR)
 163#define print_notice(STR)        __console_tx_string(BIOS_NOTICE, STR)
 164#define print_info(STR)          __console_tx_string(BIOS_INFO, STR)
 165#define print_debug(STR)         __console_tx_string(BIOS_DEBUG, STR)
 166#define print_spew(STR)          __console_tx_string(BIOS_SPEW, STR)
 167
 168#define print_emerg_char(CH)     __console_tx_char(BIOS_EMERG, CH)
 169#define print_alert_char(CH)     __console_tx_char(BIOS_ALERT, CH)
 170#define print_crit_char(CH)      __console_tx_char(BIOS_CRIT, CH)
 171#define print_err_char(CH)       __console_tx_char(BIOS_ERR, CH)
 172#define print_warning_char(CH)   __console_tx_char(BIOS_WARNING, CH)
 173#define print_notice_char(CH)    __console_tx_char(BIOS_NOTICE, CH)
 174#define print_info_char(CH)      __console_tx_char(BIOS_INFO, CH)
 175#define print_debug_char(CH)     __console_tx_char(BIOS_DEBUG, CH)
 176#define print_spew_char(CH)      __console_tx_char(BIOS_SPEW, CH)
 177
 178#define print_emerg_hex8(HEX)    __console_tx_hex8(BIOS_EMERG, HEX)
 179#define print_alert_hex8(HEX)    __console_tx_hex8(BIOS_ALERT, HEX)
 180#define print_crit_hex8(HEX)     __console_tx_hex8(BIOS_CRIT, HEX)
 181#define print_err_hex8(HEX)      __console_tx_hex8(BIOS_ERR, HEX)
 182#define print_warning_hex8(HEX)  __console_tx_hex8(BIOS_WARNING, HEX)
 183#define print_notice_hex8(HEX)   __console_tx_hex8(BIOS_NOTICE, HEX)
 184#define print_info_hex8(HEX)     __console_tx_hex8(BIOS_INFO, HEX)
 185#define print_debug_hex8(HEX)    __console_tx_hex8(BIOS_DEBUG, HEX)
 186#define print_spew_hex8(HEX)     __console_tx_hex8(BIOS_SPEW, HEX)
 187
 188#define print_emerg_hex16(HEX)   __console_tx_hex16(BIOS_EMERG, HEX)
 189#define print_alert_hex16(HEX)   __console_tx_hex16(BIOS_ALERT, HEX)
 190#define print_crit_hex16(HEX)    __console_tx_hex16(BIOS_CRIT, HEX)
 191#define print_err_hex16(HEX)     __console_tx_hex16(BIOS_ERR, HEX)
 192#define print_warning_hex16(HEX) __console_tx_hex16(BIOS_WARNING, HEX)
 193#define print_notice_hex16(HEX)  __console_tx_hex16(BIOS_NOTICE, HEX)
 194#define print_info_hex16(HEX)    __console_tx_hex16(BIOS_INFO, HEX)
 195#define print_debug_hex16(HEX)   __console_tx_hex16(BIOS_DEBUG, HEX)
 196#define print_spew_hex16(HEX)    __console_tx_hex16(BIOS_SPEW, HEX)
 197
 198#define print_emerg_hex32(HEX)   __console_tx_hex32(BIOS_EMERG, HEX)
 199#define print_alert_hex32(HEX)   __console_tx_hex32(BIOS_ALERT, HEX)
 200#define print_crit_hex32(HEX)    __console_tx_hex32(BIOS_CRIT, HEX)
 201#define print_err_hex32(HEX)     __console_tx_hex32(BIOS_ERR, HEX)
 202#define print_warning_hex32(HEX) __console_tx_hex32(BIOS_WARNING, HEX)
 203#define print_notice_hex32(HEX)  __console_tx_hex32(BIOS_NOTICE, HEX)
 204#define print_info_hex32(HEX)    __console_tx_hex32(BIOS_INFO, HEX)
 205#define print_debug_hex32(HEX)   __console_tx_hex32(BIOS_DEBUG, HEX)
 206#define print_spew_hex32(HEX)    __console_tx_hex32(BIOS_SPEW, HEX)
 207
 208#include "arch/x86/lib/romcc_console.c"
 209
 210#endif /* __ROMCC__ */
 211
 212#endif /* CONSOLE_CONSOLE_H_ */
 213
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.