From 9be728dee090225e5a02e2e25ef2fca8036b45c5 Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Sun, 16 Jun 2019 14:09:45 -0400 Subject: [PATCH] XHCI: Set the DCS bit in SetTRDequeue. It is needed here as in ConfigureEndpoint. See inline comment. This matches FreeBSD's behavior. --- src/add-ons/kernel/busses/usb/xhci.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/add-ons/kernel/busses/usb/xhci.cpp b/src/add-ons/kernel/busses/usb/xhci.cpp index 554393d22e..9ade0634c6 100644 --- a/src/add-ons/kernel/busses/usb/xhci.cpp +++ b/src/add-ons/kernel/busses/usb/xhci.cpp @@ -2562,7 +2562,9 @@ XHCI::SetTRDequeue(uint64 dequeue, uint16 stream, uint8 endpoint, uint8 slot) { TRACE("Set TR Dequeue\n"); xhci_trb trb; - trb.address = dequeue; + trb.address = dequeue | ENDPOINT_2_DCS_BIT; + // The DCS bit is copied from the address field as in ConfigureEndpoint. + // (XHCI 1.1 ยง 4.6.10 p142.) trb.status = TRB_2_STREAM(stream); trb.flags = TRB_3_TYPE(TRB_TYPE_SET_TR_DEQUEUE) | TRB_3_SLOT(slot) | TRB_3_ENDPOINT(endpoint);