qemu/hw/usb
Sebastian Bauer 8bb01b257f ehci: Don't fetch a NULL current qtd but advance the queue instead.
Fetching qtd with the NULL address most likely makes no sense so from now
on, we handle it this case similarly as if the terminate (T) bit is not
set, which is already an exception as according to section 3.6 of the EHCI
spec there is no T bit defined for the current_qtd field.

The spec is a bit vague on how an EHCI driver should initialize these
fields: "The general operational model is that the host controller can
detect whether the overlay area contains a description of an active
transfer" (p. 49). QEMU primarily uses the QTD_TOKEN_ACTIVE bit of the
queue header to infer the activity state but there are other ways
conceivable.

This change allows QEMU to boot further into AmigaOS. The public available
version of the EHCI driver recycles queue heads in some rare conditions but
only clears the current_qtd field but not the status field. This works with
many available EHCI PCI cards but e.g., not with the Freescale USB
controller's found on the P5040. On the emulated EHCI controller of QEMU
the consequence is that some garbage was read in, which resulted in a
reset of the controller. This change fixes the problem.

Signed-off-by: Sebastian Bauer <mail@sebastianbauer.info>
Tested-by: BALATON Zoltan <balaton@eik.bme.hu>
Message-id: 20180625222718.4488-1-mail@sebastianbauer.info
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
2018-07-03 09:49:44 +02:00
..
bus.c hmp-commands: Remove the deprecated usb_add and usb_del 2017-12-14 10:16:52 +00:00
ccid-card-emulated.c ccid-card: include libcacard.h only 2018-04-27 10:57:09 +02:00
ccid-card-passthru.c ccid-card-passthru: fix regression in realize() 2018-05-18 09:41:17 +02:00
ccid.h usb-ccid: convert CCIDCardClass::exitfn() -> unrealize() 2018-01-26 07:59:33 +01:00
chipidea.c usb: Add basic code to emulate Chipidea USB IP 2018-02-09 10:40:30 +00:00
combined-packet.c usb: Clean up includes 2016-01-29 15:07:23 +00:00
core.c usb: don't wakeup during coldplug 2017-05-29 14:18:09 +02:00
desc-msos.c usb: use local path for local headers 2018-06-01 19:20:38 +03:00
desc.c usb: use local path for local headers 2018-06-01 19:20:38 +03:00
desc.h all: Clean up includes 2016-02-23 12:43:05 +00:00
dev-audio.c usb: use local path for local headers 2018-06-01 19:20:38 +03:00
dev-bluetooth.c usb: use local path for local headers 2018-06-01 19:20:38 +03:00
dev-hid.c usb: use local path for local headers 2018-06-01 19:20:38 +03:00
dev-hub.c usb: use local path for local headers 2018-06-01 19:20:38 +03:00
dev-mtp.c usb-mtp: Return error on suspicious TYPE_DATA packet from initiator 2018-06-12 12:08:12 +02:00
dev-network.c usb: use local path for local headers 2018-06-01 19:20:38 +03:00
dev-serial.c usb: use local path for local headers 2018-06-01 19:20:38 +03:00
dev-smartcard-reader.c Revert "usb-ccid: fix bus leak" 2018-06-18 09:15:51 +02:00
dev-storage.c usb-storage: Add rerror/werror properties 2018-06-29 14:20:56 +02:00
dev-uas.c Revert "usb: release the created buses" 2018-06-18 09:15:51 +02:00
dev-wacom.c usb: use local path for local headers 2018-06-01 19:20:38 +03:00
hcd-ehci-pci.c pci: Add INTERFACE_CONVENTIONAL_PCI_DEVICE to Conventional PCI devices 2017-10-15 05:54:43 +03:00
hcd-ehci-sysbus.c ehci: Add ppc4xx-ehci for the USB 2.0 controller in embedded PPC SoCs 2017-09-27 13:05:41 +10:00
hcd-ehci.c ehci: Don't fetch a NULL current qtd but advance the queue instead. 2018-07-03 09:49:44 +02:00
hcd-ehci.h ehci: Add ppc4xx-ehci for the USB 2.0 controller in embedded PPC SoCs 2017-09-27 13:05:41 +10:00
hcd-musb.c Replace all occurances of __FUNCTION__ with __func__ 2018-01-22 09:46:18 +01:00
hcd-ohci.c pci: Add INTERFACE_CONVENTIONAL_PCI_DEVICE to Conventional PCI devices 2017-10-15 05:54:43 +03:00
hcd-uhci.c pci: Add INTERFACE_CONVENTIONAL_PCI_DEVICE to Conventional PCI devices 2017-10-15 05:54:43 +03:00
hcd-xhci-nec.c xhci: split into multiple files 2017-05-29 14:03:35 +02:00
hcd-xhci.c pci: removed the is_express field since a uniform interface was inserted 2018-02-08 21:06:41 +02:00
hcd-xhci.h xhci: split into multiple files 2017-05-29 14:03:35 +02:00
host-libusb.c usb-host: skip open on pending postload bh 2018-05-07 11:10:42 +02:00
host-stub.c usb: Remove legacy -usbdevice options (host, serial, disk and net) 2018-01-26 07:15:08 +01:00
host.h usb-host: move legacy cmd line bits 2013-02-19 12:30:05 +01:00
libhw.c usb: Clean up includes 2016-01-29 15:07:23 +00:00
Makefile.objs usb: Add basic code to emulate Chipidea USB IP 2018-02-09 10:40:30 +00:00
quirks-ftdi-ids.h usbredir: Add support for buffered bulk input (v2) 2013-01-08 10:56:58 +01:00
quirks-pl2303-ids.h usbredir: Add support for buffered bulk input (v2) 2013-01-08 10:56:58 +01:00
quirks.c usb: Clean up includes 2016-01-29 15:07:23 +00:00
quirks.h usbredir: Add support for buffered bulk input (v2) 2013-01-08 10:56:58 +01:00
redirect.c usb: correctly handle Zero Length Packets 2018-06-12 12:07:02 +02:00
trace-events trace-events: fix code style: print 0x before hex numbers 2017-08-01 12:13:07 +01:00
tusb6010.c hw/usb/tusb6010: Convert away from old_mmio 2018-05-04 18:05:50 +01:00
xen-usb.c xen: remove other open-coded use of libxengnttab 2018-05-22 11:43:21 -07:00