pnp – Plug 'n' Play ISA and PCI Interfaces|
bind –a '#$' /dev |
This device provides a limited interface to the PCI bus and Plug
'n' Play ISA devices.|
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 enumerated 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 separated 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
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 manufacturer, which is used by the arbitration algorithm to 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
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 commands 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
not yet implemented.
To list all PCI functions:|
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 settings has not been implemented.
There should be a user program for identifying and configuring
Plug 'n' Play cards.