env: Add a silent env handler
authorJoe Hershberger <joe.hershberger@ni.com>
Wed, 12 Dec 2012 04:16:30 +0000 (22:16 -0600)
committerTom Rini <trini@ti.com>
Thu, 13 Dec 2012 18:46:56 +0000 (11:46 -0700)
The silent variable now updates the global data flag anytime it is
changed as well as after the env relocation (in case its value is
different from the default env in such cases as NAND env)

Signed-off-by: Joe Hershberger <joe.hershberger@ni.com>
common/console.c
doc/README.silent
include/env_callback.h

index 270170b3ddff6e3f57ef8903d657cbce39dc0ed9..bf7317869097a8bf84bf9929bacdf90ff8f693a3 100644 (file)
@@ -73,6 +73,29 @@ static int on_console(const char *name, const char *value, enum env_op op,
 }
 U_BOOT_ENV_CALLBACK(console, on_console);
 
+#ifdef CONFIG_SILENT_CONSOLE
+static int on_silent(const char *name, const char *value, enum env_op op,
+       int flags)
+{
+#ifndef CONFIG_SILENT_CONSOLE_UPDATE_ON_SET
+       if (flags & H_INTERACTIVE)
+               return 0;
+#endif
+#ifndef CONFIG_SILENT_CONSOLE_UPDATE_ON_RELOC
+       if ((flags & H_INTERACTIVE) == 0)
+               return 0;
+#endif
+
+       if (value != NULL)
+               gd->flags |= GD_FLG_SILENT;
+       else
+               gd->flags &= ~GD_FLG_SILENT;
+
+       return 0;
+}
+U_BOOT_ENV_CALLBACK(silent, on_silent);
+#endif
+
 #ifdef CONFIG_SYS_CONSOLE_IS_IN_ENV
 /*
  * if overwrite_console returns 1, the stdin, stderr and stdout
index a26e3df0da606af9c278f70a4e90d87417ef5c57..70202cece97fe8a53b49251ca8f64a9cef26ee1e 100644 (file)
@@ -1,9 +1,15 @@
 The config option CONFIG_SILENT_CONSOLE can be used to quiet messages
 on the console.  If the option has been enabled, the output can be
-silenced by setting the environment variable "silent".  The variable
-is latched into the global data at an early stage in the boot process
-so deleting it with "setenv" will not take effect until the system is
-restarted.
+silenced by setting the environment variable "silent".
+
+- CONFIG_SILENT_CONSOLE_UPDATE_ON_SET
+       When the "silent" variable is changed with env set, the change
+       will take effect immediately.
+
+- CONFIG_SILENT_CONSOLE_UPDATE_ON_RELOC
+       Some environments are not available until relocation (e.g. NAND)
+       so this will make the value in the flash env take effect at
+       relocation.
 
 The following actions are taken if "silent" is set at boot time:
 
index 9d2d2c9bf6c0d7cbc507d835ff04215440bda14a..f52e133f1fa612e8f6779398018fff6d9094e36e 100644 (file)
 #define CONFIG_ENV_CALLBACK_LIST_STATIC
 #endif
 
+#ifdef CONFIG_SILENT_CONSOLE
+#define SILENT_CALLBACK "silent:silent,"
+#else
+#define SILENT_CALLBACK
+#endif
+
 /*
  * This list of callback bindings is static, but may be overridden by defining
  * a new association in the ".callbacks" environment variable.
@@ -42,6 +48,7 @@
        "baudrate:baudrate," \
        "bootfile:bootfile," \
        "loadaddr:loadaddr," \
+       SILENT_CALLBACK \
        "stdin:console,stdout:console,stderr:console," \
        CONFIG_ENV_CALLBACK_LIST_STATIC