[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 19/31] usb-linux: Get speed from sysfs rather then f
From: |
Gerd Hoffmann |
Subject: |
[Qemu-devel] [PATCH 19/31] usb-linux: Get speed from sysfs rather then from the connectinfo ioctl |
Date: |
Mon, 6 Jun 2011 14:39:10 +0200 |
From: Hans de Goede <address@hidden>
The connectinfo ioctl only differentiates between lo speed devices, and
all other speeds, where as we would like to know the real speed. The real
speed is available in sysfs so use that when available.
Signed-off-by: Gerd Hoffmann <address@hidden>
---
usb-linux.c | 37 +++++++++++++++++++++----------------
1 files changed, 21 insertions(+), 16 deletions(-)
diff --git a/usb-linux.c b/usb-linux.c
index b195e38..32e6ecb 100644
--- a/usb-linux.c
+++ b/usb-linux.c
@@ -1057,10 +1057,9 @@ static int usb_linux_update_endp_table(USBHostDevice *s)
}
static int usb_host_open(USBHostDevice *dev, int bus_num,
- int addr, char *port, const char *prod_name)
+ int addr, char *port, const char *prod_name, int speed)
{
int fd = -1, ret;
- struct usbdevfs_connectinfo ci;
char buf[1024];
if (dev->fd != -1) {
@@ -1115,24 +1114,29 @@ static int usb_host_open(USBHostDevice *dev, int
bus_num,
goto fail;
}
- ret = ioctl(fd, USBDEVFS_CONNECTINFO, &ci);
- if (ret < 0) {
- perror("usb_host_device_open: USBDEVFS_CONNECTINFO");
- goto fail;
- }
-
- printf("husb: grabbed usb device %d.%d\n", bus_num, addr);
-
ret = usb_linux_update_endp_table(dev);
if (ret) {
goto fail;
}
- if (ci.slow) {
- dev->dev.speed = USB_SPEED_LOW;
- } else {
- dev->dev.speed = USB_SPEED_HIGH;
+ if (speed == -1) {
+ struct usbdevfs_connectinfo ci;
+
+ ret = ioctl(fd, USBDEVFS_CONNECTINFO, &ci);
+ if (ret < 0) {
+ perror("usb_host_device_open: USBDEVFS_CONNECTINFO");
+ goto fail;
+ }
+
+ if (ci.slow) {
+ speed = USB_SPEED_LOW;
+ } else {
+ speed = USB_SPEED_HIGH;
+ }
}
+ dev->dev.speed = speed;
+
+ printf("husb: grabbed usb device %d.%d\n", bus_num, addr);
if (!prod_name || prod_name[0] == '\0') {
snprintf(dev->dev.product_desc, sizeof(dev->dev.product_desc),
@@ -1346,7 +1350,8 @@ static int usb_host_scan_dev(void *opaque, USBScanFunc
*func)
}
device_count = 0;
- bus_num = addr = speed = class_id = product_id = vendor_id = 0;
+ bus_num = addr = class_id = product_id = vendor_id = 0;
+ speed = -1; /* Can't get the speed from /[proc|dev]/bus/usb/devices */
for(;;) {
if (fgets(line, sizeof(line), f) == NULL) {
break;
@@ -1656,7 +1661,7 @@ static int usb_host_auto_scan(void *opaque, int bus_num,
int addr, char *port,
}
DPRINTF("husb: auto open: bus_num %d addr %d\n", bus_num, addr);
- usb_host_open(s, bus_num, addr, port, product_name);
+ usb_host_open(s, bus_num, addr, port, product_name, speed);
}
return 0;
--
1.7.1
- Re: [Qemu-devel] [PATCH 13/31] usb-ehci: drop EXECUTING checks., (continued)
- [Qemu-devel] [PATCH 12/31] usb: cancel async packets on unplug, Gerd Hoffmann, 2011/06/06
- [Qemu-devel] [PATCH 06/31] usb-ehci: trace buffer copy, Gerd Hoffmann, 2011/06/06
- [Qemu-devel] [PATCH 09/31] usb-ehci: fix offset writeback in ehci_buffer_rw, Gerd Hoffmann, 2011/06/06
- [Qemu-devel] [PATCH 10/31] usb-ehci: fix error handling., Gerd Hoffmann, 2011/06/06
- [Qemu-devel] [PATCH 05/31] usb-ehci: improve mmio tracing, Gerd Hoffmann, 2011/06/06
- [Qemu-devel] [PATCH 08/31] usb-ehci: multiqueue support, Gerd Hoffmann, 2011/06/06
- [Qemu-devel] [PATCH 18/31] usb: documentation update, Gerd Hoffmann, 2011/06/06
- [Qemu-devel] [PATCH 19/31] usb-linux: Get speed from sysfs rather then from the connectinfo ioctl,
Gerd Hoffmann <=
- [Qemu-devel] [PATCH 07/31] usb-ehci: add queue data struct, Gerd Hoffmann, 2011/06/06
- [Qemu-devel] [PATCH 23/31] usb-linux: Don't try to open the same device twice, Gerd Hoffmann, 2011/06/06
- [Qemu-devel] [PATCH 22/31] usb-linux: Ensure devep != 0, Gerd Hoffmann, 2011/06/06
- [Qemu-devel] [PATCH 21/31] usb-linux: Don't do perror when errno is not set, Gerd Hoffmann, 2011/06/06
- [Qemu-devel] [PATCH 20/31] usb-linux: Teach about super speed, Gerd Hoffmann, 2011/06/06
- [Qemu-devel] [PATCH 16/31] usb-ehci: itd handling fixes., Gerd Hoffmann, 2011/06/06
- [Qemu-devel] [PATCH 25/31] usb: don't call usb_host_device_open from vl.c, Gerd Hoffmann, 2011/06/06
- [Qemu-devel] [PATCH 28/31] usb-bus: Don't detach non attached devices on device exit, Gerd Hoffmann, 2011/06/06
- [Qemu-devel] [PATCH 24/31] usb-linux: only cleanup in host_close when host_open was successful., Gerd Hoffmann, 2011/06/06
- [Qemu-devel] [PATCH 27/31] usb-bus: Add knowledge of USB_SPEED_SUPER to usb_speed helper, Gerd Hoffmann, 2011/06/06