void xhci_handle_events(xhci_t *const xhci) { while (xhci_event_ready(&xhci->er)) xhci_handle_event(xhci); xhci_update_event_dq(xhci); }
static void xhci_work(struct xhci_hcd *xhci) { u32 temp; u64 temp_64; temp = xhci_readl(xhci, &xhci->op_regs->status); temp |= STS_EINT; xhci_writel(xhci, temp, &xhci->op_regs->status); temp = xhci_readl(xhci, &xhci->ir_set->irq_pending); temp |= 0x3; xhci_writel(xhci, temp, &xhci->ir_set->irq_pending); xhci_readl(xhci, &xhci->ir_set->irq_pending); xhci_handle_event(xhci); temp_64 = xhci_read_64(xhci, &xhci->ir_set->erst_dequeue); xhci_write_64(xhci, temp_64 | ERST_EHB, &xhci->ir_set->erst_dequeue); xhci_readl(xhci, &xhci->ir_set->irq_pending); }
static unsigned long xhci_wait_for_event_type(xhci_t *const xhci, const int trb_type, unsigned long *const timeout_us) { while (xhci_wait_for_event(&xhci->er, timeout_us)) { if (TRB_GET(TT, xhci->er.cur) == trb_type) break; xhci_handle_event(xhci); } return *timeout_us; }