Lines Matching defs:xfer

847 ehci_transfer_intr_enqueue(struct usb_xfer *xfer)
850 if (ehci_check_transfer(xfer)) {
856 usbd_transfer_enqueue(&xfer->xroot->bus->intr_q, xfer);
859 if (xfer->timeout != 0) {
860 usbd_transfer_timeout_ms(xfer, &ehci_timeout, xfer->timeout);
1017 ehci_data_toggle_update(struct usb_xfer *xfer, uint16_t actlen, uint16_t xlen)
1023 dt = (actlen / xfer->max_packet_size) & 1;
1026 rem = actlen % xfer->max_packet_size;
1035 xfer->endpoint->toggle_next ^= dt;
1039 ehci_non_isoc_done_sub(struct usb_xfer *xfer)
1041 ehci_softc_t *sc = EHCI_BUS2SC(xfer->xroot->bus);
1047 td = (ehci_qtd_t *)xfer->td_transfer_cache;
1050 if (xfer->aframes != xfer->nframes) {
1051 usbd_xfer_set_frame_len(xfer, xfer->aframes, 0);
1068 } else if (xfer->aframes != xfer->nframes) {
1069 xfer->frlengths[xfer->aframes] += td->len - len;
1071 ehci_data_toggle_update(xfer, td->len - len, td->len);
1075 if (((void *)td) == xfer->td_transfer_last) {
1087 if (xfer->flags_int.short_frames_ok) {
1106 xfer->td_transfer_cache = td;
1112 xfer->address, xfer->endpointno, xfer->aframes,
1124 if ((xfer->xroot->udev->parent_hs_hub != NULL) ||
1125 (xfer->xroot->udev->address != 0)) {
1136 ehci_non_isoc_done(struct usb_xfer *xfer)
1141 DPRINTFN(13, "xfer=%p endpoint=%p transfer done\n", xfer, xfer->endpoint);
1145 ehci_softc_t *sc = EHCI_BUS2SC(xfer->xroot->bus);
1146 ehci_dump_sqtds(sc, xfer->td_transfer_first);
1151 qh = (ehci_qh_t *)xfer->qh_start[xfer->flags_int.curr_dma_set];
1156 xfer->td_transfer_cache = xfer->td_transfer_first;
1157 if (xfer->flags_int.control_xfr) {
1158 if (xfer->flags_int.control_hdr) {
1159 err = ehci_non_isoc_done_sub(xfer);
1161 xfer->aframes = 1;
1163 if (xfer->td_transfer_cache == NULL) {
1167 while (xfer->aframes != xfer->nframes) {
1168 err = ehci_non_isoc_done_sub(xfer);
1169 xfer->aframes++;
1171 if (xfer->td_transfer_cache == NULL) {
1176 if (xfer->flags_int.control_xfr &&
1177 !xfer->flags_int.control_act) {
1178 err = ehci_non_isoc_done_sub(xfer);
1181 ehci_device_done(xfer, err);
1192 ehci_check_transfer(struct usb_xfer *xfer)
1194 const struct usb_pipe_methods *methods = xfer->endpoint->methods;
1195 ehci_softc_t *sc = EHCI_BUS2SC(xfer->xroot->bus);
1199 DPRINTFN(13, "xfer=%p checking transfer\n", xfer);
1206 td = (ehci_sitd_t *)xfer->td_transfer_last;
1212 td = (ehci_sitd_t *)xfer->td_transfer_first;
1217 ehci_device_done(xfer, USB_ERR_NORMAL_COMPLETION);
1226 td = (ehci_itd_t *)xfer->td_transfer_last;
1238 td = (ehci_itd_t *)xfer->td_transfer_first;
1251 ehci_device_done(xfer, USB_ERR_NORMAL_COMPLETION);
1264 td = (ehci_qtd_t *)xfer->td_transfer_cache;
1266 qh = (ehci_qh_t *)xfer->qh_start[xfer->flags_int.curr_dma_set];
1286 xfer->td_transfer_cache = td;
1292 if (((void *)td) == xfer->td_transfer_last) {
1306 if (xfer->flags_int.short_frames_ok) {
1318 ehci_non_isoc_done(xfer);
1323 DPRINTFN(13, "xfer=%p is still active\n", xfer);
1347 struct usb_xfer *xfer;
1350 TAILQ_FOREACH(xfer, &sc->sc_bus.intr_q.head, wait_entry) {
1354 if (ehci_check_transfer(xfer)) {
1462 struct usb_xfer *xfer = (struct usb_xfer *)ehci_arg;
1464 DPRINTF("xfer=%p\n", xfer);
1466 USB_BUS_LOCK_ASSERT(xfer->xroot->bus, MA_OWNED);
1469 ehci_device_done(xfer, USB_ERR_TIMEOUT);
1686 ehci_setup_standard_chain(struct usb_xfer *xfer, ehci_qh_t **qh_last)
1698 xfer->address, UE_GET_ADDR(xfer->endpointno),
1699 xfer->sumlen, usbd_get_speed(xfer->xroot->udev));
1701 temp.average = xfer->max_hc_frame_size;
1702 temp.max_frame_size = xfer->max_frame_size;
1703 temp.sc = EHCI_BUS2SC(xfer->xroot->bus);
1706 xfer->flags_int.curr_dma_set ^= 1;
1709 td = (ehci_qtd_t *)xfer->td_start[xfer->flags_int.curr_dma_set];
1711 xfer->td_transfer_first = td;
1712 xfer->td_transfer_cache = td;
1718 temp.setup_alt_next = xfer->flags_int.short_frames_ok;
1720 if (xfer->flags_int.control_xfr) {
1721 if (xfer->endpoint->toggle_next) {
1731 if ((xfer->xroot->udev->parent_hs_hub != NULL) ||
1732 (xfer->xroot->udev->address != 0)) {
1739 if (xfer->flags_int.control_xfr) {
1740 if (xfer->flags_int.control_hdr) {
1741 xfer->endpoint->toggle_next = 0;
1750 temp.len = xfer->frlengths[0];
1751 temp.pc = xfer->frbuffers + 0;
1754 if (xfer->nframes == 1) {
1756 if (xfer->flags_int.control_act) {
1768 while (x != xfer->nframes) {
1771 temp.len = xfer->frlengths[x];
1772 temp.pc = xfer->frbuffers + x;
1776 if (x == xfer->nframes) {
1777 if (xfer->flags_int.control_xfr) {
1779 if (xfer->flags_int.control_act) {
1802 temp.shortpkt = (xfer->flags.force_short_xfer) ? 0 : 1;
1808 (UE_GET_DIR(xfer->endpointno) == UE_DIR_IN) ?
1819 if (xfer->flags_int.control_xfr &&
1820 !xfer->flags_int.control_act) {
1829 (UE_GET_DIR(xfer->endpointno) == UE_DIR_OUT) ?
1857 xfer->td_transfer_last = td;
1862 xfer->endpoint->toggle_next);
1864 xfer->td_transfer_first);
1868 methods = xfer->endpoint->methods;
1870 qh = (ehci_qh_t *)xfer->qh_start[xfer->flags_int.curr_dma_set];
1875 (EHCI_QH_SET_ADDR(xfer->address) |
1876 EHCI_QH_SET_ENDPT(UE_GET_ADDR(xfer->endpointno)) |
1877 EHCI_QH_SET_MPL(xfer->max_packet_size));
1879 if (usbd_get_speed(xfer->xroot->udev) == USB_SPEED_HIGH) {
1884 if (usbd_get_speed(xfer->xroot->udev) == USB_SPEED_FULL) {
1907 (EHCI_QH_SET_MULT(xfer->max_packet_count & 3) |
1908 EHCI_QH_SET_CMASK(xfer->endpoint->usb_cmask) |
1909 EHCI_QH_SET_SMASK(xfer->endpoint->usb_smask) |
1910 EHCI_QH_SET_HUBA(xfer->xroot->udev->hs_hub_addr) |
1911 EHCI_QH_SET_PORT(xfer->xroot->udev->hs_port_no));
1918 if (temp.auto_data_toggle && xfer->endpoint->toggle_next) {
1925 td = (ehci_qtd_t *)xfer->td_transfer_first;
1945 if (xfer->xroot->udev->flags.self_suspended == 0) {
1979 ehci_isoc_fs_done(ehci_softc_t *sc, struct usb_xfer *xfer)
1981 uint32_t nframes = xfer->nframes;
1983 uint32_t *plen = xfer->frlengths;
1985 ehci_sitd_t *td = (ehci_sitd_t *)xfer->td_transfer_first;
1986 ehci_sitd_t **pp_last = &sc->sc_isoc_fs_p_last[xfer->qh_pos];
1988 DPRINTFN(13, "xfer=%p endpoint=%p transfer done\n",
1989 xfer, xfer->endpoint);
2028 xfer->aframes = xfer->nframes;
2032 ehci_isoc_hs_done(ehci_softc_t *sc, struct usb_xfer *xfer)
2034 uint32_t nframes = xfer->nframes;
2036 uint32_t *plen = xfer->frlengths;
2039 ehci_itd_t *td = (ehci_itd_t *)xfer->td_transfer_first;
2040 ehci_itd_t **pp_last = &sc->sc_isoc_hs_p_last[xfer->qh_pos];
2042 DPRINTFN(13, "xfer=%p endpoint=%p transfer done\n",
2043 xfer, xfer->endpoint);
2067 if (xfer->endpoint->usb_smask & (1 << td_no)) {
2097 xfer->aframes = xfer->nframes;
2104 ehci_device_done(struct usb_xfer *xfer, usb_error_t error)
2107 const struct usb_pipe_methods *methods = xfer->endpoint->methods;
2108 ehci_softc_t *sc = EHCI_BUS2SC(xfer->xroot->bus);
2112 DPRINTFN(2, "xfer=%p, endpoint=%p, error=%d\n",
2113 xfer, xfer->endpoint, error);
2120 xfer->endpoint->toggle_next);
2122 xfer->td_transfer_first);
2127 EHCI_REMOVE_QH((ehci_qh_t *)xfer->qh_start[xfer->flags_int.curr_dma_set],
2133 EHCI_REMOVE_QH((ehci_qh_t *)xfer->qh_start[xfer->flags_int.curr_dma_set],
2134 sc->sc_intr_p_last[xfer->qh_pos]);
2139 * "xfer->frlengths".
2141 if (xfer->td_transfer_first &&
2142 xfer->td_transfer_last) {
2144 ehci_isoc_fs_done(sc, xfer);
2147 ehci_isoc_hs_done(sc, xfer);
2149 xfer->td_transfer_first = NULL;
2150 xfer->td_transfer_last = NULL;
2153 usbd_transfer_done(xfer, error);
2160 ehci_device_bulk_open(struct usb_xfer *xfer)
2166 ehci_device_bulk_close(struct usb_xfer *xfer)
2168 ehci_device_done(xfer, USB_ERR_CANCELLED);
2172 ehci_device_bulk_enter(struct usb_xfer *xfer)
2195 ehci_device_bulk_start(struct usb_xfer *xfer)
2197 ehci_softc_t *sc = EHCI_BUS2SC(xfer->xroot->bus);
2200 ehci_setup_standard_chain(xfer, &sc->sc_async_p_last);
2203 ehci_transfer_intr_enqueue(xfer);
2227 ehci_device_ctrl_open(struct usb_xfer *xfer)
2233 ehci_device_ctrl_close(struct usb_xfer *xfer)
2235 ehci_device_done(xfer, USB_ERR_CANCELLED);
2239 ehci_device_ctrl_enter(struct usb_xfer *xfer)
2245 ehci_device_ctrl_start(struct usb_xfer *xfer)
2247 ehci_softc_t *sc = EHCI_BUS2SC(xfer->xroot->bus);
2250 ehci_setup_standard_chain(xfer, &sc->sc_async_p_last);
2253 ehci_transfer_intr_enqueue(xfer);
2268 ehci_device_intr_open(struct usb_xfer *xfer)
2270 ehci_softc_t *sc = EHCI_BUS2SC(xfer->xroot->bus);
2275 usb_hs_bandwidth_alloc(xfer);
2284 if (xfer->interval >= bit) {
2300 xfer->qh_pos = best;
2303 best, xfer->interval);
2307 ehci_device_intr_close(struct usb_xfer *xfer)
2309 ehci_softc_t *sc = EHCI_BUS2SC(xfer->xroot->bus);
2311 sc->sc_intr_stat[xfer->qh_pos]--;
2313 ehci_device_done(xfer, USB_ERR_CANCELLED);
2316 usb_hs_bandwidth_free(xfer);
2320 ehci_device_intr_enter(struct usb_xfer *xfer)
2326 ehci_device_intr_start(struct usb_xfer *xfer)
2328 ehci_softc_t *sc = EHCI_BUS2SC(xfer->xroot->bus);
2331 ehci_setup_standard_chain(xfer, &sc->sc_intr_p_last[xfer->qh_pos]);
2334 ehci_transfer_intr_enqueue(xfer);
2349 ehci_device_isoc_fs_open(struct usb_xfer *xfer)
2351 ehci_softc_t *sc = EHCI_BUS2SC(xfer->xroot->bus);
2357 EHCI_SITD_SET_ADDR(xfer->address) |
2358 EHCI_SITD_SET_ENDPT(UE_GET_ADDR(xfer->endpointno)) |
2359 EHCI_SITD_SET_HUBA(xfer->xroot->udev->hs_hub_addr) |
2360 EHCI_SITD_SET_PORT(xfer->xroot->udev->hs_port_no);
2362 if (UE_GET_DIR(xfer->endpointno) == UE_DIR_IN)
2370 for (td = (ehci_sitd_t *)xfer->td_start[ds]; td; td = td->obj_next) {
2388 ehci_device_isoc_fs_close(struct usb_xfer *xfer)
2390 ehci_device_done(xfer, USB_ERR_CANCELLED);
2394 ehci_device_isoc_fs_enter(struct usb_xfer *xfer)
2397 ehci_softc_t *sc = EHCI_BUS2SC(xfer->xroot->bus);
2414 DPRINTFN(6, "xfer=%p next=%d nframes=%d\n",
2415 xfer, xfer->endpoint->isoc_next, xfer->nframes);
2425 buf_offset = (nframes - xfer->endpoint->isoc_next) &
2428 if ((xfer->endpoint->is_synced == 0) ||
2429 (buf_offset < xfer->nframes)) {
2436 xfer->endpoint->isoc_next = (nframes + 3) &
2438 xfer->endpoint->is_synced = 1;
2439 DPRINTFN(3, "start next=%d\n", xfer->endpoint->isoc_next);
2445 buf_offset = (xfer->endpoint->isoc_next - nframes) &
2451 xfer->isoc_time_complete =
2453 buf_offset + xfer->nframes;
2457 nframes = xfer->nframes;
2461 plen = xfer->frlengths;
2464 xfer->flags_int.curr_dma_set ^= 1;
2467 td = (ehci_sitd_t *)xfer->td_start[xfer->flags_int.curr_dma_set];
2468 xfer->td_transfer_first = td;
2470 pp_last = &sc->sc_isoc_fs_p_last[xfer->endpoint->isoc_next];
2474 xfer->qh_pos = xfer->endpoint->isoc_next;
2486 if (*plen > xfer->max_frame_size) {
2493 xfer->max_frame_size);
2496 *plen = xfer->max_frame_size;
2501 sa = usbd_fs_isoc_schedule_alloc_slot(xfer,
2502 xfer->isoc_time_complete - nframes - 1);
2517 usbd_get_page(xfer->frbuffers, buf_offset, &buf_res);
2528 usbd_get_page(xfer->frbuffers, buf_offset - 1,
2540 if (UE_GET_DIR(xfer->endpointno) == UE_DIR_OUT) {
2602 xfer->td_transfer_last = td_last;
2605 xfer->endpoint->isoc_next = (pp_last - &sc->sc_isoc_fs_p_last[0]) &
2613 xfer->flags_int.can_cancel_immed = 0;
2617 ehci_device_isoc_fs_start(struct usb_xfer *xfer)
2624 xfer->flags_int.can_cancel_immed = 0;
2627 if (xfer->timeout == 0)
2628 xfer->timeout = 500; /* ms */
2631 ehci_transfer_intr_enqueue(xfer);
2645 ehci_device_isoc_hs_open(struct usb_xfer *xfer)
2647 ehci_softc_t *sc = EHCI_BUS2SC(xfer->xroot->bus);
2652 usb_hs_bandwidth_alloc(xfer);
2657 for (td = (ehci_itd_t *)xfer->td_start[ds]; td; td = td->obj_next) {
2670 EHCI_ITD_SET_ADDR(xfer->address) |
2671 EHCI_ITD_SET_ENDPT(UE_GET_ADDR(xfer->endpointno)));
2674 EHCI_ITD_SET_MPL(xfer->max_packet_size & 0x7FF);
2677 if (UE_GET_DIR(xfer->endpointno) == UE_DIR_IN) {
2684 td->itd_bp[2] = htohc32(sc, xfer->max_packet_count & 3);
2692 ehci_device_isoc_hs_close(struct usb_xfer *xfer)
2694 ehci_device_done(xfer, USB_ERR_CANCELLED);
2697 usb_hs_bandwidth_free(xfer);
2701 ehci_device_isoc_hs_enter(struct usb_xfer *xfer)
2704 ehci_softc_t *sc = EHCI_BUS2SC(xfer->xroot->bus);
2722 DPRINTFN(6, "xfer=%p next=%d nframes=%d shift=%d\n",
2723 xfer, xfer->endpoint->isoc_next, xfer->nframes,
2724 usbd_xfer_get_fps_shift(xfer));
2734 buf_offset = (nframes - xfer->endpoint->isoc_next) &
2737 if ((xfer->endpoint->is_synced == 0) ||
2738 (buf_offset < (((xfer->nframes << shift) + 7) / 8))) {
2745 xfer->endpoint->isoc_next = (nframes + 3) &
2747 xfer->endpoint->is_synced = 1;
2748 DPRINTFN(3, "start next=%d\n", xfer->endpoint->isoc_next);
2754 buf_offset = (xfer->endpoint->isoc_next - nframes) &
2760 xfer->isoc_time_complete =
2762 (((xfer->nframes << shift) + 7) / 8);
2766 nframes = xfer->nframes;
2771 plen = xfer->frlengths;
2774 xfer->flags_int.curr_dma_set ^= 1;
2777 td = (ehci_itd_t *)xfer->td_start[xfer->flags_int.curr_dma_set];
2778 xfer->td_transfer_first = td;
2780 pp_last = &sc->sc_isoc_hs_p_last[xfer->endpoint->isoc_next];
2784 xfer->qh_pos = xfer->endpoint->isoc_next;
2795 if (*plen > xfer->max_frame_size) {
2801 __FUNCTION__, *plen, xfer->max_frame_size);
2804 *plen = xfer->max_frame_size;
2807 if (xfer->endpoint->usb_smask & (1 << td_no)) {
2835 usbd_get_page(xfer->frbuffers, itd_offset[0], &buf_res);
2863 usbd_get_page(xfer->frbuffers, buf_offset - 1, &buf_res);
2865 usbd_get_page(xfer->frbuffers, itd_offset[x + 1], &buf_res);
2910 xfer->td_transfer_last = td_last;
2913 xfer->endpoint->isoc_next = (pp_last - &sc->sc_isoc_hs_p_last[0]) &
2918 ehci_device_isoc_hs_start(struct usb_xfer *xfer)
2921 ehci_transfer_intr_enqueue(xfer);
3422 struct usb_xfer *xfer;
3431 xfer = parm->curr_xfer;
3475 xfer->flags_int.bdma_enable = 1;
3480 nqtd = ((2 * xfer->nframes) + 1 /* STATUS */
3481 + (xfer->max_data_length / xfer->max_hc_frame_size));
3488 xfer->flags_int.bdma_enable = 1;
3494 nqtd = ((2 * xfer->nframes)
3495 + (xfer->max_data_length / xfer->max_hc_frame_size));
3511 xfer->flags_int.bdma_enable = 1;
3517 nqtd = ((2 * xfer->nframes)
3518 + (xfer->max_data_length / xfer->max_hc_frame_size));
3525 xfer->flags_int.bdma_enable = 1;
3530 nsitd = xfer->nframes;
3537 xfer->flags_int.bdma_enable = 1;
3542 nitd = ((xfer->nframes + 7) / 8) <<
3543 usbd_xfer_get_fps_shift(xfer);
3647 xfer->td_start[xfer->flags_int.curr_dma_set] = last_obj;
3679 xfer->qh_start[xfer->flags_int.curr_dma_set] = last_obj;
3681 if (!xfer->flags_int.curr_dma_set) {
3682 xfer->flags_int.curr_dma_set = 1;
3688 ehci_xfer_unsetup(struct usb_xfer *xfer)
3758 struct usb_xfer *xfer;
3765 TAILQ_FOREACH(xfer, &sc->sc_bus.intr_q.head, wait_entry) {
3766 if (xfer->xroot->udev == udev) {
3767 methods = xfer->endpoint->methods;
3771 EHCI_APPEND_QH((ehci_qh_t *)xfer->qh_start[xfer->flags_int.curr_dma_set],
3775 EHCI_APPEND_QH((ehci_qh_t *)xfer->qh_start[xfer->flags_int.curr_dma_set],
3776 sc->sc_intr_p_last[xfer->qh_pos]);
3790 struct usb_xfer *xfer;
3797 TAILQ_FOREACH(xfer, &sc->sc_bus.intr_q.head, wait_entry) {
3799 if (xfer->xroot->udev == udev) {
3801 methods = xfer->endpoint->methods;
3805 EHCI_REMOVE_QH((ehci_qh_t *)xfer->qh_start[xfer->flags_int.curr_dma_set],
3809 EHCI_REMOVE_QH((ehci_qh_t *)xfer->qh_start[xfer->flags_int.curr_dma_set],
3810 sc->sc_intr_p_last[xfer->qh_pos]);
3871 ehci_start_dma_delay_second(struct usb_xfer *xfer)
3873 struct ehci_softc *sc = EHCI_BUS2SC(xfer->xroot->bus);
3881 usbd_transfer_timeout_ms(xfer,
3891 ehci_start_dma_delay(struct usb_xfer *xfer)
3893 struct ehci_softc *sc = EHCI_BUS2SC(xfer->xroot->bus);
3901 usbd_transfer_timeout_ms(xfer,