Man Linux: Main Page and Category List


       nvram-wakeup.conf - the configuration file for NVRAM WakeUp.


       This   file  can  be  passed  to  the  program NVRAM WakeUp (see nvram-
       wakeup(8) for more information) via the --configfile option.

       It might look as follows:

              # nvram-wakeup.conf
              #  This is an example configuration for MSI MS-6351

              need_reboot = ON_ANY_CHANGE # All changes take effect
                                          # after a reboot

              addr_chk_h  = 0x30          # These are adresses of
              addr_chk_l  = 0x31          # the checksum bytes

              addr_stat   = 0x55          # Status byte
              shift_stat  = 3             # The position of the
                                          # status bit in the byte

              addr_day    = 0x56          # Day and time
              addr_hour   = 0x57
              addr_min    = 0x58
              addr_sec    = 0x59


       Any empty line or a line containing only space characters is ignored.

       Anything after and including a # character is treated as a comment  and
       is ignored.

       The  options  must  have  the  form NAME = VALUE with or without spaces
       before NAME, after VALUE or around the equal sign.  Valid  options  are
       described below.

       The  options  may  appear in any order. The same option must not appear


       bcd         = (ON|OFF), default OFF

              indicates if the board uses BCD notation for storing values.

              BCD   is  the   so  called  Binary   Coded   Decimal    notation
              (actually, it is ‘packed BCD’, in the plain BCD they waste whole
              byte per digit.) in this notation the decimal numbers 0..99  are
              stored  using  four  bits  for   every  digit,  e.g. 24 would be
              stored as 0x24  (the  4 is stored in  the lower  four  bits  and
              the 2 is stored in the upper four bits).

       addr_chk_h  = (0x00|...|0x71), default: undefined
       addr_chk_l  = (0x00|...|0x71), default: undefined
       addr_stat   = (0x00|...|0x71), default: undefined
       addr_mon    = (0x00|...|0x71), default: undefined
       addr_day    = (0x00|...|0x71), default: undefined
       addr_hour   = (0x00|...|0x71), default: undefined
       addr_min    = (0x00|...|0x71), default: undefined
       addr_sec    = (0x00|...|0x71), default: undefined

              Addresses of the  bytes  where the checksum  (lower resp. higher
              bytes), status  (enabled/disabled), month, day,   hour,   minute
              and second  are stored in the nvram.

              addr_chk_h,  addr_chk_l and addr_stat must be defined. All other
              may stay undefined.  That  means, the board  doesn’t store  them
              (e.g.  because it stores that value in RTC alarm registers)

       addr_chk_h2 = (0x00|...|0x71), default: undefined
       addr_chk_l2 = (0x00|...|0x71), default: undefined

              There are some boards which have two checksums.  Since I haven’t
              seen many of them  yet,  I  don’t  know  if  they  need  special

       addr_wdays  = (0x00|...|0x71 ), default: undefined

              The   address   of   the  byte   containing  a  weekday  vector.
              Currently,  I  know   of   only   two  boards,   which  store  a
              weekday vector (Asus SP98-X and SP97-X).

       rtc_time    = (ON|OFF), default: OFF

              indicates  if we have to set the the RTC alarm time accordingly.

       rtc_mon     = (0x00|...|0x71|0x7F), default: undefined
       rtc_day     = (0x00|...|0x71|0x7F), default: undefined

              similar to addr_mon/addr_day, but    stored   in   BCD  and  not
              affecting the checksum. In  most cases, the day is stored in the
              RTC register D (0x7F), but there are  also  some  boards,  which
              store  it somewhere  in the nvram (address <= 0x71).

              If rtc_day is >= 0x72, you will need a kernel patch: in <kernel-
              src>/drivers/char/nvram.c change the line
                     #define NVRAM_BYTES 128-RTC_FIRST_BYTE
                     #define NVRAM_BYTES 128
              in newer kernels (beginning with 2.4.20) it is the line
                     #define NVRAM_BYTES (128-NVRAM_FIRST_BYTE)
              which must be changed to
                     #define NVRAM_BYTES 128

       reset_mon   = (ON|OFF), default: OFF
       reset_day   = (ON|OFF), default: OFF

              on some boards  we have  to  set  the  value  of  rtc_mon  resp.
              rtc_day to 0 when disabling the wakeup feature.

       nr_stat     = 1 (just on/off)
       nr_mon      = 4 (   0..12   )
       nr_day      = 5 (   0..31   )
       nr_rtc_mon  = 5 (0x00...0x12)
       nr_rtc_day  = 6 (0x00...0x31)
       nr_wdays    = 7 ( 1 per day )
       nr_hour     = 5 (   0..23   )
       nr_min      = 6 (   0..59   )
       nr_sec      = 6 (   0..59   )

              Number   of bits  needed for  the status,  month, day,  rtc_day,
              weekday vector,   hour,   minute  and  second.    These   values
              are  a priori motherboard independent but depend on the BCD/non-
              BCD notation.

       shift_stat  = (0|...|7), default: 0
       shift_mon   = (0|...|4), default: 0
       shift_day   = (0|...|3), default: 0
       shift_wdays = (0|...|1), default: 0
       shift_hour  = (0|...|3), default: 0
       shift_min   = (0|...|2), default: 0
       shift_sec   = (0|...|2), default: 0

              Indicates,  by how many  bits the value is  shifted  to the left
              in   the  byte,  e.g.   the  value of the day (5 bits)  could be
              stored in the bits marked with an "x" of a byte:
                  000xxxxx  -> shift_day = 0
                  00xxxxx0  -> shift_day = 1
                  0xxxxx00  -> shift_day = 2
                  xxxxx000  -> shift_day = 3

       need_reboot  = (OFF|ON_STAT|ON_SEC|ON_MIN|ON_HOUR
                       default: OFF

              Here "..."  means  any  or-ed  combination  of  multiple  ON_XXX

              Some  boards need a reboot  for changes in nvram to take effect.
              Some of them  need  a  reboot  after  _any_  change,   some   of
              them only after the status  bit  was changed. Anyway, now we are
              able to define when a board needs a reboot:

              OFF    means, the board never needs it

                     means, the board needs it after _any_ change on nvram.

                     means, reboot only if the status bit is changed

                     means, reboot whenever  the  status  or  the  second  are

              The idea behind this is  if nvram-wakeup decides that we need to
              reboot, it will exit with exit status 1 (instead of 0).  So  the
              script  which runs nvram-wakeup could  react  on  this.  We also
              print it to stderr, so if nvram-wakeup is run  directly  on  the
              command line, the user  could  react appropriately.

       upper_method    = (OFF|INTEL|DS1685|VT82Cxxx|VT8235_37), default: OFF

              indicates  if  upper nvram must be used and if yes, which method
              to use to access it.  Note that upper nvram can only be read  if
              --directisa parameter is specified.  Possible values:

              OFF    upper nvram disabled (default)

              INTEL  access  upper nvram by a method used by most (if not all)
                     Intel chipsets with ICH, ICH2, C-ICH, ...

                     (datasheets                                            at

              DS1685 access  upper  nvram  by  a  method  used  by  the Dallas
                     Semiconductor DS1685/DS1687 chips.

                     (datasheet at

                     access  upper  nvram  by a method used by VIA’s VT82C686A
                     "Super  South"  South  Bridge.   Reported  to  work  with
                     VT82C686A,   VT82C686B,  VT82C596,  nVidia  nForce2,  ATI
                     RADEON 9100 IGP (= RS300), AMD-8111.

                     (datasheet                                             at
                     (datasheet            at 

                     access  upper  nvram  by a method used by VIA’s VT8235/37
                     South Bridges.  Reported to work with VT8233 as well.

                     (no official source)

       chk_method    = (DELL|FSC), default: undefined

              indicates which algorithm for calculation of the  checksum  must
              be used.  Possible values:

                     Majority  of  mainboards  use  the  same  algorithm (just
                     addition of  values).   This  algorithm  is  used  if  no
                     chk_method option is specified.

              DELL   This  method is used by many Dell mainboards (addition of
                     negative values).

              FSC    Fujitsu-Siemens uses  yet another algorithm. I don’t know
                     it  and  they  consider it as a company secret. Thus this
                     method is not implemented.


       rtc_mon_0_is_c0   = (ON|OFF), default: OFF
       rtc_day_0_is_c0   = (ON|OFF), default: OFF

              on some boards  we have to store the value 0xC0 instead of 0  in
              rtc_mon  resp.  rtc_day.   If  you  use one of this two options,
              don’t forget to set nr_rtc_mon resp. nr_rtc_day to 8.

       day_hack          = (1|...|4), default: undefined

              on some boards the value of addr_day is split over the  day  and
              the  status  byte. In those cases the lower day_hack bits of the
              day value are stored in the highest bits of the status byte  and
              the rest is stored in the day byte.

       day_no_bcd        = (ON|OFF), default: OFF
              on  some  boards  the  value  of  addr_day is not stored in BCD,
              although everything else is.  This option has no effect  is  the
              option bcd is not enabled.





       Written by Sergei Haller <>.


       Report bugs at the bug tracking system (see HOMEPAGE) or on the mailing


       Copyright © 2001-2004 Sergei Haller.

       This program is free software; you can redistribute it and/or modify it
       under  the  terms of the GNU General Public License as published by the
       Free Software Foundation; either version 2 of the License, or (at  your
       option) any later version.

       This  program  is  distributed  in the hope that it will be useful, but
       WITHOUT  ANY  WARRANTY;  without   even   the   implied   warranty   of
       General Public License for more details.

       You should have received a copy of the GNU General Public License along
       with this program; if not, write to the Free Software Foundation, Inc.,
       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA