On 10.08.2008 01:20, Carl-Daniel Hailfinger wrote:
On 10.08.2008 01:15, Peter Stuge wrote:
On Sun, Aug 10, 2008 at 12:57:42AM +0200, Carl-Daniel Hailfinger wrote:
-static int console_loglevel(void) +static int loglevel = CONFIG_DEFAULT_CONSOLE_LOGLEVEL;
NACK that part. It will not work and/or it will crash. Sorry.
I take the NACK back if you explain how you can store a variable (not a constant) in ROM.
Doesn't it live on the heap/stack in cache?
Unfortunately not. It's a global variable (so not on stack) and we do nothing to allow global variables. Look at the hoops the printk buffer code is jumping through to get some sort of global variables.
The good news is that the printk buffer helpers can be amended to store any number of global variables.
Patch for a temporary fixup follows.
Variables can't be stored in ROM. It's called readonly for a reason.
Signed-off-by: Carl-Daniel Hailfinger c-d.hailfinger.devel.2006@gmx.net
Index: corebootv3-console_loglevel_global_revert/lib/console.c =================================================================== --- corebootv3-console_loglevel_global_revert/lib/console.c (Revision 729) +++ corebootv3-console_loglevel_global_revert/lib/console.c (Arbeitskopie) @@ -8,8 +8,6 @@ int vtxprintf(void (*)(unsigned char, void *arg), void *arg, const char *, va_list);
-static unsigned int loglevel = CONFIG_DEFAULT_CONSOLE_LOGLEVEL; - /** * set the console log level * There are no invalid settings, although there are ones that @@ -21,7 +19,7 @@ if (level > BIOS_SPEW) printk(BIOS_ALWAYS, "Warning: ridiculous log level setting: %d (max %d)\n", level, BIOS_SPEW); - loglevel = level; +#warning Setting the log level is unimplemented }
/** @@ -31,7 +29,8 @@ */ static unsigned int console_loglevel(void) { - return loglevel; +#warning This always returns the default loglevel + return CONFIG_DEFAULT_CONSOLE_LOGLEVEL; }
#ifdef CONFIG_CONSOLE_BUFFER