]> git.proxmox.com Git - grub2.git/commitdiff
* grub-core/commands/i386/cmostest.c (+parse_args): New function.
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Sat, 18 Sep 2010 23:15:44 +0000 (01:15 +0200)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Sat, 18 Sep 2010 23:15:44 +0000 (01:15 +0200)
(grub_cmd_cmosclean): Likewise.
(GRUB_MOD_INIT): Register command cmosclean.
* util/grub-mkconfig.in: Export GRUB_BUTTON_CMOS_CLEAN.
* util/grub.d/00_header.in: Handle GRUB_BUTTON_CMOS_CLEAN.

ChangeLog
grub-core/commands/i386/cmostest.c
util/grub-mkconfig.in
util/grub.d/00_header.in

index e9eb142bea623e59e03696363b219e53be591b79..d1ca11650ff0f8526ee859acae14b05fd773cab0 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2010-09-19  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       * grub-core/commands/i386/cmostest.c (+parse_args): New function.
+       (grub_cmd_cmosclean): Likewise.
+       (GRUB_MOD_INIT): Register command cmosclean.
+       * util/grub-mkconfig.in: Export GRUB_BUTTON_CMOS_CLEAN.
+       * util/grub.d/00_header.in: Handle GRUB_BUTTON_CMOS_CLEAN.
+
 2010-09-18  Carles Pina i Estany  <carles@pina.cat>
 2010-09-18  Aleš Nesrsta <starous@volny.cz>
 2010-09-18  Vladimir Serbinenko  <phcoder@gmail.com>
index 36c35e6c421c415612a72ad880521bcdb44ed886..994da11b00fce887fc0cbad4c7b7f4502b8b3dc9 100644 (file)
 #include <grub/cmos.h>
 
 static grub_err_t
-grub_cmd_cmostest (struct grub_command *cmd __attribute__ ((unused)),
-                  int argc, char *argv[])
+parse_args (int argc, char *argv[], int *byte, int *bit)
 {
-  int byte, bit;
   char *rest;
 
   if (argc != 1)
     return grub_error (GRUB_ERR_BAD_ARGUMENT, "Address required.");
 
-  byte = grub_strtoul (argv[0], &rest, 0);
+  *byte = grub_strtoul (argv[0], &rest, 0);
   if (*rest != ':')
     return grub_error (GRUB_ERR_BAD_ARGUMENT, "Address required.");
 
-  bit = grub_strtoul (rest + 1, 0, 0);
+  *bit = grub_strtoul (rest + 1, 0, 0);
+
+  return GRUB_ERR_NONE;
+}
+
+static grub_err_t
+grub_cmd_cmostest (struct grub_command *cmd __attribute__ ((unused)),
+                  int argc, char *argv[])
+{
+  int byte, bit;
+  grub_err_t err;
+
+  err = parse_args (argc, argv, &byte, &bit);
+  if (err)
+    return err;
 
   if (grub_cmos_read (byte) & (1 << bit))
     return GRUB_ERR_NONE;
@@ -43,7 +55,22 @@ grub_cmd_cmostest (struct grub_command *cmd __attribute__ ((unused)),
   return grub_error (GRUB_ERR_TEST_FAILURE, "false");
 }
 
-static grub_command_t cmd;
+static grub_err_t
+grub_cmd_cmosclean (struct grub_command *cmd __attribute__ ((unused)),
+                   int argc, char *argv[])
+{
+  int byte, bit;
+  grub_err_t err;
+
+  err = parse_args (argc, argv, &byte, &bit);
+  if (err)
+    return err;
+
+  grub_cmos_write (byte, grub_cmos_read (byte) & (~(1 << bit)));
+  return GRUB_ERR_NONE;
+}
+
+static grub_command_t cmd, cmd_clean;
 
 \f
 GRUB_MOD_INIT(cmostest)
@@ -51,9 +78,13 @@ GRUB_MOD_INIT(cmostest)
   cmd = grub_register_command ("cmostest", grub_cmd_cmostest,
                               "cmostest BYTE:BIT",
                               "Test bit at BYTE:BIT in CMOS.");
+  cmd_clean = grub_register_command ("cmosclean", grub_cmd_cmosclean,
+                                    "cmosclean BYTE:BIT",
+                                    "Clean bit at BYTE:BIT in CMOS.");
 }
 
 GRUB_MOD_FINI(cmostest)
 {
   grub_unregister_command (cmd);
+  grub_unregister_command (cmd_clean);
 }
index c3b4c3398197988c148eafd567f6d62b8d814385..3ba9cd63e8c30a6193d406ae2c835e0e1006bc2d 100644 (file)
@@ -245,6 +245,7 @@ export GRUB_DEFAULT \
   GRUB_HIDDEN_TIMEOUT_BUTTON \
   GRUB_TIMEOUT_BUTTON \
   GRUB_BUTTON_CMOS_ADDRESS \
+  GRUB_BUTTON_CMOS_CLEAN \
   GRUB_DISTRIBUTOR \
   GRUB_CMDLINE_LINUX \
   GRUB_CMDLINE_LINUX_DEFAULT \
index 2f39650e9b469c7dc757dc7343740307c7faa28b..9ed3fc3a1d18d8ac269a091093de9d6d305eec8e 100644 (file)
@@ -247,6 +247,12 @@ else
 make_timeout "${GRUB_HIDDEN_TIMEOUT}" "${GRUB_TIMEOUT}"
 fi
 
+if [ "x$GRUB_BUTTON_CMOS_ADDRESS" != "x" ] && [ "x$GRUB_BUTTON_CMOS_CLEAN" = "xyes" ]; then
+    cat <<EOF
+cmosclean $GRUB_BUTTON_CMOS_ADDRESS
+EOF
+fi
+
 # Play an initial tune
 if [ "x${GRUB_INIT_TUNE}" != "x" ] ; then
   echo "play ${GRUB_INIT_TUNE}"