Lines Matching defs:xfer

852 	struct usbd_xfer *xfer;
859 xfer = sc->sc_intrxfer;
861 if (xfer == NULL) {
865 KASSERT(xfer->ux_status == USBD_IN_PROGRESS);
867 p = xfer->ux_buf;
868 m = uimin(sc->sc_noport, xfer->ux_length * 8 - 1);
869 memset(p, 0, xfer->ux_length);
877 xfer->ux_actlen = xfer->ux_length;
878 xfer->ux_status = USBD_NORMAL_COMPLETION;
880 usb_transfer_complete(xfer);
965 "xfer %p xt %d fsqtd %p lsqtd %p", ex, ex->ex_type, fsqtd, lsqtd);
993 /* If there's an active QTD the xfer isn't done. */
996 /* Any kind of error makes the xfer done. */
1043 "xfer %p fitd %p litd %p", ex, ex->ex_itdstart, ex->ex_itdend);
1088 "xfer %p fsitd %p lsitd %p", ex, ex->ex_sitdstart, ex->ex_sitdend);
1116 struct usbd_xfer *xfer = &ex->ex_xfer;
1117 struct ehci_pipe *epipe = EHCI_XFER2EPIPE(xfer);
1118 struct ehci_softc *sc = EHCI_XFER2SC(xfer);
1128 * Try to claim this xfer for completion. If it has already
1131 if (!usbd_xfer_trycomplete(xfer))
1142 KASSERTMSG(!ex->ex_isdone, "xfer %p type %d status %d", xfer,
1143 ex->ex_type, xfer->ux_status);
1147 DPRINTF("xfer=%#jx, pipe=%#jx ready", (uintptr_t)xfer,
1165 i = xfer->ux_pipe->up_endpoint->ue_edesc->bInterval;
1180 * an xfer.
1182 if (nframes >= xfer->ux_nframes)
1190 xfer->ux_frlengths[nframes++] = len;
1197 if (nframes >= xfer->ux_nframes)
1201 xfer->ux_actlen = actlen;
1202 xfer->ux_status = USBD_NORMAL_COMPLETION;
1223 * an xfer.
1225 if (nframes >= xfer->ux_nframes)
1237 len = xfer->ux_frlengths[nframes];
1244 xfer->ux_frlengths[nframes] -= len;
1246 actlen += xfer->ux_frlengths[nframes++];
1248 if (nframes >= xfer->ux_nframes)
1252 xfer->ux_actlen = actlen;
1253 xfer->ux_status = USBD_NORMAL_COMPLETION;
1295 xfer->ux_pipe->up_dev->ud_pipe0 != xfer->ux_pipe) {
1305 DPRINTF("len=%jd actlen=%jd status=0x%08jx", xfer->ux_length, actlen,
1307 xfer->ux_actlen = actlen;
1311 xfer->ux_pipe->up_dev->ud_addr,
1312 xfer->ux_pipe->up_endpoint->ue_edesc->bEndpointAddress,
1341 xfer->ux_status = USBD_STALLED;
1343 xfer->ux_status = USBD_IOERROR; /* more info XXX */
1352 xfer->ux_status = USBD_NORMAL_COMPLETION;
1598 struct usbd_xfer *xfer;
1600 xfer = pool_cache_get(sc->sc_xferpool, PR_WAITOK);
1601 if (xfer != NULL) {
1602 memset(xfer, 0, sizeof(*xfer));
1605 struct ehci_xfer *ex = EHCI_XFER2EXFER(xfer);
1607 xfer->ux_state = XFER_BUSY;
1610 return xfer;
1614 ehci_freex(struct usbd_bus *bus, struct usbd_xfer *xfer)
1617 struct ehci_xfer *ex __diagused = EHCI_XFER2EXFER(xfer);
1619 KASSERTMSG(xfer->ux_state == XFER_BUSY ||
1620 xfer->ux_status == USBD_NOT_STARTED,
1621 "xfer %p state %d\n", xfer, xfer->ux_state);
1622 KASSERT(ex->ex_isdone || xfer->ux_status == USBD_NOT_STARTED);
1625 xfer->ux_state = XFER_FREE;
1628 pool_cache_put(sc->sc_xferpool, xfer);
2151 DPRINTF("bad xfer type %jd", xfertype, 0, 0, 0);
2825 ehci_root_intr_transfer(struct usbd_xfer *xfer)
2829 return ehci_root_intr_start(SIMPLEQ_FIRST(&xfer->ux_pipe->up_queue));
2833 ehci_root_intr_start(struct usbd_xfer *xfer)
2835 ehci_softc_t *sc = EHCI_XFER2SC(xfer);
2843 sc->sc_intrxfer = xfer;
2844 xfer->ux_status = USBD_IN_PROGRESS;
2851 ehci_root_intr_abort(struct usbd_xfer *xfer)
2853 ehci_softc_t *sc = EHCI_XFER2SC(xfer);
2856 KASSERT(xfer->ux_pipe->up_intrxfer == xfer);
2858 /* If xfer has already completed, nothing to do here. */
2866 KASSERT(sc->sc_intrxfer == xfer);
2867 KASSERT(xfer->ux_status == USBD_IN_PROGRESS);
2868 xfer->ux_status = USBD_CANCELLED;
2869 usb_transfer_complete(xfer);
2883 * Caller must guarantee the xfer has completed first, by
2890 ehci_root_intr_done(struct usbd_xfer *xfer)
2892 struct ehci_softc *sc = EHCI_XFER2SC(xfer);
2896 /* Claim the xfer so it doesn't get completed again. */
2897 KASSERT(sc->sc_intrxfer == xfer);
2898 KASSERT(xfer->ux_status != USBD_IN_PROGRESS);
3022 sqtd->xfer = NULL;
3038 ehci_alloc_sqtd_chain(ehci_softc_t *sc, struct usbd_xfer *xfer,
3041 struct ehci_xfer *exfer = EHCI_XFER2EXFER(xfer);
3042 uint16_t flags = xfer->ux_flags;
3056 DPRINTF("xfer %#jx len %jd nsqtd %jd flags %jx", (uintptr_t)xfer,
3065 cur->xfer = xfer;
3114 ehci_reset_sqtd_chain(ehci_softc_t *sc, struct usbd_xfer *xfer,
3117 struct ehci_xfer *exfer = EHCI_XFER2EXFER(xfer);
3118 usb_dma_t *dma = &xfer->ux_dmabuf;
3119 uint16_t flags = xfer->ux_flags;
3122 int mps = UGETW(xfer->ux_pipe->up_endpoint->ue_edesc->wMaxPacketSize);
3126 DPRINTF("xfer=%#jx len %jd isread %jd toggle %jd", (uintptr_t)xfer,
3128 DPRINTF(" VA %#jx", (uintptr_t)KERNADDR(&xfer->ux_dmabuf, 0),
3194 (uintptr_t)DMAADDR(&xfer->ux_dmabuf, curoffs), curlen, 0);
3205 KASSERTMSG(len == 0, "xfer %p olen %d len %d mps %d ex_nsqtd %zu j %zu",
3206 xfer, length, len, mps, exfer->ex_nsqtd, j);
3383 ehci_abortx(struct usbd_xfer *xfer)
3386 struct ehci_pipe *epipe = EHCI_XFER2EPIPE(xfer);
3387 struct ehci_xfer *exfer = EHCI_XFER2EXFER(xfer);
3388 ehci_softc_t *sc = EHCI_XFER2SC(xfer);
3395 DPRINTF("xfer=%#jx pipe=%#jx", (uintptr_t)xfer, (uintptr_t)epipe, 0, 0);
3400 KASSERTMSG((xfer->ux_status == USBD_CANCELLED ||
3401 xfer->ux_status == USBD_TIMEOUT),
3402 "bad abort status: %d", xfer->ux_status);
3413 * HC Step 1: Make interrupt routine and hardware ignore xfer.
3451 * use of the xfer.
3456 * HC Step 3: Remove any vestiges of the xfer from the hardware.
3458 * beyond the xfer we're trying to abort. So as we're scanning
3459 * the TDs of this xfer we check if the hardware points to
3475 /* Zap curqtd register if hardware pointed inside the xfer. */
3506 ehci_abort_isoc_xfer(struct usbd_xfer *xfer, usbd_status status)
3519 exfer = EHCI_XFER2EXFER(xfer);
3520 sc = EHCI_XFER2SC(xfer);
3522 DPRINTF("xfer %#jx pipe %#jx", (uintptr_t)xfer,
3523 (uintptr_t)xfer->ux_pipe, 0, 0);
3531 * The xfer cannot have been cancelled already. It is the
3536 KASSERT(xfer->ux_status != USBD_CANCELLED);
3539 if (xfer->ux_status != USBD_IN_PROGRESS)
3543 xfer->ux_status = status;
3554 * HC Step 1: Make interrupt routine and hardware ignore xfer.
3558 if (xfer->ux_pipe->up_dev->ud_speed == USB_SPEED_HIGH) {
3600 usb_transfer_complete(xfer);
3609 ehci_device_ctrl_init(struct usbd_xfer *xfer)
3611 struct ehci_xfer *exfer = EHCI_XFER2EXFER(xfer);
3612 struct ehci_pipe *epipe = EHCI_XFER2EPIPE(xfer);
3613 ehci_softc_t *sc = EHCI_XFER2SC(xfer);
3614 usb_device_request_t *req = &xfer->ux_request;
3617 int len = xfer->ux_bufsize;
3639 err = ehci_alloc_sqtd_chain(sc, xfer, len, isread,
3658 setup->xfer = xfer;
3670 status->xfer = xfer;
3683 ehci_device_ctrl_fini(struct usbd_xfer *xfer)
3685 ehci_softc_t *sc = EHCI_XFER2SC(xfer);
3686 struct ehci_xfer *ex = EHCI_XFER2EXFER(xfer);
3699 ehci_device_ctrl_transfer(struct usbd_xfer *xfer)
3703 return ehci_device_ctrl_start(SIMPLEQ_FIRST(&xfer->ux_pipe->up_queue));
3707 ehci_device_ctrl_start(struct usbd_xfer *xfer)
3709 struct ehci_pipe *epipe = EHCI_XFER2EPIPE(xfer);
3710 struct ehci_xfer *exfer = EHCI_XFER2EXFER(xfer);
3711 usb_device_request_t *req = &xfer->ux_request;
3712 ehci_softc_t *sc = EHCI_XFER2SC(xfer);
3719 KASSERT(xfer->ux_rqflags & URQ_REQUEST);
3807 ehci_reset_sqtd_chain(sc, xfer, len, isread, &toggle, &end);
3815 usb_syncmem(&xfer->ux_dmabuf, 0, len,
3840 xfer->ux_status = USBD_IN_PROGRESS;
3841 usbd_xfer_schedule_timeout(xfer);
3858 ehci_device_ctrl_done(struct usbd_xfer *xfer)
3860 ehci_softc_t *sc __diagused = EHCI_XFER2SC(xfer);
3861 struct ehci_pipe *epipe = EHCI_XFER2EPIPE(xfer);
3862 usb_device_request_t *req = &xfer->ux_request;
3867 DPRINTF("xfer=%#jx", (uintptr_t)xfer, 0, 0, 0);
3870 KASSERT(xfer->ux_rqflags & URQ_REQUEST);
3875 usb_syncmem(&xfer->ux_dmabuf, 0, len,
3878 DPRINTF("length=%jd", xfer->ux_actlen, 0, 0, 0);
3883 ehci_device_ctrl_abort(struct usbd_xfer *xfer)
3887 DPRINTF("xfer=%#jx", (uintptr_t)xfer, 0, 0, 0);
3888 usbd_xfer_abort(xfer);
3933 ehci_device_bulk_init(struct usbd_xfer *xfer)
3935 ehci_softc_t *sc = EHCI_XFER2SC(xfer);
3936 struct ehci_xfer *exfer = EHCI_XFER2EXFER(xfer);
3937 usb_endpoint_descriptor_t *ed = xfer->ux_pipe->up_endpoint->ue_edesc;
3940 int len = xfer->ux_bufsize;
3945 err = ehci_alloc_sqtd_chain(sc, xfer, len, isread,
3952 ehci_device_bulk_fini(struct usbd_xfer *xfer)
3954 ehci_softc_t *sc = EHCI_XFER2SC(xfer);
3955 struct ehci_xfer *ex = EHCI_XFER2EXFER(xfer);
3965 ehci_device_bulk_transfer(struct usbd_xfer *xfer)
3969 return ehci_device_bulk_start(SIMPLEQ_FIRST(&xfer->ux_pipe->up_queue));
3973 ehci_device_bulk_start(struct usbd_xfer *xfer)
3975 struct ehci_pipe *epipe = EHCI_XFER2EPIPE(xfer);
3976 struct ehci_xfer *exfer = EHCI_XFER2EXFER(xfer);
3977 ehci_softc_t *sc = EHCI_XFER2SC(xfer);
3984 DPRINTF("xfer=%#jx len=%jd flags=%jd", (uintptr_t)xfer, xfer->ux_length,
3985 xfer->ux_flags, 0);
3992 KASSERT(!(xfer->ux_rqflags & URQ_REQUEST));
3993 KASSERT(xfer->ux_length <= xfer->ux_bufsize);
3995 len = xfer->ux_length;
4005 ehci_reset_sqtd_chain(sc, xfer, len, isread, &epipe->nexttoggle, &end);
4019 if (xfer->ux_length)
4020 usb_syncmem(&xfer->ux_dmabuf, 0, xfer->ux_length,
4026 xfer->ux_status = USBD_IN_PROGRESS;
4027 usbd_xfer_schedule_timeout(xfer);
4049 ehci_device_bulk_abort(struct usbd_xfer *xfer)
4053 DPRINTF("xfer %#jx", (uintptr_t)xfer, 0, 0, 0);
4054 usbd_xfer_abort(xfer);
4076 ehci_device_bulk_done(struct usbd_xfer *xfer)
4078 ehci_softc_t *sc __diagused = EHCI_XFER2SC(xfer);
4079 struct ehci_pipe *epipe = EHCI_XFER2EPIPE(xfer);
4085 DPRINTF("xfer=%#jx, actlen=%jd", (uintptr_t)xfer, xfer->ux_actlen, 0, 0);
4089 if (xfer->ux_length)
4090 usb_syncmem(&xfer->ux_dmabuf, 0, xfer->ux_length,
4093 DPRINTF("length=%jd", xfer->ux_actlen, 0, 0, 0);
4124 ehci_device_intr_init(struct usbd_xfer *xfer)
4126 struct ehci_xfer *exfer = EHCI_XFER2EXFER(xfer);
4127 ehci_softc_t *sc = EHCI_XFER2SC(xfer);
4128 usb_endpoint_descriptor_t *ed = xfer->ux_pipe->up_endpoint->ue_edesc;
4131 int len = xfer->ux_bufsize;
4136 DPRINTF("xfer=%#jx len=%jd flags=%jd", (uintptr_t)xfer, xfer->ux_length,
4137 xfer->ux_flags, 0);
4139 KASSERT(!(xfer->ux_rqflags & URQ_REQUEST));
4144 err = ehci_alloc_sqtd_chain(sc, xfer, len, isread,
4151 ehci_device_intr_fini(struct usbd_xfer *xfer)
4153 ehci_softc_t *sc = EHCI_XFER2SC(xfer);
4154 struct ehci_xfer *ex = EHCI_XFER2EXFER(xfer);
4164 ehci_device_intr_transfer(struct usbd_xfer *xfer)
4168 return ehci_device_intr_start(SIMPLEQ_FIRST(&xfer->ux_pipe->up_queue));
4172 ehci_device_intr_start(struct usbd_xfer *xfer)
4174 struct ehci_pipe *epipe = EHCI_XFER2EPIPE(xfer);
4175 struct ehci_xfer *exfer = EHCI_XFER2EXFER(xfer);
4176 ehci_softc_t *sc = EHCI_XFER2SC(xfer);
4183 DPRINTF("xfer=%#jx len=%jd flags=%jd", (uintptr_t)xfer, xfer->ux_length,
4184 xfer->ux_flags, 0);
4191 KASSERT(!(xfer->ux_rqflags & URQ_REQUEST));
4192 KASSERT(xfer->ux_length <= xfer->ux_bufsize);
4194 len = xfer->ux_length;
4204 ehci_reset_sqtd_chain(sc, xfer, len, isread, &epipe->nexttoggle, &end);
4218 if (xfer->ux_length)
4219 usb_syncmem(&xfer->ux_dmabuf, 0, xfer->ux_length,
4225 xfer->ux_status = USBD_IN_PROGRESS;
4226 usbd_xfer_schedule_timeout(xfer);
4244 ehci_device_intr_abort(struct usbd_xfer *xfer)
4248 DPRINTF("xfer=%#jx", (uintptr_t)xfer, 0, 0, 0);
4255 usbd_xfer_abort(xfer);
4272 ehci_device_intr_done(struct usbd_xfer *xfer)
4274 ehci_softc_t *sc __diagused = EHCI_XFER2SC(xfer);
4275 struct ehci_pipe *epipe = EHCI_XFER2EPIPE(xfer);
4279 DPRINTF("xfer=%#jx, actlen=%jd", (uintptr_t)xfer, xfer->ux_actlen, 0, 0);
4283 if (xfer->ux_length) {
4288 usb_syncmem(&xfer->ux_dmabuf, 0, xfer->ux_length,
4295 ehci_device_fs_isoc_init(struct usbd_xfer *xfer)
4297 struct ehci_pipe *epipe = EHCI_PIPE2EPIPE(xfer->ux_pipe);
4298 struct usbd_device *dev = xfer->ux_pipe->up_dev;
4299 ehci_softc_t *sc = EHCI_XFER2SC(xfer);
4300 struct ehci_xfer *exfer = EHCI_XFER2EXFER(xfer);
4311 DPRINTF("xfer %#jx len %jd flags %jd", (uintptr_t)xfer, xfer->ux_length,
4312 xfer->ux_flags, 0);
4314 KASSERT(!(xfer->ux_rqflags & URQ_REQUEST));
4315 KASSERT(xfer->ux_nframes != 0);
4329 frames = xfer->ux_nframes;
4386 ehci_device_fs_isoc_fini(struct usbd_xfer *xfer)
4388 ehci_softc_t *sc = EHCI_XFER2SC(xfer);
4389 struct ehci_xfer *ex = EHCI_XFER2EXFER(xfer);
4397 ehci_device_fs_isoc_transfer(struct usbd_xfer *xfer)
4399 ehci_softc_t *sc = EHCI_XFER2SC(xfer);
4400 struct ehci_pipe *epipe = EHCI_XFER2EPIPE(xfer);
4401 struct usbd_device *dev = xfer->ux_pipe->up_dev;
4402 struct ehci_xfer *exfer = EHCI_XFER2EXFER(xfer);
4414 DPRINTF("xfer %#jx len %jd flags %jd", (uintptr_t)xfer, xfer->ux_length,
4415 xfer->ux_flags, 0);
4428 xfer->ux_nframes >= sc->sc_flsize - 4) {
4434 KASSERT(xfer->ux_nframes != 0 && xfer->ux_frlengths);
4435 KASSERT(!(xfer->ux_rqflags & URQ_REQUEST));
4445 frames = xfer->ux_nframes;
4446 dma_buf = &xfer->ux_dmabuf;
4452 KASSERT(xfer->ux_frlengths[i] <= 0x3ff);
4455 EHCI_SITD_SET_LEN(xfer->ux_frlengths[i]));
4462 offs += xfer->ux_frlengths[i];
4495 tlen = xfer->ux_frlengths[i];
4541 if (xfer->ux_length)
4542 usb_syncmem(&exfer->ex_xfer.ux_dmabuf, 0, xfer->ux_length,
4613 xfer->ux_status = USBD_IN_PROGRESS;
4619 ehci_device_fs_isoc_abort(struct usbd_xfer *xfer)
4623 DPRINTF("xfer = %#jx", (uintptr_t)xfer, 0, 0, 0);
4624 ehci_abort_isoc_xfer(xfer, USBD_CANCELLED);
4636 ehci_device_fs_isoc_done(struct usbd_xfer *xfer)
4638 struct ehci_xfer *exfer = EHCI_XFER2EXFER(xfer);
4639 ehci_softc_t *sc = EHCI_XFER2SC(xfer);
4640 struct ehci_pipe *epipe = EHCI_XFER2EPIPE(xfer);
4647 if (xfer->ux_length)
4648 usb_syncmem(&xfer->ux_dmabuf, 0, xfer->ux_length,
4655 ehci_device_isoc_init(struct usbd_xfer *xfer)
4657 ehci_softc_t *sc = EHCI_XFER2SC(xfer);
4658 struct ehci_pipe *epipe = EHCI_XFER2EPIPE(xfer);
4659 struct ehci_xfer *exfer = EHCI_XFER2EXFER(xfer);
4671 KASSERT(xfer->ux_nframes != 0);
4672 KASSERT(!(xfer->ux_rqflags & URQ_REQUEST));
4690 frames = howmany(xfer->ux_nframes, ufrperframe);
4750 ehci_device_isoc_fini(struct usbd_xfer *xfer)
4752 ehci_softc_t *sc = EHCI_XFER2SC(xfer);
4753 struct ehci_xfer *ex = EHCI_XFER2EXFER(xfer);
4761 ehci_device_isoc_transfer(struct usbd_xfer *xfer)
4763 ehci_softc_t *sc = EHCI_XFER2SC(xfer);
4764 struct ehci_pipe *epipe = EHCI_XFER2EPIPE(xfer);
4765 struct ehci_xfer *exfer = EHCI_XFER2EXFER(xfer);
4779 DPRINTF("xfer %#jx flags %jd", (uintptr_t)xfer, xfer->ux_flags, 0, 0);
4792 xfer->ux_nframes >= (sc->sc_flsize - 4) * 8) {
4799 KASSERT(xfer->ux_nframes != 0 && xfer->ux_frlengths);
4800 KASSERT(!(xfer->ux_rqflags & URQ_REQUEST));
4818 frames = howmany(xfer->ux_nframes, ufrperframe);
4826 dma_buf = &xfer->ux_dmabuf;
4860 EHCI_ITD_SET_LEN(xfer->ux_frlengths[trans_count]) |
4864 offs += xfer->ux_frlengths[trans_count];
4867 if (trans_count >= xfer->ux_nframes) { /*Set IOC*/
4918 if (xfer->ux_length)
4919 usb_syncmem(&exfer->ex_xfer.ux_dmabuf, 0, xfer->ux_length,
4995 xfer->ux_status = USBD_IN_PROGRESS;
5001 ehci_device_isoc_abort(struct usbd_xfer *xfer)
5005 DPRINTF("xfer = %#jx", (uintptr_t)xfer, 0, 0, 0);
5006 ehci_abort_isoc_xfer(xfer, USBD_CANCELLED);
5018 ehci_device_isoc_done(struct usbd_xfer *xfer)
5020 struct ehci_xfer *exfer = EHCI_XFER2EXFER(xfer);
5021 ehci_softc_t *sc = EHCI_XFER2SC(xfer);
5022 struct ehci_pipe *epipe = EHCI_XFER2EPIPE(xfer);
5028 if (xfer->ux_length)
5029 usb_syncmem(&xfer->ux_dmabuf, 0, xfer->ux_length,