mirror of
https://github.com/libvirt/libvirt.git
synced 2026-10-02 12:20:06 -05:00
nodedev: add USB port to nodedev XML
This adds the physical USB port to the capabilities of a USB device in nodedev XML. example: <port>1.4</port> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> Signed-off-by: Maximilian Martin <maximilian_martin@gmx.de>
This commit is contained in:
1 parent
b97afe28f5
commit
f0cdc0fca4
7 files changed
+45
-30
No files matched your search
@@ -432,6 +432,9 @@ virNodeDeviceCapUSBDevDefFormat(virBuffer *buf,
|
||||
virBufferAsprintf(buf, "<bus>%d</bus>\n", data->usb_dev.bus);
|
||||
virBufferAsprintf(buf, "<device>%d</device>\n",
|
||||
data->usb_dev.device);
|
||||
if (data->usb_dev.port)
|
||||
virBufferEscapeString(buf, "<port>%s</port>\n",
|
||||
data->usb_dev.port);
|
||||
virBufferAsprintf(buf, "<product id='0x%04x'",
|
||||
data->usb_dev.product);
|
||||
if (data->usb_dev.product_name)
|
||||
@@ -2083,6 +2086,7 @@ virNodeDevCapUSBDevParseXML(xmlXPathContextPtr ctxt,
|
||||
_("invalid USB product ID supplied for '%1$s'")) < 0)
|
||||
return -1;
|
||||
|
||||
usb_dev->port = virXPathString("string(./port[1])", ctxt);
|
||||
usb_dev->vendor_name = virXPathString("string(./vendor[1])", ctxt);
|
||||
usb_dev->product_name = virXPathString("string(./product[1])", ctxt);
|
||||
|
||||
@@ -2802,6 +2806,7 @@ virNodeDevCapsDefFree(virNodeDevCapsDef *caps)
|
||||
case VIR_NODE_DEV_CAP_USB_DEV:
|
||||
g_free(data->usb_dev.product_name);
|
||||
g_free(data->usb_dev.vendor_name);
|
||||
g_free(data->usb_dev.port);
|
||||
break;
|
||||
case VIR_NODE_DEV_CAP_USB_INTERFACE:
|
||||
g_free(data->usb_if.description);
|
||||
|
||||
@@ -211,6 +211,7 @@ typedef struct _virNodeDevCapUSBDev virNodeDevCapUSBDev;
|
||||
struct _virNodeDevCapUSBDev {
|
||||
unsigned int bus;
|
||||
unsigned int device;
|
||||
char *port;
|
||||
unsigned int product;
|
||||
unsigned int vendor;
|
||||
char *product_name;
|
||||
|
||||
@@ -378,6 +378,37 @@
|
||||
</choice>
|
||||
</define>
|
||||
|
||||
<define name="usbIdDefault">
|
||||
<data type="string">
|
||||
<param name="pattern">-1</param>
|
||||
</data>
|
||||
</define>
|
||||
<define name="usbId">
|
||||
<data type="string">
|
||||
<param name="pattern">(0x)?[0-9a-fA-F]{1,4}</param>
|
||||
</data>
|
||||
</define>
|
||||
<define name="usbVersion">
|
||||
<data type="string">
|
||||
<param name="pattern">[0-9]{1,2}.[0-9]{1,2}</param>
|
||||
</data>
|
||||
</define>
|
||||
<define name="usbAddr">
|
||||
<data type="string">
|
||||
<param name="pattern">(0x)?[0-9a-fA-F]{1,3}</param>
|
||||
</data>
|
||||
</define>
|
||||
<define name="usbClass">
|
||||
<data type="string">
|
||||
<param name="pattern">(0x)?[0-9a-fA-F]{1,2}</param>
|
||||
</data>
|
||||
</define>
|
||||
<define name="usbPort">
|
||||
<data type="string">
|
||||
<param name="pattern">((0x)?[0-9a-fA-F]{1,3}\.){0,3}(0x)?[0-9a-fA-F]{1,3}</param>
|
||||
</data>
|
||||
</define>
|
||||
|
||||
<define name="wwn">
|
||||
<data type="string">
|
||||
<param name="pattern">(0x)?[0-9a-fA-F]{16}</param>
|
||||
|
||||
@@ -8754,36 +8754,6 @@
|
||||
<ref name="dnsName"/>
|
||||
</choice>
|
||||
</define>
|
||||
<define name="usbIdDefault">
|
||||
<data type="string">
|
||||
<param name="pattern">-1</param>
|
||||
</data>
|
||||
</define>
|
||||
<define name="usbId">
|
||||
<data type="string">
|
||||
<param name="pattern">(0x)?[0-9a-fA-F]{1,4}</param>
|
||||
</data>
|
||||
</define>
|
||||
<define name="usbVersion">
|
||||
<data type="string">
|
||||
<param name="pattern">[0-9]{1,2}.[0-9]{1,2}</param>
|
||||
</data>
|
||||
</define>
|
||||
<define name="usbAddr">
|
||||
<data type="string">
|
||||
<param name="pattern">(0x)?[0-9a-fA-F]{1,3}</param>
|
||||
</data>
|
||||
</define>
|
||||
<define name="usbClass">
|
||||
<data type="string">
|
||||
<param name="pattern">(0x)?[0-9a-fA-F]{1,2}</param>
|
||||
</data>
|
||||
</define>
|
||||
<define name="usbPort">
|
||||
<data type="string">
|
||||
<param name="pattern">((0x)?[0-9a-fA-F]{1,3}\.){0,3}(0x)?[0-9a-fA-F]{1,3}</param>
|
||||
</data>
|
||||
</define>
|
||||
<define name="driveController">
|
||||
<data type="string">
|
||||
<param name="pattern">[0-9]{1,2}</param>
|
||||
|
||||
@@ -288,6 +288,9 @@
|
||||
<element name="device">
|
||||
<ref name="unsignedLong"/>
|
||||
</element>
|
||||
<element name="port">
|
||||
<ref name="unsignedLong"/>
|
||||
</element>
|
||||
|
||||
<element name="product">
|
||||
<attribute name="id">
|
||||
|
||||
@@ -595,6 +595,10 @@ udevProcessUSBDevice(struct udev_device *device,
|
||||
return -1;
|
||||
if (udevGetUintProperty(device, "ID_VENDOR_ID", &usb_dev->vendor, 16) < 0)
|
||||
return -1;
|
||||
if (!usb_dev->port) {
|
||||
udevGetStringSysfsAttr(device, "devpath",
|
||||
&usb_dev->port);
|
||||
}
|
||||
|
||||
udevGetStringProperty(device,
|
||||
"ID_VENDOR_FROM_DATABASE",
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
<capability type='usb_device'>
|
||||
<bus>2</bus>
|
||||
<device>1</device>
|
||||
<port>3</port>
|
||||
<product id='0x0001'>1.1 root hub</product>
|
||||
<vendor id='0x1d6b'>Linux Foundation</vendor>
|
||||
</capability>
|
||||
|
||||
Reference in new issue
Block a user