aboutsummaryrefslogtreecommitdiff
path: root/hw/usb
AgeCommit message (Collapse)Author
2012-10-11net: fix usbnet_receive() packet dropsStefan Hajnoczi
The USB network interface has a single buffer which the guest reads from. This patch prevents multiple calls to usbnet_receive() from clobbering the input buffer. Instead we queue packets until buffer space becomes available again. This is inspired by virtio-net and e1000 rxbuf handling. Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com> (cherry picked from commit 190563f9a90c9df8ad32fc7f3e4b166deda949a6) Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
2012-10-11net: clean up usbnet_receive()Stefan Hajnoczi
The USB network interface has two code paths depending on whether or not RNDIS mode is enabled. Refactor usbnet_receive() so that there is a common path throughout the function instead of duplicating everything across if (is_rndis(s)) ... else ... code paths. Clean up coding style and 80 character line wrap along the way. Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com> (cherry picked from commit f237ddbb89142c6948a2257c459e49dee7500a7c) Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
2012-10-11uhci: Don't queue up packets after one with the SPD flag setHans de Goede
Don't queue up packets after a packet with the SPD (short packet detect) flag set. Since we won't know if the packet will actually be short until it has completed, and if it is short we should stop the queue. This fixes a miniature photoframe emulating a USB cdrom with the windows software for it not working. Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> (cherry picked from commit 72a04d0c178f01908d74539230d9de64ffc6da19) Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
2012-10-11usb-redir: Revert usb-redir part of commit 93bfef4cHans de Goede
Commit 93bfef4c6e4b23caea9d51e1099d06433d8835a4 makes qemu-devices which report the qemu version string to the guest in some way use a qemu_get_version function which reports a machine-specific version string. However usb-redir does not expose the qemu version to the guest, only to the usbredir-host as part of the initial handshake. This can then be logged on the usbredir-host side for debugging purposes and is otherwise completely unused! For debugging purposes it is important to have the real qemu version in there, rather then the machine-specific version. Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> (cherry picked from commit 35efba2cc6812dc980c336d7b9bf81dbfb5daf00) Conflicts: hw/usb/redirect.c Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
2012-10-11ehci: Walk async schedule before and after migrationHans de Goede
Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> (cherry picked from commit ceab6f96454fe6589d1b09ce64403c041d79f9d9) Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
2012-10-11ehci: Don't set seen to 0 when removing unseen queue-headsHans de Goede
When removing unseen queue-heads from the async queue list, we should not set the seen flag to 0, as this may cause them to be removed by ehci_queues_rip_unused() during the next call to ehci_advance_async_state() if the timer is late or running at a low frequency. Note: 1) This *may* have caused the instant unlink / relinks described in commit 9bc3a3a216e2689bfcdd36c3e079333bbdbf3ba0 2) Rather then putting more if-s inside ehci_queues_rip_unused, this patch instead introduces a new ehci_queues_rip_unseen function. 3) This patch also makes it save to call ehci_queues_rip_unseen() multiple times, which gets used in the folluw up patch titled: "ehci: Walk async schedule before and after migration" Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> (cherry picked from commit 8f5457eb04140714eaf57a99bc08dc661d83fa87) Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
2012-10-11ehci: Don't process too much frames in 1 timer tick (v2)Hans de Goede
The Linux ehci isoc scheduling code fills the entire schedule ahead of time minus 80 frames. If we make a large jump in where we are in the schedule, ie 40 frames, then the scheduler all of a sudden will only have 40 frames left to work in, causing it to fail packet submissions with error -27 (-EFBIG). Changes in v2: -Don't hardcode a maximum number of frames to process in one tick, instead: -Process a minimum number of frames to ensure we do eventually catch up -Stop (after the minimum number) when the guest has requested an irq Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> (cherry picked from commit 8f74ed1e43263293301031a10e440549bab19a6e) Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
2012-10-11ehci: Fix interrupts stopping when Interrupt Threshold Control is 8Hans de Goede
If Interrupt Threshold Control is 8 or a multiple of 8, then s->usbsts_frindex can become exactly 0x4000, at which point (s->usbsts_frindex > s->frindex) will never become true, as s->usbsts_frindex will not be lowered / reset in this case. This patch fixes this. Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> (cherry picked from commit ffa1f2e088eb7e3d57f2fc35f21e7bdb23e592c5) Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
2012-10-11ehci: switch to new-style memory opsGerd Hoffmann
Also register different memory regions for capabilities, operational registers and port status registers. Create separate tracepoints for operational regs and port status regs. Ditch a bunch of sanity checks because the memory core will do this for us now. Offloading the byte, word and dword access handling to the memory core also has the side effect of fixing ehci register access on bigendian hosts. Cc: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> (cherry picked from commit 3e4f910c8d490a1490409a7e381dbbb229f9d272) Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
2012-10-11usb-host: allow emulated (non-async) control requests without USBPacketGerd Hoffmann
xhci needs this for USB_REQ_SET_ADDRESS due to the way usb addressing is handled by the xhci hardware. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> (cherry picked from commit 63587e31353b6652cadfcfb869f5692a2b69daeb) Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
2012-10-11xhci: allow bytewise capability register readsGerd Hoffmann
Some guests need this according to Alejandro Martinez Ruiz <alex@securiforest.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> (cherry picked from commit 6ee021d41078844df60a3a466e3829a3e82776f3) Conflicts: hw/usb/hcd-xhci.c Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
2012-10-11xhci: fix runtime write tracepointGerd Hoffmann
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> (cherry picked from commit 8e9f18b6db1cd67f0a7efd7d0285bee489445197) Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
2012-10-11xhci: drop bufferingGerd Hoffmann
This patch splits the xhci_xfer_data function into three. The xhci_xfer_data function used to do does two things: (1) copy transfer data between guest memory and a temporary buffer. (2) report transfer results to the guest using events. Now we three functions to handle this: (1) xhci_xfer_map creates a scatter list for the transfer and uses that (instead of the temporary buffer) to build a USBPacket. (2) xhci_xfer_unmap undoes the mapping. (3) xhci_xfer_report sends out events. The patch also fixes reporting of transaction errors which must be reported unconditinally, not only in case the guest asks for it using the ISP flag. [ v2: fix warning ] Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> (cherry picked from commit d5a15814b413869667b2a3215772986885be574a) Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
2012-10-11xhci: rip out background transfer codeGerd Hoffmann
original xhci code (the one which used libusb directly) used to use 'background transfers' for iso streams. In upstream qemu the iso stream buffering is handled by usb-host & usb-redir, so we will never ever need this. It has been left in as reference, but is dead code anyway. Rip it out. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> (cherry picked from commit 331e9406f152b6bae6859a153d36e5076c58901d) Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
2012-10-11usb-audio: fix usb versionGerd Hoffmann
usb-audio is a full speed (1.1) device, but bcdUSB claims it is usb 2.0. Fix it. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> (cherry picked from commit 2bbd086c41a00dc4384727ec895a94890c688eb5) Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
2012-10-11Better name usb braille deviceSamuel Thibault
Windows users need to know that they have to use the Baum driver to make the qemu braille device work. Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> (cherry picked from commit 2964cd9bfa5100e433471d3e3fedcc9d62891894) Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
2012-10-11usb-redir: Return babble when getting more bulk data then requestedHans de Goede
Babble is the appropriate error in this case (rather then signalling a stall). Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> (cherry picked from commit 2979a36183a3902cd75665e7c6bbc8668668fd17) Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
2012-10-11usb-redir: Move to core packet id and queue handlingHans de Goede
Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> (cherry picked from commit de550a6afb468ed3b8171019e19b63ae8254886d) Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
2012-10-11usb-redir: Get rid of unused async-struct dev memberHans de Goede
This is a preparation patch for completely getting rid of the async-packet struct in usb-redir, instead relying on the (new) per ep queues in the qemu usb core. Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> (cherry picked from commit 206e7f20fe7b920b362bcc02608680c5d5527f2a) Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
2012-10-11usb-redir: Get rid of local shadow copy of packet headersHans de Goede
The shadow copy only serves as an extra check (besides the packet-id) to ensure the packet we get back is a reply to the packet we think it is. This check has never triggered in all the time usb-redir is in use now, and since the verified data in the returned packet-header is not used otherwise, removing the check does not open any possibilities for the usbredirhost to confuse us. This is a preparation patch for completely getting rid of the async-packet struct in usb-redir, instead relying on the (new) per ep queues in the qemu usb core. Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> (cherry picked from commit 104981d52b63dc3d68f39d4442881c667f44bbb9) Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
2012-10-11usb-redir: Get rid of async-struct get memberHans de Goede
This is a preparation patch for completely getting rid of the async-packet struct in usb-redir, instead relying on the (new) per ep queues in the qemu usb core. Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> (cherry picked from commit cb897117cdedd488f19985c8ec5ea05971103a27) Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
2012-10-11usb-redir: Don't delay handling of open events to a bottom halfHans de Goede
There is no need for this, and doing so means that a backend trying to write immediately after an open event will see qemu_chr_be_can_write returning 0, which not all backends handle well as there is no wakeup mechanism to detect when the frontend does become writable. Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> (cherry picked from commit ed9873bfbf145c084d039baab08c63b9d67e7bd3) Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
2012-10-11usb-redir: Never return USB_RET_NAK for async handled packetsHans de Goede
USB_RET_NAK is not a valid response for async handled packets (and will trigger an assert as such). Also drop the warning when receiving a status of cancelled for packets not cancelled by qemu itself, this can happen when a device gets unredirected by the usbredir-host while transfers are pending. Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> (cherry picked from commit 181133404f520fab40a3ad40d935d91cf3cf546c) Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
2012-10-11ehci: Correct a comment in fetchqtd packet processingHans de Goede
Since my previous comment said "Should never happen", I tried changing the next line to an assert(0), which did not go well, which as the new comments explains is logical if you think about it for a moment. Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> (cherry picked from commit cf1f81691d1998fa8fe5bfcb8b498fb3723cf3c3) Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
2012-10-11ehci: Handle USB_RET_PROCERR in ehci_fill_queueHans de Goede
USB_RET_PROCERR can be triggered by the guest (by for example requesting more then BUFFSIZE bytes), so don't assert on it. Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> (cherry picked from commit eff6dce79bd7ad3c16d75c5e55b5a2a137ba6a60) Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
2012-10-11ehci: Fix memory leak in handling of NAK-ed packetsHans de Goede
Currently each time we try to execute a NAK-ed packet we redo ehci_init_transfer, and usb_packet_map, re-allocing (without freeing) the sg list every time. This patch fixes this, it does this by introducing another async state, so that we also properly cleanup a NAK-ed packet on cancel. Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> (cherry picked from commit ef5b234477df80700b128f561f5877a0688a70c8) Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
2012-10-11ehci: Add some additional ehci_trace_guest_bug() callsHans de Goede
Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> (cherry picked from commit 3a8ca08e01ea4baafff2a513655008cdd00feebf) Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
2012-10-11ehci: add doorbell trace eventsGerd Hoffmann
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> (cherry picked from commit 1defcbd1e81d67476b6e4e486bcd4d869162900d) Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
2012-10-11ehci: trace guest bugsGerd Hoffmann
make qemu_queue_{cancel,reset} return the number of packets released, so the caller can figure whenever there have been active packets even though there shouldn't have been any. Add tracepoint to log this. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> (cherry picked from commit 5c514681abbb3ae2f61f517c1aa3197f2f3ca93c) Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
2012-10-11ehci: check for EHCI_ASYNC_FINISHED first in ehci_free_packetGerd Hoffmann
Otherwise we'll see the packet free twice in the trace log even though it actually happens only once. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> (cherry picked from commit 616789cde2a83fad5e634880fd20214f0c984fd5) Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
2012-10-11ehci: Properly report completed but not yet processed packets to the guestHans de Goede
Reported packets which have completed before being cancelled as such to the host. Note that the new code path this patch adds is untested since it I've been unable to actually trigger the race which needs this code path. Signed-off-by: Hans de Goede <hdegoede@redhat.com> (cherry picked from commit 4b63a0df3bda8a2c278e45d9d94d9ba6d5791d8d) Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
2012-10-11ehci: Properly cleanup packets on cancelHans de Goede
Signed-off-by: Hans de Goede <hdegoede@redhat.com> (cherry picked from commit 0e7953525f52aa6c098dc0c1ce0b4a80ce82da45) Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
2012-10-11ehci: Update copyright headers to reflect recent workHans de Goede
Update copyright headers to reflect all the work Gerd and I have been doing on the EHCI emulation. Signed-off-by: Hans de Goede <hdegoede@redhat.com> (cherry picked from commit 522079dd4461c38b9a88bf31a65ea038c5b2be45) Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
2012-10-11ehci: Validate qh is not changed unexpectedly by the guestHans de Goede
-combine the qh check with the check for devaddr changes -also ensure that p gets set to NULL when the queue gets cancelled on devaddr change, which was not done properly before this patch Signed-off-by: Hans de Goede <hdegoede@redhat.com> (cherry picked from commit dafe31fc2a8653b535d58f8c7b250c0827b14420) Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
2012-10-11Revert "ehci: don't flush cache on doorbell rings."Hans de Goede
This reverts commit 9bc3a3a216e2689bfcdd36c3e079333bbdbf3ba0, which got added to fix an issue where the real, underlying cause was not stopping the ep queue on an error. Now that the underlying cause is fixed by the "usb: Halt ep queue and cancel pending packets on a packet error" patch, the "don't flush" fix is no longer needed. Not only is it not needed, it causes us to see cancellations (unlinks) done by the Linux EHCI driver too late, which in combination with the new usb-core packet-id generation where qtd addresses are used as ids, causes duplicate ids for in flight packets. Signed-off-by: Hans de Goede <hdegoede@redhat.com> (cherry picked from commit 66f092d25697e11847b61d761c38ddebedaed8d1) Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
2012-10-11usb-core: Allow the first packet of a pipelined ep to complete immediatelyHans de Goede
This can happen with usb-redir live-migration when the packet gets re-queued after the migration and the original queuing from the migration source side has already finished. Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> (cherry picked from commit 9c1f67654ab611553bbfca54a1e0922728c25760) Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
2012-10-11usb-core: Add a usb_ep_find_packet_by_id() helper functionHans de Goede
Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> (cherry picked from commit c13a9e61366cc3e28299d8faeb65e65c6e5964cf) Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
2012-10-11usb-core: Don't set packet state to complete on a nakHans de Goede
This way the hcd can re-use the same packet to retry without needing to re-init it. Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> (cherry picked from commit cc40997489260f405aecccd30d4626ceee862502) Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
2012-10-11usb: controllers do not need to check for babble themselvesHans de Goede
If an (emulated) usb-device tries to write more data to a packet then its iov len, this will trigger an assert in usb_packet_copy(), and if a driver somehow circumvents that check and writes more data to the iov then there is space, we have a much bigger problem then not correctly reporting babble to the guest. In practice babble will only happen with (real) redirected devices, and there both the usb-host os and the qemu usb-device code already check for it. Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> (cherry picked from commit 45b339b18c660eb85af2ba25bfcaed5469660d77) Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
2012-08-31uas: move transfer kickoffGerd Hoffmann
Kick next scsi transfer from request release callback instead of command completion callback, otherwise we might get stuck in case scsi_req_unref() doesn't release the request instantly due to someone else holding a reference too. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
2012-08-31ehci: Fix interrupt endpoints no longer workingHans de Goede
One of the recent changes (likely the addition of queuing support) has broken interrupt endpoints, this patch fixes this. Signed-off-by: Hans de Goede <hdegoede@redhat.com>
2012-08-31ehci: handle TD deactivation of inflight packetsGerd Hoffmann
Check the TDs of inflight packets, cancel packets in case the guest clears the active bit. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
2012-08-31ehci: add ehci_cancel_queue()Gerd Hoffmann
Factor out function to cancel all packets of a queue. No behavior change. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
2012-08-31ehci: simplify ehci_state_executingHans de Goede
ehci_state_executing does not need to check for p->usb_status == USB_RET_ASYNC or USB_RET_PROCERR, since ehci_execute_complete already does a similar check and will trigger an assert if either value is encountered. USB_RET_ASYNC should never be the packet status when execute_complete runs for obvious reasons, and USB_RET_PROCERR is only used by ehci_state_execute / ehci_execute not by ehci_state_executing / ehci_execute_complete. Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
2012-08-31ehci: Remove unnecessary ehci_flush_qh callHans de Goede
ehci_qh_do_overlay() already calls ehci_flush_qh() before it returns, calling it twice is useless. Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
2012-08-31ehci: Schedule async-bh when IAAD bit gets setHans de Goede
After the "ehci: Print a warning when a queue unexpectedly contains packets on cancel" commit. Under certain reproducable conditions I was getting the following message: "EHCI: Warning queue not empty on queue reset". After aprox. 8 hours of debugging I've finally found the cause. The Linux EHCI driver has an IAAD watchdog, to work around certain EHCI hardware sometimes not acknowledging the doorbell at all. This watchdog has a timeout of 10 ms, which is less then the time between 2 runs through the async schedule when async_stepdown is at its highest value. Thus the watchdog can trigger, after which Linux clears the IAAD bit and re-uses the QH. IOW we were not properly detecting the unlink of the qh, due to us missing (ignoring for more then 10 ms) the IAAD command, which triggered the warning. Signed-off-by: Hans de Goede <hdegoede@redhat.com>
2012-08-31ehci: Fix NULL ptr deref when unplugging an USB dev with an iso stream activeHans de Goede
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
2012-08-31usb: unique packet idsGerd Hoffmann
This patch adds IDs to usb packets. Those IDs are (a) supposed to be unique for the lifecycle of a packet (from packet setup until the packet is either completed or canceled) and (b) stable across migration. uhci, ohci, ehci and xhci use the guest physical address of the transfer descriptor for this. musb needs a different approach because there is no transfer descriptor. But musb also doesn't support pipelining, so we have never more than one packet per endpoint in flight. So we go create an ID based on endpoint and device address. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
2012-08-31usb: Halt ep queue en cancel pending packets on a packet errorHans de Goede
For controllers which queue up more then 1 packet at a time, we must halt the ep queue, and inside the controller code cancel all pending packets on an error. There are multiple reasons for this: 1) Guests expect the controllers to halt ep queues on error, so that they get the opportunity to cancel transfers which the scheduled after the failing one, before processing continues 2) Not cancelling queued up packets after a failed transfer also messes up the controller state machine, in the case of EHCI causing the following assert to trigger: "assert(p->qtdaddr == q->qtdaddr)" at hcd-ehci.c:2075 3) For bulk endpoints with pipelining enabled (redirection to a real USB device), we must cancel all the transfers after this a failed one so that: a) If they've completed already, they are not processed further causing more stalls to be reported, originating from the same failed transfer b) If still in flight, they are cancelled before the guest does a clear stall, otherwise the guest and device can loose sync! Note this patch only touches the ehci and uhci controller changes, since AFAIK no other controllers actually queue up multiple transfer. If I'm wrong on this other controllers need to be updated too! Also note that this patch was heavily tested with the ehci code, where I had a reproducer for a device causing a transfer to fail. The uhci code is not tested with actually failing transfers and could do with a thorough review! Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
2012-08-16ehci: Fix setting of halt bit from usbcmd register updatesHans de Goede
This fixes linux guests started without any USB devices not seeing newly plugged devices until "lsusb" is done inside the guest. Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>