2003-04-22 21:02:15 +02:00
|
|
|
#ifndef CONSOLE_CONSOLE_H_
|
|
|
|
#define CONSOLE_CONSOLE_H_
|
|
|
|
|
|
|
|
#include <stdint.h>
|
|
|
|
#include <console/loglevel.h>
|
|
|
|
|
|
|
|
void console_init(void);
|
|
|
|
void console_tx_byte(unsigned char byte);
|
|
|
|
void console_tx_flush(void);
|
2004-03-13 04:40:51 +01:00
|
|
|
unsigned char console_rx_byte(void);
|
|
|
|
int console_tst_byte(void);
|
2003-04-22 21:02:15 +02:00
|
|
|
void post_code(uint8_t value);
|
2009-04-21 22:14:31 +02:00
|
|
|
void __attribute__ ((noreturn)) die(const char *msg);
|
2003-04-22 21:02:15 +02:00
|
|
|
|
|
|
|
struct console_driver {
|
|
|
|
void (*init)(void);
|
|
|
|
void (*tx_byte)(unsigned char byte);
|
|
|
|
void (*tx_flush)(void);
|
2004-03-13 04:40:51 +01:00
|
|
|
unsigned char (*rx_byte)(void);
|
|
|
|
int (*tst_byte)(void);
|
2003-04-22 21:02:15 +02:00
|
|
|
};
|
|
|
|
|
2004-10-14 22:54:17 +02:00
|
|
|
#define __console __attribute__((used, __section__ (".rodata.console_drivers")))
|
2003-04-22 21:02:15 +02:00
|
|
|
|
|
|
|
/* Defined by the linker... */
|
|
|
|
extern struct console_driver console_drivers[];
|
|
|
|
extern struct console_driver econsole_drivers[];
|
|
|
|
|
CMOS: Add set_option and rework get_option.
To ease some of my debugging pain on the unichrome, i decided i needed to
move FB size selection into cmos, so i could test a size and then reset it
to the default after loading this value so that the next reboot uses the
(working) default again. This meant implementing set_option in parallel to
get_option.
get_option was then found to have inversed argument ordering (like outb) and
passing char * and then depending on the cmos layout length, which made me
feel quite uncomfortable. Since we either have reserved space (which we
shouldn't do anything with in these two functions), an enum or a
hexadecimal value, unsigned int seemed like the way to go. So all users of
get_option now have their arguments inversed and switched from using ints
to unsigned ints now.
The way get_cmos_value was implemented forced us to not overlap byte and to
have multibyte values be byte aligned. This logic is now adapted to do a
full uint32_t read (when needed) at any offset and any length up to 32, and
the shifting all happens inside an uint32_t as well. set_cmos_value was
implemented similarly. Both routines have been extensively tested in a
quick separate little program as it is not easy to get this stuff right.
build_opt_tbl.c was altered to function correctly within these new
parameters. The enum value retrieval has been changed strol(..., NULL, 10)
to stroul(..., NULL, 0), so that we not only are able to use unsigned ints
now but so that we also interprete hex values correctly. The 32bit limit
gets imposed on all entries not marked reserved, an unused "user_data" field
that appeared in a lot of cmos.layouts has been changed to reserved as well.
Signed-off-by: Luc Verhaegen <libv@skynet.be>
Acked-by: Peter Stuge <peter@stuge.se>
git-svn-id: svn://svn.coreboot.org/coreboot/trunk@4332 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
2009-06-03 12:47:19 +02:00
|
|
|
extern unsigned int console_loglevel;
|
2009-01-20 19:37:26 +01:00
|
|
|
int do_printk(int msg_level, const char *fmt, ...) __attribute__((format(printf, 2, 3)));
|
2003-04-22 21:02:15 +02:00
|
|
|
|
|
|
|
#define printk_emerg(fmt, arg...) do_printk(BIOS_EMERG ,fmt, ##arg)
|
|
|
|
#define printk_alert(fmt, arg...) do_printk(BIOS_ALERT ,fmt, ##arg)
|
|
|
|
#define printk_crit(fmt, arg...) do_printk(BIOS_CRIT ,fmt, ##arg)
|
|
|
|
#define printk_err(fmt, arg...) do_printk(BIOS_ERR ,fmt, ##arg)
|
|
|
|
#define printk_warning(fmt, arg...) do_printk(BIOS_WARNING ,fmt, ##arg)
|
|
|
|
#define printk_notice(fmt, arg...) do_printk(BIOS_NOTICE ,fmt, ##arg)
|
|
|
|
#define printk_info(fmt, arg...) do_printk(BIOS_INFO ,fmt, ##arg)
|
|
|
|
#define printk_debug(fmt, arg...) do_printk(BIOS_DEBUG ,fmt, ##arg)
|
|
|
|
#define printk_spew(fmt, arg...) do_printk(BIOS_SPEW ,fmt, ##arg)
|
|
|
|
|
|
|
|
#if MAXIMUM_CONSOLE_LOGLEVEL <= BIOS_EMERG
|
|
|
|
#undef printk_emerg
|
|
|
|
#define printk_emerg(fmt, arg...) do {} while(0)
|
|
|
|
#endif
|
|
|
|
#if MAXIMUM_CONSOLE_LOGLEVEL <= BIOS_ALERT
|
|
|
|
#undef printk_alert
|
2005-11-24 11:25:46 +01:00
|
|
|
#define printk_alert(fmt, arg...) do {} while(0)
|
2003-04-22 21:02:15 +02:00
|
|
|
#endif
|
|
|
|
#if MAXIMUM_CONSOLE_LOGLEVEL <= BIOS_CRIT
|
|
|
|
#undef printk_crit
|
|
|
|
#define printk_crit(fmt, arg...) do {} while(0)
|
|
|
|
#endif
|
|
|
|
#if MAXIMUM_CONSOLE_LOGLEVEL <= BIOS_ERR
|
|
|
|
#undef printk_err
|
|
|
|
#define printk_err(fmt, arg...) do {} while(0)
|
|
|
|
#endif
|
|
|
|
#if MAXIMUM_CONSOLE_LOGLEVEL <= BIOS_WARNING
|
|
|
|
#undef printk_warning
|
|
|
|
#define printk_warning(fmt, arg...) do {} while(0)
|
|
|
|
#endif
|
|
|
|
#if MAXIMUM_CONSOLE_LOGLEVEL <= BIOS_NOTICE
|
|
|
|
#undef printk_notice
|
|
|
|
#define printk_notice(fmt, arg...) do {} while(0)
|
|
|
|
#endif
|
|
|
|
#if MAXIMUM_CONSOLE_LOGLEVEL <= BIOS_INFO
|
|
|
|
#undef printk_info
|
|
|
|
#define printk_info(fmt, arg...) do {} while(0)
|
|
|
|
#endif
|
|
|
|
#if MAXIMUM_CONSOLE_LOGLEVEL <= BIOS_DEBUG
|
|
|
|
#undef printk_debug
|
|
|
|
#define printk_debug(fmt, arg...) do {} while(0)
|
|
|
|
#endif
|
|
|
|
#if MAXIMUM_CONSOLE_LOGLEVEL <= BIOS_SPEW
|
|
|
|
#undef printk_spew
|
|
|
|
#define printk_spew(fmt, arg...) do {} while(0)
|
|
|
|
#endif
|
|
|
|
|
2003-07-19 06:28:22 +02:00
|
|
|
#define print_emerg(STR) printk_emerg ("%s", (STR))
|
|
|
|
#define print_alert(STR) printk_alert ("%s", (STR))
|
|
|
|
#define print_crit(STR) printk_crit ("%s", (STR))
|
|
|
|
#define print_err(STR) printk_err ("%s", (STR))
|
|
|
|
#define print_warning(STR) printk_warning("%s", (STR))
|
|
|
|
#define print_notice(STR) printk_notice ("%s", (STR))
|
|
|
|
#define print_info(STR) printk_info ("%s", (STR))
|
|
|
|
#define print_debug(STR) printk_debug ("%s", (STR))
|
|
|
|
#define print_spew(STR) printk_spew ("%s", (STR))
|
|
|
|
|
|
|
|
#define print_emerg_char(CH) printk_emerg ("%c", (CH))
|
|
|
|
#define print_alert_char(CH) printk_alert ("%c", (CH))
|
|
|
|
#define print_crit_char(CH) printk_crit ("%c", (CH))
|
|
|
|
#define print_err_char(CH) printk_err ("%c", (CH))
|
|
|
|
#define print_warning_char(CH) printk_warning("%c", (CH))
|
|
|
|
#define print_notice_char(CH) printk_notice ("%c", (CH))
|
|
|
|
#define print_info_char(CH) printk_info ("%c", (CH))
|
|
|
|
#define print_debug_char(CH) printk_debug ("%c", (CH))
|
|
|
|
#define print_spew_char(CH) printk_spew ("%c", (CH))
|
|
|
|
|
2003-08-05 00:13:57 +02:00
|
|
|
#define print_emerg_hex8(HEX) printk_emerg ("%02x", (HEX))
|
|
|
|
#define print_alert_hex8(HEX) printk_alert ("%02x", (HEX))
|
|
|
|
#define print_crit_hex8(HEX) printk_crit ("%02x", (HEX))
|
|
|
|
#define print_err_hex8(HEX) printk_err ("%02x", (HEX))
|
|
|
|
#define print_warning_hex8(HEX) printk_warning("%02x", (HEX))
|
|
|
|
#define print_notice_hex8(HEX) printk_notice ("%02x", (HEX))
|
|
|
|
#define print_info_hex8(HEX) printk_info ("%02x", (HEX))
|
|
|
|
#define print_debug_hex8(HEX) printk_debug ("%02x", (HEX))
|
|
|
|
#define print_spew_hex8(HEX) printk_spew ("%02x", (HEX))
|
2003-07-19 06:28:22 +02:00
|
|
|
|
2003-08-05 00:13:57 +02:00
|
|
|
#define print_emerg_hex16(HEX) printk_emerg ("%04x", (HEX))
|
|
|
|
#define print_alert_hex16(HEX) printk_alert ("%04x", (HEX))
|
|
|
|
#define print_crit_hex16(HEX) printk_crit ("%04x", (HEX))
|
|
|
|
#define print_err_hex16(HEX) printk_err ("%04x", (HEX))
|
|
|
|
#define print_warning_hex16(HEX) printk_warning("%04x", (HEX))
|
|
|
|
#define print_notice_hex16(HEX) printk_notice ("%04x", (HEX))
|
|
|
|
#define print_info_hex16(HEX) printk_info ("%04x", (HEX))
|
|
|
|
#define print_debug_hex16(HEX) printk_debug ("%04x", (HEX))
|
|
|
|
#define print_spew_hex16(HEX) printk_spew ("%04x", (HEX))
|
2003-07-19 06:28:22 +02:00
|
|
|
|
2003-08-05 00:13:57 +02:00
|
|
|
#define print_emerg_hex32(HEX) printk_emerg ("%08x", (HEX))
|
|
|
|
#define print_alert_hex32(HEX) printk_alert ("%08x", (HEX))
|
|
|
|
#define print_crit_hex32(HEX) printk_crit ("%08x", (HEX))
|
|
|
|
#define print_err_hex32(HEX) printk_err ("%08x", (HEX))
|
|
|
|
#define print_warning_hex32(HEX) printk_warning("%08x", (HEX))
|
|
|
|
#define print_notice_hex32(HEX) printk_notice ("%08x", (HEX))
|
|
|
|
#define print_info_hex32(HEX) printk_info ("%08x", (HEX))
|
|
|
|
#define print_debug_hex32(HEX) printk_debug ("%08x", (HEX))
|
|
|
|
#define print_spew_hex32(HEX) printk_spew ("%08x", (HEX))
|
2003-04-22 21:02:15 +02:00
|
|
|
|
2009-05-29 05:04:16 +02:00
|
|
|
#if CONFIG_CONSOLE_VGA == 1
|
|
|
|
void vga_console_init(void);
|
|
|
|
#endif
|
|
|
|
|
2003-04-22 21:02:15 +02:00
|
|
|
#endif /* CONSOLE_CONSOLE_H_ */
|