diff options
author | Gerd Hoffmann <kraxel@redhat.com> | 2010-12-15 12:26:59 +0100 |
---|---|---|
committer | Gerd Hoffmann <kraxel@redhat.com> | 2011-01-11 17:01:02 +0100 |
commit | 34239c7bc972735391ca84283f8c8ad908dc61ef (patch) | |
tree | c6c7844b403cc01e301f2d31cc085aae00f249dc /hw/usb-hub.c | |
parent | 9159f6798ebfe0cdcfd1d1fb91c2c08b6d95954a (diff) |
usb: hub: remote wakeup support.
This patch makes the usb hub handle remote wakeup requests from devices
properly by updating the port status register and forwarding the wakeup
to the upstream port.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Diffstat (limited to 'hw/usb-hub.c')
-rw-r--r-- | hw/usb-hub.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/hw/usb-hub.c b/hw/usb-hub.c index 8837bd9efe..8a80151da2 100644 --- a/hw/usb-hub.c +++ b/hw/usb-hub.c @@ -245,6 +245,17 @@ static void usb_hub_detach(USBPort *port1) } } +static void usb_hub_wakeup(USBDevice *dev) +{ + USBHubState *s = dev->port->opaque; + USBHubPort *port = &s->ports[dev->port->index]; + + if (port->wPortStatus & PORT_STAT_SUSPEND) { + port->wPortChange |= PORT_STAT_C_SUSPEND; + usb_wakeup(&s->dev); + } +} + static void usb_hub_handle_reset(USBDevice *dev) { /* XXX: do it */ @@ -502,6 +513,7 @@ static void usb_hub_handle_destroy(USBDevice *dev) static USBPortOps usb_hub_port_ops = { .attach = usb_hub_attach, .detach = usb_hub_detach, + .wakeup = usb_hub_wakeup, }; static int usb_hub_initfn(USBDevice *dev) |