Lines Matching refs:xfer

204 uhci_mem_layout_init(struct uhci_mem_layout *ml, struct usb_xfer *xfer)
206 ml->buf_pc = xfer->frbuffers + 0;
207 ml->fix_pc = xfer->buf_fixup;
211 ml->max_frame_size = xfer->max_frame_size;
878 uhci_transfer_intr_enqueue(struct usb_xfer *xfer)
881 if (uhci_check_transfer(xfer)) {
885 usbd_transfer_enqueue(&xfer->xroot->bus->intr_q, xfer);
888 if (xfer->timeout != 0) {
889 usbd_transfer_timeout_ms(xfer, &uhci_timeout, xfer->timeout);
1005 uhci_isoc_done(uhci_softc_t *sc, struct usb_xfer *xfer)
1008 uint32_t nframes = xfer->nframes;
1011 uint32_t *plen = xfer->frlengths;
1013 uhci_td_t *td = xfer->td_transfer_first;
1014 uhci_td_t **pp_last = &sc->sc_isoc_p_last[xfer->qh_pos];
1016 DPRINTFN(13, "xfer=%p endpoint=%p transfer done\n",
1017 xfer, xfer->endpoint);
1021 usb_bdma_post_sync(xfer);
1053 usbd_copy_in(xfer->frbuffers, offset,
1068 xfer->aframes = xfer->nframes;
1072 uhci_non_isoc_done_sub(struct usb_xfer *xfer)
1081 td = xfer->td_transfer_cache;
1084 if (xfer->aframes != xfer->nframes) {
1085 usbd_xfer_set_frame_len(xfer, xfer->aframes, 0);
1105 } else if ((xfer->aframes != xfer->nframes) && (len > 0)) {
1118 usbd_copy_in(xfer->frbuffers + xfer->aframes,
1119 xfer->frlengths[xfer->aframes], res.buffer, len);
1123 xfer->frlengths[xfer->aframes] += len;
1126 if (((void *)td) == xfer->td_transfer_last) {
1137 if (xfer->flags_int.short_frames_ok) {
1156 xfer->td_transfer_cache = td;
1160 xfer->endpoint->toggle_next = (token & UHCI_TD_SET_DT(1)) ? 0 : 1;
1166 xfer->address, xfer->endpointno, xfer->aframes,
1190 uhci_non_isoc_done(struct usb_xfer *xfer)
1194 DPRINTFN(13, "xfer=%p endpoint=%p transfer done\n",
1195 xfer, xfer->endpoint);
1199 uhci_dump_tds(xfer->td_transfer_first);
1205 usb_bdma_post_sync(xfer);
1209 xfer->td_transfer_cache = xfer->td_transfer_first;
1211 if (xfer->flags_int.control_xfr) {
1212 if (xfer->flags_int.control_hdr) {
1214 err = uhci_non_isoc_done_sub(xfer);
1216 xfer->aframes = 1;
1218 if (xfer->td_transfer_cache == NULL) {
1222 while (xfer->aframes != xfer->nframes) {
1224 err = uhci_non_isoc_done_sub(xfer);
1225 xfer->aframes++;
1227 if (xfer->td_transfer_cache == NULL) {
1232 if (xfer->flags_int.control_xfr &&
1233 !xfer->flags_int.control_act) {
1235 err = uhci_non_isoc_done_sub(xfer);
1238 uhci_device_done(xfer, err);
1248 uhci_check_transfer_sub(struct usb_xfer *xfer)
1257 td = xfer->td_transfer_cache;
1258 qh = xfer->qh_start[xfer->flags_int.curr_dma_set];
1262 xfer->td_transfer_cache = td;
1266 if (xfer->flags_int.control_xfr)
1280 if (td == xfer->td_transfer_last) {
1297 DPRINTFN(13, "xfer=%p following alt next\n", xfer);
1308 uhci_check_transfer(struct usb_xfer *xfer)
1314 DPRINTFN(16, "xfer=%p checking transfer\n", xfer);
1316 if (xfer->endpoint->methods == &uhci_device_isoc_methods) {
1319 td = xfer->td_transfer_last;
1326 td = xfer->td_transfer_first;
1332 uhci_device_done(xfer, USB_ERR_NORMAL_COMPLETION);
1343 td = xfer->td_transfer_cache;
1355 xfer->td_transfer_cache = td;
1361 if (((void *)td) == xfer->td_transfer_last) {
1377 if (xfer->flags_int.short_frames_ok) {
1381 xfer->td_transfer_cache = td;
1382 uhci_check_transfer_sub(xfer);
1391 uhci_non_isoc_done(xfer);
1396 DPRINTFN(13, "xfer=%p is still active\n", xfer);
1406 struct usb_xfer *xfer;
1409 TAILQ_FOREACH(xfer, &sc->sc_bus.intr_q.head, wait_entry) {
1413 if (uhci_check_transfer(xfer)) {
1502 struct usb_xfer *xfer = arg;
1504 DPRINTF("xfer=%p\n", xfer);
1506 USB_BUS_LOCK_ASSERT(xfer->xroot->bus, MA_OWNED);
1509 uhci_device_done(xfer, USB_ERR_TIMEOUT);
1664 uhci_setup_standard_chain(struct usb_xfer *xfer)
1671 xfer->address, UE_GET_ADDR(xfer->endpointno),
1672 xfer->sumlen, usbd_get_speed(xfer->xroot->udev));
1674 temp.average = xfer->max_frame_size;
1675 temp.max_frame_size = xfer->max_frame_size;
1678 xfer->flags_int.curr_dma_set ^= 1;
1681 td = xfer->td_start[xfer->flags_int.curr_dma_set];
1682 xfer->td_transfer_first = td;
1683 xfer->td_transfer_cache = td;
1688 temp.setup_alt_next = xfer->flags_int.short_frames_ok;
1690 uhci_mem_layout_init(&temp.ml, xfer);
1696 if (xfer->xroot->udev->speed == USB_SPEED_LOW) {
1700 htole32(UHCI_TD_SET_ENDPT(xfer->endpointno) |
1701 UHCI_TD_SET_DEVADDR(xfer->address));
1703 if (xfer->endpoint->toggle_next) {
1709 if (xfer->flags_int.control_xfr) {
1711 if (xfer->flags_int.control_hdr) {
1718 temp.len = xfer->frlengths[0];
1719 temp.ml.buf_pc = xfer->frbuffers + 0;
1722 if (xfer->nframes == 1) {
1724 if (xfer->flags_int.control_act) {
1736 while (x != xfer->nframes) {
1740 temp.len = xfer->frlengths[x];
1741 temp.ml.buf_pc = xfer->frbuffers + x;
1745 if (x == xfer->nframes) {
1746 if (xfer->flags_int.control_xfr) {
1748 if (xfer->flags_int.control_act) {
1776 temp.shortpkt = (xfer->flags.force_short_xfer) ? 0 : 1;
1782 (UE_GET_DIR(xfer->endpointno) == UE_DIR_IN) ?
1791 if (xfer->flags_int.control_xfr &&
1792 !xfer->flags_int.control_act) {
1803 (UE_GET_DIR(xfer->endpointno) == UE_DIR_OUT) ?
1828 xfer->td_transfer_last = td;
1833 xfer->endpoint->toggle_next);
1834 uhci_dump_tds(xfer->td_transfer_first);
1837 return (xfer->td_transfer_first);
1845 uhci_device_done(struct usb_xfer *xfer, usb_error_t error)
1847 const struct usb_pipe_methods *methods = xfer->endpoint->methods;
1848 uhci_softc_t *sc = UHCI_BUS2SC(xfer->xroot->bus);
1853 DPRINTFN(2, "xfer=%p, endpoint=%p, error=%d\n",
1854 xfer, xfer->endpoint, error);
1856 qh = xfer->qh_start[xfer->flags_int.curr_dma_set];
1860 if (xfer->flags_int.bandwidth_reclaimed) {
1861 xfer->flags_int.bandwidth_reclaimed = 0;
1868 if (xfer->xroot->udev->speed == USB_SPEED_LOW) {
1875 UHCI_REMOVE_QH(qh, sc->sc_intr_p_last[xfer->qh_pos]);
1879 * which will update "xfer->frlengths".
1881 if (xfer->td_transfer_first &&
1882 xfer->td_transfer_last) {
1884 uhci_isoc_done(sc, xfer);
1886 xfer->td_transfer_first = NULL;
1887 xfer->td_transfer_last = NULL;
1890 usbd_transfer_done(xfer, error);
1897 uhci_device_bulk_open(struct usb_xfer *xfer)
1903 uhci_device_bulk_close(struct usb_xfer *xfer)
1905 uhci_device_done(xfer, USB_ERR_CANCELLED);
1909 uhci_device_bulk_enter(struct usb_xfer *xfer)
1915 uhci_device_bulk_start(struct usb_xfer *xfer)
1917 uhci_softc_t *sc = UHCI_BUS2SC(xfer->xroot->bus);
1922 td = uhci_setup_standard_chain(xfer);
1925 qh = xfer->qh_start[xfer->flags_int.curr_dma_set];
1930 if (xfer->xroot->udev->flags.self_suspended == 0) {
1933 xfer->flags_int.bandwidth_reclaimed = 1;
1939 uhci_transfer_intr_enqueue(xfer);
1954 uhci_device_ctrl_open(struct usb_xfer *xfer)
1960 uhci_device_ctrl_close(struct usb_xfer *xfer)
1962 uhci_device_done(xfer, USB_ERR_CANCELLED);
1966 uhci_device_ctrl_enter(struct usb_xfer *xfer)
1972 uhci_device_ctrl_start(struct usb_xfer *xfer)
1974 uhci_softc_t *sc = UHCI_BUS2SC(xfer->xroot->bus);
1979 td = uhci_setup_standard_chain(xfer);
1982 qh = xfer->qh_start[xfer->flags_int.curr_dma_set];
1991 if (xfer->xroot->udev->flags.self_suspended == 0) {
1992 if (xfer->xroot->udev->speed == USB_SPEED_LOW) {
2001 uhci_transfer_intr_enqueue(xfer);
2016 uhci_device_intr_open(struct usb_xfer *xfer)
2018 uhci_softc_t *sc = UHCI_BUS2SC(xfer->xroot->bus);
2026 if (xfer->interval >= bit) {
2042 xfer->qh_pos = best;
2045 best, xfer->interval);
2049 uhci_device_intr_close(struct usb_xfer *xfer)
2051 uhci_softc_t *sc = UHCI_BUS2SC(xfer->xroot->bus);
2053 sc->sc_intr_stat[xfer->qh_pos]--;
2055 uhci_device_done(xfer, USB_ERR_CANCELLED);
2059 uhci_device_intr_enter(struct usb_xfer *xfer)
2065 uhci_device_intr_start(struct usb_xfer *xfer)
2067 uhci_softc_t *sc = UHCI_BUS2SC(xfer->xroot->bus);
2072 td = uhci_setup_standard_chain(xfer);
2075 qh = xfer->qh_start[xfer->flags_int.curr_dma_set];
2080 if (xfer->xroot->udev->flags.self_suspended == 0) {
2082 UHCI_APPEND_QH(qh, sc->sc_intr_p_last[xfer->qh_pos]);
2088 uhci_transfer_intr_enqueue(xfer);
2103 uhci_device_isoc_open(struct usb_xfer *xfer)
2110 (UE_GET_DIR(xfer->endpointno) == UE_DIR_IN) ?
2111 UHCI_TD_IN(0, xfer->endpointno, xfer->address, 0) :
2112 UHCI_TD_OUT(0, xfer->endpointno, xfer->address, 0);
2120 for (td = xfer->td_start[ds]; td; td = td->obj_next) {
2132 uhci_device_isoc_close(struct usb_xfer *xfer)
2134 uhci_device_done(xfer, USB_ERR_CANCELLED);
2138 uhci_device_isoc_enter(struct usb_xfer *xfer)
2141 uhci_softc_t *sc = UHCI_BUS2SC(xfer->xroot->bus);
2154 DPRINTFN(6, "xfer=%p next=%d nframes=%d\n",
2155 xfer, xfer->endpoint->isoc_next, xfer->nframes);
2159 temp = (nframes - xfer->endpoint->isoc_next) &
2162 if ((xfer->endpoint->is_synced == 0) ||
2163 (temp < xfer->nframes)) {
2170 xfer->endpoint->isoc_next = (nframes + 3) & (UHCI_VFRAMELIST_COUNT - 1);
2171 xfer->endpoint->is_synced = 1;
2172 DPRINTFN(3, "start next=%d\n", xfer->endpoint->isoc_next);
2178 temp = (xfer->endpoint->isoc_next - nframes) &
2184 xfer->isoc_time_complete =
2186 xfer->nframes;
2190 nframes = xfer->nframes;
2192 uhci_mem_layout_init(&ml, xfer);
2194 plen = xfer->frlengths;
2197 xfer->flags_int.curr_dma_set ^= 1;
2200 td = xfer->td_start[xfer->flags_int.curr_dma_set];
2201 xfer->td_transfer_first = td;
2203 pp_last = &sc->sc_isoc_p_last[xfer->endpoint->isoc_next];
2207 xfer->qh_pos = xfer->endpoint->isoc_next;
2217 if (*plen > xfer->max_frame_size) {
2224 xfer->max_frame_size);
2227 *plen = xfer->max_frame_size;
2285 xfer->td_transfer_last = td_last;
2288 xfer->endpoint->isoc_next = (pp_last - &sc->sc_isoc_p_last[0]) &
2293 uhci_device_isoc_start(struct usb_xfer *xfer)
2296 uhci_transfer_intr_enqueue(xfer);
2838 struct usb_xfer *xfer;
2847 xfer = parm->curr_xfer;
2857 xfer->flags_int.bdma_enable = 1;
2858 xfer->flags_int.bdma_no_post_sync = 1;
2865 ntd = ((2 * xfer->nframes) + 1 /* STATUS */
2866 + (xfer->max_data_length / xfer->max_frame_size));
2869 xfer->flags_int.bdma_enable = 1;
2870 xfer->flags_int.bdma_no_post_sync = 1;
2875 ntd = ((2 * xfer->nframes)
2876 + (xfer->max_data_length / xfer->max_frame_size));
2879 xfer->flags_int.bdma_enable = 1;
2880 xfer->flags_int.bdma_no_post_sync = 1;
2885 ntd = ((2 * xfer->nframes)
2886 + (xfer->max_data_length / xfer->max_frame_size));
2889 xfer->flags_int.bdma_enable = 1;
2890 xfer->flags_int.bdma_no_post_sync = 1;
2895 ntd = xfer->nframes;
2919 align = xfer->max_frame_size;
2927 if (!(xfer->max_frame_size &
2928 (xfer->max_frame_size - 1))) {
2944 parm, &pc, xfer->max_frame_size,
2949 xfer->buf_fixup = pc;
2992 xfer->td_start[xfer->flags_int.curr_dma_set] = last_obj;
3020 xfer->qh_start[xfer->flags_int.curr_dma_set] = last_obj;
3022 if (!xfer->flags_int.curr_dma_set) {
3023 xfer->flags_int.curr_dma_set = 1;
3063 uhci_xfer_unsetup(struct usb_xfer *xfer)
3082 struct usb_xfer *xfer;
3090 TAILQ_FOREACH(xfer, &sc->sc_bus.intr_q.head, wait_entry) {
3092 if (xfer->xroot->udev == udev) {
3094 methods = xfer->endpoint->methods;
3095 qh = xfer->qh_start[xfer->flags_int.curr_dma_set];
3100 xfer->flags_int.bandwidth_reclaimed = 1;
3103 if (xfer->xroot->udev->speed == USB_SPEED_LOW) {
3110 UHCI_APPEND_QH(qh, sc->sc_intr_p_last[xfer->qh_pos]);
3124 struct usb_xfer *xfer;
3132 TAILQ_FOREACH(xfer, &sc->sc_bus.intr_q.head, wait_entry) {
3134 if (xfer->xroot->udev == udev) {
3136 methods = xfer->endpoint->methods;
3137 qh = xfer->qh_start[xfer->flags_int.curr_dma_set];
3139 if (xfer->flags_int.bandwidth_reclaimed) {
3140 xfer->flags_int.bandwidth_reclaimed = 0;
3147 if (xfer->xroot->udev->speed == USB_SPEED_LOW) {
3154 UHCI_REMOVE_QH(qh, sc->sc_intr_p_last[xfer->qh_pos]);