March 1, 2007 NVRAM 4 prep

### NAME

nvram - PReP nvram interface

### SYNOPSIS

### DESCRIPTION

The file /dev/nvram is an interface to the PReP NVRAM, including the Global Environment Area. This interface is highly stylized; ioctls are used for all operations. These ioctls refer to individual variables in the Global Environment Area and thier values.

The calls that take and/or return a variable use a pointer to an ```int` variable for this purpose; others use a pointer to an ```struct` `pnviocdesc` descriptor, which contains a variable and two counted strings. The first string comprises the fields ```pnv_namelen` (an ```int`) and ```pnv_name` (a ```char *`), giving the name of a field. The second string comprises the fields ```pnv_buflen` and ```pnv_buf`, used analogously. These two counted strings work in a ``value-result'' fashion. At entry to the ioctl, the counts are expected to reflect the buffer size; on return, the counts are updated to reflect the buffer contents.

The following ioctls are supported:

PNVIOCGETNEXTNAME
  Takes a variable name and returns the name of the following variable. If a ```NULL` is passed as the variable name, the first variable name will be returned. If the last variable is given as an argument, the ioctl will return ```EINVAL`.

```PNVIOCGET`
  Fills in the value of the named property for the given variable. If no such property is associated with that variable, the value length is set to -1. If the named property exists but has no value, the value length is set to 0.

```PNVIOCSET`
  Writes the given value under the given name.

```PNVIOCGETNUMGE`
  Returns the number of variables in the Global Environment Area.

### FILES

```/dev/nvram`

### ERRORS

The following may result in rejection of an operation:

[```EINVAL`]
  The given variable name does not exist.

[```EINVAL`]
  The buffer set up to retrieve values from the nvram was not large enough to hold the result.

### SEE ALSO

ioctl(2)

```PowerPC` `Reference` `Platform` `Specification` `Version` `1.1,` `Section` `5.5`

### BUGS

Due to limitations within the nvram itself, these functions run at elevated priority and may adversely affect system performance.

```PNVIOCSET` is not currently supported, making the nvram driver read-only at this time.