mirror of https://gitee.com/openkylin/qemu.git
usb-hub: implement find_device
Implement the find_device callback for the usb hub. It'll loop over all ports, calling usb_find_device for all enabled ports until it finds a matching device. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
parent
73796fe622
commit
06c750888c
21
hw/usb-hub.c
21
hw/usb-hub.c
|
@ -220,6 +220,26 @@ static void usb_hub_complete(USBPort *port, USBPacket *packet)
|
||||||
s->dev.port->ops->complete(s->dev.port, packet);
|
s->dev.port->ops->complete(s->dev.port, packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static USBDevice *usb_hub_find_device(USBDevice *dev, uint8_t addr)
|
||||||
|
{
|
||||||
|
USBHubState *s = DO_UPCAST(USBHubState, dev, dev);
|
||||||
|
USBHubPort *port;
|
||||||
|
USBDevice *downstream;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < NUM_PORTS; i++) {
|
||||||
|
port = &s->ports[i];
|
||||||
|
if (!(port->wPortStatus & PORT_STAT_ENABLE)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
downstream = usb_find_device(&port->port, addr);
|
||||||
|
if (downstream != NULL) {
|
||||||
|
return downstream;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
static void usb_hub_handle_reset(USBDevice *dev)
|
static void usb_hub_handle_reset(USBDevice *dev)
|
||||||
{
|
{
|
||||||
USBHubState *s = DO_UPCAST(USBHubState, dev, dev);
|
USBHubState *s = DO_UPCAST(USBHubState, dev, dev);
|
||||||
|
@ -541,6 +561,7 @@ static void usb_hub_class_initfn(ObjectClass *klass, void *data)
|
||||||
uc->init = usb_hub_initfn;
|
uc->init = usb_hub_initfn;
|
||||||
uc->product_desc = "QEMU USB Hub";
|
uc->product_desc = "QEMU USB Hub";
|
||||||
uc->usb_desc = &desc_hub;
|
uc->usb_desc = &desc_hub;
|
||||||
|
uc->find_device = usb_hub_find_device;
|
||||||
uc->handle_packet = usb_hub_handle_packet;
|
uc->handle_packet = usb_hub_handle_packet;
|
||||||
uc->handle_reset = usb_hub_handle_reset;
|
uc->handle_reset = usb_hub_handle_reset;
|
||||||
uc->handle_control = usb_hub_handle_control;
|
uc->handle_control = usb_hub_handle_control;
|
||||||
|
|
Loading…
Reference in New Issue