Lines Matching defs:xr
530 xhci_ring_trbv(struct xhci_ring * const xr, u_int idx)
532 return KERNADDR(&xr->xr_dma, XHCI_TRB_SIZE * idx);
536 xhci_ring_trbp(struct xhci_ring * const xr, u_int idx)
538 return DMAADDR(&xr->xr_dma, XHCI_TRB_SIZE * idx);
561 xhci_trb_get_idx(struct xhci_ring *xr, uint64_t trb_0, int *idx)
564 bus_addr_t trbp = xhci_ring_trbp(xr, 0);
569 (trb_0 - trbp) / sizeof(struct xhci_trb) >= xr->xr_ntrb) {
2028 struct xhci_ring * const xr = xs->xs_xr[dci];
2035 KASSERT(xr != NULL);
2037 xhci_host_dequeue(xr);
2040 trb.trb_0 = xhci_ring_trbp(xr, 0) | 1; /* XXX */
2242 xhci_host_dequeue(struct xhci_ring * const xr)
2245 memset(xr->xr_trb, 0, xr->xr_ntrb * XHCI_TRB_SIZE);
2246 usb_syncmem(&xr->xr_dma, 0, xr->xr_ntrb * XHCI_TRB_SIZE,
2248 memset(xr->xr_cookies, 0, xr->xr_ntrb * sizeof(*xr->xr_cookies));
2250 xr->xr_ep = 0;
2251 xr->xr_cs = 1;
2423 struct xhci_ring *xr;
2437 xr = xs->xs_xr[dci];
2440 KASSERT(xr != NULL);
2446 if (xhci_trb_get_idx(xr, trb_0, &idx)) {
2450 xx = xr->xr_cookies[idx];
2453 xr->xr_cookies[idx] = NULL;
2463 XHCI_TRB_3_TYPE_GET(le32toh(xr->xr_trb[idx].trb_3)),
2537 if (XHCI_TRB_3_TYPE_GET(le32toh(xr->xr_trb[idx].trb_3))
3060 struct xhci_ring *xr;
3063 XHCIHIST_CALLARGS("xr %#jx ntrb %#jx align %#jx",
3066 xr = kmem_zalloc(sizeof(struct xhci_ring), KM_SLEEP);
3067 DPRINTFN(1, "ring %#jx", (uintptr_t)xr, 0, 0, 0);
3070 USBMALLOC_ZERO, &xr->xr_dma);
3072 kmem_free(xr, sizeof(struct xhci_ring));
3076 mutex_init(&xr->xr_lock, MUTEX_DEFAULT, IPL_SOFTUSB);
3077 xr->xr_cookies = kmem_zalloc(sizeof(*xr->xr_cookies) * ntrb, KM_SLEEP);
3078 xr->xr_trb = xhci_ring_trbv(xr, 0);
3079 xr->xr_ntrb = ntrb;
3080 xr->is_halted = false;
3081 xhci_host_dequeue(xr);
3082 *xrp = xr;
3088 xhci_ring_free(struct xhci_softc * const sc, struct xhci_ring ** const xr)
3090 if (*xr == NULL)
3093 usb_freemem(&(*xr)->xr_dma);
3094 mutex_destroy(&(*xr)->xr_lock);
3095 kmem_free((*xr)->xr_cookies,
3096 sizeof(*(*xr)->xr_cookies) * (*xr)->xr_ntrb);
3097 kmem_free(*xr, sizeof(struct xhci_ring));
3098 *xr = NULL;
3102 xhci_ring_put(struct xhci_softc * const sc, struct xhci_ring * const xr,
3114 (uintptr_t)xr, xr->xr_ep, xr->xr_cs, 0);
3116 KASSERTMSG(ntrbs < xr->xr_ntrb, "ntrbs %zu, xr->xr_ntrb %u",
3117 ntrbs, xr->xr_ntrb);
3119 DPRINTFN(12, "xr %#jx trbs %#jx num %ju", (uintptr_t)xr,
3127 ri = xr->xr_ep;
3128 cs = xr->xr_cs;
3144 u_int firstep = xr->xr_ep;
3145 u_int firstcs = xr->xr_cs;
3151 if (ri >= (xr->xr_ntrb - 1)) {
3153 parameter = xhci_ring_trbp(xr, 0);
3157 xr->xr_cookies[ri] = NULL;
3158 xr->xr_ep = 0;
3159 xr->xr_cs ^= 1;
3160 ri = xr->xr_ep;
3161 cs = xr->xr_cs;
3167 xr->xr_cookies[ri] = cookie;
3188 xhci_trb_put(&xr->xr_trb[oldri], parameter, status, control);
3189 usb_syncmem(&xr->xr_dma, XHCI_TRB_SIZE * oldri,
3195 xr->xr_trb[firstep].trb_3 |= htole32(XHCI_TRB_3_CYCLE_BIT);
3197 xr->xr_trb[firstep].trb_3 &= ~htole32(XHCI_TRB_3_CYCLE_BIT);
3199 usb_syncmem(&xr->xr_dma, XHCI_TRB_SIZE * firstep,
3202 xr->xr_ep = ri;
3203 xr->xr_cs = cs;
3205 DPRINTFN(12, "%#jx xr_ep %#jx xr_cs %ju", (uintptr_t)xr, xr->xr_ep,
3206 xr->xr_cs, 0);
3669 struct xhci_ring *xr = xs->xs_xr[dci];
3670 mutex_enter(&xr->xr_lock);
3671 xhci_host_dequeue(xr);
3672 mutex_exit(&xr->xr_lock);