From: Hans de Goede Date: Thu, 30 Aug 2012 09:20:51 +0000 (+0200) Subject: ehci: Fix interrupt endpoints no longer working X-Git-Tag: v2.7.1~4582^2~1 X-Git-Url: https://git.proxmox.com/?a=commitdiff_plain;h=adf478342b11cf9f540baf1f387b669210d3bea1;p=mirror_qemu.git ehci: Fix interrupt endpoints no longer working 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 --- diff --git a/hw/usb/hcd-ehci.c b/hw/usb/hcd-ehci.c index eca1431bff..017342b56a 100644 --- a/hw/usb/hcd-ehci.c +++ b/hw/usb/hcd-ehci.c @@ -1987,10 +1987,19 @@ static int ehci_state_fetchqtd(EHCIQueue *q) ehci_set_state(q->ehci, q->async, EST_HORIZONTALQH); again = 1; } else if (p != NULL) { - if (p->async == EHCI_ASYNC_INFLIGHT) { + switch (p->async) { + case EHCI_ASYNC_NONE: + /* Previously nacked packet (likely interrupt ep) */ + ehci_set_state(q->ehci, q->async, EST_EXECUTE); + break; + case EHCI_ASYNC_INFLIGHT: + /* Unfinyshed async handled packet, go horizontal */ ehci_set_state(q->ehci, q->async, EST_HORIZONTALQH); - } else { + break; + case EHCI_ASYNC_FINISHED: + /* Should never happen, as this case is caught by fetchqh */ ehci_set_state(q->ehci, q->async, EST_EXECUTING); + break; } again = 1; } else {