Lines Matching refs:xfer

904 ehci_transfer_intr_enqueue(struct usb_xfer *xfer)
907 if (ehci_check_transfer(xfer)) {
911 usbd_transfer_enqueue(&xfer->xroot->bus->intr_q, xfer);
914 if (xfer->timeout != 0) {
915 usbd_transfer_timeout_ms(xfer, &ehci_timeout, xfer->timeout);
1073 ehci_data_toggle_update(struct usb_xfer *xfer, uint16_t actlen, uint16_t xlen)
1079 dt = (actlen / xfer->max_packet_size) & 1;
1082 rem = actlen % xfer->max_packet_size;
1091 xfer->endpoint->toggle_next ^= dt;
1095 ehci_non_isoc_done_sub(struct usb_xfer *xfer)
1097 ehci_softc_t *sc = EHCI_BUS2SC(xfer->xroot->bus);
1103 td = xfer->td_transfer_cache;
1106 if (xfer->aframes != xfer->nframes) {
1107 usbd_xfer_set_frame_len(xfer, xfer->aframes, 0);
1125 } else if (xfer->aframes != xfer->nframes) {
1126 xfer->frlengths[xfer->aframes] += td->len - len;
1128 ehci_data_toggle_update(xfer, td->len - len, td->len);
1132 if (((void *)td) == xfer->td_transfer_last) {
1144 if (xfer->flags_int.short_frames_ok) {
1163 xfer->td_transfer_cache = td;
1169 xfer->address, xfer->endpointno, xfer->aframes,
1181 if ((xfer->xroot->udev->parent_hs_hub != NULL) ||
1182 (xfer->xroot->udev->address != 0)) {
1193 ehci_non_isoc_done(struct usb_xfer *xfer)
1195 ehci_softc_t *sc = EHCI_BUS2SC(xfer->xroot->bus);
1200 DPRINTFN(13, "xfer=%p endpoint=%p transfer done\n",
1201 xfer, xfer->endpoint);
1205 ehci_softc_t *sc = EHCI_BUS2SC(xfer->xroot->bus);
1207 ehci_dump_sqtds(sc, xfer->td_transfer_first);
1213 qh = xfer->qh_start[xfer->flags_int.curr_dma_set];
1221 xfer->td_transfer_cache = xfer->td_transfer_first;
1223 if (xfer->flags_int.control_xfr) {
1225 if (xfer->flags_int.control_hdr) {
1227 err = ehci_non_isoc_done_sub(xfer);
1229 xfer->aframes = 1;
1231 if (xfer->td_transfer_cache == NULL) {
1235 while (xfer->aframes != xfer->nframes) {
1237 err = ehci_non_isoc_done_sub(xfer);
1238 xfer->aframes++;
1240 if (xfer->td_transfer_cache == NULL) {
1245 if (xfer->flags_int.control_xfr &&
1246 !xfer->flags_int.control_act) {
1248 err = ehci_non_isoc_done_sub(xfer);
1251 ehci_device_done(xfer, err);
1262 ehci_check_transfer(struct usb_xfer *xfer)
1264 const struct usb_pipe_methods *methods = xfer->endpoint->methods;
1265 ehci_softc_t *sc = EHCI_BUS2SC(xfer->xroot->bus);
1269 DPRINTFN(13, "xfer=%p checking transfer\n", xfer);
1276 td = xfer->td_transfer_last;
1282 td = xfer->td_transfer_first;
1287 ehci_device_done(xfer, USB_ERR_NORMAL_COMPLETION);
1296 td = xfer->td_transfer_last;
1308 td = xfer->td_transfer_first;
1321 ehci_device_done(xfer, USB_ERR_NORMAL_COMPLETION);
1334 td = xfer->td_transfer_cache;
1336 qh = xfer->qh_start[xfer->flags_int.curr_dma_set];
1356 xfer->td_transfer_cache = td;
1362 if (((void *)td) == xfer->td_transfer_last) {
1376 if (xfer->flags_int.short_frames_ok) {
1388 ehci_non_isoc_done(xfer);
1393 DPRINTFN(13, "xfer=%p is still active\n", xfer);
1417 struct usb_xfer *xfer;
1420 TAILQ_FOREACH(xfer, &sc->sc_bus.intr_q.head, wait_entry) {
1424 if (ehci_check_transfer(xfer)) {
1535 struct usb_xfer *xfer = arg;
1537 DPRINTF("xfer=%p\n", xfer);
1539 USB_BUS_LOCK_ASSERT(xfer->xroot->bus, MA_OWNED);
1542 ehci_device_done(xfer, USB_ERR_TIMEOUT);
1752 ehci_setup_standard_chain(struct usb_xfer *xfer, ehci_qh_t **qh_last)
1763 xfer->address, UE_GET_ADDR(xfer->endpointno),
1764 xfer->sumlen, usbd_get_speed(xfer->xroot->udev));
1766 temp.average = xfer->max_hc_frame_size;
1767 temp.max_frame_size = xfer->max_frame_size;
1768 temp.sc = EHCI_BUS2SC(xfer->xroot->bus);
1771 xfer->flags_int.curr_dma_set ^= 1;
1774 td = xfer->td_start[xfer->flags_int.curr_dma_set];
1776 xfer->td_transfer_first = td;
1777 xfer->td_transfer_cache = td;
1783 temp.setup_alt_next = xfer->flags_int.short_frames_ok;
1785 if (xfer->flags_int.control_xfr) {
1786 if (xfer->endpoint->toggle_next) {
1796 if ((xfer->xroot->udev->parent_hs_hub != NULL) ||
1797 (xfer->xroot->udev->address != 0)) {
1804 if (xfer->flags_int.control_xfr) {
1805 if (xfer->flags_int.control_hdr) {
1807 xfer->endpoint->toggle_next = 0;
1816 temp.len = xfer->frlengths[0];
1817 temp.pc = xfer->frbuffers + 0;
1820 if (xfer->nframes == 1) {
1822 if (xfer->flags_int.control_act) {
1834 while (x != xfer->nframes) {
1838 temp.len = xfer->frlengths[x];
1839 temp.pc = xfer->frbuffers + x;
1843 if (x == xfer->nframes) {
1844 if (xfer->flags_int.control_xfr) {
1846 if (xfer->flags_int.control_act) {
1871 temp.shortpkt = (xfer->flags.force_short_xfer) ? 0 : 1;
1877 (UE_GET_DIR(xfer->endpointno) == UE_DIR_IN) ?
1888 if (xfer->flags_int.control_xfr &&
1889 !xfer->flags_int.control_act) {
1899 (UE_GET_DIR(xfer->endpointno) == UE_DIR_OUT) ?
1925 xfer->td_transfer_last = td;
1930 xfer->endpoint->toggle_next);
1932 xfer->td_transfer_first);
1936 methods = xfer->endpoint->methods;
1938 qh = xfer->qh_start[xfer->flags_int.curr_dma_set];
1943 (EHCI_QH_SET_ADDR(xfer->address) |
1944 EHCI_QH_SET_ENDPT(UE_GET_ADDR(xfer->endpointno)) |
1945 EHCI_QH_SET_MPL(xfer->max_packet_size));
1947 if (usbd_get_speed(xfer->xroot->udev) == USB_SPEED_HIGH) {
1953 if (usbd_get_speed(xfer->xroot->udev) == USB_SPEED_FULL) {
1976 (EHCI_QH_SET_MULT(xfer->max_packet_count & 3) |
1977 EHCI_QH_SET_CMASK(xfer->endpoint->usb_cmask) |
1978 EHCI_QH_SET_SMASK(xfer->endpoint->usb_smask) |
1979 EHCI_QH_SET_HUBA(xfer->xroot->udev->hs_hub_addr) |
1980 EHCI_QH_SET_PORT(xfer->xroot->udev->hs_port_no));
1987 if (temp.auto_data_toggle && xfer->endpoint->toggle_next) {
1994 td = xfer->td_transfer_first;
2014 if (xfer->xroot->udev->flags.self_suspended == 0) {
2047 ehci_isoc_fs_done(ehci_softc_t *sc, struct usb_xfer *xfer)
2049 uint32_t nframes = xfer->nframes;
2051 uint32_t *plen = xfer->frlengths;
2053 ehci_sitd_t *td = xfer->td_transfer_first;
2054 ehci_sitd_t **pp_last = &sc->sc_isoc_fs_p_last[xfer->qh_pos];
2056 DPRINTFN(13, "xfer=%p endpoint=%p transfer done\n",
2057 xfer, xfer->endpoint);
2096 xfer->aframes = xfer->nframes;
2100 ehci_isoc_hs_done(ehci_softc_t *sc, struct usb_xfer *xfer)
2102 uint32_t nframes = xfer->nframes;
2104 uint32_t *plen = xfer->frlengths;
2107 ehci_itd_t *td = xfer->td_transfer_first;
2108 ehci_itd_t **pp_last = &sc->sc_isoc_hs_p_last[xfer->qh_pos];
2110 DPRINTFN(13, "xfer=%p endpoint=%p transfer done\n",
2111 xfer, xfer->endpoint);
2135 if (xfer->endpoint->usb_smask & (1 << td_no)) {
2166 xfer->aframes = xfer->nframes;
2173 ehci_device_done(struct usb_xfer *xfer, usb_error_t error)
2175 const struct usb_pipe_methods *methods = xfer->endpoint->methods;
2176 ehci_softc_t *sc = EHCI_BUS2SC(xfer->xroot->bus);
2180 DPRINTFN(2, "xfer=%p, endpoint=%p, error=%d\n",
2181 xfer, xfer->endpoint, error);
2188 xfer->endpoint->toggle_next);
2190 xfer->td_transfer_first);
2194 EHCI_REMOVE_QH(xfer->qh_start[xfer->flags_int.curr_dma_set],
2198 EHCI_REMOVE_QH(xfer->qh_start[xfer->flags_int.curr_dma_set],
2199 sc->sc_intr_p_last[xfer->qh_pos]);
2203 * "xfer->frlengths".
2205 if (xfer->td_transfer_first &&
2206 xfer->td_transfer_last) {
2208 ehci_isoc_fs_done(sc, xfer);
2211 ehci_isoc_hs_done(sc, xfer);
2213 xfer->td_transfer_first = NULL;
2214 xfer->td_transfer_last = NULL;
2217 usbd_transfer_done(xfer, error);
2224 ehci_device_bulk_open(struct usb_xfer *xfer)
2230 ehci_device_bulk_close(struct usb_xfer *xfer)
2232 ehci_device_done(xfer, USB_ERR_CANCELLED);
2236 ehci_device_bulk_enter(struct usb_xfer *xfer)
2259 ehci_device_bulk_start(struct usb_xfer *xfer)
2261 ehci_softc_t *sc = EHCI_BUS2SC(xfer->xroot->bus);
2264 ehci_setup_standard_chain(xfer, &sc->sc_async_p_last);
2267 ehci_transfer_intr_enqueue(xfer);
2291 ehci_device_ctrl_open(struct usb_xfer *xfer)
2297 ehci_device_ctrl_close(struct usb_xfer *xfer)
2299 ehci_device_done(xfer, USB_ERR_CANCELLED);
2303 ehci_device_ctrl_enter(struct usb_xfer *xfer)
2309 ehci_device_ctrl_start(struct usb_xfer *xfer)
2311 ehci_softc_t *sc = EHCI_BUS2SC(xfer->xroot->bus);
2314 ehci_setup_standard_chain(xfer, &sc->sc_async_p_last);
2317 ehci_transfer_intr_enqueue(xfer);
2332 ehci_device_intr_open(struct usb_xfer *xfer)
2334 ehci_softc_t *sc = EHCI_BUS2SC(xfer->xroot->bus);
2339 usb_hs_bandwidth_alloc(xfer);
2348 if (xfer->interval >= bit) {
2364 xfer->qh_pos = best;
2367 best, xfer->interval);
2371 ehci_device_intr_close(struct usb_xfer *xfer)
2373 ehci_softc_t *sc = EHCI_BUS2SC(xfer->xroot->bus);
2375 sc->sc_intr_stat[xfer->qh_pos]--;
2377 ehci_device_done(xfer, USB_ERR_CANCELLED);
2380 usb_hs_bandwidth_free(xfer);
2384 ehci_device_intr_enter(struct usb_xfer *xfer)
2390 ehci_device_intr_start(struct usb_xfer *xfer)
2392 ehci_softc_t *sc = EHCI_BUS2SC(xfer->xroot->bus);
2395 ehci_setup_standard_chain(xfer, &sc->sc_intr_p_last[xfer->qh_pos]);
2398 ehci_transfer_intr_enqueue(xfer);
2413 ehci_device_isoc_fs_open(struct usb_xfer *xfer)
2415 ehci_softc_t *sc = EHCI_BUS2SC(xfer->xroot->bus);
2421 EHCI_SITD_SET_ADDR(xfer->address) |
2422 EHCI_SITD_SET_ENDPT(UE_GET_ADDR(xfer->endpointno)) |
2423 EHCI_SITD_SET_HUBA(xfer->xroot->udev->hs_hub_addr) |
2424 EHCI_SITD_SET_PORT(xfer->xroot->udev->hs_port_no);
2426 if (UE_GET_DIR(xfer->endpointno) == UE_DIR_IN)
2435 for (td = xfer->td_start[ds]; td; td = td->obj_next) {
2454 ehci_device_isoc_fs_close(struct usb_xfer *xfer)
2456 ehci_device_done(xfer, USB_ERR_CANCELLED);
2460 ehci_device_isoc_fs_enter(struct usb_xfer *xfer)
2463 ehci_softc_t *sc = EHCI_BUS2SC(xfer->xroot->bus);
2481 DPRINTFN(6, "xfer=%p next=%d nframes=%d\n",
2482 xfer, xfer->endpoint->isoc_next, xfer->nframes);
2492 buf_offset = (nframes - xfer->endpoint->isoc_next) &
2495 if ((xfer->endpoint->is_synced == 0) ||
2496 (buf_offset < xfer->nframes)) {
2503 xfer->endpoint->isoc_next = (nframes + 3) &
2505 xfer->endpoint->is_synced = 1;
2506 DPRINTFN(3, "start next=%d\n", xfer->endpoint->isoc_next);
2512 buf_offset = (xfer->endpoint->isoc_next - nframes) &
2518 xfer->isoc_time_complete =
2520 buf_offset + xfer->nframes;
2524 nframes = xfer->nframes;
2528 plen = xfer->frlengths;
2531 xfer->flags_int.curr_dma_set ^= 1;
2534 td = xfer->td_start[xfer->flags_int.curr_dma_set];
2535 xfer->td_transfer_first = td;
2537 pp_last = &sc->sc_isoc_fs_p_last[xfer->endpoint->isoc_next];
2541 xfer->qh_pos = xfer->endpoint->isoc_next;
2553 if (*plen > xfer->max_frame_size) {
2560 xfer->max_frame_size);
2563 *plen = xfer->max_frame_size;
2568 sa = usbd_fs_isoc_schedule_alloc_slot(xfer,
2569 xfer->isoc_time_complete - nframes - 1);
2584 usbd_get_page(xfer->frbuffers, buf_offset, &buf_res);
2591 usbd_get_page(xfer->frbuffers, buf_offset - 1,
2599 if (UE_GET_DIR(xfer->endpointno) == UE_DIR_OUT) {
2661 xfer->td_transfer_last = td_last;
2664 xfer->endpoint->isoc_next = (pp_last - &sc->sc_isoc_fs_p_last[0]) &
2672 xfer->flags_int.can_cancel_immed = 0;
2676 ehci_device_isoc_fs_start(struct usb_xfer *xfer)
2683 xfer->flags_int.can_cancel_immed = 0;
2686 if (xfer->timeout == 0)
2687 xfer->timeout = 500; /* ms */
2690 ehci_transfer_intr_enqueue(xfer);
2705 ehci_device_isoc_hs_open(struct usb_xfer *xfer)
2707 ehci_softc_t *sc = EHCI_BUS2SC(xfer->xroot->bus);
2712 usb_hs_bandwidth_alloc(xfer);
2718 for (td = xfer->td_start[ds]; td; td = td->obj_next) {
2732 EHCI_ITD_SET_ADDR(xfer->address) |
2733 EHCI_ITD_SET_ENDPT(UE_GET_ADDR(xfer->endpointno)));
2736 EHCI_ITD_SET_MPL(xfer->max_packet_size & 0x7FF);
2739 if (UE_GET_DIR(xfer->endpointno) == UE_DIR_IN) {
2746 td->itd_bp[2] = htohc32(sc, xfer->max_packet_count & 3);
2754 ehci_device_isoc_hs_close(struct usb_xfer *xfer)
2756 ehci_device_done(xfer, USB_ERR_CANCELLED);
2759 usb_hs_bandwidth_free(xfer);
2763 ehci_device_isoc_hs_enter(struct usb_xfer *xfer)
2766 ehci_softc_t *sc = EHCI_BUS2SC(xfer->xroot->bus);
2779 uint8_t shift = usbd_xfer_get_fps_shift(xfer);
2786 DPRINTFN(6, "xfer=%p next=%d nframes=%d shift=%d\n",
2787 xfer, xfer->endpoint->isoc_next, xfer->nframes, (int)shift);
2797 buf_offset = (nframes - xfer->endpoint->isoc_next) &
2800 if ((xfer->endpoint->is_synced == 0) ||
2801 (buf_offset < (((xfer->nframes << shift) + 7) / 8))) {
2808 xfer->endpoint->isoc_next = (nframes + 3) &
2810 xfer->endpoint->is_synced = 1;
2811 DPRINTFN(3, "start next=%d\n", xfer->endpoint->isoc_next);
2817 buf_offset = (xfer->endpoint->isoc_next - nframes) &
2823 xfer->isoc_time_complete =
2825 (((xfer->nframes << shift) + 7) / 8);
2829 nframes = xfer->nframes;
2834 plen = xfer->frlengths;
2837 xfer->flags_int.curr_dma_set ^= 1;
2840 td = xfer->td_start[xfer->flags_int.curr_dma_set];
2841 xfer->td_transfer_first = td;
2843 pp_last = &sc->sc_isoc_hs_p_last[xfer->endpoint->isoc_next];
2847 xfer->qh_pos = xfer->endpoint->isoc_next;
2858 if (*plen > xfer->max_frame_size) {
2864 __FUNCTION__, *plen, xfer->max_frame_size);
2867 *plen = xfer->max_frame_size;
2870 if (xfer->endpoint->usb_smask & (1 << td_no)) {
2899 usbd_get_page(xfer->frbuffers, itd_offset[0], &buf_res);
2919 usbd_get_page(xfer->frbuffers, buf_offset - 1, &buf_res);
2921 usbd_get_page(xfer->frbuffers, itd_offset[x + 1], &buf_res);
2959 xfer->td_transfer_last = td_last;
2962 xfer->endpoint->isoc_next = (pp_last - &sc->sc_isoc_hs_p_last[0]) &
2967 ehci_device_isoc_hs_start(struct usb_xfer *xfer)
2970 ehci_transfer_intr_enqueue(xfer);
3498 struct usb_xfer *xfer;
3507 xfer = parm->curr_xfer;
3551 xfer->flags_int.bdma_enable = 1;
3556 nqtd = ((2 * xfer->nframes) + 1 /* STATUS */
3557 + (xfer->max_data_length / xfer->max_hc_frame_size));
3564 xfer->flags_int.bdma_enable = 1;
3569 nqtd = ((2 * xfer->nframes)
3570 + (xfer->max_data_length / xfer->max_hc_frame_size));
3586 xfer->flags_int.bdma_enable = 1;
3591 nqtd = ((2 * xfer->nframes)
3592 + (xfer->max_data_length / xfer->max_hc_frame_size));
3599 xfer->flags_int.bdma_enable = 1;
3603 nsitd = xfer->nframes;
3610 xfer->flags_int.bdma_enable = 1;
3614 nitd = ((xfer->nframes + 7) / 8) <<
3615 usbd_xfer_get_fps_shift(xfer);
3708 xfer->td_start[xfer->flags_int.curr_dma_set] = last_obj;
3736 xfer->qh_start[xfer->flags_int.curr_dma_set] = last_obj;
3738 if (!xfer->flags_int.curr_dma_set) {
3739 xfer->flags_int.curr_dma_set = 1;
3745 ehci_xfer_unsetup(struct usb_xfer *xfer)
3811 struct usb_xfer *xfer;
3818 TAILQ_FOREACH(xfer, &sc->sc_bus.intr_q.head, wait_entry) {
3820 if (xfer->xroot->udev == udev) {
3822 methods = xfer->endpoint->methods;
3826 EHCI_APPEND_QH(xfer->qh_start[xfer->flags_int.curr_dma_set],
3830 EHCI_APPEND_QH(xfer->qh_start[xfer->flags_int.curr_dma_set],
3831 sc->sc_intr_p_last[xfer->qh_pos]);
3845 struct usb_xfer *xfer;
3852 TAILQ_FOREACH(xfer, &sc->sc_bus.intr_q.head, wait_entry) {
3854 if (xfer->xroot->udev == udev) {
3856 methods = xfer->endpoint->methods;
3860 EHCI_REMOVE_QH(xfer->qh_start[xfer->flags_int.curr_dma_set],
3864 EHCI_REMOVE_QH(xfer->qh_start[xfer->flags_int.curr_dma_set],
3865 sc->sc_intr_p_last[xfer->qh_pos]);
3926 ehci_start_dma_delay_second(struct usb_xfer *xfer)
3928 struct ehci_softc *sc = EHCI_BUS2SC(xfer->xroot->bus);
3936 usbd_transfer_timeout_ms(xfer,
3946 ehci_start_dma_delay(struct usb_xfer *xfer)
3948 struct ehci_softc *sc = EHCI_BUS2SC(xfer->xroot->bus);
3956 usbd_transfer_timeout_ms(xfer,