aboutsummaryrefslogtreecommitdiff
path: root/common/debug.c
diff options
context:
space:
mode:
Diffstat (limited to 'common/debug.c')
-rw-r--r--common/debug.c433
1 files changed, 223 insertions, 210 deletions
diff --git a/common/debug.c b/common/debug.c
index 330a3ed..43c9ae5 100644
--- a/common/debug.c
+++ b/common/debug.c
@@ -11,7 +11,7 @@
static struct dbg_info {
pm_t dbg_ptr;
enum serial_dev dev;
-} dbg_info = (struct dbg_info){0};
+} dbg_info = (struct dbg_info){ 0 };
void init_dbg(const void *fdt)
{
@@ -75,7 +75,8 @@ static void __putchar(char c)
if (!port)
return;
- while(__serial_tx_empty() == 0);
+ while (__serial_tx_empty() == 0)
+ ;
port->data = c;
}
@@ -91,13 +92,14 @@ static enum serial_dev __serial_dev_enum(const char *dev_name)
struct dbg_info dbg_from_fdt(const void *fdt)
{
int chosen_offset = fdt_path_offset(fdt, "/chosen");
- const char *stdout = fdt_getprop(fdt, chosen_offset, "stdout-path", NULL);
+ const char *stdout =
+ fdt_getprop(fdt, chosen_offset, "stdout-path", NULL);
int stdout_offset = fdt_path_offset(fdt, stdout);
/* get serial device type */
const char *dev_name = (const char *)fdt_getprop(fdt, stdout_offset,
- "compatible", NULL);
+ "compatible", NULL);
enum serial_dev dev = __serial_dev_enum(dev_name);
@@ -107,38 +109,38 @@ struct dbg_info dbg_from_fdt(const void *fdt)
pm_t dbg_ptr = (pm_t)fdt_load_int_ptr(ci.addr_cells, reg_ptr);
- return (struct dbg_info){dbg_ptr, dev};
+ return (struct dbg_info){ dbg_ptr, dev };
}
void setup_dbg(vm_t pt, enum serial_dev dev)
{
switch (dev) {
- case NS16550A:
- port = (struct ns16550a *)pt;
- break;
+ case NS16550A:
+ port = (struct ns16550a *)pt;
+ break;
}
/* in the future possibly configure the serial connection, though the
* defaults (set by U-boot) seem to work alright */
}
-#define LEFT_FLAG (1 << 0)
-#define SIGN_FLAG (1 << 1)
-#define HASH_FLAG (1 << 2)
-#define ZERO_FLAG (1 << 3)
-#define FMT_FLAG (1 << 4)
-#define SPACE_FLAG (1 << 5)
-#define LONG_FLAG (1 << 6)
-#define LLONG_FLAG (1 << 7)
-#define SHORT_FLAG (1 << 8)
-#define CHAR_FLAG (1 << 9)
-#define PRECS_FLAG (1 << 11)
+#define LEFT_FLAG (1 << 0)
+#define SIGN_FLAG (1 << 1)
+#define HASH_FLAG (1 << 2)
+#define ZERO_FLAG (1 << 3)
+#define FMT_FLAG (1 << 4)
+#define SPACE_FLAG (1 << 5)
+#define LONG_FLAG (1 << 6)
+#define LLONG_FLAG (1 << 7)
+#define SHORT_FLAG (1 << 8)
+#define CHAR_FLAG (1 << 9)
+#define PRECS_FLAG (1 << 11)
#define UNSIGN_FLAG (1 << 12)
#define WIDTH_FLAG (1 << 13)
-#define PAD_FLAG (1 << 14)
+#define PAD_FLAG (1 << 14)
-#define CONT 1
-#define STOP 0
+#define CONT 1
+#define STOP 0
static bool __is_digit(char c)
{
@@ -148,38 +150,35 @@ static bool __is_digit(char c)
static int __atoi(const char *s)
{
unsigned int i = 0;
- while(__is_digit(*s)){
+ while (__is_digit(*s)) {
i = i * 10 + (unsigned int)(*(s++) - '0');
}
return i;
}
-static size_t __integral_val(ssize_t value, size_t base, size_t flags, bool print)
+static size_t __integral_val(ssize_t value, size_t base, size_t flags,
+ bool print)
{
/* assume ascii numbers, which is why 'signed char' is probably fine */
size_t ret = 0;
signed char c = 0;
-#define handle_type(x)\
- c = (x)value % (x)base;\
+#define handle_type(x) \
+ c = (x)value % (x)base; \
value = (x)value / (x)base;
- if(!__is_set(flags, UNSIGN_FLAG)){
+ if (!__is_set(flags, UNSIGN_FLAG)) {
/* signed values, only with i format */
- if(__is_set(flags, LLONG_FLAG)){
+ if (__is_set(flags, LLONG_FLAG)) {
handle_type(signed long long);
- }
- else if(__is_set(flags, LONG_FLAG)){
+ } else if (__is_set(flags, LONG_FLAG)) {
handle_type(signed long);
- }
- else if(__is_set(flags, SHORT_FLAG)){
+ } else if (__is_set(flags, SHORT_FLAG)) {
handle_type(signed short);
- }
- else if(__is_set(flags, CHAR_FLAG)){
+ } else if (__is_set(flags, CHAR_FLAG)) {
handle_type(signed char);
- }
- else {
+ } else {
handle_type(signed int);
}
@@ -188,34 +187,30 @@ static size_t __integral_val(ssize_t value, size_t base, size_t flags, bool prin
} else {
/* unsigned values, everything else */
- if(__is_set(flags, LLONG_FLAG)){
+ if (__is_set(flags, LLONG_FLAG)) {
handle_type(unsigned long long);
- }
- else if(__is_set(flags, LONG_FLAG)){
+ } else if (__is_set(flags, LONG_FLAG)) {
handle_type(unsigned long);
- }
- else if(__is_set(flags, SHORT_FLAG)){
+ } else if (__is_set(flags, SHORT_FLAG)) {
handle_type(unsigned short);
- }
- else if(__is_set(flags, CHAR_FLAG)){
+ } else if (__is_set(flags, CHAR_FLAG)) {
handle_type(unsigned char);
- }
- else {
+ } else {
handle_type(unsigned int);
}
}
#undef handle_type
- if(base == 16)
+ if (base == 16)
c += c > 9 ? 'a' - 10 : '0';
else
c += '0';
- if(value != 0)
+ if (value != 0)
ret = __integral_val(value, base, flags, print);
- if(print)
+ if (print)
__putchar(c);
return ret + 1;
@@ -232,16 +227,16 @@ static size_t __print_prefix(size_t base)
const char *prefix;
- if(base == 16)
+ if (base == 16)
prefix = hex;
- else if(base == 8)
+ else if (base == 8)
prefix = oct;
- else if(base == 2)
+ else if (base == 2)
prefix = bin;
else
prefix = empty;
- for(; *prefix ; ++i)
+ for (; *prefix; ++i)
__putchar(*prefix++);
return i;
@@ -250,7 +245,7 @@ static size_t __print_prefix(size_t base)
static size_t __print_padding(size_t pad, char pad_char)
{
size_t i = 0;
- for(; i < pad; ++i){
+ for (; i < pad; ++i) {
__putchar(pad_char);
}
@@ -259,22 +254,21 @@ static size_t __print_padding(size_t pad, char pad_char)
static size_t __print_sign(ssize_t value, size_t flags)
{
- if(__is_set(flags, LLONG_FLAG))
+ if (__is_set(flags, LLONG_FLAG))
value = (signed long long)value;
- else if(__is_set(flags, LONG_FLAG))
+ else if (__is_set(flags, LONG_FLAG))
value = (signed long)value;
- else if(__is_set(flags, SHORT_FLAG))
+ else if (__is_set(flags, SHORT_FLAG))
value = (signed short)value;
- else if(__is_set(flags, CHAR_FLAG))
+ else if (__is_set(flags, CHAR_FLAG))
value = (signed char)value;
else
value = (signed int)value;
- if(value < 0){
+ if (value < 0) {
__putchar('-');
return 1;
- }
- else if(flags & SIGN_FLAG) {
+ } else if (flags & SIGN_FLAG) {
__putchar('+');
return 1;
}
@@ -282,10 +276,10 @@ static size_t __print_sign(ssize_t value, size_t flags)
return 0;
}
-static size_t __print_integral(ssize_t value, size_t base,
- size_t flags, size_t width)
+static size_t __print_integral(ssize_t value, size_t base, size_t flags,
+ size_t width)
{
-#define __integral_len(a, b, c) __integral_val((a), (b), (c), false)
+#define __integral_len(a, b, c) __integral_val((a), (b), (c), false)
#define __integral_print(a, b, c) __integral_val((a), (b), (c), true)
size_t ret = 0;
@@ -294,30 +288,30 @@ static size_t __print_integral(ssize_t value, size_t base,
/* depending on which flags are set, the prefix, sign and right justify has to
* be ordereder differently. */
- if(__is_set(flags, ZERO_FLAG)){
- if(!__is_set(flags, UNSIGN_FLAG))
+ if (__is_set(flags, ZERO_FLAG)) {
+ if (!__is_set(flags, UNSIGN_FLAG))
ret += __print_sign(value, flags);
- if(__is_set(flags, HASH_FLAG))
+ if (__is_set(flags, HASH_FLAG))
ret += __print_prefix(base);
- if(pad > 0 && !__is_set(flags, LEFT_FLAG))
+ if (pad > 0 && !__is_set(flags, LEFT_FLAG))
ret += __print_padding(pad, '0');
- } else if (__is_set(flags, SPACE_FLAG)){
- if(pad > 0 && !__is_set(flags, LEFT_FLAG))
+ } else if (__is_set(flags, SPACE_FLAG)) {
+ if (pad > 0 && !__is_set(flags, LEFT_FLAG))
ret += __print_padding(pad, ' ');
- if(!__is_set(flags, UNSIGN_FLAG))
+ if (!__is_set(flags, UNSIGN_FLAG))
ret += __print_sign(value, flags);
- if(__is_set(flags, HASH_FLAG))
+ if (__is_set(flags, HASH_FLAG))
ret += __print_prefix(base);
} else {
- if(!__is_set(flags, UNSIGN_FLAG))
+ if (!__is_set(flags, UNSIGN_FLAG))
ret += __print_sign(value, flags);
- if(__is_set(flags, HASH_FLAG))
+ if (__is_set(flags, HASH_FLAG))
ret += __print_prefix(base);
}
@@ -325,11 +319,11 @@ static size_t __print_integral(ssize_t value, size_t base,
ret += __integral_print(value, base, flags);
/* left-justify */
- if(__is_set(flags, ZERO_FLAG)){
- if(pad > 0 && __is_set(flags, LEFT_FLAG))
+ if (__is_set(flags, ZERO_FLAG)) {
+ if (pad > 0 && __is_set(flags, LEFT_FLAG))
ret += __print_padding(pad, '0');
- } else if(__is_set(flags, SPACE_FLAG)) {
- if(pad > 0 && __is_set(flags, LEFT_FLAG))
+ } else if (__is_set(flags, SPACE_FLAG)) {
+ if (pad > 0 && __is_set(flags, LEFT_FLAG))
ret += __print_padding(pad, ' ');
}
@@ -352,16 +346,15 @@ void dbg(const char *fmt, ...)
size_t chars_written = 0;
- while(*fmt){
-
- if (*fmt != '%'){
+ while (*fmt) {
+ if (*fmt != '%') {
__putchar(*fmt++);
chars_written++;
continue;
}
fmt++;
- if(*fmt == '%'){
+ if (*fmt == '%') {
/* literal percent sign */
__putchar('%');
chars_written++;
@@ -373,44 +366,57 @@ void dbg(const char *fmt, ...)
size_t flags = 0;
int a = STOP;
do {
- switch(*fmt){
- case ' ':
- __set_bit(flags, SPACE_FLAG); fmt++; a = CONT;
- break;
+ switch (*fmt) {
+ case ' ':
+ __set_bit(flags, SPACE_FLAG);
+ fmt++;
+ a = CONT;
+ break;
- case '-':
- __set_bit(flags, LEFT_FLAG); fmt++; a = CONT;
- break;
+ case '-':
+ __set_bit(flags, LEFT_FLAG);
+ fmt++;
+ a = CONT;
+ break;
- case '+':
- __set_bit(flags, SIGN_FLAG); fmt++; a = CONT;
- break;
+ case '+':
+ __set_bit(flags, SIGN_FLAG);
+ fmt++;
+ a = CONT;
+ break;
- case '#':
- __set_bit(flags, HASH_FLAG); fmt++; a = CONT;
- break;
+ case '#':
+ __set_bit(flags, HASH_FLAG);
+ fmt++;
+ a = CONT;
+ break;
- case '0': __set_bit(flags, ZERO_FLAG); fmt++; a = CONT;
- break;
+ case '0':
+ __set_bit(flags, ZERO_FLAG);
+ fmt++;
+ a = CONT;
+ break;
- case '\'':
- __set_bit(flags, FMT_FLAG); fmt++; a = CONT;
- break;
+ case '\'':
+ __set_bit(flags, FMT_FLAG);
+ fmt++;
+ a = CONT;
+ break;
- default:
- a = STOP;
- break;
+ default:
+ a = STOP;
+ break;
}
} while (a != STOP);
/* check width */
size_t width = 0;
- if(__is_digit(*fmt)){
+ if (__is_digit(*fmt)) {
width = __atoi(fmt++);
__set_bit(flags, WIDTH_FLAG | PAD_FLAG | SPACE_FLAG);
} else if (*fmt == '*') {
int w = va_arg(vl, int);
- if(w < 0) {
+ if (w < 0) {
width = -w;
__set_bit(flags, LEFT_FLAG);
} else {
@@ -422,63 +428,62 @@ void dbg(const char *fmt, ...)
/* check precision */
size_t precision = 0;
- if(*fmt == '.'){
+ if (*fmt == '.') {
fmt++;
__set_bit(flags, PRECS_FLAG | PAD_FLAG | ZERO_FLAG);
- if(__is_digit(*fmt)){
+ if (__is_digit(*fmt)) {
precision = __atoi(fmt++);
- } else if(*fmt == '*'){
+ } else if (*fmt == '*') {
precision = va_arg(vl, int);
fmt++;
}
}
/* check length */
- switch(*fmt){
- case 'l':
+ switch (*fmt) {
+ case 'l':
+ fmt++;
+ if (*fmt == 'l') {
+ __set_bit(flags, LLONG_FLAG);
fmt++;
- if (*fmt == 'l'){
- __set_bit(flags, LLONG_FLAG);
- fmt++;
- } else {
- __set_bit(flags, LONG_FLAG);
- }
- break;
+ } else {
+ __set_bit(flags, LONG_FLAG);
+ }
+ break;
- case 'h':
+ case 'h':
+ fmt++;
+ if (*fmt == 'h') {
+ __set_bit(flags, CHAR_FLAG);
fmt++;
- if(*fmt == 'h') {
- __set_bit(flags, CHAR_FLAG);
- fmt++;
- }
- else {
- __set_bit(flags, SHORT_FLAG);
- }
- break;
+ } else {
+ __set_bit(flags, SHORT_FLAG);
+ }
+ break;
- case 'j':
- fmt++;
- if(sizeof(intmax_t) == sizeof(long))
- __set_bit(flags, LONG_FLAG);
- else
- __set_bit(flags, LLONG_FLAG);
- break;
+ case 'j':
+ fmt++;
+ if (sizeof(intmax_t) == sizeof(long))
+ __set_bit(flags, LONG_FLAG);
+ else
+ __set_bit(flags, LLONG_FLAG);
+ break;
- case 'z':
- fmt++;
- if(sizeof(size_t) == sizeof(long))
- __set_bit(flags, LONG_FLAG);
- else
- __set_bit(flags, LLONG_FLAG);
- break;
+ case 'z':
+ fmt++;
+ if (sizeof(size_t) == sizeof(long))
+ __set_bit(flags, LONG_FLAG);
+ else
+ __set_bit(flags, LLONG_FLAG);
+ break;
- case 't':
- fmt++;
- if(sizeof(ptrdiff_t) == sizeof(long))
- __set_bit(flags, LONG_FLAG);
- else
- __set_bit(flags, LLONG_FLAG);
- break;
+ case 't':
+ fmt++;
+ if (sizeof(ptrdiff_t) == sizeof(long))
+ __set_bit(flags, LONG_FLAG);
+ else
+ __set_bit(flags, LLONG_FLAG);
+ break;
}
/* read actual specifier */
@@ -490,87 +495,95 @@ void dbg(const char *fmt, ...)
int *n = 0;
char c = 0;
- switch(*fmt){
- case 'd':
- case 'i':
- case 'u':
+ switch (*fmt) {
+ case 'd':
+ case 'i':
+ case 'u':
+ case 'x':
+ case 'X':
+ case 'o':
+ case 'b':
+ /* integer handling */
+ switch (*fmt) {
case 'x':
+ base = 16;
+ break;
case 'X':
+ base = 2;
+ break;
case 'o':
- case 'b':
- /* integer handling */
- switch(*fmt){
- case 'x': base = 16; break;
- case 'X': base = 2; break;
- case 'o': base = 8; break;
- default : base = 10; break;
- }
+ base = 8;
+ break;
+ default:
+ base = 10;
+ break;
+ }
- if(base == 10)
- __clear_bit(flags, HASH_FLAG);
+ if (base == 10)
+ __clear_bit(flags, HASH_FLAG);
- /* precision takes precedence */
- if(__is_set(flags, PRECS_FLAG))
- width = precision;
+ /* precision takes precedence */
+ if (__is_set(flags, PRECS_FLAG))
+ width = precision;
- /* formatting doesn't apply to decimal integers
+ /* formatting doesn't apply to decimal integers
* */
- if(*fmt != 'i' && *fmt != 'd'){
- __clear_bit(flags, SIGN_FLAG);
- __set_bit(flags, UNSIGN_FLAG);
- }
+ if (*fmt != 'i' && *fmt != 'd') {
+ __clear_bit(flags, SIGN_FLAG);
+ __set_bit(flags, UNSIGN_FLAG);
+ }
- if(__is_set(flags, LLONG_FLAG))
- value = va_arg(vl, long long);
- else if(__is_set(flags, LONG_FLAG))
- value = va_arg(vl, long);
- else
- value = va_arg(vl, int);
+ if (__is_set(flags, LLONG_FLAG))
+ value = va_arg(vl, long long);
+ else if (__is_set(flags, LONG_FLAG))
+ value = va_arg(vl, long);
+ else
+ value = va_arg(vl, int);
- chars_written += __print_integral(value, base,
- flags, width);
- fmt++;
- break;
+ chars_written +=
+ __print_integral(value, base, flags, width);
+ fmt++;
+ break;
- case 'c':
- c = va_arg(vl, int);
- __putchar(c);
- chars_written++;
- fmt++;
- break;
+ case 'c':
+ c = va_arg(vl, int);
+ __putchar(c);
+ chars_written++;
+ fmt++;
+ break;
- case 's':
- s = va_arg(vl, const char *);
+ case 's':
+ s = va_arg(vl, const char *);
- if(__is_set(flags, PRECS_FLAG))
- i = precision;
+ if (__is_set(flags, PRECS_FLAG))
+ i = precision;
- for(; *s && i--;){
- __putchar(*s++);
- chars_written++;
- }
- fmt++;
- break;
+ for (; *s && i--;) {
+ __putchar(*s++);
+ chars_written++;
+ }
+ fmt++;
+ break;
- case 'p':
- p = va_arg(vl, void *);
- __set_bit(flags, UNSIGN_FLAG | HASH_FLAG);
+ case 'p':
+ p = va_arg(vl, void *);
+ __set_bit(flags, UNSIGN_FLAG | HASH_FLAG);
- if(sizeof(void *) == sizeof(long))
- __set_bit(flags, LONG_FLAG);
- else
- __set_bit(flags, LLONG_FLAG);
+ if (sizeof(void *) == sizeof(long))
+ __set_bit(flags, LONG_FLAG);
+ else
+ __set_bit(flags, LLONG_FLAG);
- chars_written += __print_integral((ssize_t)p, 16,
- flags, width);
- fmt++;
- break;
+ chars_written +=
+ __print_integral((ssize_t)p, 16, flags, width);
+ fmt++;
+ break;
- case 'n':
- n = va_arg(vl, int *);
- *n = chars_written;
- fmt++;
- break;
+ case 'n':
+ n = va_arg(vl, int *);
+ *n = chars_written;
+ fmt++;
+ break;
}
}