console: Simplify vtxprintf

We do not need ROMCC support here and using wrappers for
console_tx_byte we can simplify this code.

Change-Id: I7f3b5acdfd0bde1d832b16418339dd5e232627e7
Signed-off-by: Kyösti Mälkki <kyosti.malkki@gmail.com>
Reviewed-on: http://review.coreboot.org/5334
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 14:28:17 +02:00 committed by Patrick Georgi
parent 657e0be464
commit b04e0fff7d
5 changed files with 20 additions and 42 deletions

View File

@ -5,6 +5,7 @@
* *
*/ */
#include <stddef.h>
#include <smp/node.h> #include <smp/node.h>
#include <smp/spinlock.h> #include <smp/spinlock.h>
#include <console/vtxprintf.h> #include <console/vtxprintf.h>
@ -20,6 +21,11 @@ void do_putchar(unsigned char byte)
console_tx_byte(byte); console_tx_byte(byte);
} }
void wrap_putchar(unsigned char byte, void *data)
{
do_putchar(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;
@ -37,7 +43,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(do_putchar, fmt, args); i = vtxprintf(wrap_putchar, fmt, args, NULL);
va_end(args); va_end(args);
console_tx_flush(); console_tx_flush();
@ -51,7 +57,7 @@ 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(do_putchar, fmt, args); vtxprintf(wrap_putchar, fmt, args, NULL);
console_tx_flush(); console_tx_flush();
} }
#endif #endif

View File

@ -48,7 +48,7 @@ static int vsnprintf(char *buf, size_t size, const char *fmt, va_list args)
ctx.str_buf = buf; ctx.str_buf = buf;
ctx.buf_limit = size ? size - 1 : 0; ctx.buf_limit = size ? size - 1 : 0;
i = vtxdprintf(str_tx_byte, fmt, args, &ctx); i = vtxprintf(str_tx_byte, fmt, args, &ctx);
if (size) if (size)
*ctx.str_buf = '\0'; *ctx.str_buf = '\0';

View File

@ -8,15 +8,7 @@
#include <console/console.h> #include <console/console.h>
#include <console/vtxprintf.h> #include <console/vtxprintf.h>
#if !defined (__ROMCC__) && !defined(__SMM__) #define call_tx(x) tx_byte(x, data)
#define DATA_ARG , data
#define DATA_ARG_DECL , void *data
#else
#define DATA_ARG
#define DATA_ARG_DECL
#endif
#define call_tx(x) tx_byte(x DATA_ARG)
/* haha, don't need ctype.c */ /* haha, don't need ctype.c */
#define isdigit(c) ((c) >= '0' && (c) <= '9') #define isdigit(c) ((c) >= '0' && (c) <= '9')
@ -40,9 +32,9 @@ static int skip_atoi(const char **s)
#define SPECIAL 32 /* 0x */ #define SPECIAL 32 /* 0x */
#define LARGE 64 /* use 'ABCDEF' instead of 'abcdef' */ #define LARGE 64 /* use 'ABCDEF' instead of 'abcdef' */
static int number(void (*tx_byte)(unsigned char byte DATA_ARG_DECL), static int number(void (*tx_byte)(unsigned char byte, void *data),
unsigned long long num, int base, int size, int precision, int type unsigned long long num, int base, int size, int precision, int type,
DATA_ARG_DECL) void *data)
{ {
char c,sign,tmp[66]; char c,sign,tmp[66];
const char *digits="0123456789abcdefghijklmnopqrstuvwxyz"; const char *digits="0123456789abcdefghijklmnopqrstuvwxyz";
@ -112,12 +104,8 @@ static int number(void (*tx_byte)(unsigned char byte DATA_ARG_DECL),
} }
#if !defined (__ROMCC__) && !defined(__SMM__) int vtxprintf(void (*tx_byte)(unsigned char byte, void *data),
int vtxdprintf(void (*tx_byte)(unsigned char byte, void *data),
const char *fmt, va_list args, void *data) const char *fmt, va_list args, void *data)
#else
int vtxprintf(void (*tx_byte)(unsigned char byte), const char *fmt, va_list args)
#endif
{ {
int len; int len;
unsigned long long num; unsigned long long num;
@ -135,7 +123,7 @@ int vtxprintf(void (*tx_byte)(unsigned char byte), const char *fmt, va_list args
#if defined(__SMM__) && CONFIG_SMM_TSEG #if defined(__SMM__) && CONFIG_SMM_TSEG
/* Fix pointer in TSEG */ /* Fix pointer in TSEG */
tx_byte = console_tx_byte; tx_byte = wrap_putchar;
#endif #endif
for (count=0; *fmt ; ++fmt) { for (count=0; *fmt ; ++fmt) {
@ -236,7 +224,7 @@ repeat:
} }
count += number(tx_byte, count += number(tx_byte,
(unsigned long) va_arg(args, void *), 16, (unsigned long) va_arg(args, void *), 16,
field_width, precision, flags DATA_ARG); field_width, precision, flags, data);
continue; continue;
case 'n': case 'n':
@ -300,21 +288,7 @@ repeat:
} else { } else {
num = va_arg(args, unsigned int); num = va_arg(args, unsigned int);
} }
count += number(tx_byte, num, base, field_width, precision, flags DATA_ARG); count += number(tx_byte, num, base, field_width, precision, flags, data);
} }
return count; return count;
} }
#if !defined (__ROMCC__) && !defined(__SMM__)
static void wrap_tx_byte (unsigned char byte, void *data)
{
void (*tx_byte)(unsigned char byte) = data;
tx_byte (byte);
}
int vtxprintf(void (*tx_byte)(unsigned char byte), const char *fmt, va_list args)
{
return vtxdprintf(wrap_tx_byte, fmt, args, tx_byte);
}
#endif

View File

@ -75,6 +75,7 @@ static inline void do_putchar(unsigned char byte) {}
int do_printk(int msg_level, const char *fmt, ...) __attribute__((format(printf, 2, 3))); int do_printk(int msg_level, const char *fmt, ...) __attribute__((format(printf, 2, 3)));
void do_putchar(unsigned char byte); void do_putchar(unsigned char byte);
void wrap_putchar(unsigned char byte, void *data);
#define printk(LEVEL, fmt, args...) \ #define printk(LEVEL, fmt, args...) \
do { \ do { \

View File

@ -34,10 +34,7 @@ typedef __builtin_va_list va_list;
#include <stdarg.h> #include <stdarg.h>
#endif #endif
int vtxprintf(void (*tx_byte)(unsigned char byte), const char *fmt, va_list args); int vtxprintf(void (*tx_byte)(unsigned char byte, void *data),
const char *fmt, va_list args, void *data);
#if !defined (__ROMCC__) && !defined (__SMM__)
int vtxdprintf(void (*tx_byte)(unsigned char byte, void *data), const char *fmt, va_list args, void *data);
#endif
#endif #endif