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=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.
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).