1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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
47extern struct console_driver console_drivers[];
48extern struct console_driver econsole_drivers[];
49
50extern int console_loglevel;
51#else
52
53
54
55
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
71
72
73
74
75
76
77
78
79
80
81
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
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
211
212#endif
213