console: Move newline translation outside console_tx_byte

This gives us completely transparent low-level function to transmit
data.

Change-Id: I706791ff43d80a36a7252a4da0e6f3af92520db7
Signed-off-by: Kyösti Mälkki <kyosti.malkki@gmail.com>
Reviewed-on: http://review.coreboot.org/5336
Tested-by: build bot (Jenkins)
Reviewed-by: Patrick Georgi <patrick@georgi-clan.de>
This commit is contained in:
Kyösti Mälkki 2014-02-04 19:03:57 +02:00 committed by Patrick Georgi
parent b3356bbff4
commit 657e0be464
9 changed files with 22 additions and 29 deletions

View File

@ -24,9 +24,6 @@
/* FIXME: need to make console driver more generic */ /* FIXME: need to make console driver more generic */
void console_tx_byte(unsigned char byte) void console_tx_byte(unsigned char byte)
{ {
if (byte == '\n')
console_tx_byte('\r');
#if CONFIG_CONSOLE_SERIAL #if CONFIG_CONSOLE_SERIAL
uart_tx_byte(byte); uart_tx_byte(byte);
#endif #endif

View File

@ -26,9 +26,6 @@
void console_tx_byte(unsigned char byte) void console_tx_byte(unsigned char byte)
{ {
if (byte == '\n')
console_tx_byte('\r');
#if CONFIG_CONSOLE_SERIAL #if CONFIG_CONSOLE_SERIAL
uart_tx_byte(byte); uart_tx_byte(byte);
#endif #endif

View File

@ -48,7 +48,7 @@ void console_tx_flush(void)
} }
} }
static void __console_tx_byte(unsigned char byte) void console_tx_byte(unsigned char byte)
{ {
struct console_driver *driver; struct console_driver *driver;
for(driver = console_drivers; driver < econsole_drivers; driver++) { for(driver = console_drivers; driver < econsole_drivers; driver++) {
@ -56,13 +56,6 @@ static void __console_tx_byte(unsigned char 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) unsigned char console_rx_byte(void)
{ {
struct console_driver *driver; struct console_driver *driver;

View File

@ -13,6 +13,13 @@
DECLARE_SPIN_LOCK(console_lock) DECLARE_SPIN_LOCK(console_lock)
void do_putchar(unsigned char byte)
{
if (byte == '\n')
console_tx_byte('\r');
console_tx_byte(byte);
}
int do_printk(int msg_level, const char *fmt, ...) int do_printk(int msg_level, const char *fmt, ...)
{ {
va_list args; va_list args;
@ -30,7 +37,7 @@ int do_printk(int msg_level, const char *fmt, ...)
spin_lock(&console_lock); spin_lock(&console_lock);
va_start(args, fmt); va_start(args, fmt);
i = vtxprintf(console_tx_byte, fmt, args); i = vtxprintf(do_putchar, fmt, args);
va_end(args); va_end(args);
console_tx_flush(); console_tx_flush();
@ -44,7 +51,8 @@ int do_printk(int msg_level, const char *fmt, ...)
#if CONFIG_CHROMEOS #if CONFIG_CHROMEOS
void do_vtxprintf(const char *fmt, va_list args) void do_vtxprintf(const char *fmt, va_list args)
{ {
vtxprintf(console_tx_byte, fmt, args); vtxprintf(do_putchar, fmt, args);
console_tx_flush(); console_tx_flush();
} }
#endif #endif

View File

@ -29,9 +29,6 @@ void console_tx_flush(void)
void console_tx_byte(unsigned char byte) void console_tx_byte(unsigned char byte)
{ {
if (byte == '\n')
console_tx_byte('\r');
#if CONFIG_CONSOLE_SERIAL #if CONFIG_CONSOLE_SERIAL
uart_tx_byte(byte); uart_tx_byte(byte);
#endif #endif

View File

@ -62,25 +62,26 @@ void post_log_clear(void);
/* this function is weak and can be overridden by a mainboard function. */ /* this function is weak and can be overridden by a mainboard function. */
void mainboard_post(u8 value); void mainboard_post(u8 value);
void __attribute__ ((noreturn)) die(const char *msg); void __attribute__ ((noreturn)) die(const char *msg);
int do_printk(int msg_level, const char *fmt, ...) __attribute__((format(printf, 2, 3)));
#if defined(__BOOT_BLOCK__) && !CONFIG_BOOTBLOCK_CONSOLE || \ #if defined(__BOOT_BLOCK__) && !CONFIG_BOOTBLOCK_CONSOLE || \
defined(__SMM__) && !CONFIG_DEBUG_SMI || \ defined(__SMM__) && !CONFIG_DEBUG_SMI || \
(defined(__PRE_RAM__) && !defined(__BOOT_BLOCK__)) && !CONFIG_EARLY_CONSOLE (defined(__PRE_RAM__) && !defined(__BOOT_BLOCK__)) && !CONFIG_EARLY_CONSOLE
static inline void printk(int LEVEL, const char *fmt, ...);
static inline void printk(int LEVEL, const char *fmt, ...) {
/* Do nothing. */ /* Do nothing. */
} static inline void printk(int LEVEL, const char *fmt, ...) {}
static inline void do_putchar(unsigned char byte) {}
#else /* defined(__PRE_RAM__) && !CONFIG_EARLY_CONSOLE */ #else
int do_printk(int msg_level, const char *fmt, ...) __attribute__((format(printf, 2, 3)));
void do_putchar(unsigned char byte);
#define printk(LEVEL, fmt, args...) \ #define printk(LEVEL, fmt, args...) \
do { \ do { \
do_printk(LEVEL, fmt, ##args); \ do_printk(LEVEL, fmt, ##args); \
} while(0) } while(0)
#endif /* defined(__PRE_RAM__) && !CONFIG_EARLY_CONSOLE */ #endif
#if CONFIG_CHROMEOS #if CONFIG_CHROMEOS
/* FIXME: Collision of varargs with AMD headers without guard. */ /* FIXME: Collision of varargs with AMD headers without guard. */

View File

@ -166,7 +166,7 @@ void sdram_initialize(struct pei_data *pei_data)
} }
/* Pass console handler in pei_data */ /* Pass console handler in pei_data */
pei_data->tx_byte = console_tx_byte; pei_data->tx_byte = do_putchar;
/* Locate and call UEFI System Agent binary. */ /* Locate and call UEFI System Agent binary. */
entry = (unsigned long)cbfs_get_file_content( entry = (unsigned long)cbfs_get_file_content(

View File

@ -248,7 +248,7 @@ void sdram_initialize(struct pei_data *pei_data)
} }
/* Pass console handler in pei_data */ /* Pass console handler in pei_data */
pei_data->tx_byte = console_tx_byte; pei_data->tx_byte = do_putchar;
/* Locate and call UEFI System Agent binary. */ /* Locate and call UEFI System Agent binary. */
/* TODO make MRC blob (0xab?) defined in cbfs_core.h. */ /* TODO make MRC blob (0xab?) defined in cbfs_core.h. */

View File

@ -55,7 +55,7 @@ static void enable_smbus(void)
static void ABI_X86 send_to_console(unsigned char b) static void ABI_X86 send_to_console(unsigned char b)
{ {
console_tx_byte(b); do_putchar(b);
} }
static void print_dram_info(void) static void print_dram_info(void)