pci(4)




NAME

     pci, pcie - configuration files for PCI and PCI Express dev-
     ice drivers


DESCRIPTION

     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) for details.

     The bus properties of PCI devices or logical bus  properties
     of PCIe devices are derived from PCI configuration space, or
     supplied by the Fcode PROM, 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 proper-
     ties   through   the   global   property   mechanism.    See
     driver.conf(4)  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  fol-
     lowing properties:

     reg   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  mappa-
           ble 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 con-
           tains 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 follows:

           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 each PCI 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 log-
           ical bus.

           Each PCI or PCIe device can have one  to  eight  logi-
           cally   independent   functions,  each  with  its  own
           independent set of configuration registers. Each func-
           tion  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  regis-
           ter   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 configuration space.

           The second and third values in  the  reg  property  5-
           tuple  specify  the  64-bit  address  of  the mappable
           resource within the PCI 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 order bytes.

           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 using ddi_regs_map_setup(9F). 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*  and  ddi_put*  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, 2, 3,
           and 4. This value is derived directly  from  the  con-
           tents   of  the  device's  configuration-interrupt-pin
           register.

           A driver should use an index value of 0 when register-
           ing  its  interrupt  handler  with  the  DDI interrupt
           interfaces.

     All PCI and PCIe devices support the reg property. The  dev-
     ice  number and function number as derived from the reg pro-
     perty are used to construct the address part of  the  device
     name under /devices.

     Only devices that generate interrupts support an  interrupts
     property.

     Occasionally it might be necessary to  override  or  augment
     the configuration information supplied by a PCI or PCIe dev-
     ice. This change can be achieved by writing a driver  confi-
     guration file that describes a prototype device node specif-
     ication containing the additional properties required.

     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 logical bus.

        o  Third, the unit-address  property  must  identify  the
           card. The format of the unit-address property is:

           DD[,F]

     where DD is the device number and F is the function  number.
     If the function number is 0, only DD is specified.


EXAMPLES

     Example 1: Sample Configuration File

     An example configuration file called ACME,scsi-hba.conf  for
     a PCI driver called ACME,scsi-hba follows:

     #
     # Copyright (c) 1995, ACME SCSI Host Bus Adaptor
     # ident   "@(#)ACME,scsi-hba.conf  1.1  96/02/04"
     name="ACME,scsi-hba" parent="/pci@1,0/pci@1f,4000"
        unit-address="3" scsi-initiator-id=6;
     hba-advanced-mode="on";
     hba-dma-speed=10;

     In this example, a property scsi-initiator-id specifies  the
     SCSI  bus initiator id that the adapter should use, for just
     one particular instance of adapter installed in the machine.
     The  name property identifies the driver and the parent pro-
     perty to identify the particular bus  the  card  is  plugged
     into. This example uses the parent's full path name to iden-
     tify 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  (which  has the string value on) and hba-dma-
     speed (which has the value 10  M  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 called ACME,pcie-widget.

     #
     # 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"
     debug-mode=12;

     In this example, we provide a property debug-mode for a par-
     ticular  PCIe  device. As before, the logical bus is identi-
     fied by the pathname of the parent of the device. The device
     has a device number of 2, and a function number of 1.


ATTRIBUTES

     See attributes(5) for descriptions of the  following  attri-
     butes:

     ____________________________________________________________
    |       ATTRIBUTE TYPE        |       ATTRIBUTE VALUE       |
    |_____________________________|_____________________________|
    | Architecture                | SPARC, x86                  |
    |_____________________________|_____________________________|


SEE ALSO

     driver.conf(4),       attributes(5),       ddi_add_intr(9F),
     ddi_prop_lookup(9F), ddi_regs_map_setup(9F)

     Writing Device Drivers

     IEEE 1275 PCI Bus Binding

     http://playground.sun.com/1275/bindings/pci/pci-express.txt


NOTES

     PCIe devices support an extended  configuration  space  una-
     vailable  to PCI devices. While PCIe devices can be operated
     using a PCI device driver, operating them using a PCIe  dev-
     ice  driver  can  make  use  of  the extended properties and
     features made available only in the  extended  configuration
     space.


Man(1) output converted with man2html