This is a preparation patch for adding support for USB companion controllers.
Signed-off-by: Hans de Goede <hdego...@redhat.com> --- hw/usb-bus.c | 25 +++++++++++++++++++++++++ hw/usb.h | 4 ++++ 2 files changed, 29 insertions(+), 0 deletions(-) diff --git a/hw/usb-bus.c b/hw/usb-bus.c index 2abce12..052fa66 100644 --- a/hw/usb-bus.c +++ b/hw/usb-bus.c @@ -63,6 +63,31 @@ USBBus *usb_bus_find(int busnr) return NULL; } +int usb_bus_register_companion(const char *masterbus, USBPort *ports[], + uint32_t portcount, uint32_t firstport) +{ + USBBus *bus; + + QTAILQ_FOREACH(bus, &busses, next) { + if (strcmp(bus->qbus.name, masterbus) == 0) { + break; + } + } + + if (!bus || !bus->ops->register_companion) { + qerror_report(QERR_INVALID_PARAMETER_VALUE, "masterbus", + "an USB masterbus"); + if (bus) { + error_printf_unless_qmp( + "USB bus '%s' does not allow companion controllers\n", + masterbus); + } + return -1; + } + + return bus->ops->register_companion(bus, ports, portcount, firstport); +} + static int usb_qdev_init(DeviceState *qdev, DeviceInfo *base) { USBDevice *dev = DO_UPCAST(USBDevice, qdev, qdev); diff --git a/hw/usb.h b/hw/usb.h index b861b73..419ff0c 100644 --- a/hw/usb.h +++ b/hw/usb.h @@ -349,11 +349,15 @@ struct USBBus { }; struct USBBusOps { + int (*register_companion)(USBBus *bus, USBPort *ports[], + uint32_t portcount, uint32_t firstport); void (*device_destroy)(USBBus *bus, USBDevice *dev); }; void usb_bus_new(USBBus *bus, USBBusOps *ops, DeviceState *host); USBBus *usb_bus_find(int busnr); +int usb_bus_register_companion(const char *masterbus, USBPort *ports[], + uint32_t portcount, uint32_t firstport); void usb_qdev_register(USBDeviceInfo *info); void usb_qdev_register_many(USBDeviceInfo *info); USBDevice *usb_create(USBBus *bus, const char *name); -- 1.7.5.1