Message ID | 20200704144943.18292-19-f4bug@amsat.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | hw/usb: Give it love, reduce 'hw/usb.h' inclusion out of hw/usb/ | expand |
On Sat, Jul 4, 2020 at 8:00 AM Philippe Mathieu-Daudé <f4bug@amsat.org> wrote: > > Refactor usb_get_full_dev_path() to take a 'want_full_path' > argument, and add usb_get_port_path() which returns a short > path. > > Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Alistair > --- > include/hw/usb.h | 10 ++++++++++ > hw/usb/bus.c | 18 +++++++++++++----- > 2 files changed, 23 insertions(+), 5 deletions(-) > > diff --git a/include/hw/usb.h b/include/hw/usb.h > index 8c3bc920ff..7ea502d421 100644 > --- a/include/hw/usb.h > +++ b/include/hw/usb.h > @@ -506,6 +506,16 @@ void usb_port_location(USBPort *downstream, USBPort *upstream, int portnr); > void usb_unregister_port(USBBus *bus, USBPort *port); > void usb_claim_port(USBDevice *dev, Error **errp); > void usb_release_port(USBDevice *dev); > +/** > + * usb_get_port_path: > + * @dev: the USB device > + * > + * The returned data must be released with g_free() > + * when no longer required. > + * > + * Returns: a dynamically allocated pathname. > + */ > +char *usb_get_port_path(USBDevice *dev); > void usb_device_attach(USBDevice *dev, Error **errp); > int usb_device_detach(USBDevice *dev); > void usb_check_attach(USBDevice *dev, Error **errp); > diff --git a/hw/usb/bus.c b/hw/usb/bus.c > index fad8194bf5..518e5b94ed 100644 > --- a/hw/usb/bus.c > +++ b/hw/usb/bus.c > @@ -577,12 +577,10 @@ static void usb_bus_dev_print(Monitor *mon, DeviceState *qdev, int indent) > dev->attached ? ", attached" : ""); > } > > -static char *usb_get_full_dev_path(DeviceState *qdev) > +static char *usb_get_dev_path(USBDevice *dev, bool want_full_path) > { > - USBDevice *dev = USB_DEVICE(qdev); > - > - if (dev->flags & (1 << USB_DEV_FLAG_FULL_PATH)) { > - DeviceState *hcd = qdev->parent_bus->parent; > + if (want_full_path && (dev->flags & (1 << USB_DEV_FLAG_FULL_PATH))) { > + DeviceState *hcd = DEVICE(dev)->parent_bus->parent; > char *id = qdev_get_dev_path(hcd); > > if (id) { > @@ -594,6 +592,16 @@ static char *usb_get_full_dev_path(DeviceState *qdev) > return g_strdup(dev->port->path); > } > > +static char *usb_get_full_dev_path(DeviceState *qdev) > +{ > + return usb_get_dev_path(USB_DEVICE(qdev), true); > +} > + > +char *usb_get_port_path(USBDevice *dev) > +{ > + return usb_get_dev_path(dev, false); > +} > + > static char *usb_get_fw_dev_path(DeviceState *qdev) > { > USBDevice *dev = USB_DEVICE(qdev); > -- > 2.21.3 > >
diff --git a/include/hw/usb.h b/include/hw/usb.h index 8c3bc920ff..7ea502d421 100644 --- a/include/hw/usb.h +++ b/include/hw/usb.h @@ -506,6 +506,16 @@ void usb_port_location(USBPort *downstream, USBPort *upstream, int portnr); void usb_unregister_port(USBBus *bus, USBPort *port); void usb_claim_port(USBDevice *dev, Error **errp); void usb_release_port(USBDevice *dev); +/** + * usb_get_port_path: + * @dev: the USB device + * + * The returned data must be released with g_free() + * when no longer required. + * + * Returns: a dynamically allocated pathname. + */ +char *usb_get_port_path(USBDevice *dev); void usb_device_attach(USBDevice *dev, Error **errp); int usb_device_detach(USBDevice *dev); void usb_check_attach(USBDevice *dev, Error **errp); diff --git a/hw/usb/bus.c b/hw/usb/bus.c index fad8194bf5..518e5b94ed 100644 --- a/hw/usb/bus.c +++ b/hw/usb/bus.c @@ -577,12 +577,10 @@ static void usb_bus_dev_print(Monitor *mon, DeviceState *qdev, int indent) dev->attached ? ", attached" : ""); } -static char *usb_get_full_dev_path(DeviceState *qdev) +static char *usb_get_dev_path(USBDevice *dev, bool want_full_path) { - USBDevice *dev = USB_DEVICE(qdev); - - if (dev->flags & (1 << USB_DEV_FLAG_FULL_PATH)) { - DeviceState *hcd = qdev->parent_bus->parent; + if (want_full_path && (dev->flags & (1 << USB_DEV_FLAG_FULL_PATH))) { + DeviceState *hcd = DEVICE(dev)->parent_bus->parent; char *id = qdev_get_dev_path(hcd); if (id) { @@ -594,6 +592,16 @@ static char *usb_get_full_dev_path(DeviceState *qdev) return g_strdup(dev->port->path); } +static char *usb_get_full_dev_path(DeviceState *qdev) +{ + return usb_get_dev_path(USB_DEVICE(qdev), true); +} + +char *usb_get_port_path(USBDevice *dev) +{ + return usb_get_dev_path(dev, false); +} + static char *usb_get_fw_dev_path(DeviceState *qdev) { USBDevice *dev = USB_DEVICE(qdev);
Refactor usb_get_full_dev_path() to take a 'want_full_path' argument, and add usb_get_port_path() which returns a short path. Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org> --- include/hw/usb.h | 10 ++++++++++ hw/usb/bus.c | 18 +++++++++++++----- 2 files changed, 23 insertions(+), 5 deletions(-)