9
0
Fork 0

introduce runtime loglevel

With this the verbosity of barebox can be controlled during runtime
using the 'loglevel' globalvar.

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
Sascha Hauer 2013-02-07 13:47:26 +01:00
parent 61694c93cd
commit 666f12e0c1
5 changed files with 57 additions and 5 deletions

View File

@ -607,7 +607,7 @@ endmenu
menu "Debugging"
config COMPILE_LOGLEVEL
int "loglevel"
int "compile loglevel"
default 6
help
This defines the maximum loglevel compiled into the binary. Less important
@ -622,6 +622,22 @@ config COMPILE_LOGLEVEL
6 informational (info)
7 debug-level messages (debug)
config DEFAULT_LOGLEVEL
int "default loglevel"
default 7
help
This defines the default runtime loglevel. It can be changed using the
global.loglevel variable. Available logelevels are:
0 system is unusable (emerg)
1 action must be taken immediately (alert)
2 critical conditions (crit)
3 error conditions (err)
4 warning conditions (warn)
5 normal but significant condition (notice)
6 informational (info)
7 debug-level messages (debug)
config DEBUG_INFO
bool
prompt "enable debug symbols"

View File

@ -57,6 +57,33 @@ void console_allow_input(bool val)
console_input_allow = val;
}
int barebox_loglevel = CONFIG_DEFAULT_LOGLEVEL;
int pr_print(int level, const char *fmt, ...)
{
va_list args;
uint i;
char printbuffer[CFG_PBSIZE];
if (level > barebox_loglevel)
return 0;
va_start(args, fmt);
i = vsprintf(printbuffer, fmt, args);
va_end(args);
/* Print the string */
puts(printbuffer);
return i;
}
static int loglevel_init(void)
{
return globalvar_add_simple_int("loglevel", &barebox_loglevel, "%d");
}
device_initcall(loglevel_init);
int printf(const char *fmt, ...)
{
va_list args;

View File

@ -26,6 +26,7 @@
#include <command.h>
#include <driver.h>
#include <malloc.h>
#include <console.h>
#include <linux/ctype.h>
#include <errno.h>
#include <fs.h>
@ -370,11 +371,14 @@ const char *dev_id(const struct device_d *dev)
return buf;
}
int dev_printf(const struct device_d *dev, const char *format, ...)
int dev_printf(int level, const struct device_d *dev, const char *format, ...)
{
va_list args;
int ret = 0;
if (level > barebox_loglevel)
return 0;
if (dev->driver && dev->driver->name)
ret += printf("%s ", dev->driver->name);

View File

@ -57,4 +57,6 @@ extern struct list_head console_list;
bool console_is_input_allow(void);
void console_allow_input(bool val);
extern int barebox_loglevel;
#endif

View File

@ -18,12 +18,15 @@
/* debugging and troubleshooting/diagnostic helpers. */
int dev_printf(const struct device_d *dev, const char *format, ...)
int pr_print(int level, const char *format, ...)
__attribute__ ((format(__printf__, 2, 3)));
int dev_printf(int level, const struct device_d *dev, const char *format, ...)
__attribute__ ((format(__printf__, 3, 4)));
#define __dev_printf(level, dev, format, args...) \
({ \
(level) <= LOGLEVEL ? dev_printf((dev), (format), ##args) : 0; \
(level) <= LOGLEVEL ? dev_printf((level), (dev), (format), ##args) : 0; \
})
@ -46,7 +49,7 @@ int dev_printf(const struct device_d *dev, const char *format, ...)
#define __pr_printk(level, format, args...) \
({ \
(level) <= LOGLEVEL ? printk((format), ##args) : 0; \
(level) <= LOGLEVEL ? pr_print((level), (format), ##args) : 0; \
})
#ifndef pr_fmt