2003-04-22 21:02:15 +02:00
|
|
|
#include <console/loglevel.h>
|
|
|
|
|
2005-07-06 19:17:25 +02:00
|
|
|
#if CONFIG_USE_INIT == 0
|
2003-04-22 21:02:15 +02:00
|
|
|
static void __console_tx_byte(unsigned char byte)
|
|
|
|
{
|
|
|
|
uart_tx_byte(byte);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void __console_tx_nibble(unsigned nibble)
|
|
|
|
{
|
|
|
|
unsigned char digit;
|
|
|
|
digit = nibble + '0';
|
|
|
|
if (digit > '9') {
|
|
|
|
digit += 39;
|
|
|
|
}
|
|
|
|
__console_tx_byte(digit);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void __console_tx_char(int loglevel, unsigned char byte)
|
|
|
|
{
|
|
|
|
if (ASM_CONSOLE_LOGLEVEL > loglevel) {
|
|
|
|
uart_tx_byte(byte);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2003-05-19 21:16:21 +02:00
|
|
|
static void __console_tx_hex8(int loglevel, unsigned char value)
|
2003-04-22 21:02:15 +02:00
|
|
|
{
|
|
|
|
if (ASM_CONSOLE_LOGLEVEL > loglevel) {
|
2003-05-19 21:16:21 +02:00
|
|
|
__console_tx_nibble((value >> 4U) & 0x0fU);
|
|
|
|
__console_tx_nibble(value & 0x0fU);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void __console_tx_hex16(int loglevel, unsigned short value)
|
|
|
|
{
|
|
|
|
if (ASM_CONSOLE_LOGLEVEL > loglevel) {
|
|
|
|
__console_tx_nibble((value >> 12U) & 0x0fU);
|
|
|
|
__console_tx_nibble((value >> 8U) & 0x0fU);
|
|
|
|
__console_tx_nibble((value >> 4U) & 0x0fU);
|
|
|
|
__console_tx_nibble(value & 0x0fU);
|
2003-04-22 21:02:15 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void __console_tx_hex32(int loglevel, unsigned int value)
|
|
|
|
{
|
|
|
|
if (ASM_CONSOLE_LOGLEVEL > loglevel) {
|
|
|
|
__console_tx_nibble((value >> 28U) & 0x0fU);
|
|
|
|
__console_tx_nibble((value >> 24U) & 0x0fU);
|
|
|
|
__console_tx_nibble((value >> 20U) & 0x0fU);
|
|
|
|
__console_tx_nibble((value >> 16U) & 0x0fU);
|
|
|
|
__console_tx_nibble((value >> 12U) & 0x0fU);
|
|
|
|
__console_tx_nibble((value >> 8U) & 0x0fU);
|
|
|
|
__console_tx_nibble((value >> 4U) & 0x0fU);
|
|
|
|
__console_tx_nibble(value & 0x0fU);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void __console_tx_string(int loglevel, const char *str)
|
|
|
|
{
|
|
|
|
if (ASM_CONSOLE_LOGLEVEL > loglevel) {
|
|
|
|
unsigned char ch;
|
|
|
|
while((ch = *str++) != '\0') {
|
|
|
|
__console_tx_byte(ch);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2004-11-11 07:53:24 +01:00
|
|
|
#define NOINLINE __attribute__((noinline))
|
2003-04-22 21:02:15 +02:00
|
|
|
static void print_emerg_char(unsigned char byte) { __console_tx_char(BIOS_EMERG, byte); }
|
|
|
|
static void print_emerg_hex8(unsigned char value){ __console_tx_hex8(BIOS_EMERG, value); }
|
2003-05-19 21:16:21 +02:00
|
|
|
static void print_emerg_hex16(unsigned short value){ __console_tx_hex16(BIOS_EMERG, value); }
|
2003-04-22 21:02:15 +02:00
|
|
|
static void print_emerg_hex32(unsigned int value) { __console_tx_hex32(BIOS_EMERG, value); }
|
|
|
|
static void print_emerg(const char *str) { __console_tx_string(BIOS_EMERG, str); }
|
|
|
|
|
|
|
|
static void print_alert_char(unsigned char byte) { __console_tx_char(BIOS_ALERT, byte); }
|
|
|
|
static void print_alert_hex8(unsigned char value) { __console_tx_hex8(BIOS_ALERT, value); }
|
2003-05-19 21:16:21 +02:00
|
|
|
static void print_alert_hex16(unsigned short value){ __console_tx_hex16(BIOS_ALERT, value); }
|
2003-04-22 21:02:15 +02:00
|
|
|
static void print_alert_hex32(unsigned int value) { __console_tx_hex32(BIOS_ALERT, value); }
|
|
|
|
static void print_alert(const char *str) { __console_tx_string(BIOS_ALERT, str); }
|
|
|
|
|
|
|
|
static void print_crit_char(unsigned char byte) { __console_tx_char(BIOS_CRIT, byte); }
|
|
|
|
static void print_crit_hex8(unsigned char value) { __console_tx_hex8(BIOS_CRIT, value); }
|
2003-05-19 21:16:21 +02:00
|
|
|
static void print_crit_hex16(unsigned short value){ __console_tx_hex16(BIOS_CRIT, value); }
|
2003-04-22 21:02:15 +02:00
|
|
|
static void print_crit_hex32(unsigned int value) { __console_tx_hex32(BIOS_CRIT, value); }
|
|
|
|
static void print_crit(const char *str) { __console_tx_string(BIOS_CRIT, str); }
|
|
|
|
|
|
|
|
static void print_err_char(unsigned char byte) { __console_tx_char(BIOS_ERR, byte); }
|
|
|
|
static void print_err_hex8(unsigned char value) { __console_tx_hex8(BIOS_ERR, value); }
|
2003-05-19 21:16:21 +02:00
|
|
|
static void print_err_hex16(unsigned short value){ __console_tx_hex16(BIOS_ERR, value); }
|
2003-04-22 21:02:15 +02:00
|
|
|
static void print_err_hex32(unsigned int value) { __console_tx_hex32(BIOS_ERR, value); }
|
|
|
|
static void print_err(const char *str) { __console_tx_string(BIOS_ERR, str); }
|
|
|
|
|
|
|
|
static void print_warning_char(unsigned char byte) { __console_tx_char(BIOS_WARNING, byte); }
|
|
|
|
static void print_warning_hex8(unsigned char value) { __console_tx_hex8(BIOS_WARNING, value); }
|
2003-05-19 21:16:21 +02:00
|
|
|
static void print_warning_hex16(unsigned short value){ __console_tx_hex16(BIOS_WARNING, value); }
|
2003-04-22 21:02:15 +02:00
|
|
|
static void print_warning_hex32(unsigned int value) { __console_tx_hex32(BIOS_WARNING, value); }
|
|
|
|
static void print_warning(const char *str) { __console_tx_string(BIOS_WARNING, str); }
|
|
|
|
|
|
|
|
static void print_notice_char(unsigned char byte) { __console_tx_char(BIOS_NOTICE, byte); }
|
|
|
|
static void print_notice_hex8(unsigned char value) { __console_tx_hex8(BIOS_NOTICE, value); }
|
2003-05-19 21:16:21 +02:00
|
|
|
static void print_notice_hex16(unsigned short value){ __console_tx_hex16(BIOS_NOTICE, value); }
|
2003-04-22 21:02:15 +02:00
|
|
|
static void print_notice_hex32(unsigned int value) { __console_tx_hex32(BIOS_NOTICE, value); }
|
|
|
|
static void print_notice(const char *str) { __console_tx_string(BIOS_NOTICE, str); }
|
|
|
|
|
|
|
|
static void print_info_char(unsigned char byte) { __console_tx_char(BIOS_INFO, byte); }
|
|
|
|
static void print_info_hex8(unsigned char value) { __console_tx_hex8(BIOS_INFO, value); }
|
2003-05-19 21:16:21 +02:00
|
|
|
static void print_info_hex16(unsigned short value){ __console_tx_hex16(BIOS_INFO, value); }
|
2003-04-22 21:02:15 +02:00
|
|
|
static void print_info_hex32(unsigned int value) { __console_tx_hex32(BIOS_INFO, value); }
|
|
|
|
static void print_info(const char *str) { __console_tx_string(BIOS_INFO, str); }
|
|
|
|
|
|
|
|
static void print_debug_char(unsigned char byte) { __console_tx_char(BIOS_DEBUG, byte); }
|
|
|
|
static void print_debug_hex8(unsigned char value) { __console_tx_hex8(BIOS_DEBUG, value); }
|
2003-05-19 21:16:21 +02:00
|
|
|
static void print_debug_hex16(unsigned short value){ __console_tx_hex16(BIOS_DEBUG, value); }
|
2003-04-22 21:02:15 +02:00
|
|
|
static void print_debug_hex32(unsigned int value) { __console_tx_hex32(BIOS_DEBUG, value); }
|
|
|
|
static void print_debug(const char *str) { __console_tx_string(BIOS_DEBUG, str); }
|
|
|
|
|
|
|
|
static void print_spew_char(unsigned char byte) { __console_tx_char(BIOS_SPEW, byte); }
|
|
|
|
static void print_spew_hex8(unsigned char value) { __console_tx_hex8(BIOS_SPEW, value); }
|
2003-05-19 21:16:21 +02:00
|
|
|
static void print_spew_hex16(unsigned short value){ __console_tx_hex16(BIOS_SPEW, value); }
|
2003-04-22 21:02:15 +02:00
|
|
|
static void print_spew_hex32(unsigned int value) { __console_tx_hex32(BIOS_SPEW, value); }
|
|
|
|
static void print_spew(const char *str) { __console_tx_string(BIOS_SPEW, str); }
|
|
|
|
|
2004-11-11 07:53:24 +01:00
|
|
|
/* Non inline versions.... */
|
2005-07-06 19:17:25 +02:00
|
|
|
#if 0
|
2004-11-11 07:53:24 +01:00
|
|
|
static void print_alert_char_(unsigned char value) NOINLINE { print_alert_char(value); }
|
|
|
|
static void print_alert_hex8_(unsigned char value) NOINLINE { print_alert_hex8(value); }
|
|
|
|
static void print_alert_hex16_(unsigned short value) NOINLINE { print_alert_hex16(value); }
|
|
|
|
static void print_alert_hex32_(unsigned int value) NOINLINE { print_alert_hex32(value); }
|
|
|
|
static void print_alert_(const char *str) NOINLINE { print_alert(str); }
|
|
|
|
|
|
|
|
static void print_crit_char_(unsigned char value) NOINLINE { print_crit_char(value); }
|
|
|
|
static void print_crit_hex8_(unsigned char value) NOINLINE { print_crit_hex8(value); }
|
|
|
|
static void print_crit_hex16_(unsigned short value) NOINLINE { print_crit_hex16(value); }
|
|
|
|
static void print_crit_hex32_(unsigned int value) NOINLINE { print_crit_hex32(value); }
|
|
|
|
static void print_crit_(const char *str) NOINLINE { print_crit(str); }
|
|
|
|
|
|
|
|
static void print_err_char_(unsigned char value) NOINLINE { print_err_char(value); }
|
|
|
|
static void print_err_hex8_(unsigned char value) NOINLINE { print_err_hex8(value); }
|
|
|
|
static void print_err_hex16_(unsigned short value) NOINLINE { print_err_hex16(value); }
|
|
|
|
static void print_err_hex32_(unsigned int value) NOINLINE { print_err_hex32(value); }
|
|
|
|
static void print_err_(const char *str) NOINLINE { print_err(str); }
|
|
|
|
|
|
|
|
static void print_warning_char_(unsigned char value) NOINLINE { print_warning_char(value); }
|
|
|
|
static void print_warning_hex8_(unsigned char value) NOINLINE { print_warning_hex8(value); }
|
|
|
|
static void print_warning_hex16_(unsigned short value) NOINLINE { print_warning_hex16(value); }
|
|
|
|
static void print_warning_hex32_(unsigned int value) NOINLINE { print_warning_hex32(value); }
|
|
|
|
static void print_warning_(const char *str) NOINLINE { print_warning(str); }
|
|
|
|
|
|
|
|
static void print_notice_char_(unsigned char value) NOINLINE { print_notice_char(value); }
|
|
|
|
static void print_notice_hex8_(unsigned char value) NOINLINE { print_notice_hex8(value); }
|
|
|
|
static void print_notice_hex16_(unsigned short value) NOINLINE { print_notice_hex16(value); }
|
|
|
|
static void print_notice_hex32_(unsigned int value) NOINLINE { print_notice_hex32(value); }
|
|
|
|
static void print_notice_(const char *str) NOINLINE { print_notice(str); }
|
|
|
|
|
|
|
|
static void print_info_char_(unsigned char value) NOINLINE { print_info_char(value); }
|
|
|
|
static void print_info_hex8_(unsigned char value) NOINLINE { print_info_hex8(value); }
|
|
|
|
static void print_info_hex16_(unsigned short value) NOINLINE { print_info_hex16(value); }
|
|
|
|
static void print_info_hex32_(unsigned int value) NOINLINE { print_info_hex32(value); }
|
|
|
|
static void print_info_(const char *str) NOINLINE { print_info(str); }
|
|
|
|
|
|
|
|
static void print_debug_char_(unsigned char value) NOINLINE { print_debug_char(value); }
|
|
|
|
static void print_debug_hex8_(unsigned char value) NOINLINE { print_debug_hex8(value); }
|
|
|
|
static void print_debug_hex16_(unsigned short value) NOINLINE { print_debug_hex16(value); }
|
|
|
|
static void print_debug_hex32_(unsigned int value) NOINLINE { print_debug_hex32(value); }
|
|
|
|
static void print_debug_(const char *str) NOINLINE { print_debug(str); }
|
|
|
|
|
|
|
|
static void print_spew_char_(unsigned char value) NOINLINE { print_spew_char(value); }
|
|
|
|
static void print_spew_hex8_(unsigned char value) NOINLINE { print_spew_hex8(value); }
|
|
|
|
static void print_spew_hex16_(unsigned short value) NOINLINE { print_spew_hex16(value); }
|
|
|
|
static void print_spew_hex32_(unsigned int value) NOINLINE { print_spew_hex32(value); }
|
|
|
|
static void print_spew_(const char *str) NOINLINE { print_spew(str); }
|
2005-07-06 19:17:25 +02:00
|
|
|
#endif
|
|
|
|
|
|
|
|
#else
|
|
|
|
|
|
|
|
extern int do_printk(int msg_level, const char *fmt, ...);
|
|
|
|
|
|
|
|
#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
|
|
|
|
#define printk_alart(fmt, arg...) do {} while(0)
|
|
|
|
#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
|
|
|
|
|
|
|
|
#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))
|
|
|
|
|
|
|
|
#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))
|
|
|
|
|
|
|
|
#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))
|
|
|
|
|
|
|
|
#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))
|
|
|
|
|
|
|
|
|
|
|
|
#endif /* CONFIG_USE_INIT == 0 */
|
2004-11-11 07:53:24 +01:00
|
|
|
|
2003-04-22 21:02:15 +02:00
|
|
|
#ifndef LINUXBIOS_EXTRA_VERSION
|
2004-10-14 22:54:17 +02:00
|
|
|
#define LINUXBIOS_EXTRA_VERSION ""
|
2003-04-22 21:02:15 +02:00
|
|
|
#endif
|
|
|
|
|
|
|
|
static void console_init(void)
|
|
|
|
{
|
|
|
|
static const char console_test[] =
|
|
|
|
"\r\n\r\nLinuxBIOS-"
|
2004-10-14 22:54:17 +02:00
|
|
|
LINUXBIOS_VERSION
|
|
|
|
LINUXBIOS_EXTRA_VERSION
|
2003-04-22 21:02:15 +02:00
|
|
|
" "
|
2004-10-14 22:54:17 +02:00
|
|
|
LINUXBIOS_BUILD
|
2003-04-22 21:02:15 +02:00
|
|
|
" starting...\r\n";
|
|
|
|
print_info(console_test);
|
|
|
|
}
|
2003-06-11 23:55:00 +02:00
|
|
|
|
|
|
|
|
|
|
|
static void die(const char *str)
|
|
|
|
{
|
|
|
|
print_emerg(str);
|
|
|
|
do {
|
|
|
|
hlt();
|
|
|
|
} while(1);
|
|
|
|
}
|