Lines Matching defs:xfer

67 	 * XXX used to pass the xfer pointer back to the
107 void xhci_xfer_done(struct usbd_xfer *xfer);
800 struct usbd_xfer *xfer, *last;
811 while ((xfer = SIMPLEQ_NEXT(last, next)) != NULL)
812 last = xfer;
815 xfer = SIMPLEQ_FIRST(&xp->pipe.queue);
816 if (xfer == NULL)
818 DPRINTF(("%s: skipping %p\n", __func__, xfer));
819 xfer->status = USBD_NORMAL_COMPLETION;
820 xhci_xfer_done(xfer);
821 } while (xfer != last);
832 struct usbd_xfer *xfer;
880 xfer = xp->pending_xfers[trb_idx];
881 if (xfer == NULL) {
882 DPRINTF(("%s: NULL xfer pointer\n", DEVNAME(sc)));
886 if (remain > xfer->length)
887 remain = xfer->length;
889 xfertype = UE_GET_XFERTYPE(xfer->pipe->endpoint->edesc->bmAttributes);
895 if (xhci_event_xfer_generic(sc, xfer, xp, remain, trb_idx,
900 if (xhci_event_xfer_isoc(xfer, xp, remain, trb_idx, code))
904 panic("xhci_event_xfer: unknown xfer type %u", xfertype);
907 xhci_xfer_done(xfer);
935 xhci_event_xfer_generic(struct xhci_softc *sc, struct usbd_xfer *xfer,
939 struct xhci_xfer *xx = (struct xhci_xfer *)xfer;
943 if (xfer->actlen == 0) {
945 xfer->actlen =
949 xfer->actlen = xfer->length;
951 if (xfer->actlen)
952 usb_syncmem(&xfer->dmabuf, 0, xfer->actlen,
953 usbd_xfer_isread(xfer) ?
955 xfer->status = USBD_NORMAL_COMPLETION;
961 if (xfer->actlen == 0)
962 xfer->actlen =
971 DPRINTF(("%s: short xfer %p for %u\n",
972 DEVNAME(sc), xfer, xx->index));
975 if (xfer->actlen)
976 usb_syncmem(&xfer->dmabuf, 0, xfer->actlen,
977 usbd_xfer_isread(xfer) ?
979 xfer->status = USBD_NORMAL_COMPLETION;
984 xfer->status = USBD_IOERROR;
990 timeout_del(&xfer->timeout_handle);
991 usb_rem_task(xfer->device, &xfer->abort_task);
1003 xp->aborted_xfer = xfer;
1009 if (xfer == xp->aborted_xfer) {
1010 DPRINTF(("%s: stopped xfer=%p\n", __func__, xfer));
1017 xfer->status = USBD_IOERROR;
1026 xhci_event_xfer_isoc(struct usbd_xfer *xfer, struct xhci_pipe *xp,
1030 struct xhci_xfer *xx = (struct xhci_xfer *)xfer;
1069 xfer->frlengths[frame_idx] = XHCI_TRB_LEN(letoh32(
1077 xfer->frlengths[frame_idx] +=
1080 xfer->actlen += xfer->frlengths[frame_idx];
1089 if (skipxfer == xfer || skipxfer == NULL)
1098 usb_syncmem(&xfer->dmabuf, 0, xfer->length,
1099 usbd_xfer_isread(xfer) ?
1101 xfer->status = USBD_NORMAL_COMPLETION;
1182 struct usbd_xfer *xfer = sc->sc_intrxfer;
1191 if (xfer == NULL)
1194 p = KERNADDR(&xfer->dmabuf, 0);
1195 memset(p, 0, xfer->length);
1200 xfer->actlen = xfer->length;
1201 xfer->status = USBD_NORMAL_COMPLETION;
1203 usb_transfer_complete(xfer);
1207 xhci_xfer_done(struct usbd_xfer *xfer)
1209 struct xhci_pipe *xp = (struct xhci_pipe *)xfer->pipe;
1210 struct xhci_xfer *xx = (struct xhci_xfer *)xfer;
1217 printf("%s: xfer=%p done (idx=%d, ntrb=%zd)\n", __func__,
1218 xfer, xx->index, xx->ntrb);
1222 if (xp->aborted_xfer == xfer)
1236 timeout_del(&xfer->timeout_handle);
1237 usb_rem_task(xfer->device, &xfer->abort_task);
1238 usb_transfer_complete(xfer);
1746 xhci_freex(struct usbd_bus *bus, struct usbd_xfer *xfer)
1748 pool_put(xhcixfer, xfer);
1927 xhci_xfer_get_trb(struct xhci_softc *sc, struct usbd_xfer *xfer,
1930 struct xhci_pipe *xp = (struct xhci_pipe *)xfer->pipe;
1931 struct xhci_xfer *xx = (struct xhci_xfer *)xfer;
1943 xp->pending_xfers[xp->ring.index] = xfer;
1948 xp->pending_xfers[xp->ring.index] = xfer;
2328 xhci_abort_xfer(struct usbd_xfer *xfer, usbd_status status)
2330 struct xhci_softc *sc = (struct xhci_softc *)xfer->device->bus;
2331 struct xhci_pipe *xp = (struct xhci_pipe *)xfer->pipe;
2336 DPRINTF(("%s: xfer=%p status=%s err=%s actlen=%d len=%d idx=%d\n",
2337 __func__, xfer, usbd_errstr(xfer->status), usbd_errstr(status),
2338 xfer->actlen, xfer->length, ((struct xhci_xfer *)xfer)->index));
2341 if (sc->sc_bus.dying || xfer->status == USBD_NOT_STARTED) {
2342 xfer->status = status;
2343 timeout_del(&xfer->timeout_handle);
2344 usb_rem_task(xfer->device, &xfer->abort_task);
2345 usb_transfer_complete(xfer);
2350 if (xfer->status != USBD_IN_PROGRESS) {
2356 timeout_del(&xfer->timeout_handle);
2357 usb_rem_task(xfer->device, &xfer->abort_task);
2361 xp->aborted_xfer = xfer;
2369 xfer->status = status;
2370 usb_transfer_complete(xfer);
2402 struct usbd_xfer *xfer = addr;
2403 struct xhci_softc *sc = (struct xhci_softc *)xfer->device->bus;
2410 usb_init_task(&xfer->abort_task, xhci_timeout_task, addr,
2412 usb_add_task(xfer->device, &xfer->abort_task);
2418 struct usbd_xfer *xfer = addr;
2422 xhci_abort_xfer(xfer, USBD_TIMEOUT);
2427 xhci_root_ctrl_transfer(struct usbd_xfer *xfer)
2431 err = usb_insert_transfer(xfer);
2435 return (xhci_root_ctrl_start(SIMPLEQ_FIRST(&xfer->pipe->queue)));
2439 xhci_root_ctrl_start(struct usbd_xfer *xfer)
2441 struct xhci_softc *sc = (struct xhci_softc *)xfer->device->bus;
2453 KASSERT(xfer->rqflags & URQ_REQUEST);
2458 req = &xfer->request;
2468 buf = KERNADDR(&xfer->dmabuf, 0);
2790 xfer->actlen = totlen;
2793 xfer->status = err;
2795 usb_transfer_complete(xfer);
2802 xhci_noop(struct usbd_xfer *xfer)
2808 xhci_root_intr_transfer(struct usbd_xfer *xfer)
2812 err = usb_insert_transfer(xfer);
2816 return (xhci_root_intr_start(SIMPLEQ_FIRST(&xfer->pipe->queue)));
2820 xhci_root_intr_start(struct usbd_xfer *xfer)
2822 struct xhci_softc *sc = (struct xhci_softc *)xfer->device->bus;
2827 sc->sc_intrxfer = xfer;
2833 xhci_root_intr_abort(struct usbd_xfer *xfer)
2835 struct xhci_softc *sc = (struct xhci_softc *)xfer->device->bus;
2840 xfer->status = USBD_CANCELLED;
2842 usb_transfer_complete(xfer);
2847 xhci_root_intr_done(struct usbd_xfer *xfer)
2857 xhci_xfer_tdsize(struct usbd_xfer *xfer, uint32_t remain, uint32_t len)
2859 uint32_t npkt, mps = UGETW(xfer->pipe->endpoint->edesc->wMaxPacketSize);
2877 xhci_xfer_tbc(struct usbd_xfer *xfer, uint32_t len, uint32_t *tlbpc)
2879 uint32_t mps = UGETW(xfer->pipe->endpoint->edesc->wMaxPacketSize);
2888 maxb = xhci_pipe_maxburst(xfer->pipe);
2892 if (xfer->device->speed == USB_SPEED_SUPER) {
2906 xhci_device_ctrl_transfer(struct usbd_xfer *xfer)
2910 err = usb_insert_transfer(xfer);
2914 return (xhci_device_ctrl_start(SIMPLEQ_FIRST(&xfer->pipe->queue)));
2918 xhci_device_ctrl_start(struct usbd_xfer *xfer)
2920 struct xhci_softc *sc = (struct xhci_softc *)xfer->device->bus;
2921 struct xhci_pipe *xp = (struct xhci_pipe *)xfer->pipe;
2923 uint32_t flags, len = UGETW(xfer->request.wLength);
2927 KASSERT(xfer->rqflags & URQ_REQUEST);
2936 usb_syncmem(&xfer->dmabuf, 0, len,
2937 usbd_xfer_isread(xfer) ?
2941 trb0 = xhci_xfer_get_trb(sc, xfer, &toggle, 0);
2945 if (usbd_xfer_isread(xfer))
2951 memcpy(&trb0->trb_paddr, &xfer->request, sizeof(trb0->trb_paddr));
2960 trb = xhci_xfer_get_trb(sc, xfer, &toggle, 0);
2963 if (usbd_xfer_isread(xfer))
2966 trb->trb_paddr = htole64(DMAADDR(&xfer->dmabuf, 0));
2969 xhci_xfer_tdsize(xfer, len, len)
2979 trb = xhci_xfer_get_trb(sc, xfer, &toggle, 1);
2982 if (len == 0 || !usbd_xfer_isread(xfer))
3002 xfer->status = USBD_IN_PROGRESS;
3003 if (xfer->timeout && !sc->sc_bus.use_polling) {
3004 timeout_del(&xfer->timeout_handle);
3005 timeout_set(&xfer->timeout_handle, xhci_timeout, xfer);
3006 timeout_add_msec(&xfer->timeout_handle, xfer->timeout);
3014 xhci_device_ctrl_abort(struct usbd_xfer *xfer)
3016 xhci_abort_xfer(xfer, USBD_CANCELLED);
3020 xhci_device_generic_transfer(struct usbd_xfer *xfer)
3024 err = usb_insert_transfer(xfer);
3028 return (xhci_device_generic_start(SIMPLEQ_FIRST(&xfer->pipe->queue)));
3032 xhci_device_generic_start(struct usbd_xfer *xfer)
3034 struct xhci_softc *sc = (struct xhci_softc *)xfer->device->bus;
3035 struct xhci_pipe *xp = (struct xhci_pipe *)xfer->pipe;
3038 uint32_t mps = UGETW(xfer->pipe->endpoint->edesc->wMaxPacketSize);
3039 uint64_t paddr = DMAADDR(&xfer->dmabuf, 0);
3043 KASSERT(!(xfer->rqflags & URQ_REQUEST));
3049 ntrb = howmany(xfer->length, XHCI_TRB_MAXSIZE);
3053 if (len < xfer->length)
3054 ntrb = howmany(xfer->length - len, XHCI_TRB_MAXSIZE) + 1;
3056 len = xfer->length;
3059 if ((xfer->flags & USBD_FORCE_SHORT_XFER || xfer->length == 0) &&
3060 (xfer->length % UE_GET_SIZE(mps) == 0))
3066 usb_syncmem(&xfer->dmabuf, 0, xfer->length,
3067 usbd_xfer_isread(xfer) ?
3071 trb0 = xhci_xfer_get_trb(sc, xfer, &toggle, (ntrb == 1));
3073 if (usbd_xfer_isread(xfer))
3077 trb0->trb_paddr = htole64(DMAADDR(&xfer->dmabuf, 0));
3080 xhci_xfer_tdsize(xfer, xfer->length, len)
3087 remain = xfer->length - len;
3095 trb = xhci_xfer_get_trb(sc, xfer, &toggle, (i == 1));
3097 if (usbd_xfer_isread(xfer))
3104 xhci_xfer_tdsize(xfer, remain, len)
3118 trb = xhci_xfer_get_trb(sc, xfer, &toggle, -1);
3136 xfer->status = USBD_IN_PROGRESS;
3137 if (xfer->timeout && !sc->sc_bus.use_polling) {
3138 timeout_del(&xfer->timeout_handle);
3139 timeout_set(&xfer->timeout_handle, xhci_timeout, xfer);
3140 timeout_add_msec(&xfer->timeout_handle, xfer->timeout);
3148 xhci_device_generic_done(struct usbd_xfer *xfer)
3151 if (xfer->pipe->repeat) {
3152 xfer->actlen = 0;
3153 xhci_device_generic_start(xfer);
3158 xhci_device_generic_abort(struct usbd_xfer *xfer)
3160 KASSERT(!xfer->pipe->repeat || xfer->pipe->intrxfer == xfer);
3162 xhci_abort_xfer(xfer, USBD_CANCELLED);
3166 xhci_device_isoc_transfer(struct usbd_xfer *xfer)
3170 err = usb_insert_transfer(xfer);
3174 return (xhci_device_isoc_start(xfer));
3178 xhci_device_isoc_start(struct usbd_xfer *xfer)
3180 struct xhci_softc *sc = (struct xhci_softc *)xfer->device->bus;
3181 struct xhci_pipe *xp = (struct xhci_pipe *)xfer->pipe;
3182 struct xhci_xfer *xx = (struct xhci_xfer *)xfer;
3187 int s, i, j, ntrb = xfer->nframes;
3190 KASSERT(!(xfer->rqflags & URQ_REQUEST));
3195 * this when another xfer completes. So, check if this is already
3208 paddr = DMAADDR(&xfer->dmabuf, 0);
3211 for (i = 0, ntrb = 0; i < xfer->nframes; i++) {
3213 ntrb += howmany(xfer->frlengths[i], XHCI_TRB_MAXSIZE);
3217 if (len < xfer->frlengths[i])
3220 paddr += xfer->frlengths[i];
3226 usb_syncmem(&xfer->dmabuf, 0, xfer->length,
3227 usbd_xfer_isread(xfer) ?
3230 paddr = DMAADDR(&xfer->dmabuf, 0);
3232 for (i = 0, trb0 = NULL; i < xfer->nframes; i++) {
3234 ntrb = howmany(xfer->frlengths[i], XHCI_TRB_MAXSIZE);
3238 if (len < xfer->frlengths[i])
3241 len = xfer->frlengths[i];
3249 trb = xhci_xfer_get_trb(sc, xfer, &toggle, (ntrb == 1));
3263 if (usbd_xfer_isread(xfer))
3267 tbc = xhci_xfer_tbc(xfer, xfer->frlengths[i], &tlbpc);
3273 xhci_xfer_tdsize(xfer, xfer->frlengths[i], len)
3281 remain = xfer->frlengths[i] - len;
3289 trb = xhci_xfer_get_trb(sc, xfer, &toggle, (j == 1));
3291 if (usbd_xfer_isread(xfer))
3302 xhci_xfer_tdsize(xfer, remain, len)
3314 xfer->frlengths[i] = 0;
3326 xfer->status = USBD_IN_PROGRESS;
3328 if (xfer->timeout) {
3329 timeout_del(&xfer->timeout_handle);
3330 timeout_set(&xfer->timeout_handle, xhci_timeout, xfer);
3331 timeout_add_msec(&xfer->timeout_handle, xfer->timeout);