usb-host: fix usb3ep0quirk test
authorGerd Hoffmann <kraxel@redhat.com>
Fri, 23 Oct 2015 12:27:10 +0000 (14:27 +0200)
committerGerd Hoffmann <kraxel@redhat.com>
Tue, 3 Nov 2015 10:56:23 +0000 (11:56 +0100)
usb->speed is the usb speed the device is actually running on in the
qemu emulation (i.e. from the guests point of view).  So when plugging
usb3 devices into ehci hostadapter this is HIGH not SUPER.

To figure whenever the host talks to the device with superspeed we
have to check speedmask instead and see whenever the superspeed bit
is set there.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Message-id: 1445603230-11840-1-git-send-email-kraxel@redhat.com

hw/usb/host-libusb.c

index 7695a97143e0ccab5799acd7f9fae3b4a48493ff..3f8e540bd2959185de396b580f476e382b90817a 100644 (file)
@@ -1240,7 +1240,7 @@ static void usb_host_handle_control(USBDevice *udev, USBPacket *p,
 
     /* Fix up USB-3 ep0 maxpacket size to allow superspeed connected devices
      * to work redirected to a not superspeed capable hcd */
-    if (udev->speed == USB_SPEED_SUPER &&
+    if ((udev->speedmask & USB_SPEED_MASK_SUPER) &&
         !(udev->port->speedmask & USB_SPEED_MASK_SUPER) &&
         request == 0x8006 && value == 0x100 && index == 0) {
         r->usb3ep0quirk = true;