In xhci(4) there is no stream ID in the completion TRB.
Instead iterate all the stream IDs in stream mode to find the matching USB transfer. MFC after: 3 days Sponsored by: Mellanox Technologies
This commit is contained in:
parent
469bf20db0
commit
40124d2a05
@ -891,7 +891,7 @@ xhci_check_transfer(struct xhci_softc *sc, struct xhci_trb *trb)
|
||||
uint64_t td_event;
|
||||
uint32_t temp;
|
||||
uint32_t remainder;
|
||||
uint16_t stream_id;
|
||||
uint16_t stream_id = 0;
|
||||
uint16_t i;
|
||||
uint8_t status;
|
||||
uint8_t halted;
|
||||
@ -904,7 +904,6 @@ xhci_check_transfer(struct xhci_softc *sc, struct xhci_trb *trb)
|
||||
|
||||
remainder = XHCI_TRB_2_REM_GET(temp);
|
||||
status = XHCI_TRB_2_ERROR_GET(temp);
|
||||
stream_id = XHCI_TRB_2_STREAM_GET(temp);
|
||||
|
||||
temp = le32toh(trb->dwTrb3);
|
||||
epno = XHCI_TRB_3_EP_GET(temp);
|
||||
@ -914,8 +913,8 @@ xhci_check_transfer(struct xhci_softc *sc, struct xhci_trb *trb)
|
||||
halted = (status != XHCI_TRB_ERROR_SHORT_PKT &&
|
||||
status != XHCI_TRB_ERROR_SUCCESS);
|
||||
|
||||
DPRINTF("slot=%u epno=%u stream=%u remainder=%u status=%u\n",
|
||||
index, epno, stream_id, remainder, status);
|
||||
DPRINTF("slot=%u epno=%u remainder=%u status=%u\n",
|
||||
index, epno, remainder, status);
|
||||
|
||||
if (index > sc->sc_noslot) {
|
||||
DPRINTF("Invalid slot.\n");
|
||||
@ -929,19 +928,20 @@ xhci_check_transfer(struct xhci_softc *sc, struct xhci_trb *trb)
|
||||
|
||||
pepext = &sc->sc_hw.devs[index].endp[epno];
|
||||
|
||||
if (pepext->trb_ep_mode != USB_EP_MODE_STREAMS) {
|
||||
stream_id = 0;
|
||||
DPRINTF("stream_id=0\n");
|
||||
} else if (stream_id >= XHCI_MAX_STREAMS) {
|
||||
DPRINTF("Invalid stream ID.\n");
|
||||
return;
|
||||
}
|
||||
|
||||
/* try to find the USB transfer that generated the event */
|
||||
for (i = 0; i != (XHCI_MAX_TRANSFERS - 1); i++) {
|
||||
for (i = 0;; i++) {
|
||||
struct usb_xfer *xfer;
|
||||
struct xhci_td *td;
|
||||
|
||||
if (i == (XHCI_MAX_TRANSFERS - 1)) {
|
||||
if (pepext->trb_ep_mode != USB_EP_MODE_STREAMS ||
|
||||
stream_id == (XHCI_MAX_STREAMS - 1))
|
||||
break;
|
||||
stream_id++;
|
||||
i = 0;
|
||||
DPRINTFN(5, "stream_id=%u\n", stream_id);
|
||||
}
|
||||
|
||||
xfer = pepext->xfer[i + (XHCI_MAX_TRANSFERS * stream_id)];
|
||||
if (xfer == NULL)
|
||||
continue;
|
||||
|
Loading…
x
Reference in New Issue
Block a user