summaryrefslogtreecommitdiffstats
path: root/configure
diff options
context:
space:
mode:
authorHans de Goede <hdegoede@redhat.com>2012-09-20 17:38:07 +0200
committerGerd Hoffmann <kraxel@redhat.com>2012-09-26 09:24:41 +0200
commitcae5d3f4b3fbe9b681c0c4046008af424bd1d6a5 (patch)
tree8deb6f010c205b8d2737f86ebfc4f4d1a8707e2a /configure
parent1d8a4e69eeda7e474d1a6b50951b0b1680f8186e (diff)
downloadhqemu-cae5d3f4b3fbe9b681c0c4046008af424bd1d6a5.zip
hqemu-cae5d3f4b3fbe9b681c0c4046008af424bd1d6a5.tar.gz
ehci: Fix interrupt packet MULT handling
There are several issues with our handling of the MULT epcap field of interrupt qhs, which this patch fixes. 1) When we don't execute a transaction because of the transaction counter being 0, p->async stays EHCI_ASYNC_NONE, and the next time we process the same qtd we hit an assert in ehci_state_fetchqtd because of this. Even though I believe that this is caused by 3 below, this patch still removes the assert, as that can still happen without 3, when multiple packets are queued for the same interrupt ep. 2) We only *check* the transaction counter from ehci_state_execute, any packets queued up by fill_queue bypass this check. This is fixed by not calling fill_queue for interrupt packets. 3) Some versions of Windows set the MULT field of the qh to 0, which is a clear violation of the EHCI spec, but still they do it. This means that we will never execute a qtd for these, making interrupt ep-s on USB-2 devices not work, and after recent changes, triggering 1). So far we've stored the transaction counter in our copy of the mult field, but with this beginnig at 0 already when dealing with these version of windows this won't work. So this patch adds a transact_ctr field to our qh struct, and sets this to the MULT field value on fetchqh. When the MULT field value is 0, we set it to 4. Assuming that windows gets way with setting it to 0, by the actual hardware going horizontal on a 1 -> 0 transition, which will give it 4 transactions (MULT goes from 0 - 3). Note that we cannot stop on detecting the 1 -> 0 transition, as our decrement of the transaction counter, and checking for it are done in 2 different places. Reported-by: Shawn Starr <shawn.starr@rogers.com> Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Diffstat (limited to 'configure')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud