summaryrefslogtreecommitdiff
path: root/usb-linux.c
diff options
context:
space:
mode:
authorHans de Goede <hdegoede@redhat.com>2010-11-10 10:06:24 +0100
committerAnthony Liguori <aliguori@us.ibm.com>2010-11-16 14:35:00 -0600
commit71d71bbdeb39544ac1602c5e307d9e14c78f9d5d (patch)
treef489530527ccfc4f52fa72074db6a228b0454df1 /usb-linux.c
parent0f5160d1ea8bcd69d539f8a87a1b350d98fa5d52 (diff)
downloadqemu-71d71bbdeb39544ac1602c5e307d9e14c78f9d5d.tar.gz
usb-linux: introduce a usb_linux_get_configuration function
The next patch in this series introduces multiple ways to get the configuration dependent upon usb_fs_type, it is cleaner to put this into its own function. Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Diffstat (limited to 'usb-linux.c')
-rw-r--r--usb-linux.c30
1 files changed, 22 insertions, 8 deletions
diff --git a/usb-linux.c b/usb-linux.c
index 0b154c238f..111fe1c788 100644
--- a/usb-linux.c
+++ b/usb-linux.c
@@ -775,13 +775,11 @@ static int usb_host_handle_packet(USBDevice *s, USBPacket *p)
}
}
-/* returns 1 on problem encountered or 0 for success */
-static int usb_linux_update_endp_table(USBHostDevice *s)
+static int usb_linux_get_configuration(USBHostDevice *s)
{
- uint8_t *descriptors;
- uint8_t devep, type, configuration, alt_interface;
+ uint8_t configuration;
struct usb_ctrltransfer ct;
- int interface, ret, length, i;
+ int ret;
ct.bRequestType = USB_DIR_IN;
ct.bRequest = USB_REQ_GET_CONFIGURATION;
@@ -793,15 +791,31 @@ static int usb_linux_update_endp_table(USBHostDevice *s)
ret = ioctl(s->fd, USBDEVFS_CONTROL, &ct);
if (ret < 0) {
- perror("usb_linux_update_endp_table");
- return 1;
+ perror("usb_linux_get_configuration");
+ return -1;
}
/* in address state */
if (configuration == 0) {
- return 1;
+ return -1;
}
+ return configuration;
+}
+
+/* returns 1 on problem encountered or 0 for success */
+static int usb_linux_update_endp_table(USBHostDevice *s)
+{
+ uint8_t *descriptors;
+ uint8_t devep, type, configuration, alt_interface;
+ struct usb_ctrltransfer ct;
+ int interface, ret, length, i;
+
+ i = usb_linux_get_configuration(s);
+ if (i < 0)
+ return 1;
+ configuration = i;
+
/* get the desired configuration, interface, and endpoint descriptors
* from device description */
descriptors = &s->descr[18];