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