---
name: "nvram-wakeup.conf"
section: "5"
platform: "linux"
package: "nvram-wakeup"
version: "1.1-5"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/nvram-wakeup.conf"
---

# nvram-wakeup.conf(5)

the configuration file for NVRAM WakeUp.

## NAME

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

## DESCRIPTION

This  file can be passed to the program NVRAM WakeUp (see [**nvram-wakeup**(8)](/nvram-wakeup/8.md) 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
  ```

## SYNTAX

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 twice.

## OPTIONS

**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 handling

**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

to

\#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*\
                    \|*ON\_DAY*\|*ON\_MON*\|*ON\_WDAYS*\|*ON\_ANY\_CHANGE*\|...),\
                 default: *OFF*

Here "..." means any or-ed combination of multiple *ON\_XXX* values.

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

- *ON\_ANY\_CHANGE*

  means, the board needs it after \_any\_ change on nvram.

- *ON\_STAT*

  means, reboot only if the status bit is changed

- *ON\_STAT*\|*ON\_SEC*

  means, reboot whenever the status or the second are changed.

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 http://intel.com/design/chipsets/datashts/)

- *DS1685*

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

  (datasheet at http://www.farnell.com/datasheets/4182.pdf)

- *VT82Cxxx*

  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 http://www.viatech.com/pdf/productinfo/686a.pdf)\
   (datasheet at http://www.amd.com/us-en/assets/content\_type/white\_papers\_and\_tech\_docs/24674.pdf)

- *VT8235\_37*

  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:

- *undefined*

  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.

## OBSCURE OPTIONS

**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.

## SEE ALSO

[**nvram-wakeup**(8)](/nvram-wakeup/8.md)

## HOMEPAGE

http://sf.net/projects/nvram-wakeup/

## AUTHOR

Written by Sergei Haller \<Sergei.Haller@math.uni-giessen.de\>.

## REPORTING BUGS

Report bugs at the bug tracking system (see HOMEPAGE) or on the mailing list **nvram-wakeup-devel@lists.sourceforge.net**

## COPYRIGHT

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 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 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
