diff options
Diffstat (limited to 'hw/usb/host-libusb.c')
-rw-r--r-- | hw/usb/host-libusb.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/hw/usb/host-libusb.c b/hw/usb/host-libusb.c index b950501d10..7dde3d1206 100644 --- a/hw/usb/host-libusb.c +++ b/hw/usb/host-libusb.c @@ -179,6 +179,9 @@ static void usb_host_attach_kernel(USBHostDevice *s); #if LIBUSB_API_VERSION >= 0x01000103 # define HAVE_STREAMS 1 #endif +#if LIBUSB_API_VERSION >= 0x01000106 +# define HAVE_SUPER_PLUS 1 +#endif static const char *speed_name[] = { [LIBUSB_SPEED_UNKNOWN] = "?", @@ -186,6 +189,9 @@ static const char *speed_name[] = { [LIBUSB_SPEED_FULL] = "12", [LIBUSB_SPEED_HIGH] = "480", [LIBUSB_SPEED_SUPER] = "5000", +#ifdef HAVE_SUPER_PLUS + [LIBUSB_SPEED_SUPER_PLUS] = "5000+", +#endif }; static const unsigned int speed_map[] = { @@ -193,6 +199,9 @@ static const unsigned int speed_map[] = { [LIBUSB_SPEED_FULL] = USB_SPEED_FULL, [LIBUSB_SPEED_HIGH] = USB_SPEED_HIGH, [LIBUSB_SPEED_SUPER] = USB_SPEED_SUPER, +#ifdef HAVE_SUPER_PLUS + [LIBUSB_SPEED_SUPER_PLUS] = USB_SPEED_SUPER, +#endif }; static const unsigned int status_map[] = { @@ -941,7 +950,8 @@ static int usb_host_open(USBHostDevice *s, libusb_device *dev, int hostfd) usb_host_ep_update(s); libusb_speed = libusb_get_device_speed(dev); -#if LIBUSB_API_VERSION >= 0x01000107 && defined(CONFIG_LINUX) +#if LIBUSB_API_VERSION >= 0x01000107 && defined(CONFIG_LINUX) && \ + defined(USBDEVFS_GET_SPEED) if (hostfd && libusb_speed == 0) { /* * Workaround libusb bug: libusb_get_device_speed() does not @@ -963,8 +973,14 @@ static int usb_host_open(USBHostDevice *s, libusb_device *dev, int hostfd) libusb_speed = LIBUSB_SPEED_HIGH; break; case 5: /* super */ + libusb_speed = LIBUSB_SPEED_SUPER; + break; case 6: /* super plus */ +#ifdef HAVE_SUPER_PLUS + libusb_speed = LIBUSB_SPEED_SUPER_PLUS; +#else libusb_speed = LIBUSB_SPEED_SUPER; +#endif break; } } |