
On Mon, Oct 30, 2006 at 09:25:14AM +0100, Stefan Roese wrote:
Hi Ladis,
On Tuesday 25 July 2006 17:30, Ladislav Michl wrote:
silent console output is currently implemented by assigning nulldev as output device. This is a bit overcomplicated, since there is also GD_FLG_SILENT flag.
Patch bellow tries to simplify silencing console by honouring GD_FLG_SILENT in console output functions, so there is no need to mess with output device. Comments?
Good idea. One thing though: After applying your patch the system _does_ print the bootcount messages "Hit any key to stop autoboot: ..." even if the "silent" variable is set. This was not done with the previous implementation and is not intended. Could you please rework your patch, that no message is printed here?
It is intended. See a bit older thread here: http://thread.gmane.org/gmane.comp.boot-loaders.u-boot/17845/
On Thu, Jun 30, 2005 at 05:43:08PM -0400, Dave Ellis wrote: | I think I see the problem. CONFIG_AUTOBOOT_PROMPT should be | displayed, but it isn't because printf() is checking GD_FLG_SILENT. | The cleanest solution I see is to check GD_FLG_SILENT only when | sending directly to the handler, not when sending to the device.
Proposed change doesn't use nulldev at all and also doesn't set stdout to nulldev and "back" [*] to serial.
[*] What is user wants to use usbtty? Safe way is not to deal with output device at all. This way output that implies stdout is silenced - i.e. printf("Hello"); and output that specifies it would still work - i.e. fprintf(stdout, "Hello"); This is used to get 'stop autoboot' prompt.
And please update the README.silent documentation too to match the updated implementation.
Signed-off-by: Ladislav Michl ladis@linux-mips.org
diff --git a/common/main.c b/common/main.c index cc4b50f..e637bbf 100644 --- a/common/main.c +++ b/common/main.c @@ -112,16 +112,8 @@ static __inline__ int abortboot(int bootdelay) u_int presskey_max = 0; u_int i;
-#ifdef CONFIG_SILENT_CONSOLE - if (gd->flags & GD_FLG_SILENT) { - /* Restore serial console */ - console_assign (stdout, "serial"); - console_assign (stderr, "serial"); - } -#endif - # ifdef CONFIG_AUTOBOOT_PROMPT - printf (CONFIG_AUTOBOOT_PROMPT, bootdelay); + fprintf(stdout, CONFIG_AUTOBOOT_PROMPT, bootdelay); # endif
# ifdef CONFIG_AUTOBOOT_DELAY_STR @@ -151,7 +143,7 @@ static __inline__ int abortboot(int bootdelay) presskey_max : delaykey[i].len;
# if DEBUG_BOOTKEYS - printf("%s key:<%s>\n", + fprintf(stdout, "%s key:<%s>\n", delaykey[i].retry ? "delay" : "stop", delaykey[i].str ? delaykey[i].str : "NULL"); # endif @@ -168,7 +160,7 @@ static __inline__ int abortboot(int bootdelay) delaykey[i].str, delaykey[i].len) == 0) { # if DEBUG_BOOTKEYS - printf("got %skey\n", + fprintf(stdout, "got %skey\n", delaykey[i].retry ? "delay" : "stop"); # endif
@@ -195,18 +187,12 @@ static __inline__ int abortboot(int bootdelay) } # if DEBUG_BOOTKEYS if (!abort) - puts ("key timeout\n"); + fputs(stdout, "key timeout\n"); # endif
#ifdef CONFIG_SILENT_CONSOLE - if (abort) { - /* permanently enable normal console output */ - gd->flags &= ~(GD_FLG_SILENT); - } else if (gd->flags & GD_FLG_SILENT) { - /* Restore silent console */ - console_assign (stdout, "nulldev"); - console_assign (stderr, "nulldev"); - } + if (abort) + gd->flags &= ~GD_FLG_SILENT; #endif
return abort; @@ -222,18 +208,10 @@ static __inline__ int abortboot(int bootdelay) { int abort = 0;
-#ifdef CONFIG_SILENT_CONSOLE - if (gd->flags & GD_FLG_SILENT) { - /* Restore serial console */ - console_assign (stdout, "serial"); - console_assign (stderr, "serial"); - } -#endif - #ifdef CONFIG_MENUPROMPT - printf(CONFIG_MENUPROMPT, bootdelay); + fprintf(stdout, CONFIG_MENUPROMPT, bootdelay); #else - printf("Hit any key to stop autoboot: %2d ", bootdelay); + fprintf(stdout, "Hit any key to stop autoboot: %2d ", bootdelay); #endif
#if defined CONFIG_ZERO_BOOTDELAY_CHECK @@ -244,8 +222,8 @@ static __inline__ int abortboot(int bootdelay) if (bootdelay >= 0) { if (tstc()) { /* we got a key press */ (void) getc(); /* consume input */ - puts ("\b\b\b 0"); - abort = 1; /* don't auto boot */ + fputs(stdout, "\b\b\b 0"); + abort = 1; /* don't auto boot */ } } #endif @@ -269,20 +247,14 @@ static __inline__ int abortboot(int bootdelay) udelay (10000); }
- printf ("\b\b\b%2d ", bootdelay); + fprintf(stdout, "\b\b\b%2d ", bootdelay); }
- putc ('\n'); + fputc(stdout, '\n');
#ifdef CONFIG_SILENT_CONSOLE - if (abort) { - /* permanently enable normal console output */ - gd->flags &= ~(GD_FLG_SILENT); - } else if (gd->flags & GD_FLG_SILENT) { - /* Restore silent console */ - console_assign (stdout, "nulldev"); - console_assign (stderr, "nulldev"); - } + if (abort) + gd->flags &= ~GD_FLG_SILENT; #endif
return abort;