qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH] Implement the function usb_hub_handle_reset
@ 2011-11-22  8:37 hkran
  0 siblings, 0 replies; 6+ messages in thread
From: hkran @ 2011-11-22  8:37 UTC (permalink / raw)
  To: qemu-devel; +Cc: Stefan Hajnoczi, Gerd Hoffmann

Implement the function usb_hub_handle_reset. without it the guest 
propablly fail to configure the usb device attached to the virtulized 
hub with a correct address.

Typically, attaching more than one usb devices when lauch qemu may lead 
to the problem.


Signed-off-by: hkran <hkran@linux.vnet.ibm.com>
---
  hw/usb-hub.c |   13 ++++++++++++-
  1 files changed, 12 insertions(+), 1 deletions(-)

diff --git a/hw/usb-hub.c b/hw/usb-hub.c
index 3eb0f1a..6731075 100644
--- a/hw/usb-hub.c
+++ b/hw/usb-hub.c
@@ -220,7 +220,18 @@ static void usb_hub_complete(USBPort *port, 
USBPacket *packet)

  static void usb_hub_handle_reset(USBDevice *dev)
  {
-    /* XXX: do it */
+    USBHubPort *port = NULL;
+    USBHubState *s = (USBHubState *)dev;
+    int i;
+
+    for(i = 0; i < NUM_PORTS; i++) {
+        port = &(s->ports[i]);
+        if(port->wPortStatus & PORT_STAT_CONNECTION) {
+            usb_reset(&port->port);
+            port->wPortStatus = PORT_STAT_CONNECTION | PORT_STAT_POWER;
+            port->wPortChange = PORT_STAT_C_CONNECTION;
+        }
+    }
  }

  static int usb_hub_handle_control(USBDevice *dev, USBPacket *p,
-- 
1.7.1

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [Qemu-devel] [PATCH] Implement the function usb_hub_handle_reset
@ 2011-11-22  8:52 hkran
  0 siblings, 0 replies; 6+ messages in thread
From: hkran @ 2011-11-22  8:52 UTC (permalink / raw)
  To: qemu-devel; +Cc: hkran, Stefan Hajnoczi, Gerd Hoffmann

Implement the function usb_hub_handle_reset. without it the guest 
propablly fail to configure the usb device attached to the virtulized 
hub with a correct address.

Typically, attaching more than one usb devices when lauch qemu may lead 
to the problem.


Signed-off-by: hkran <hkran@linux.vnet.ibm.com>
---
  hw/usb-hub.c |   13 ++++++++++++-
  1 files changed, 12 insertions(+), 1 deletions(-)

diff --git a/hw/usb-hub.c b/hw/usb-hub.c
index 3eb0f1a..6731075 100644
--- a/hw/usb-hub.c
+++ b/hw/usb-hub.c
@@ -220,7 +220,18 @@ static void usb_hub_complete(USBPort *port, 
USBPacket *packet)

  static void usb_hub_handle_reset(USBDevice *dev)
  {
-    /* XXX: do it */
+    USBHubPort *port = NULL;
+    USBHubState *s = (USBHubState *)dev;
+    int i;
+
+    for(i = 0; i < NUM_PORTS; i++) {
+        port = &(s->ports[i]);
+        if(port->wPortStatus & PORT_STAT_CONNECTION) {
+            usb_reset(&port->port);
+            port->wPortStatus = PORT_STAT_CONNECTION | PORT_STAT_POWER;
+            port->wPortChange = PORT_STAT_C_CONNECTION;
+        }
+    }
  }

  static int usb_hub_handle_control(USBDevice *dev, USBPacket *p,
-- 
1.7.1

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [Qemu-devel] [PATCH] Implement the function usb_hub_handle_reset
@ 2011-11-22  8:58 hkran
  2011-11-22 12:36 ` Gerd Hoffmann
  0 siblings, 1 reply; 6+ messages in thread
From: hkran @ 2011-11-22  8:58 UTC (permalink / raw)
  To: qemu-devel; +Cc: Stefan Hajnoczi, Gerd Hoffmann

Implement the function usb_hub_handle_reset. without it the guest 
propablly fail to configure the usb device attached to the virtulized 
hub with a correct address.

Typically, attaching more than one usb devices when lauch qemu may lead 
to the problem.


Signed-off-by: hkran <hkran@linux.vnet.ibm.com>
---
  hw/usb-hub.c |   13 ++++++++++++-
  1 files changed, 12 insertions(+), 1 deletions(-)

diff --git a/hw/usb-hub.c b/hw/usb-hub.c
index 3eb0f1a..6731075 100644
--- a/hw/usb-hub.c
+++ b/hw/usb-hub.c
@@ -220,7 +220,18 @@ static void usb_hub_complete(USBPort *port, 
USBPacket *packet)

  static void usb_hub_handle_reset(USBDevice *dev)
  {
-    /* XXX: do it */
+    USBHubPort *port = NULL;
+    USBHubState *s = (USBHubState *)dev;
+    int i;
+
+    for(i = 0; i < NUM_PORTS; i++) {
+        port = &(s->ports[i]);
+        if(port->wPortStatus & PORT_STAT_CONNECTION) {
+            usb_reset(&port->port);
+            port->wPortStatus = PORT_STAT_CONNECTION | PORT_STAT_POWER;
+            port->wPortChange = PORT_STAT_C_CONNECTION;
+        }
+    }
  }

  static int usb_hub_handle_control(USBDevice *dev, USBPacket *p,
-- 
1.7.1

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [Qemu-devel] [PATCH] Implement the function usb_hub_handle_reset
@ 2011-11-22  9:08 hkran
  0 siblings, 0 replies; 6+ messages in thread
From: hkran @ 2011-11-22  9:08 UTC (permalink / raw)
  To: qemu-devel; +Cc: stefanha


Implement the function usb_hub_handle_reset. without it the guest  
propablly fail to configure the usb device attached to the virtulized  
hub with a correct address.

Typically, attaching more than one usb devices when lauch qemu may  
lead to the problem.


Signed-off-by: hkran <hkran@linux.vnet.ibm.com>
---
  hw/usb-hub.c |   13 ++++++++++++-
  1 files changed, 12 insertions(+), 1 deletions(-)

diff --git a/hw/usb-hub.c b/hw/usb-hub.c
index 3eb0f1a..6731075 100644
--- a/hw/usb-hub.c
+++ b/hw/usb-hub.c
@@ -220,7 +220,18 @@ static void usb_hub_complete(USBPort *port,  
USBPacket *packet)

  static void usb_hub_handle_reset(USBDevice *dev)
  {
-    /* XXX: do it */
+    USBHubPort *port = NULL;
+    USBHubState *s = (USBHubState *)dev;
+    int i;
+
+    for(i = 0; i < NUM_PORTS; i++) {
+        port = &(s->ports[i]);
+        if(port->wPortStatus & PORT_STAT_CONNECTION) {
+            usb_reset(&port->port);
+            port->wPortStatus = PORT_STAT_CONNECTION | PORT_STAT_POWER;
+            port->wPortChange = PORT_STAT_C_CONNECTION;
+        }
+    }
  }

  static int usb_hub_handle_control(USBDevice *dev, USBPacket *p,
-- 
1.7.1

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [Qemu-devel] [PATCH] Implement the function usb_hub_handle_reset
  2011-11-22  8:58 hkran
@ 2011-11-22 12:36 ` Gerd Hoffmann
  2011-11-23  3:16   ` hkran
  0 siblings, 1 reply; 6+ messages in thread
From: Gerd Hoffmann @ 2011-11-22 12:36 UTC (permalink / raw)
  To: hkran; +Cc: qemu-devel, Stefan Hajnoczi

On 11/22/11 09:58, hkran wrote:
> Implement the function usb_hub_handle_reset. without it the guest
> propablly fail to configure the usb device attached to the virtulized
> hub with a correct address.
> 
> Typically, attaching more than one usb devices when lauch qemu may lead
> to the problem.

What is the exact problem you are trying to fix?

cheers,
  Gerd

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Qemu-devel] [PATCH] Implement the function usb_hub_handle_reset
  2011-11-22 12:36 ` Gerd Hoffmann
@ 2011-11-23  3:16   ` hkran
  0 siblings, 0 replies; 6+ messages in thread
From: hkran @ 2011-11-23  3:16 UTC (permalink / raw)
  To: Gerd Hoffmann; +Cc: qemu-devel, Stefan Hajnoczi

On 11/22/2011 08:36 PM, Gerd Hoffmann wrote:
> On 11/22/11 09:58, hkran wrote:
>> Implement the function usb_hub_handle_reset. without it the guest
>> propablly fail to configure the usb device attached to the virtulized
>> hub with a correct address.
>>
>> Typically, attaching more than one usb devices when lauch qemu may lead
>> to the problem.
> What is the exact problem you are trying to fix?
>
> cheers,
>    Gerd
>
>
For example, I use the following command line to lautch qemu to play win7

  /home/huikai/qemu10/bin/qemu-system-x86_64 -enable-kvm -m 1024 -drive  
file=/root/win7_86.img,if=ide  -net user  -net  nic,model=rtl8139 
-localtime -chardev stdio,id=muxstdio -mon  chardev=muxstdio -usb 
-usbdevice tablet -spice port=2345,disable-ticketing -cdrom 
/home/guest/Fedora-15-i686-Live-Desktop.iso -boot once=d -usbdevice 
host:0000:7777

Here, I attatched two usbdevice tablet and a usb storage device 
"host:0000:7777" on the host side. After guest have booted.there will 
not see the usb storage device.
using monitor cmd "info usb" found the below:

  (qemu) info usb
   Device 0.1, Port 1, Speed 12 Mb/s, Product QEMU USB Tablet
   Device 0.3, Port 2, Speed 12 Mb/s, Product QEMU USB Hub
   Device 0.3, Port 2.1, Speed 480 Mb/s, Product host:2.4

the device "host:0000:7777" have not been configured successfully, guest 
OS can not to see it.

I traced qemu and found that there will be several reset cmd issued by 
the guest usb protocol stack during win7 booting, if we left the 
hub_reset to do nothing, the usbdevice attached to it will fail to be 
configured just in above case.
(If we "hot plug-in " a usb device via qemu's monitor, the problem is 
not so easy to be reproduced because the reset cmd only be issued only 
once or none)

(the problem is not always reproduced, but high possibility).

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2011-11-23  3:17 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-11-22  8:52 [Qemu-devel] [PATCH] Implement the function usb_hub_handle_reset hkran
  -- strict thread matches above, loose matches on Subject: below --
2011-11-22  9:08 hkran
2011-11-22  8:58 hkran
2011-11-22 12:36 ` Gerd Hoffmann
2011-11-23  3:16   ` hkran
2011-11-22  8:37 hkran

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).