diff --git a/docs/formatnode.html.in b/docs/formatnode.html.in index 29244a8984..5095b97d8a 100644 --- a/docs/formatnode.html.in +++ b/docs/formatnode.html.in @@ -70,6 +70,10 @@
Describes a device on the host's PCI bus. Sub-elements include:
+
class
+
Combined class, subclass and + programming interface codes as 6-digit hexadecimal number. + Since 5.2.0
domain
Which domain the device belongs to.
bus
@@ -381,6 +385,7 @@ <name>igb</name> </driver> <capability type='pci'> + <class>0x020000</class> <domain>0</domain> <bus>2</bus> <slot>0</slot> diff --git a/docs/schemas/nodedev.rng b/docs/schemas/nodedev.rng index 0498489cfd..0f45d7993e 100644 --- a/docs/schemas/nodedev.rng +++ b/docs/schemas/nodedev.rng @@ -133,6 +133,11 @@ pci + + + 0x[0-9a-fA-F]{6} + + diff --git a/src/conf/node_device_conf.c b/src/conf/node_device_conf.c index 5de51d1f6b..19c601ae11 100644 --- a/src/conf/node_device_conf.c +++ b/src/conf/node_device_conf.c @@ -208,6 +208,7 @@ virNodeDeviceCapPCIDefFormat(virBufferPtr buf, { size_t i; + virBufferAsprintf(buf, "0x%.6x\n", data->pci_dev.klass); virBufferAsprintf(buf, "%d\n", data->pci_dev.domain); virBufferAsprintf(buf, "%d\n", data->pci_dev.bus); @@ -1644,6 +1645,18 @@ virNodeDevCapPCIDevParseXML(xmlXPathContextPtr ctxt, orignode = ctxt->node; ctxt->node = node; + if (virNodeDevCapsDefParseHexId("string(./class[1])", ctxt, + &pci_dev->klass, def, + _("no PCI class supplied for '%s'"), + _("invalid PCI class supplied for '%s'")) < 0) + goto out; + + if (pci_dev->klass > 0xffffff) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("invalid PCI class supplied for '%s'"), def->name); + goto out; + } + if (virNodeDevCapsDefParseULong("number(./domain[1])", ctxt, &pci_dev->domain, def, _("no PCI domain ID supplied for '%s'"), diff --git a/tests/nodedevschemadata/pci_0000_00_02_0_header_type.xml b/tests/nodedevschemadata/pci_0000_00_02_0_header_type.xml index 5150fd1e8b..387fce7051 100644 --- a/tests/nodedevschemadata/pci_0000_00_02_0_header_type.xml +++ b/tests/nodedevschemadata/pci_0000_00_02_0_header_type.xml @@ -2,6 +2,7 @@ pci_0000_00_02_0 computer + 0xffffff 0 0 2 diff --git a/tests/nodedevschemadata/pci_0000_00_1c_0_header_type.xml b/tests/nodedevschemadata/pci_0000_00_1c_0_header_type.xml index c1be9f7d9c..b07d14faa5 100644 --- a/tests/nodedevschemadata/pci_0000_00_1c_0_header_type.xml +++ b/tests/nodedevschemadata/pci_0000_00_1c_0_header_type.xml @@ -2,6 +2,7 @@ pci_0000_00_1c_0 computer + 0xffffff 0 0 28 diff --git a/tests/nodedevschemadata/pci_0000_02_10_7_mdev_types.xml b/tests/nodedevschemadata/pci_0000_02_10_7_mdev_types.xml index a2d57569af..8e71e3f897 100644 --- a/tests/nodedevschemadata/pci_0000_02_10_7_mdev_types.xml +++ b/tests/nodedevschemadata/pci_0000_02_10_7_mdev_types.xml @@ -2,6 +2,7 @@ pci_0000_02_10_7 pci_0000_00_04_0 + 0xffffff 0 2 16 diff --git a/tests/nodedevschemadata/pci_0000_02_10_7_sriov.xml b/tests/nodedevschemadata/pci_0000_02_10_7_sriov.xml index 8f243b4d61..6fa2b406a5 100644 --- a/tests/nodedevschemadata/pci_0000_02_10_7_sriov.xml +++ b/tests/nodedevschemadata/pci_0000_02_10_7_sriov.xml @@ -2,6 +2,7 @@ pci_0000_02_10_7 pci_0000_00_04_0 + 0xffffff 0 2 16 diff --git a/tests/nodedevschemadata/pci_0000_02_10_7_sriov_pf_vfs_all.xml b/tests/nodedevschemadata/pci_0000_02_10_7_sriov_pf_vfs_all.xml index 9e8dace020..74036a65fa 100644 --- a/tests/nodedevschemadata/pci_0000_02_10_7_sriov_pf_vfs_all.xml +++ b/tests/nodedevschemadata/pci_0000_02_10_7_sriov_pf_vfs_all.xml @@ -2,6 +2,7 @@ pci_0000_02_10_7 pci_0000_00_04_0 + 0xffffff 0 2 16 diff --git a/tests/nodedevschemadata/pci_0000_02_10_7_sriov_pf_vfs_all_header_type.xml b/tests/nodedevschemadata/pci_0000_02_10_7_sriov_pf_vfs_all_header_type.xml index 4e6323a3ec..c30c0d0d2b 100644 --- a/tests/nodedevschemadata/pci_0000_02_10_7_sriov_pf_vfs_all_header_type.xml +++ b/tests/nodedevschemadata/pci_0000_02_10_7_sriov_pf_vfs_all_header_type.xml @@ -2,6 +2,7 @@ pci_0000_02_10_7 pci_0000_00_04_0 + 0xffffff 0 2 16 diff --git a/tests/nodedevschemadata/pci_0000_02_10_7_sriov_vfs.xml b/tests/nodedevschemadata/pci_0000_02_10_7_sriov_vfs.xml index 355eaaad97..096055e2ae 100644 --- a/tests/nodedevschemadata/pci_0000_02_10_7_sriov_vfs.xml +++ b/tests/nodedevschemadata/pci_0000_02_10_7_sriov_vfs.xml @@ -2,6 +2,7 @@ pci_0000_02_10_7 pci_0000_00_04_0 + 0xffffff 0 2 16 diff --git a/tests/nodedevschemadata/pci_0000_02_10_7_sriov_zero_vfs_max_count.xml b/tests/nodedevschemadata/pci_0000_02_10_7_sriov_zero_vfs_max_count.xml index e9eb122bfe..8259cd059b 100644 --- a/tests/nodedevschemadata/pci_0000_02_10_7_sriov_zero_vfs_max_count.xml +++ b/tests/nodedevschemadata/pci_0000_02_10_7_sriov_zero_vfs_max_count.xml @@ -2,6 +2,7 @@ pci_0000_02_10_7 pci_0000_00_04_0 + 0xffffff 0 2 16 diff --git a/tests/nodedevschemadata/pci_1002_71c4.xml b/tests/nodedevschemadata/pci_1002_71c4.xml index 6d5d85bc3c..2039e2201f 100644 --- a/tests/nodedevschemadata/pci_1002_71c4.xml +++ b/tests/nodedevschemadata/pci_1002_71c4.xml @@ -2,6 +2,7 @@ pci_1002_71c4 pci_8086_27a1 + 0xffffff 0 1 0 diff --git a/tests/nodedevschemadata/pci_8086_0c0c_snd_hda_intel.xml b/tests/nodedevschemadata/pci_8086_0c0c_snd_hda_intel.xml index 8e8990073d..3ffe53b8c9 100644 --- a/tests/nodedevschemadata/pci_8086_0c0c_snd_hda_intel.xml +++ b/tests/nodedevschemadata/pci_8086_0c0c_snd_hda_intel.xml @@ -2,6 +2,7 @@ pci_0000_00_03_0 computer + 0xffffff 0 0 3 diff --git a/tests/nodedevschemadata/pci_8086_10c9_sriov_pf.xml b/tests/nodedevschemadata/pci_8086_10c9_sriov_pf.xml index 6e1dc868a6..6bd1292095 100644 --- a/tests/nodedevschemadata/pci_8086_10c9_sriov_pf.xml +++ b/tests/nodedevschemadata/pci_8086_10c9_sriov_pf.xml @@ -2,6 +2,7 @@ pci_0000_02_00_0 pci_0000_00_04_0 + 0xffffff 0 2 0 diff --git a/tests/nodedevschemadata/pci_8086_4238_pcie_wireless.xml b/tests/nodedevschemadata/pci_8086_4238_pcie_wireless.xml index 18172e900b..59f5ec8622 100644 --- a/tests/nodedevschemadata/pci_8086_4238_pcie_wireless.xml +++ b/tests/nodedevschemadata/pci_8086_4238_pcie_wireless.xml @@ -2,6 +2,7 @@ pci_0000_03_00_0 pci_0000_00_1c_1 + 0xffffff 0 3 0 diff --git a/tests/nodedevschemadata/pci_82579LM_network_adapter.xml b/tests/nodedevschemadata/pci_82579LM_network_adapter.xml index 6e154d6de3..96a4c51762 100644 --- a/tests/nodedevschemadata/pci_82579LM_network_adapter.xml +++ b/tests/nodedevschemadata/pci_82579LM_network_adapter.xml @@ -5,6 +5,7 @@ e1000e + 0xffffff 0 0 25