1. 08 May, 2011 8 commits
  2. 05 May, 2011 17 commits
  3. 04 May, 2011 14 commits
    • Gerd Hoffmann's avatar
      usb: mass storage fix · ef0bdf77
      Gerd Hoffmann authored
      
      
      Initialize scsi_len with zero when starting a new request, so any
      stuff leftover from the previous request is cleared out.  This may
      happen in case the data returned by the scsi command doesn't fit
      into the buffer provided by the guest.
      Signed-off-by: default avatarGerd Hoffmann <kraxel@redhat.com>
      ef0bdf77
    • Gerd Hoffmann's avatar
      usb: move complete callback to port ops · 13a9a0d3
      Gerd Hoffmann authored
      13a9a0d3
    • Gerd Hoffmann's avatar
      musb: get musb state via container_of() · 5dc1672b
      Gerd Hoffmann authored
      5dc1672b
    • Gerd Hoffmann's avatar
      ohci: get ohci state via container_of() · 9066df13
      Gerd Hoffmann authored
      
      Signed-off-by: default avatarGerd Hoffmann <kraxel@redhat.com>
      9066df13
    • Gerd Hoffmann's avatar
      7b5a44c5
    • Gerd Hoffmann's avatar
      uhci: switch to QTAILQ · ddf6583f
      Gerd Hoffmann authored
      ddf6583f
    • Hans de Goede's avatar
      usb: control buffer fixes · 19f33223
      Hans de Goede authored
      
      
      Windows allows control transfers to pass up to 4k of data, so raise our
      control buffer size to 4k. For control out transfers the usb core code copies
      the control request data to a buffer before calling the device's handle_control
      callback. Add a check for overflowing the buffer before copying the data.
      Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
      19f33223
    • Hans de Goede's avatar
      usb-linux: Add support for buffering iso out usb packets · bb6d5498
      Hans de Goede authored
      
      
      Extend the iso buffering code to also buffer iso out packets, this
      fixes for example using usb speakers with usb redirection.
      Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
      bb6d5498
    • Hans de Goede's avatar
      usb-linux: We only need to keep track of 15 endpoints · 3a4854b3
      Hans de Goede authored
      
      
      Currently we reserve room for endpoint data for 16 endpoints, but given
      that we only use endpoint data for endpoints 1-15, and always index the
      array with the endpoint-number - 1, 15 is enough.
      Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
      3a4854b3
    • Hans de Goede's avatar
      usb-linux: Refuse iso packets when max packet size is 0 (alt setting 0) · 975f2998
      Hans de Goede authored
      Refuse iso usb packets when then max packet size for the endpoint is 0,
      this avoids an abort in usb_host_alloc_iso() caused by trying to qemu_malloc
      a 0 bytes large buffer.
      975f2998
    • Hans de Goede's avatar
      usb-linux: Refuse packets for endpoints which are not in the usb descriptor · a0b5fece
      Hans de Goede authored
      
      
      If an endpoint is not in the usb descriptor we've no idea what kind of
      endpoint it is and thus how to handle it, refuse packages in this case.
      Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
      a0b5fece
    • Hans de Goede's avatar
      usb-linux: Add support for buffering iso usb packets · 060dc841
      Hans de Goede authored
      
      
      Currently we are submitting iso packets to the host one at a time, as we
      receive them from the emulated host controller. This has 2 problems:
      1) If we were fast enough to submit every packet in time for the next host host
      controller usb frame, we would be generating 1000 hardware interrupts per
      second on the host
      2) We are not fast enough to submit every packet in time for the next host host
      controller usb frame, causing us to not submit iso urbs in some usb frames
      which causes devices with an endpoint with an interval of 1 ms (so every
      frame) to loose data. This causes for example ubs-1.1 webcams to not work
      properly (usb-2.0 is not supported at all atm).
      
      This patch fixes both problems by changing the iso packet pass through handling
      to buffer packets. This version only does so for iso input packets (webcams,
      audio in) I'm working on a second patch extending this to iso output packets
      (audio out).
      
      This patch makes use of the linux batching of iso packets in one urb.
      When an iso in packet gets received from the emulated host controller,
      it immediately submits 3 urbs with 32 iso in packets each. This causes
      the host to only get an hw interrupt every 32 packets dropping the
      interrupt rate to 32 interrupts per second and gives it a queue of urbs
      to work from once the first 32 iso in packets have been received to make sure
      no packets are dropped.
      
      Besides submitting a whole bunch or urbs as soon as the first urb is
      received, effectively creating a buffer inside the kernel, this patch also
      gets rid of the asynchroneous completion for iso in urbs. Instead they are
      only marked as complete in the fd write callback (which usbfs uses to signal
      complete urbs). These complete packets then get consumed by returning them
      synchroneously to the emulated host controller when it submits an iso in
      packet for the ep in question. When no complete packets are ready (which
      happens when the stream is starting) a 0 length packet gets returned to
      the emulated host controller.
      
      With this patch I've several usb-1.1 webcams working well with usb pass
      through, where as without this patch none of them work.
      Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
      060dc841
    • Hans de Goede's avatar
      usb-linux: Get the alt. setting from sysfs rather then asking the dev · c43831fb
      Hans de Goede authored
      
      
      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: default avatarHans de Goede <hdegoede@redhat.com>
      c43831fb
    • Hans de Goede's avatar
      usb-linux: introduce a usb_linux_alt_setting function · ed3a328d
      Hans de Goede authored
      
      
      The next patch in this series introduces multiple ways to get the
      alt setting dependent upon usb_fs_type, it is cleaner to put this
      into its own function.
      
      Note that this patch also changes the assumed alt setting in case
      of an error getting the alt setting to be 0 (a sane default) rather
      then the interface numberwhich makes no sense.
      Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
      ed3a328d
  4. 03 May, 2011 1 commit