Lines Matching defs:xr
508 xhci_ring_trbv(struct xhci_ring * const xr, u_int idx)
510 return KERNADDR(&xr->xr_dma, XHCI_TRB_SIZE * idx);
514 xhci_ring_trbp(struct xhci_ring * const xr, u_int idx)
516 return DMAADDR(&xr->xr_dma, XHCI_TRB_SIZE * idx);
539 xhci_trb_get_idx(struct xhci_ring *xr, uint64_t trb_0, int *idx)
542 bus_addr_t trbp = xhci_ring_trbp(xr, 0);
547 (trb_0 - trbp) / sizeof(struct xhci_trb) >= xr->xr_ntrb) {
1993 struct xhci_ring * const xr = xs->xs_xr[dci];
2000 KASSERT(xr != NULL);
2002 xhci_host_dequeue(xr);
2005 trb.trb_0 = xhci_ring_trbp(xr, 0) | 1; /* XXX */
2207 xhci_host_dequeue(struct xhci_ring * const xr)
2210 memset(xr->xr_trb, 0, xr->xr_ntrb * XHCI_TRB_SIZE);
2211 usb_syncmem(&xr->xr_dma, 0, xr->xr_ntrb * XHCI_TRB_SIZE,
2213 memset(xr->xr_cookies, 0, xr->xr_ntrb * sizeof(*xr->xr_cookies));
2215 xr->xr_ep = 0;
2216 xr->xr_cs = 1;
2387 struct xhci_ring *xr;
2401 xr = xs->xs_xr[dci];
2404 KASSERT(xr != NULL);
2410 if (xhci_trb_get_idx(xr, trb_0, &idx)) {
2414 xx = xr->xr_cookies[idx];
2417 xr->xr_cookies[idx] = NULL;
2427 XHCI_TRB_3_TYPE_GET(le32toh(xr->xr_trb[idx].trb_3)),
2501 if (XHCI_TRB_3_TYPE_GET(le32toh(xr->xr_trb[idx].trb_3))
3024 struct xhci_ring *xr;
3027 XHCIHIST_CALLARGS("xr %#jx ntrb %#jx align %#jx",
3030 xr = kmem_zalloc(sizeof(struct xhci_ring), KM_SLEEP);
3031 DPRINTFN(1, "ring %#jx", (uintptr_t)xr, 0, 0, 0);
3034 USBMALLOC_ZERO, &xr->xr_dma);
3036 kmem_free(xr, sizeof(struct xhci_ring));
3040 mutex_init(&xr->xr_lock, MUTEX_DEFAULT, IPL_SOFTUSB);
3041 xr->xr_cookies = kmem_zalloc(sizeof(*xr->xr_cookies) * ntrb, KM_SLEEP);
3042 xr->xr_trb = xhci_ring_trbv(xr, 0);
3043 xr->xr_ntrb = ntrb;
3044 xr->is_halted = false;
3045 xhci_host_dequeue(xr);
3046 *xrp = xr;
3052 xhci_ring_free(struct xhci_softc * const sc, struct xhci_ring ** const xr)
3054 if (*xr == NULL)
3057 usb_freemem(&(*xr)->xr_dma);
3058 mutex_destroy(&(*xr)->xr_lock);
3059 kmem_free((*xr)->xr_cookies,
3060 sizeof(*(*xr)->xr_cookies) * (*xr)->xr_ntrb);
3061 kmem_free(*xr, sizeof(struct xhci_ring));
3062 *xr = NULL;
3066 xhci_ring_put(struct xhci_softc * const sc, struct xhci_ring * const xr,
3078 (uintptr_t)xr, xr->xr_ep, xr->xr_cs, 0);
3080 KASSERTMSG(ntrbs < xr->xr_ntrb, "ntrbs %zu, xr->xr_ntrb %u",
3081 ntrbs, xr->xr_ntrb);
3083 DPRINTFN(12, "xr %#jx trbs %#jx num %ju", (uintptr_t)xr,
3091 ri = xr->xr_ep;
3092 cs = xr->xr_cs;
3108 u_int firstep = xr->xr_ep;
3109 u_int firstcs = xr->xr_cs;
3115 if (ri >= (xr->xr_ntrb - 1)) {
3117 parameter = xhci_ring_trbp(xr, 0);
3121 xr->xr_cookies[ri] = NULL;
3122 xr->xr_ep = 0;
3123 xr->xr_cs ^= 1;
3124 ri = xr->xr_ep;
3125 cs = xr->xr_cs;
3131 xr->xr_cookies[ri] = cookie;
3152 xhci_trb_put(&xr->xr_trb[oldri], parameter, status, control);
3153 usb_syncmem(&xr->xr_dma, XHCI_TRB_SIZE * oldri,
3159 xr->xr_trb[firstep].trb_3 |= htole32(XHCI_TRB_3_CYCLE_BIT);
3161 xr->xr_trb[firstep].trb_3 &= ~htole32(XHCI_TRB_3_CYCLE_BIT);
3163 usb_syncmem(&xr->xr_dma, XHCI_TRB_SIZE * firstep,
3166 xr->xr_ep = ri;
3167 xr->xr_cs = cs;
3169 DPRINTFN(12, "%#jx xr_ep %#jx xr_cs %ju", (uintptr_t)xr, xr->xr_ep,
3170 xr->xr_cs, 0);
3632 struct xhci_ring *xr = xs->xs_xr[dci];
3633 mutex_enter(&xr->xr_lock);
3634 xhci_host_dequeue(xr);
3635 mutex_exit(&xr->xr_lock);