mirror of
https://github.com/xemu-project/xemu.git
synced 2025-02-16 10:08:10 +00:00
usb: Add a register_companion USB bus op.
This is a preparation patch for adding support for USB companion controllers. Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
parent
3631e6c8c2
commit
ae60fea97c
31
hw/usb-bus.c
31
hw/usb-bus.c
@ -160,6 +160,37 @@ void usb_register_port(USBBus *bus, USBPort *port, void *opaque, int index,
|
||||
bus->nfree++;
|
||||
}
|
||||
|
||||
int usb_register_companion(const char *masterbus, USBPort *ports[],
|
||||
uint32_t portcount, uint32_t firstport,
|
||||
void *opaque, USBPortOps *ops, int speedmask)
|
||||
{
|
||||
USBBus *bus;
|
||||
int i;
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
for (i = 0; i < portcount; i++) {
|
||||
usb_fill_port(ports[i], opaque, i, ops, speedmask);
|
||||
}
|
||||
|
||||
return bus->ops->register_companion(bus, ports, portcount, firstport);
|
||||
}
|
||||
|
||||
void usb_port_location(USBPort *downstream, USBPort *upstream, int portnr)
|
||||
{
|
||||
if (upstream) {
|
||||
|
5
hw/usb.h
5
hw/usb.h
@ -344,6 +344,8 @@ struct USBBus {
|
||||
};
|
||||
|
||||
struct USBBusOps {
|
||||
int (*register_companion)(USBBus *bus, USBPort *ports[],
|
||||
uint32_t portcount, uint32_t firstport);
|
||||
void (*device_destroy)(USBBus *bus, USBDevice *dev);
|
||||
};
|
||||
|
||||
@ -356,6 +358,9 @@ USBDevice *usb_create_simple(USBBus *bus, const char *name);
|
||||
USBDevice *usbdevice_create(const char *cmdline);
|
||||
void usb_register_port(USBBus *bus, USBPort *port, void *opaque, int index,
|
||||
USBPortOps *ops, int speedmask);
|
||||
int usb_register_companion(const char *masterbus, USBPort *ports[],
|
||||
uint32_t portcount, uint32_t firstport,
|
||||
void *opaque, USBPortOps *ops, int speedmask);
|
||||
void usb_port_location(USBPort *downstream, USBPort *upstream, int portnr);
|
||||
void usb_unregister_port(USBBus *bus, USBPort *port);
|
||||
int usb_device_attach(USBDevice *dev);
|
||||
|
Loading…
x
Reference in New Issue
Block a user