qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 1/3] usb-hub: wakeup on attach


From: hkran
Subject: Re: [Qemu-devel] [PATCH 1/3] usb-hub: wakeup on attach
Date: Thu, 10 Nov 2011 11:45:23 +0800
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.18) Gecko/20110617 Red Hat/3.1.11-2.el6_1 Thunderbird/3.1.11

On 11/01/2011 10:56 PM, Gerd Hoffmann wrote:
When attaching a new device we must send a wakeup request to the root
hub, otherwise the guest will not notice the new device in case the
usb hub is suspended.

Signed-off-by: Gerd Hoffmann<address@hidden>
---
  hw/usb-hub.c |    1 +
  1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/hw/usb-hub.c b/hw/usb-hub.c
index 09c6516..7b47079 100644
--- a/hw/usb-hub.c
+++ b/hw/usb-hub.c
@@ -163,6 +163,7 @@ static void usb_hub_attach(USBPort *port1)
      } else {
          port->wPortStatus&= ~PORT_STAT_LOW_SPEED;
      }
+    usb_wakeup(&s->dev);
  }

  static void usb_hub_detach(USBPort *port1)
It seems "attach" works. But the "detach" did not work.
I added over two usbdevice "tablet" and usb_del them. I found sometimes the guest did not know that the tablet had been deleted in host when the port
's status changed to "suspend".

After I add usb_wake like this in the function usb_hub_detach. the problem can be fixed.

static void usb_hub_detach(USBPort *port1)
{
    USBHubState *s = port1->opaque;
    USBHubPort *port = &s->ports[port1->index];

usb_wakeup(&s->dev); ---------------------------------->wakeup when detach
    /* Let upstream know the device on this port is gone */
    s->dev.port->ops->child_detach(s->dev.port, port1->dev);

    port->wPortStatus &= ~PORT_STAT_CONNECTION;
    port->wPortChange |= PORT_STAT_C_CONNECTION;
    if (port->wPortStatus & PORT_STAT_ENABLE) {
        port->wPortStatus &= ~PORT_STAT_ENABLE;
        port->wPortChange |= PORT_STAT_C_ENABLE;
    }
}




reply via email to

[Prev in Thread] Current Thread [Next in Thread]