Signed-off-by: Boris Fiuczynski <fiuczy@xxxxxxxxxxxxx> --- src/conf/node_device_conf.c | 8 ++++++++ src/conf/node_device_conf.h | 2 ++ src/conf/schemas/nodedev.rng | 6 +++++- src/node_device/node_device_udev.c | 6 +++++- 4 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/conf/node_device_conf.c b/src/conf/node_device_conf.c index 3e88f5da87..30c2b4440e 100644 --- a/src/conf/node_device_conf.c +++ b/src/conf/node_device_conf.c @@ -78,6 +78,8 @@ VIR_ENUM_IMPL(virNodeDevCap, VIR_ENUM_IMPL(virNodeDevCCWGroupCap, VIR_NODE_DEV_CAP_CCWGROUP_LAST, "qeth_generic", + "qeth_layer2", + "qeth_layer3", ); VIR_ENUM_IMPL(virNodeDevNetCap, @@ -731,6 +733,8 @@ virNodeDeviceCapCCWGroupDefFormat(virBuffer *buf, virBufferAdjustIndent(buf, 2); switch (ccwgroup_dev.type) { case VIR_NODE_DEV_CAP_CCWGROUP_QETH_GENERIC: + case VIR_NODE_DEV_CAP_CCWGROUP_QETH_LAYER2: + case VIR_NODE_DEV_CAP_CCWGROUP_QETH_LAYER3: virNodeDeviceCapCCWGroupQethFormat(buf, &ccwgroup_dev.qeth); break; case VIR_NODE_DEV_CAP_CCWGROUP_LAST: @@ -1509,6 +1513,8 @@ virNodeDevCapCCWGroupParseXML(xmlXPathContextPtr ctxt, switch (ccwgroup_dev->type) { case VIR_NODE_DEV_CAP_CCWGROUP_QETH_GENERIC: + case VIR_NODE_DEV_CAP_CCWGROUP_QETH_LAYER2: + case VIR_NODE_DEV_CAP_CCWGROUP_QETH_LAYER3: if (virNodeDevCapCCWGroupQethParseXML(ctxt, cap_node, &ccwgroup_dev->qeth) < 0) return -1; break; @@ -2865,6 +2871,8 @@ virNodeDevCapsDefFree(virNodeDevCapsDef *caps) g_free(data->ccwgroup_dev.members); switch (data->ccwgroup_dev.type) { case VIR_NODE_DEV_CAP_CCWGROUP_QETH_GENERIC: + case VIR_NODE_DEV_CAP_CCWGROUP_QETH_LAYER2: + case VIR_NODE_DEV_CAP_CCWGROUP_QETH_LAYER3: virCCWGroupTypeQethFree(&data->ccwgroup_dev.qeth); break; case VIR_NODE_DEV_CAP_CCWGROUP_LAST: diff --git a/src/conf/node_device_conf.h b/src/conf/node_device_conf.h index a6cef57b95..c66660342f 100644 --- a/src/conf/node_device_conf.h +++ b/src/conf/node_device_conf.h @@ -80,6 +80,8 @@ typedef enum { typedef enum { /* Keep in sync with VIR_ENUM_IMPL in node_device_conf.c */ VIR_NODE_DEV_CAP_CCWGROUP_QETH_GENERIC, /* s390 CCWGROUP QETH generic device */ + VIR_NODE_DEV_CAP_CCWGROUP_QETH_LAYER2, /* s390 CCWGROUP QETH layer 2 device */ + VIR_NODE_DEV_CAP_CCWGROUP_QETH_LAYER3, /* s390 CCWGROUP QETH layer 3 device */ VIR_NODE_DEV_CAP_CCWGROUP_LAST } virNodeDevCCWGroupCapType; diff --git a/src/conf/schemas/nodedev.rng b/src/conf/schemas/nodedev.rng index f52c6ab752..31ce517e4d 100644 --- a/src/conf/schemas/nodedev.rng +++ b/src/conf/schemas/nodedev.rng @@ -672,7 +672,11 @@ <define name="capccwgrouptypeqeth"> <attribute name="type"> - <value>qeth_generic</value> + <choice> + <value>qeth_generic</value> + <value>qeth_layer2</value> + <value>qeth_layer3</value> + </choice> </attribute> <interleave> <element name="card_type"><text/></element> diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_device_udev.c index ba5727ed8f..082f9d5cf0 100644 --- a/src/node_device/node_device_udev.c +++ b/src/node_device/node_device_udev.c @@ -1410,6 +1410,8 @@ udevProcessCCWGroup(struct udev_device *device, switch (data->ccwgroup_dev.type) { case VIR_NODE_DEV_CAP_CCWGROUP_QETH_GENERIC: + case VIR_NODE_DEV_CAP_CCWGROUP_QETH_LAYER2: + case VIR_NODE_DEV_CAP_CCWGROUP_QETH_LAYER3: { virCCWGroupTypeQeth *qeth = &data->ccwgroup_dev.qeth; /* process qeth device information */ @@ -1487,7 +1489,9 @@ udevGetDeviceType(struct udev_device *device, *type = VIR_NODE_DEV_CAP_AP_CARD; else if (STREQ(devtype, "ap_queue")) *type = VIR_NODE_DEV_CAP_AP_QUEUE; - else if (STREQ(devtype, "qeth_generic")) + else if (STREQ(devtype, "qeth_generic") || + STREQ(devtype, "qeth_layer2") || + STREQ(devtype, "qeth_layer3")) *type = VIR_NODE_DEV_CAP_CCWGROUP_DEV; } else { /* PCI devices don't set the DEVTYPE property. */ -- 2.47.0