This section describes the pci.conf file, its uses, and the syntax.
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>
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=4The 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.
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
/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>} +]
See also pci_param_get(9F).