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:
parent
657e0be464
commit
b04e0fff7d
|
@ -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
|
||||||
|
|
|
@ -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';
|
||||||
|
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
|
@ -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 { \
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue