Writing Device Drivers for Oracle® Solaris 11.2

Exit Print View

Updated: September 2014
 
 

pci.conf File

This section describes the pci.conf file, its uses, and the syntax.

Description

The pci.conf is introduced to save PCI configurations, such as Number of VFs (Virtual Functions) of a particular PF (Physical Function) on the system. This file has a few purposes:

  • To persist the PCI configuration, so VFs can be created automatically upon boot.

  • Since the configuration file is part of the boot_archive, VFs can be used during the boot.

This file is also used by non-IOV system configurations when VFs are used on bare-metal systems. Currently, it contains only VF-related configurations. In the future, more PCI bus specific configuration and even device specific workarounds may make their way to it. Number of VF configurations is saved in "[System_Configuration]" section, which looks like:

[System_Configuration]
[[path=<pf_device_path>]]
num-vf=<num_of_vf>

System Configuration Section

The [System_Configuration] section of the file is interpreted by the Oracle Solaris PCIe framework. Unrecognized keywords are flagged as errors. There is only one [System_Configuration] section in the entire file and it must reside at the beginning of the file.

The [System_Configuration] section is comprised of a series of subsections. Each subsection must have an unique text label, followed by a list of filters enclosed in double square brackets which matches the device(s) of interest. The content of each subsection is a list of actions that the framework will take against each matched device. For example:

[System_Configuration]
     new_e1kg_driver [[id=0x8086,0x1000,,0x108e,]] [[classcode=0x020000]]
     num-vf=4

The filter within the double brackets matches all Intel devices with device ID 0x1000, a Sun subsystem vendor ID, and network controller class code in the system. Oracle Solaris sets the device's number of VFs to 4.


Note - Device path can be used in the filter to narrow the scope of the filter to a single device instance.

Device Configuration Section

The [Device_Configuration] section is comprised of the same type of subsections as the [System_Configuration] section with the difference that the content is only interpreted by the drivers of the devices that match the filter.

Device Configuration]
     # label must be file-globally unique
     igbe-sriov-test [[path=/pci@0,0/network@2]]
     # number of rx/tx ring pairs for each VF
     dma-channel-distribution=2,2,8,4

Syntax

/etc/pci.conf = <system section><device section>
<system section> = "[System_Configuration]" {<framework subsection>}*
<device section> = "[Device_Configuration]" {<device subsection>}*
<framework subsection> = <label> [ {filter>}* ]
[ {<framework action>}+ ]
<device subsection> = <label> [ {<filter>}+* ] <devicenvlist>
<filter> = [ "[[" "id" "=" (vendorid>) "," (<deviceid>) "," (<revisionid>) "," (<subsystem-vendorid>) "," (<subsystemid>)"]]"] 
| ["[[" "classcode" "=" <classcode> (,<mask>) "]]" ] | [ "[[" "path"
"=" ,devpath> "]]"]
<framework action> = [ "num-vf" "=" <val>]
<deice nvlist> = [ {name string> "=" <value string>} +]

References

See also pci_param_get(9F).