Describes the format of the newly added VPD capability and gives and example for a real-world device. --- docs/drvnodedev.html.in | 46 +++++++++++++++++++++++++++++++++++++++++ docs/formatnode.html.in | 24 ++++++++++++++++++++- 2 files changed, 69 insertions(+), 1 deletion(-) diff --git a/docs/drvnodedev.html.in b/docs/drvnodedev.html.in index 70f7e6717d..438d20f2dd 100644 --- a/docs/drvnodedev.html.in +++ b/docs/drvnodedev.html.in @@ -185,6 +185,52 @@ </capability> </device></pre> + <h3><a id="VPDCap">VPD capability</a></h3> + <p> + A device that exposes a PCI/PCIe VPD capability will include a nested + capability <code>vpd</code> which presents all resources (string, read-only + and read-write keyword resources) that may be contained in a valid VPD + entry. The XML format follows the binary format described in + "I.3. VPD Definitions" in PCI Local Bus (2.2+) and the identical format + in PCIe 4.0+. At the time of writing, the support for exposing this capability + is only present on Linux-based systems (kernel version v2.6.26 is the first one + to expose VPD via sysfs which Libvirt relies on). Reading the VPD contents requires + root privileges, therefore, <code>virsh nodedev-dumpxml</code> must be executed + accordingly. + A description of the XML format for the <code>vpd</code> capability can + be found <a href="formatnode.html#VPDCap">here</a>. + </p> + <p> + The following example shows a VPD representation for a device that exposes the + VPD capability with a string resource and a VPD-R resource. Among other things, + the VPD of this particular device includes a unique board serial number in the + "SN" field. + </p> +<pre> +<device> + <!-- ... --> + <driver> + <name>mlx5_core</name> + </driver> + <capability type='pci'> + <!-- ... --> + <capability type='vpd'> + <resource type='string'>BlueField-2 DPU 25GbE Dual-Port SFP56, 16GB on-board DDR, 1GbE OOB management, Tall Bracket</resource> + <resource type='vpd-r'> + <field keyword='SN'>MT2113X00000</field> + <field keyword='V3'>d644e35a61d0eb11e000e8cef671bf3e</field> + <field keyword='VA'>MLX:MN=MLNX:CSKU=V2:UUID=V3:PCI=V0:MODL=BF2H332A</field> + <field keyword='PN'>MBF2H332A-AEEOT</field> + <field keyword='V2'>MBF2H332A-AEEOT</field> + <field keyword='EC'>B1</field> + <field keyword='V0'>PCIeGen4 x8</field> + </resource> + </capability> + <!-- ... --> + </capability> +</device> +</pre> + <h2><a id="MDEV">Mediated devices (MDEVs)</a></h2> <p> Mediated devices (<span class="since">Since 3.2.0</span>) are software diff --git a/docs/formatnode.html.in b/docs/formatnode.html.in index 3b3c3105d4..3e8c771398 100644 --- a/docs/formatnode.html.in +++ b/docs/formatnode.html.in @@ -162,7 +162,13 @@ This device is capable of creating mediated devices. The sub-elements are summarized in <a href="#MDEVTypesCap">mdev_types capability</a>. - </dd> + </dd> + <dt><code><a id="VPDCapPCI">vpd</a></code></dt> + <dd> + This device exposes a VPD PCI/PCIe capability. + The sub-elements are summarized in + <a href="#VPDCap">vpd capability</a>. + </dd> </dl> </dd> @@ -592,5 +598,21 @@ </device> </pre> + <h3><a id="VPDCap">vpd capability</a></h3> + + <p> + <a href="#VPDCapPCI">PCI</a> devices can expose a VPD capability which + is optional per PCI Local Bus 2.2+ and PCIe 4.0+ specifications. If + the VPD capability is present, then the parent <code>capability</code> + element with the <code>vpd</code> type will contain a list of + <code>resource</code> elements with contents applicable to a + particular resource type (string or keyword resources). The + <code>resource</code> element will either contain a string + resource value or a list of <code>field</code> elements in + the case of keyword resources. <code>field</code> elements + contain a <code>keyword</code> attribute corresponding to the + 2-byte VPD keyword and text as element data representing the + field value. + </p> </body> </html> -- 2.30.2