[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 02/14] usb-linux: Get speed from sysfs rather then f
From: |
Hans de Goede |
Subject: |
[Qemu-devel] [PATCH 02/14] usb-linux: Get speed from sysfs rather then from the connectinfo ioctl |
Date: |
Tue, 31 May 2011 11:35:18 +0200 |
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.
---
usb-linux.c | 37 +++++++++++++++++++++----------------
1 files changed, 21 insertions(+), 16 deletions(-)
diff --git a/usb-linux.c b/usb-linux.c
index ea3ab5f..db28762 100644
--- a/usb-linux.c
+++ b/usb-linux.c
@@ -1053,10 +1053,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) {
@@ -1111,24 +1110,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),
@@ -1342,7 +1346,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;
@@ -1652,7 +1657,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.5.1
- [Qemu-devel] [PATCH 00/14] usb: various usb fixes, Hans de Goede, 2011/05/31
- [Qemu-devel] [PATCH 01/14] usb-linux: Set usb_auto_timer to NULL after deleting it, Hans de Goede, 2011/05/31
- [Qemu-devel] [PATCH 02/14] usb-linux: Get speed from sysfs rather then from the connectinfo ioctl,
Hans de Goede <=
- [Qemu-devel] [PATCH 04/14] usb-linux: Don't do perror when errno is not set, Hans de Goede, 2011/05/31
- [Qemu-devel] [PATCH 05/14] usb-linux: Don't call usb_host_close when usb_host_open fails, Hans de Goede, 2011/05/31
- [Qemu-devel] [PATCH 06/14] usb-linux: Ensure devep != 0, Hans de Goede, 2011/05/31
- [Qemu-devel] [PATCH 03/14] usb-linux: Teach about super speed, Hans de Goede, 2011/05/31
- [Qemu-devel] [PATCH 07/14] usb-linux: If opening a device fails remove it from our filter list, Hans de Goede, 2011/05/31
- [Qemu-devel] [PATCH 08/14] usb-linux: Don't try to open the same device twice, Hans de Goede, 2011/05/31
- [Qemu-devel] [PATCH 10/14] usb-linux: Enlarge buffer for descriptors to 8192 bytes, Hans de Goede, 2011/05/31
- [Qemu-devel] [PATCH 09/14] usb-linux: Don't declare a usbdevice_name, Hans de Goede, 2011/05/31
- [Qemu-devel] [PATCH 11/14] usb-bus: Add knowledge of USB_SPEED_SUPER to usb_speed helper, Hans de Goede, 2011/05/31
- [Qemu-devel] [PATCH 12/14] usb-bus: Don't allow attaching a device to a bus with no free ports, Hans de Goede, 2011/05/31