PCI(5) Standards, Environments, and Macros PCI(5)
pci, pcie - configuration files for PCI and PCI Express device drivers
The Peripheral Component Interconnect (PCI) bus is a little endian bus.
PCI Express (PCIe) and PCI-X are successors to PCI. All three types of
devices share the same configuration parameters. What is specified here
for PCI devices applies to PCI-X 1.0 devices as well. All three types of
devices are self-identifying, which means that these devices provide
configuration parameters to the system that allow the system to identify
the device and its driver. The configuration parameters are represented
in the form of name-value pairs that can be retrieved using the DDI
property interfaces. See ddi_prop_lookup(9F)
The bus properties of PCI devices or logical bus properties of PCIe
devices are derived from PCI configuration space, or supplied by the
, if it exists. Therefore, driver configuration files are not
necessary for these devices.
On some occasions, drivers for PCI
and PCIe devices can use driver
configuration files to provide driver private properties through the
global property mechanism. See driver.conf(5)
for further details. Driver
configuration files can also be used to augment or override properties
for a specific instance of a driver.
All bus drivers of PCI and PCIe devices recognize the following
An arbitrary length array where each element of the array
consists of a 5-tuple of 32-bit values. Each array element
describes a logically contiguous mappable resource on the PCI
bus or PCIe device tree.
The first three values in the 5-tuple describe the PCI
address of the mappable resource. The first tuple contains
the following information:
Bits 0 - 7 8-bit register number
Bits 8 - 10 3-bit function number
Bits 11 - 15 5-bit device number
Bits 16 - 23 8-bit bus number
Bits 24 - 25 2-bit address space type identifier
Bits 31 - 28 Register number extended bits 8:11
for extended config space. Zero for
conventional configuration space.
The address space type identifier can be interpreted as
0x0 configuration space
0x1 I/O space
0x2 32-bit memory space address
0x3 64-bit memory space address
The bus number is a unique identifying number assigned to
bus or PCIe logical bus within its domain.
The device number is a unique identifying number assigned
to each device on a PCI
bus or PCIe logical bus. Note that
a device number is unique only within the set of device
numbers for a particular bus or logical bus.
or PCIe device can have one to eight logically
independent functions, each with its own independent set of
configuration registers. Each function on a device is
assigned a function number. For a device with only one
function, the function number must be 0
The register number fields select a particular register
within the set of configuration registers corresponding to
the selected function. When the address space type
identifier indicates configuration space, non-zero register
number extended bits select registers in extended
The second and third values in the reg
specify the 64-bit address of the mappable resource within
or PCIe address domain. The second 32-bit tuple
corresponds to the high order four bytes of the 64-bit
address. The third 32-bit tuple corresponds to the low
The fourth and fifth 32-bit values in the 5-tuple reg
property specify the size of the mappable resource. The
size is a 64-bit value, where the fourth tuple corresponds
to the high order bytes of the 64-bit size and the fifth
corresponds to the low order.
The driver can refer to the elements of this array by
index, and construct kernel mappings to these addresses
. The index into the array is
passed as the rnumber
argument of ddi_regs_map_setup(9F)
At a high-level interrupt context, you can use the ddi_get*
family of functions to access I/O and memory
space. However, access to configuration space is not
allowed when running at a high-interrupt level. interrupts
This property consists of a single-integer element array.
Valid interrupt property values are 1
, and 4
value is derived directly from the contents of the device's
A driver should use an index value of 0
its interrupt handler with the DDI interrupt interfaces.
and PCIe devices support the reg
property. The device number and
function number as derived from the reg
property are used to construct
the address part of the device name under /devices
Only devices that generate interrupts support an interrupts
Occasionally it might be necessary to override or augment the
configuration information supplied by a PCI
or PCIe device. This change
can be achieved by writing a driver configuration file that describes a
prototype device node specification containing the additional properties
For the system to merge the prototype node specification into an actual
device node, certain conditions must be met.
o First, the name
property must be identical. The value of the name
property needs to match the binding name of the device.
The binding name is the name chosen by the system to bind a
driver to a device and is either an alias associated with the
driver or the hardware node name of the device.
o Second, the parent property must identify the PCI bus or PCIe
o Third, the unit-address property must identify the card. The
format of the unit-address property is: DD[,F]
is the device number and F
is the function number. If the
function number is 0, only DD
Example 1: Sample Configuration File
An example configuration file called ACME,scsi-hba.conf
for a PCI
# Copyright (c) 1995, ACME SCSI Host Bus Adaptor
# ident "@(#)ACME,scsi-hba.conf 1.1 96/02/04"
In this example, a property scsi-initiator-id
specifies the SCSI
initiator id that the adapter should use, for just one particular
instance of adapter installed in the machine. The name
identifies the driver and the parent property to identify the particular
bus the card is plugged into. This example uses the parent's full path
name to identify the bus. The unit-address property identifies the card
itself, with device number of 3 and function number of 0.
Two global driver properties are also created: hba-advanced-mode
has the string value on
) and hba-dma-speed
(which has the value 10
bit/s). These properties apply to all device nodes of the ACME,scsi-hba
Configuration files for PCIe devices are similar. Shown below is an
example configuration file called ACME,pcie-widget.conf
for a PCIe driver
# Copyright (c) 2005, ACME PCIe Widget Adapter
# ident "@(#)ACME,pcie-widget.conf 1.1 05/11/14"
name="ACME,pcie-widget" parent="/pci@780" unit-address="2,1"
In this example, we provide a property debug-mode
for a particular PCIe
device. As before, the logical bus is identified by the pathname of the
parent of the device. The device has a device number of 2, and a function
number of 1.
for descriptions of the following attributes:
|ATTRIBUTE TYPE | ATTRIBUTE VALUE |
|Architecture | SPARC, x86 |
SEE ALSO driver.conf(5)
, ddi_regs_map_setup(9F) Writing Device Drivers IEEE 1275 PCI Bus Binding
PCIe devices support an extended configuration space unavailable to PCI
devices. While PCIe devices can be operated using a PCI device driver,
operating them using a PCIe device driver can make use of the extended
properties and features made available only in the extended configuration
May 13, 2017 PCI(5)