From: Gerd Hoffmann <kraxel@redhat.com>
To: qemu-devel@nongnu.org
Cc: Hans de Goede <hdegoede@redhat.com>, Gerd Hoffmann <kraxel@redhat.com>
Subject: [Qemu-devel] [PATCH 02/14] usb-linux: Get the alt. setting from sysfs rather then asking the dev
Date: Wed, 4 May 2011 17:41:36 +0200 [thread overview]
Message-ID: <1304523708-9556-3-git-send-email-kraxel@redhat.com> (raw)
In-Reply-To: <1304523708-9556-1-git-send-email-kraxel@redhat.com>
From: Hans de Goede <hdegoede@redhat.com>
At least one device I have lies when receiving a USB_REQ_GET_INTERFACE,
always returning 0 even if the alternate setting is different. This is
likely caused because in practice this control message is never used as
the operating system's usb stack knows which alternate setting it has
told the device to get into, and thus this ctrl message does not get
tested by device manufacturers.
When usb_fs_type == USB_FS_SYS, the active alt. setting can be read directly
from sysfs, which allows using this device through qemu's usb redirection.
More in general it seems a good idea to not send needless control msg's to
devices, esp. as the code in question is called every time a set_interface
is done. Which happens multiple times during virtual machine startup, and
when device drivers are activating the usb device.
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
usb-linux.c | 18 ++++++++++++++++++
1 files changed, 18 insertions(+), 0 deletions(-)
diff --git a/usb-linux.c b/usb-linux.c
index 353e1b1..f4601e6 100644
--- a/usb-linux.c
+++ b/usb-linux.c
@@ -830,6 +830,24 @@ static uint8_t usb_linux_get_alt_setting(USBHostDevice *s,
struct usb_ctrltransfer ct;
int ret;
+ if (usb_fs_type == USB_FS_SYS) {
+ char device_name[64], line[1024];
+ int alt_setting;
+
+ sprintf(device_name, "%d-%d:%d.%d", s->bus_num, s->devpath,
+ (int)configuration, (int)interface);
+
+ if (!usb_host_read_file(line, sizeof(line), "bAlternateSetting",
+ device_name)) {
+ goto usbdevfs;
+ }
+ if (sscanf(line, "%d", &alt_setting) != 1) {
+ goto usbdevfs;
+ }
+ return alt_setting;
+ }
+
+usbdevfs:
ct.bRequestType = USB_DIR_IN | USB_RECIP_INTERFACE;
ct.bRequest = USB_REQ_GET_INTERFACE;
ct.wValue = 0;
--
1.7.1
next prev parent reply other threads:[~2011-05-04 15:41 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-05-04 15:41 [Qemu-devel] [PULL] usb patch queue Gerd Hoffmann
2011-05-04 15:41 ` [Qemu-devel] [PATCH 01/14] usb-linux: introduce a usb_linux_alt_setting function Gerd Hoffmann
2011-05-04 15:41 ` Gerd Hoffmann [this message]
2011-05-04 15:41 ` [Qemu-devel] [PATCH 03/14] usb-linux: Add support for buffering iso usb packets Gerd Hoffmann
2011-05-04 15:41 ` [Qemu-devel] [PATCH 04/14] usb-linux: Refuse packets for endpoints which are not in the usb descriptor Gerd Hoffmann
2011-05-04 15:41 ` [Qemu-devel] [PATCH 05/14] usb-linux: Refuse iso packets when max packet size is 0 (alt setting 0) Gerd Hoffmann
2011-05-04 15:41 ` [Qemu-devel] [PATCH 06/14] usb-linux: We only need to keep track of 15 endpoints Gerd Hoffmann
2011-05-04 15:41 ` [Qemu-devel] [PATCH 07/14] usb-linux: Add support for buffering iso out usb packets Gerd Hoffmann
2011-05-04 15:41 ` [Qemu-devel] [PATCH 08/14] usb: control buffer fixes Gerd Hoffmann
2011-05-04 15:41 ` [Qemu-devel] [PATCH 09/14] uhci: switch to QTAILQ Gerd Hoffmann
2011-05-04 15:41 ` [Qemu-devel] [PATCH 10/14] uhci: keep uhci state pointer in async packet struct Gerd Hoffmann
2011-05-04 15:41 ` [Qemu-devel] [PATCH 11/14] ohci: get ohci state via container_of() Gerd Hoffmann
2011-05-04 15:41 ` [Qemu-devel] [PATCH 12/14] musb: get musb " Gerd Hoffmann
2011-05-04 15:41 ` [Qemu-devel] [PATCH 13/14] usb: move complete callback to port ops Gerd Hoffmann
2011-05-04 15:41 ` [Qemu-devel] [PATCH 14/14] usb: mass storage fix Gerd Hoffmann
2011-05-05 18:28 ` [Qemu-devel] [PULL] usb patch queue Anthony Liguori
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1304523708-9556-3-git-send-email-kraxel@redhat.com \
--to=kraxel@redhat.com \
--cc=hdegoede@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).