[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 05/25] usb-hub: implement find_device
From: |
Gerd Hoffmann |
Subject: |
[Qemu-devel] [PATCH 05/25] usb-hub: implement find_device |
Date: |
Mon, 23 Jan 2012 15:54:51 +0100 |
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 <address@hidden>
---
hw/usb-hub.c | 21 +++++++++++++++++++++
1 files changed, 21 insertions(+), 0 deletions(-)
diff --git a/hw/usb-hub.c b/hw/usb-hub.c
index d83cfb5..c9f30d9 100644
--- a/hw/usb-hub.c
+++ b/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);
}
+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)
{
USBHubState *s = DO_UPCAST(USBHubState, dev, dev);
@@ -541,6 +561,7 @@ static struct USBDeviceInfo hub_info = {
.qdev.vmsd = &vmstate_usb_hub,
.usb_desc = &desc_hub,
.init = usb_hub_initfn,
+ .find_device = usb_hub_find_device,
.handle_packet = usb_hub_handle_packet,
.handle_reset = usb_hub_handle_reset,
.handle_control = usb_hub_handle_control,
--
1.7.1
- [Qemu-devel] [PATCH 00/25] *** SUBJECT HERE ***, Gerd Hoffmann, 2012/01/23
- [Qemu-devel] [PATCH 01/25] usb: kill USB_MSG_{ATTACH,DETACH}, Gerd Hoffmann, 2012/01/23
- [Qemu-devel] [PATCH 04/25] usb: add usb_find_device(), Gerd Hoffmann, 2012/01/23
- [Qemu-devel] [PATCH 02/25] usb: kill USB_MSG_RESET, Gerd Hoffmann, 2012/01/23
- [Qemu-devel] [PATCH 07/25] usb-uhci: switch to usb_find_device(), Gerd Hoffmann, 2012/01/23
- [Qemu-devel] [PATCH 13/25] usb: fold usb_generic_handle_packet into usb_handle_packet, Gerd Hoffmann, 2012/01/23
- [Qemu-devel] [PATCH 03/25] usb: kill usb_send_msg, Gerd Hoffmann, 2012/01/23
- [Qemu-devel] [PATCH 11/25] usb-xhci: switch to usb_find_device(), Gerd Hoffmann, 2012/01/23
- [Qemu-devel] [PATCH 05/25] usb-hub: implement find_device,
Gerd Hoffmann <=
- [Qemu-devel] [PATCH 12/25] usb: kill handle_packet callback, Gerd Hoffmann, 2012/01/23
- [Qemu-devel] [PATCH 09/25] usb-ohci: switch to usb_find_device(), Gerd Hoffmann, 2012/01/23
- [Qemu-devel] [PATCH 14/25] usb: USBPacket: add status, rename owner -> ep, Gerd Hoffmann, 2012/01/23
- [Qemu-devel] [PATCH 06/25] usb: handle dev == NULL in usb_handle_packet(), Gerd Hoffmann, 2012/01/23
- [Qemu-devel] [PATCH 20/25] xhci: signal low- and fullspeed support, Gerd Hoffmann, 2012/01/23
- [Qemu-devel] [PATCH 08/25] usb-ehci: switch to usb_find_device(), Gerd Hoffmann, 2012/01/23
- [Qemu-devel] [PATCH 10/25] usb-musb: switch to usb_find_device(), Gerd Hoffmann, 2012/01/23
- [Qemu-devel] [PATCH 22/25] xhci: stop on errors, Gerd Hoffmann, 2012/01/23
- [Qemu-devel] [PATCH 23/25] xhci: kill port arg from xhci_setup_packet, Gerd Hoffmann, 2012/01/23
- [Qemu-devel] [PATCH 19/25] usb: add USBBusOps->wakeup_endpoint, Gerd Hoffmann, 2012/01/23