Lines Matching defs:xp

798 xhci_skip_all(struct xhci_pipe *xp)
802 if (xp->skip) {
808 last = SIMPLEQ_FIRST(&xp->pipe.queue);
815 xfer = SIMPLEQ_FIRST(&xp->pipe.queue);
823 xp->skip = 0;
831 struct xhci_pipe *xp;
844 xp = sc->sc_sdevs[slot].pipes[dci - 1];
845 if (xp == NULL) {
856 slot, xp->ring.ntrb - xp->free_trbs));
857 xhci_skip_all(xp);
861 slot, xp->ring.ntrb - xp->free_trbs));
862 xhci_skip_all(xp);
866 slot, xp->ring.ntrb - xp->free_trbs));
867 xp->skip = 1;
873 trb_idx = (paddr - xp->ring.dma.paddr) / sizeof(struct xhci_trb);
874 if (trb_idx < 0 || trb_idx >= xp->ring.ntrb) {
876 trb_idx, xp->ring.ntrb - 1);
880 xfer = xp->pending_xfers[trb_idx];
895 if (xhci_event_xfer_generic(sc, xfer, xp, remain, trb_idx,
900 if (xhci_event_xfer_isoc(xfer, xp, remain, trb_idx, code))
911 xhci_xfer_length_generic(struct xhci_xfer *xx, struct xhci_pipe *xp,
918 ((xx->index + xp->ring.ntrb) - xx->ntrb) % (xp->ring.ntrb - 1);
921 type = letoh32(xp->ring.trbs[trb0_idx].trb_flags) &
925 xp->ring.trbs[trb0_idx].trb_status));
928 if (++trb0_idx == xp->ring.ntrb)
936 struct xhci_pipe *xp, uint32_t remain, int trb_idx,
946 xhci_xfer_length_generic(xx, xp, trb_idx) -
963 xhci_xfer_length_generic(xx, xp, trb_idx) - remain;
995 xp->halted = USBD_STALLED;
997 xp->halted = USBD_IOERROR;
1003 xp->aborted_xfer = xfer;
1009 if (xfer == xp->aborted_xfer) {
1018 xp->halted = 1;
1026 xhci_event_xfer_isoc(struct usbd_xfer *xfer, struct xhci_pipe *xp,
1037 xp->trb_processed[trb_idx] = TRB_PROCESSED_SHORT;
1040 xp->trb_processed[trb_idx] = TRB_PROCESSED_YES;
1045 ((xx->index + xp->ring.ntrb) - xx->ntrb) % (xp->ring.ntrb - 1);
1049 if ((letoh32(xp->ring.trbs[trb0_idx].trb_flags) &
1052 if (trb0_idx++ == (xp->ring.ntrb - 1))
1061 if ((letoh32(xp->ring.trbs[trb_idx].trb_flags) & XHCI_TRB_TYPE_MASK) ==
1065 trb0_idx = xp->ring.ntrb - 2;
1068 if (xp->trb_processed[trb0_idx] == TRB_PROCESSED_NO) {
1070 xp->ring.trbs[trb0_idx].trb_status));
1071 } else if (xp->trb_processed[trb0_idx] == TRB_PROCESSED_SHORT) {
1078 XHCI_TRB_LEN(letoh32(xp->ring.trbs[trb_idx].trb_status)) -
1086 if (xp->skip) {
1088 skipxfer = SIMPLEQ_FIRST(&xp->pipe.queue);
1095 xp->skip = 0;
1110 struct xhci_pipe *xp;
1135 xp = sc->sc_sdevs[slot].pipes[dci - 1];
1136 if (xp == NULL)
1140 xhci_cmd_set_tr_deq_async(sc, xp->slot, xp->dci,
1141 DEQPTR(xp->ring) | xp->ring.toggle);
1144 xp = sc->sc_sdevs[slot].pipes[dci - 1];
1145 if (xp == NULL)
1148 status = xp->halted;
1149 xp->halted = 0;
1150 if (xp->aborted_xfer != NULL) {
1151 xp->aborted_xfer->status = status;
1152 xhci_xfer_done(xp->aborted_xfer);
1153 wakeup(xp);
1209 struct xhci_pipe *xp = (struct xhci_pipe *)xfer->pipe;
1216 if (xx->index < 0 || xp->pending_xfers[xx->index] == NULL) {
1222 if (xp->aborted_xfer == xfer)
1223 xp->aborted_xfer = NULL;
1226 xp->pending_xfers[i] = NULL;
1228 i = (xp->ring.ntrb - 1);
1230 xp->free_trbs += xx->ntrb;
1231 xp->free_trbs += xx->zerotd;
1265 struct xhci_pipe *xp = (struct xhci_pipe *)pipe;
1270 KASSERT(xp->slot == 0);
1339 xp->slot = slot;
1340 xp->dci = xhci_ed2dci(ed);
1481 struct xhci_pipe *xp = (struct xhci_pipe *)pipe;
1482 struct xhci_soft_dev *sdev = &sc->sc_sdevs[xp->slot];
1529 sdev->ep_ctx[xp->dci-1]->info_lo = htole32(xhci_pipe_interval(pipe));
1530 sdev->ep_ctx[xp->dci-1]->info_hi = htole32(
1535 sdev->ep_ctx[xp->dci-1]->txinfo = htole32(xhci_get_txinfo(sc, pipe));
1536 sdev->ep_ctx[xp->dci-1]->deqp = htole64(
1537 DEQPTR(xp->ring) | xp->ring.toggle
1542 sdev->input_ctx->add_flags = htole32(XHCI_INCTX_MASK_DCI(xp->dci));
1603 struct xhci_pipe *xp = (struct xhci_pipe *)pipe;
1604 struct xhci_soft_dev *sdev = &sc->sc_sdevs[xp->slot];
1611 dev->powersrc->portno, dev->speed, xp->slot, xp->dci,
1615 if (xhci_ring_alloc(sc, &xp->ring, XHCI_MAX_XFER, XHCI_XFER_RING_ALIGN))
1618 xp->free_trbs = xp->ring.ntrb;
1619 xp->halted = 0;
1621 sdev->pipes[xp->dci - 1] = xp;
1627 if (xp->dci == 1) {
1637 error = xhci_cmd_set_address(sc, xp->slot,
1640 error = xhci_cmd_configure_ep(sc, xp->slot,
1645 xhci_ring_free(sc, &xp->ring);
1656 struct xhci_pipe *xp = (struct xhci_pipe *)pipe;
1657 struct xhci_soft_dev *sdev = &sc->sc_sdevs[xp->slot];
1664 sdev->input_ctx->drop_flags = htole32(XHCI_INCTX_MASK_DCI(xp->dci));
1669 sdev->slot_ctx->info_lo |= htole32(xhci_last_valid_dci(sdev->pipes, xp));
1672 memset(sdev->ep_ctx[xp->dci - 1], 0, sizeof(struct xhci_epctx));
1677 if (xhci_cmd_configure_ep(sc, xp->slot, sdev->ictx_dma.paddr))
1678 DPRINTF(("%s: error clearing ep (%d)\n", DEVNAME(sc), xp->dci));
1680 xhci_ring_free(sc, &xp->ring);
1681 sdev->pipes[xp->dci - 1] = NULL;
1687 if (xp->dci == 1) {
1688 xhci_cmd_slot_control(sc, &xp->slot, 0);
1689 xhci_softdev_free(sc, xp->slot);
1703 struct xhci_pipe *xp = (struct xhci_pipe *)dev->default_pipe;
1704 struct xhci_soft_dev *sdev = &sc->sc_sdevs[xp->slot];
1711 KASSERT(xp->dci == 1);
1717 error = xhci_cmd_set_address(sc, xp->slot, sdev->ictx_dma.paddr, 0);
1732 printf("%s: dev %d addr %d\n", DEVNAME(sc), xp->slot, addr);
1930 struct xhci_pipe *xp = (struct xhci_pipe *)xfer->pipe;
1933 KASSERT(xp->free_trbs >= 1);
1934 xp->free_trbs--;
1935 *togglep = xp->ring.toggle;
1939 xp->pending_xfers[xp->ring.index] = NULL;
1943 xp->pending_xfers[xp->ring.index] = xfer;
1948 xp->pending_xfers[xp->ring.index] = xfer;
1949 xx->index = xp->ring.index;
1954 xp->trb_processed[xp->ring.index] = TRB_PROCESSED_NO;
1956 return (xhci_ring_produce(sc, &xp->ring));
2331 struct xhci_pipe *xp = (struct xhci_pipe *)xfer->pipe;
2360 xp->halted = status;
2361 xp->aborted_xfer = xfer;
2364 if (xhci_cmd_stop_ep(sc, xp->slot, xp->dci)) {
2367 xp->halted = 0;
2368 xp->aborted_xfer = NULL;
2379 if (xp->aborted_xfer == NULL) {
2381 xp->halted = 0;
2392 xhci_cmd_set_tr_deq_async(sc, xp->slot, xp->dci,
2393 DEQPTR(xp->ring) | xp->ring.toggle);
2394 error = tsleep_nsec(xp, PZERO, "xhciab", XHCI_CMD_TIMEOUT);
2921 struct xhci_pipe *xp = (struct xhci_pipe *)xfer->pipe;
2929 if (sc->sc_bus.dying || xp->halted)
2932 if (xp->free_trbs < 3)
2954 bus_dmamap_sync(xp->ring.dma.tag, xp->ring.dma.map,
2955 TRBOFF(&xp->ring, trb0), sizeof(struct xhci_trb),
2973 bus_dmamap_sync(xp->ring.dma.tag, xp->ring.dma.map,
2974 TRBOFF(&xp->ring, trb), sizeof(struct xhci_trb),
2989 bus_dmamap_sync(xp->ring.dma.tag, xp->ring.dma.map,
2990 TRBOFF(&xp->ring, trb), sizeof(struct xhci_trb),
2995 bus_dmamap_sync(xp->ring.dma.tag, xp->ring.dma.map,
2996 TRBOFF(&xp->ring, trb0), sizeof(struct xhci_trb),
3000 XDWRITE4(sc, XHCI_DOORBELL(xp->slot), xp->dci);
3035 struct xhci_pipe *xp = (struct xhci_pipe *)xfer->pipe;
3045 if (sc->sc_bus.dying || xp->halted)
3063 if (xp->free_trbs < (ntrb + zerotd))
3083 bus_dmamap_sync(xp->ring.dma.tag, xp->ring.dma.map,
3084 TRBOFF(&xp->ring, trb0), sizeof(struct xhci_trb),
3108 bus_dmamap_sync(xp->ring.dma.tag, xp->ring.dma.map,
3109 TRBOFF(&xp->ring, trb), sizeof(struct xhci_trb),
3122 bus_dmamap_sync(xp->ring.dma.tag, xp->ring.dma.map,
3123 TRBOFF(&xp->ring, trb), sizeof(struct xhci_trb),
3129 bus_dmamap_sync(xp->ring.dma.tag, xp->ring.dma.map,
3130 TRBOFF(&xp->ring, trb0), sizeof(struct xhci_trb),
3134 XDWRITE4(sc, XHCI_DOORBELL(xp->slot), xp->dci);
3181 struct xhci_pipe *xp = (struct xhci_pipe *)xfer->pipe;
3201 if (sc->sc_bus.dying || xp->halted)
3223 if (xp->free_trbs < ntrb)
3253 &xp->ring.trbs[0], (trb - &xp->ring.trbs[0]), ntrb, paddr,
3277 bus_dmamap_sync(xp->ring.dma.tag, xp->ring.dma.map,
3278 TRBOFF(&xp->ring, trb), sizeof(struct xhci_trb),
3296 &xp->ring.trbs[0], (trb - &xp->ring.trbs[0]), ntrb,
3306 bus_dmamap_sync(xp->ring.dma.tag, xp->ring.dma.map,
3307 TRBOFF(&xp->ring, trb), sizeof(struct xhci_trb),
3319 bus_dmamap_sync(xp->ring.dma.tag, xp->ring.dma.map,
3320 TRBOFF(&xp->ring, trb0), sizeof(struct xhci_trb),
3324 XDWRITE4(sc, XHCI_DOORBELL(xp->slot), xp->dci);