summaryrefslogtreecommitdiffstats
path: root/hw/usb-ehci.c
Commit message (Collapse)AuthorAgeFilesLines
...
* usb: Make port wakeup and complete ops take a USBPort instead of a DeviceHans de Goede2011-07-051-1/+1
| | | | | | | | | | | This makes them consistent with the attach and detach ops, and in general it makes sense to make portops take a port as argument. This also makes adding support for a companion controller easier / cleaner. [ kraxel: fix usb-musb.c build ] Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
* usb: Move (initial) call of usb_port_location to usb_fill_portHans de Goede2011-07-051-1/+0Star
| | | | | | | | | Cleanup / preparation patch for companion controller support. Note that as a "side-effect" this patch also fixes the milkymist-softusb controller not having a port_location set for its ports. Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
* ehci: switch to nanosecondsGerd Hoffmann2011-06-231-18/+11Star
| | | | | | | Make ehci use nanoseconds everywhere. Simplifies time calculations. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
* ehci: add freq + maxframes propertiesGerd Hoffmann2011-06-231-2/+12
| | | | | | | | | | | | | | Add properties for the wakeup rate and the max number of frames ehci will process at once. The wakeup rate defaults to 1000 which equals the usb frame rate. This can be reduced to make qemu wake up less often when ehci is active. In case the wakeup rate is reduced or the ehci timer is delayed due to latency issues elsewhere in qemu ehci will process multiple frames at once. The maxframes property specifies the upper limit for this. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
* Merge remote-tracking branch 'mst/for_anthony' into stagingAnthony Liguori2011-06-221-5/+4Star
|\ | | | | | | | | Conflicts: hw/usb-uhci.c
| * usb-ehci: move device/vendor/class id to qdevMichael S. Tsirkin2011-06-151-5/+4Star
| | | | | | | | Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
* | usb: Use defines for serial bus release number register for EHCIBrad Hards2011-06-141-1/+1
| | | | | | | | | | Signed-off-by: Brad Hards <bradh@frogmouth.net> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
* | usb-ehci: split trace calls to handle arg count limitsGerd Hoffmann2011-06-141-21/+27
| | | | | | | | Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
* | usb-ehci: itd handling fixes.Gerd Hoffmann2011-06-141-36/+65
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch fixes a bunch of issues in the itd descriptor handling. Most important fix is to handle transfers which cross page borders correctly by looking up the address of the next page. Luckily the linux uses physically contigous memory so the data used to hits the correct location even with this bug instead of corrupting guest memory. Also the transfer length updates for outgoing transfers wasn't correct. While being at it DPRINTFs have been replaced by tracepoints. The isoch_pause logic has been disabled. Not clear to me which propose this serves and I think it is incorrect too as we just skip processing itds. Even when no xfer happens we have to clear the active bit. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
* | usb-ehci: drop EXECUTING checks.Gerd Hoffmann2011-06-141-30/+2Star
| | | | | | | | | | | | | | | | | | | | | | The state machine doesn't stop in EXECUTING state any more when async packets are in flight, so the checks are not needed any more and can be dropped. Also kick out the check for the frame timer. As we don't stop & sleep any more on async packets this is obsolete. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
* | usb: cancel async packets on unplugGerd Hoffmann2011-06-141-1/+24
| | | | | | | | | | | | | | | | | | This patch adds USBBusOps struct with (for now) only a single callback which is called when a device is about to be destroyed. The USB Host adapters are implementing this callback and use it to cancel any async requests which might be in flight before the device actually goes away. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
* | ehci: fix a number of unused-but-set-variable warnings (new with gcc-4.6)Hans de Goede2011-06-141-4/+1Star
| | | | | | | | Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
* | usb-ehci: fix error handling.Gerd Hoffmann2011-06-141-10/+15
| | | | | | | | | | | | | | | | Set the correct bits for nodev, stall and babble errors. Raise errint irq. Fix state transition from WRITEBACK to the next state. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
* | usb-ehci: fix offset writeback in ehci_buffer_rwGerd Hoffmann2011-06-141-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | Two bugs at once: First the mask is backwards, so the it used to keeps the offset and clears the page address, which is not what we need when we update the offset. Second the offset calculation is wrong in case head isn't page aligned. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
* | usb-ehci: multiqueue supportGerd Hoffmann2011-06-141-32/+139
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch adds support for keeping multiple queues going at the same time. One slow device will not affect other devices any more. The patch adds code to manage EHCIQueue structs. It also does a number of changes to the state machine: * The state machine will never ever stop in EXECUTING any more. Instead it will continue with the next queue (aka HORIZONTALQH) when the usb device returns USB_RET_ASYNC. * The state machine will stop processing when it figures it walks in circles (easy to figure now that we have a EHCIQueue struct for each QH we've processed). The bailout logic should not be needed any more. For now it is still in, but will assert() in case it triggers. * The state machine will just skip queues with a async USBPacket in flight. * The state machine will resume processing as soon as the async USBPacket is finished. The patch also takes care to flush the QH struct back to guest memory when needed, so we don't get stale data when (re-)loading it from guest memory in FETCHQH state. It also makes the writeback code to not touch the first three dwords of the QH struct as the EHCI must not write them. This actually fixes a bug where QH chaining changes (next ptr) by the linux ehci driver where overwritten by the emulated EHCI. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
* | usb-ehci: add queue data structGerd Hoffmann2011-06-141-229/+257
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add EHCIQueue struct, move the fields needed to track the queue state into that struct. Pass the new struct instead of ehci state down to functions which handle the queue state. Lot of variable references have changed due to that without an actual functional change. Replace fetch_addr with two variables, one for async and one for periodic schedule. Add functions to get and set the fetch address. Use EHCIQueue->usb_status (old name: EHCIState->exec_status) directly in ehci_execute_complete instead of passing around the status using a parameters and the return value. ehci_state_fetchqh returns a EHCIQueue struct now. No change in behavior. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
* | usb-ehci: trace buffer copyGerd Hoffmann2011-06-141-7/+1Star
| | | | | | | | | | | | | | | | Add a trace point for buffer copies and drop the DPRINTF's. No change in behavior. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
* | usb-ehci: improve mmio tracingGerd Hoffmann2011-06-141-10/+6Star
| | | | | | | | | | | | | | | | | | | | Add a separate tracepoint to log how register values change in response to a mmio write. Especially useful for registers which have read-only or clear-on-write bits in them. No change in behavior. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
* | usb-ehci: trace port stateGerd Hoffmann2011-06-141-6/+4Star
| | | | | | | | | | | | | | | | | | Trace usb port operations (attach, detach, reset), drop a few obsolete DPRINTF's. No change in behavior. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
* | usb-ehci: trace state machine changesGerd Hoffmann2011-06-141-137/+170
| | | | | | | | | | | | | | | | | | | | | | | | Add functions to get and set the current state of the state machine, add tracepoints there to trace state transitions. Add support for traceing the queue heads and transfer descriptors as we look at them. Drop a few DPRINTFs and all DPRINTF_ST lines, they are obsolete now. No change in behavior. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
* | usb-ehci: trace mmio and usbstsGerd Hoffmann2011-06-141-73/+83
|/ | | | | | | | | | | | | | | This patch starts adding trace support to ehci. It traces updates of the status register (USBSTS), mmio access and controller reset. It also adds functions to set and clear status register bits and puts them in use everywhere. Some DPRINTF's are dropped in favor of the new tracepoints. No change in behavior. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
* usb: add ehci adapterGerd Hoffmann2011-05-261-0/+2037
This patch finally merges the EHCI host adapter aka USB 2.0 support. Based on the ehci bits collected @ git://git.kiszka.org/qemu.git ehci EHCI has a long out-of-tree history. Project was started by Mark Burkley, with contributions by Niels de Vos. David S. Ahern continued working on it. Kevin Wolf, Jan Kiszka and Vincent Palatin contributed bugfixes. /me (Gerd Hoffmann) picked it up where it left off, prepared the code for merge, fixed a few bugs and added basic user docs. Cc: David S. Ahern <daahern@cisco.com> Cc: Jan Kiszka <jan.kiszka@web.de> Cc: Kevin Wolf <mail@kevin-wolf.de> Cc: Vincent Palatin <vincent.palatin_qemu@m4x.org> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>