summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--payloads/libpayload/drivers/usb/xhci_events.c14
-rw-r--r--payloads/libpayload/drivers/usb/xhci_private.h11
2 files changed, 13 insertions, 12 deletions
diff --git a/payloads/libpayload/drivers/usb/xhci_events.c b/payloads/libpayload/drivers/usb/xhci_events.c
index 391ebf6126..dacb5d8618 100644
--- a/payloads/libpayload/drivers/usb/xhci_events.c
+++ b/payloads/libpayload/drivers/usb/xhci_events.c
@@ -311,15 +311,15 @@ int
xhci_wait_for_transfer(xhci_t *const xhci, const int slot_id, const int ep_id)
{
xhci_spew("Waiting for transfer on ID %d EP %d\n", slot_id, ep_id);
- /* 2s for all types of transfers */ /* TODO: test, wait longer? */
- unsigned long timeout_us = 2 * 1000 * 1000;
- int cc = TIMEOUT;
+ /* 3s for all types of transfers */ /* TODO: test, wait longer? */
+ unsigned long timeout_us = 3 * 1000 * 1000;
+ int ret = TIMEOUT;
while (xhci_wait_for_event_type(xhci, TRB_EV_TRANSFER, &timeout_us)) {
if (TRB_GET(ID, xhci->er.cur) == slot_id &&
TRB_GET(EP, xhci->er.cur) == ep_id) {
- cc = -TRB_GET(CC, xhci->er.cur);
- if (cc == -CC_SUCCESS || cc == -CC_SHORT_PACKET)
- cc = TRB_GET(EVTL, xhci->er.cur);
+ ret = -TRB_GET(CC, xhci->er.cur);
+ if (ret == -CC_SUCCESS || ret == -CC_SHORT_PACKET)
+ ret = TRB_GET(EVTL, xhci->er.cur);
xhci_advance_event_ring(xhci);
break;
}
@@ -329,5 +329,5 @@ xhci_wait_for_transfer(xhci_t *const xhci, const int slot_id, const int ep_id)
if (!timeout_us)
xhci_debug("Warning: Timed out waiting for TRB_EV_TRANSFER.\n");
xhci_update_event_dq(xhci);
- return cc;
+ return ret;
}
diff --git a/payloads/libpayload/drivers/usb/xhci_private.h b/payloads/libpayload/drivers/usb/xhci_private.h
index 26f7666539..05cf195235 100644
--- a/payloads/libpayload/drivers/usb/xhci_private.h
+++ b/payloads/libpayload/drivers/usb/xhci_private.h
@@ -46,11 +46,12 @@
#define MASK(startbit, lenbit) (((1<<(lenbit))-1)<<(startbit))
-#define TIMEOUT -1
-#define CONTROLLER_ERROR -2
-#define COMMUNICATION_ERROR -3
-#define OUT_OF_MEMORY -4
-#define DRIVER_ERROR -5
+/* Make these high enough to not collide with negative XHCI CCs */
+#define TIMEOUT -65
+#define CONTROLLER_ERROR -66
+#define COMMUNICATION_ERROR -67
+#define OUT_OF_MEMORY -68
+#define DRIVER_ERROR -69
#define CC_SUCCESS 1
#define CC_TRB_ERROR 5