PNP(3) PNP(3)
NAME
pnp - Plug 'n' Play ISA and PCI Interfaces
SYNOPSIS
bind -a '#$' /dev
/dev/pci/bus.dev.fnctl
/dev/pci/bus.dev.fnraw
/dev/pnp/ctl
/dev/pnp/csnnctl
/dev/pnp/csnnraw
...
DESCRIPTION
This device provides a limited interface to the PCI bus and
Plug 'n' Play ISA devices.
PCI Interface
PCI devices are addressed logically by a bus number, a
device number on that bus, and a function number within the
device. The set of all such device functions may be enumer-
ated by traversing the /dev/pci directory; the driver serves
two files for each function. These are a control file
(`/dev/pci/bus.dev.fnctl') which may be read for a textual
summary of the device function, and a `raw' file
(`/dev/pci/bus.dev.fnraw') which may be used to read or
write the raw contents of PCI configuration space.
The first field of a PCI control file contains the class,
sub-class and programming interface values for the device
function, expressed as 2-digit hexadecimal values, and sepa-
rated by periods. The second field yields the vendor ID and
device ID, each as 4-digit hex numbers, separated by a
slash. The third field is the associated interrupt line in
decimal. The remainder of the line enumerates any valid
base address registers for the function, using two fields
for each. In the first field, the index of the register is
followed by a colon, and then the value of the register
itself. The following field gives the associated size of
the memory (or I/O space) that is mapped by the register.
Plug 'n' Play
Plug 'n' Play ISA devices are discovered by sending a fixed
`unlock' sequence over an I/O port, and then reading back
data from another port. An arbitration algorithm is used to
separate out the individual cards and enumerate them in
turn. Each card is assigned a unique number, called a CSN,
in the range 1-255 as a result of enumeration. Cards also
have a fixed 64 bit identification number, set by the manu-
facturer, which is used by the arbitration algorithm to
Page 1 Plan 9 (printed 10/27/25)
PNP(3) PNP(3)
resolve conflicts. The first 32 bits describe the type of
the card, and the second 32 bits form a serial number for
the particular instance of that card type. When formatted
textually, it appears as 3 upper-case letters (typically
representing the manufacturer), followed by 4 hex digits,
then a period, then 8 hex digits. The substring before the
period is the card type, and the substring after the period
is the serial number.
The enumeration algorithm needs to be enabled by specifying
the port number to write the unlock sequence out on. This
can be configured to take place at boot time by adding a
line like the following to plan9.ini:
pnp0=port=0x203
Here port should be chosen to not conflict with any existing
devices. It must be in the range 0x203-0x3ff. Alterna-
tively, one can use the following command:
echo port 0x203 >/dev/pnp/ctl
Note that a side-effect of PnP enumeration is to reset the
configuration state of all such cards; any settings made by
a Plug and Play BIOS will be lost. Reading the file
/dev/pnp/ctl returns one of the strings enabled port or
disabled.
For each enumerated card, two files are served in /dev/pnp.
A control file (`/dev/pnp/csnnctl') may be read to determine
the ID of the card, and a raw file (`/dev/pnp/csnnraw') may
be read to obtain the configuration data associated with the
card. It is intended that the control file should take com-
mands which set the various configurable resources of the
card, but this has not been implemented yet.
A mechanism is provided for configuring cards via
plan9.ini(8). A line of the form pnpn=idstring ... will
cause the driver to look for the card named by idstring and,
if found, assign it the CSN n. The intention is that any
additional text after the idstring is interpreted as if it
was written to the card's ctl file, but this is not yet
implemented.
EXAMPLES
To list all PCI functions:
cat /dev/pci/*ctl
To find just the PCI video card (class 3):
grep '^03' /dev/pci/*ctl
Page 2 Plan 9 (printed 10/27/25)
PNP(3) PNP(3)
SOURCE
/sys/src/9/port/devpnp.c
SEE ALSO
pci(8)
BUGS
Access to the I/O and memory regions of a PCI device is not
provided.
The ability to set a Plug 'n' Play card's configurable set-
tings has not been implemented.
There should be a user program for identifying and configur-
ing Plug 'n' Play cards.
Page 3 Plan 9 (printed 10/27/25)