summaryrefslogtreecommitdiffstats
path: root/src/drivers/usb
diff options
context:
space:
mode:
authorMichael Brown2015-03-23 15:22:23 +0100
committerMichael Brown2015-03-23 16:21:35 +0100
commit661189eedef6d895a0b3b2c793cbdfba731bdc7d (patch)
tree74996d0b828735ab9fb3a263fa15fefbd5bdfd47 /src/drivers/usb
parent[libprefix] Fix building on 64-bit FreeBSD 8.4 (diff)
downloadipxe-661189eedef6d895a0b3b2c793cbdfba731bdc7d.tar.gz
ipxe-661189eedef6d895a0b3b2c793cbdfba731bdc7d.tar.xz
ipxe-661189eedef6d895a0b3b2c793cbdfba731bdc7d.zip
[xhci] Ring doorbell as part of endpoint reset
The endpoint may already have enqueued TRBs at the time that xhci_endpoint_reset() is called. Ring the doorbell to resume processing these TRBs immediately, rather than waiting until the next call to xhci_endpoint_message() or xhci_endpoint_stream(). Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/drivers/usb')
-rw-r--r--src/drivers/usb/xhci.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/drivers/usb/xhci.c b/src/drivers/usb/xhci.c
index a71d1278..a940a73a 100644
--- a/src/drivers/usb/xhci.c
+++ b/src/drivers/usb/xhci.c
@@ -2437,6 +2437,9 @@ static int xhci_endpoint_reset ( struct usb_endpoint *ep ) {
if ( ( rc = xhci_set_tr_dequeue_pointer ( xhci, slot, endpoint ) ) != 0)
return rc;
+ /* Ring doorbell to resume processing */
+ xhci_doorbell ( &endpoint->ring );
+
DBGC ( xhci, "XHCI %p slot %d ctx %d reset\n",
xhci, slot->id, endpoint->ctx );
return 0;