Lines Matching defs:xfer
687 xhci_generic_done_sub(struct usb_xfer *xfer)
694 td = xfer->td_transfer_cache;
697 if (xfer->aframes != xfer->nframes)
698 usbd_xfer_set_frame_len(xfer, xfer->aframes, 0);
706 DPRINTFN(4, "xfer=%p[%u/%u] rem=%u/%u status=%u\n",
707 xfer, (unsigned int)xfer->aframes,
708 (unsigned int)xfer->nframes,
721 } else if (xfer->aframes != xfer->nframes) {
722 xfer->frlengths[xfer->aframes] += td->len - len;
725 if (((void *)td) == xfer->td_transfer_last) {
738 if (xfer->flags_int.short_frames_ok ||
739 xfer->flags_int.isochronous_xfr ||
740 xfer->flags_int.control_xfr) {
759 xfer->td_transfer_cache = td;
768 xhci_generic_done(struct usb_xfer *xfer)
772 DPRINTFN(13, "xfer=%p endpoint=%p transfer done\n",
773 xfer, xfer->endpoint);
777 xfer->td_transfer_cache = xfer->td_transfer_first;
779 if (xfer->flags_int.control_xfr) {
780 if (xfer->flags_int.control_hdr)
781 err = xhci_generic_done_sub(xfer);
783 xfer->aframes = 1;
785 if (xfer->td_transfer_cache == NULL)
789 while (xfer->aframes != xfer->nframes) {
790 err = xhci_generic_done_sub(xfer);
791 xfer->aframes++;
793 if (xfer->td_transfer_cache == NULL)
797 if (xfer->flags_int.control_xfr &&
798 !xfer->flags_int.control_act)
799 err = xhci_generic_done_sub(xfer);
802 xhci_device_done(xfer, err);
806 xhci_activate_transfer(struct usb_xfer *xfer)
810 td = xfer->td_transfer_cache;
819 xhci_endpoint_doorbell(xfer);
824 xhci_skip_transfer(struct usb_xfer *xfer)
829 td = xfer->td_transfer_cache;
830 td_last = xfer->td_transfer_last;
848 xhci_endpoint_doorbell(xfer);
902 struct usb_xfer *xfer;
914 xfer = pepext->xfer[i + (XHCI_MAX_TRANSFERS * stream_id)];
915 if (xfer == NULL)
918 td = xfer->td_transfer_cache;
953 if (xfer->flags_int.isochronous_xfr) {
971 if (((void *)td) == xfer->td_transfer_last) {
973 xhci_generic_done(xfer);
983 xhci_generic_done(xfer);
995 xhci_generic_done(xfer);
999 if (xfer->flags_int.short_frames_ok ||
1000 xfer->flags_int.isochronous_xfr ||
1001 xfer->flags_int.control_xfr) {
1003 xfer->td_transfer_cache = td->alt_next;
1004 xhci_activate_transfer(xfer);
1007 xhci_skip_transfer(xfer);
1008 xhci_generic_done(xfer);
1016 xfer->td_transfer_cache = td->obj_next;
1017 xhci_activate_transfer(xfer);
1643 struct usb_xfer *xfer = arg;
1645 DPRINTF("xfer=%p\n", xfer);
1647 USB_BUS_LOCK_ASSERT(xfer->xroot->bus, MA_OWNED);
1650 xhci_device_done(xfer, USB_ERR_TIMEOUT);
1966 xhci_setup_generic_chain(struct usb_xfer *xfer)
1978 temp.average = xfer->max_hc_frame_size;
1979 temp.max_packet_size = xfer->max_packet_size;
1980 temp.sc = XHCI_BUS2SC(xfer->xroot->bus);
1984 temp.multishort = xfer->flags_int.isochronous_xfr ||
1985 xfer->flags_int.control_xfr ||
1986 xfer->flags_int.short_frames_ok;
1989 xfer->flags_int.curr_dma_set ^= 1;
1992 td = xfer->td_start[xfer->flags_int.curr_dma_set];
1997 xfer->td_transfer_first = td;
1998 xfer->td_transfer_cache = td;
2000 if (xfer->flags_int.isochronous_xfr) {
2004 mult = xfer->endpoint->ecomp ?
2005 UE_GET_SS_ISO_MULT(xfer->endpoint->ecomp->bmAttributes)
2009 mult = (xfer->endpoint->edesc->
2022 switch (usbd_get_speed(xfer->xroot->udev)) {
2030 shift = usbd_xfer_get_fps_shift(xfer);
2035 x += xfer->endpoint->usb_uframe;
2039 y = XHCI_MFINDEX_GET(x - xfer->endpoint->isoc_next);
2041 if ((xfer->endpoint->is_synced == 0) ||
2042 (y < (xfer->nframes << shift)) ||
2051 xfer->endpoint->isoc_next = XHCI_MFINDEX_GET(x + (3 * 8));
2052 xfer->endpoint->is_synced = 1;
2055 DPRINTFN(3, "start next=%d\n", xfer->endpoint->isoc_next);
2060 y = XHCI_MFINDEX_GET(xfer->endpoint->isoc_next - (x & ~7));
2062 xfer->isoc_time_complete =
2064 (y / 8) + (((xfer->nframes << shift) + 7) / 8);
2067 temp.isoc_frame = xfer->endpoint->isoc_next;
2070 xfer->endpoint->isoc_next += xfer->nframes << shift;
2072 } else if (xfer->flags_int.control_xfr) {
2075 if (xfer->flags_int.control_hdr) {
2076 temp.len = xfer->frlengths[0];
2077 temp.pc = xfer->frbuffers + 0;
2083 if (xfer->nframes == 1) {
2085 if (xfer->flags_int.control_act)
2095 temp.trb_type = xfer->flags_int.control_did_data ?
2105 if (x != xfer->nframes) {
2107 temp.pc = xfer->frbuffers + x;
2109 temp.direction = UE_GET_DIR(xfer->endpointno);
2112 while (x != xfer->nframes) {
2115 temp.len = xfer->frlengths[x];
2116 temp.step_td = ((xfer->endpointno & UE_DIR_IN) &&
2121 if (x == xfer->nframes) {
2122 if (xfer->flags_int.control_xfr) {
2124 if (xfer->flags_int.control_act)
2138 } else if (xfer->flags_int.isochronous_xfr) {
2150 if (temp.len > xfer->max_frame_size)
2151 temp.len = xfer->max_frame_size;
2154 tdpc = (temp.len + xfer->max_packet_size - 1) /
2155 xfer->max_packet_size;
2167 temp.shortpkt = xfer->flags.force_short_xfer ? 0 : 1;
2172 if (xfer->flags_int.isochronous_xfr) {
2173 temp.offset += xfer->frlengths[x - 1];
2177 temp.pc = xfer->frbuffers + x;
2183 if (xfer->flags_int.control_xfr &&
2184 !xfer->flags_int.control_act) {
2196 temp.step_td = (xfer->nframes != 0);
2200 temp.direction = UE_GET_DIR(xfer->endpointno) ^ UE_DIR_IN;
2214 xfer->td_transfer_last = td;
2216 DPRINTF("first=%p last=%p\n", xfer->td_transfer_first, td);
2452 xhci_configure_endpoint_by_xfer(struct usb_xfer *xfer)
2458 pepext = xhci_get_endpoint_ext(xfer->xroot->udev,
2459 xfer->endpoint->edesc);
2461 ecomp = xfer->endpoint->ecomp;
2486 return (xhci_configure_endpoint(xfer->xroot->udev,
2487 xfer->endpoint->edesc, pepext,
2488 xfer->interval, xfer->max_packet_count,
2490 usbd_xfer_get_fps_shift(xfer), xfer->max_packet_size,
2491 xfer->max_frame_size, xfer->endpoint->ep_mode));
2793 xhci_endpoint_doorbell(struct usb_xfer *xfer)
2795 struct xhci_softc *sc = XHCI_BUS2SC(xfer->xroot->bus);
2799 epno = xfer->endpointno;
2800 if (xfer->flags_int.control_xfr)
2804 index = xfer->xroot->udev->controller_slot_id;
2806 if (xfer->xroot->udev->flags.self_suspended == 0) {
2808 epno | XHCI_DB_SID_SET(xfer->stream_id));
2813 xhci_transfer_remove(struct usb_xfer *xfer, usb_error_t error)
2817 if (xfer->flags_int.bandwidth_reclaimed) {
2818 xfer->flags_int.bandwidth_reclaimed = 0;
2820 pepext = xhci_get_endpoint_ext(xfer->xroot->udev,
2821 xfer->endpoint->edesc);
2823 pepext->trb_used[xfer->stream_id]--;
2825 pepext->xfer[xfer->qh_pos] = NULL;
2835 xhci_transfer_insert(struct usb_xfer *xfer)
2849 id = xfer->stream_id;
2852 if (xfer->flags_int.bandwidth_reclaimed) {
2857 pepext = xhci_get_endpoint_ext(xfer->xroot->udev,
2858 xfer->endpoint->edesc);
2860 td_first = xfer->td_transfer_first;
2861 td_last = xfer->td_transfer_last;
2864 switch (xfer->endpoint->edesc->bmAttributes & UE_XFERTYPE) {
2882 if (xfer->flags_int.control_xfr != 0 &&
2883 pepext->trb_ep_maxp != xfer->endpoint->edesc->wMaxPacketSize[0]) {
2893 struct xhci_softc *sc = XHCI_BUS2SC(xfer->xroot->bus);
2965 pepext->xfer[i] = xfer;
2967 xfer->qh_pos = i;
2969 xfer->flags_int.bandwidth_reclaimed = 1;
2971 xhci_endpoint_doorbell(xfer);
3008 xhci_device_done(struct usb_xfer *xfer, usb_error_t error)
3010 DPRINTFN(2, "xfer=%p, endpoint=%p, error=%d\n",
3011 xfer, xfer->endpoint, error);
3014 xhci_transfer_remove(xfer, error);
3017 usbd_transfer_done(xfer, error);
3024 xhci_device_generic_open(struct usb_xfer *xfer)
3026 if (xfer->flags_int.isochronous_xfr) {
3027 switch (xfer->xroot->udev->speed) {
3031 usb_hs_bandwidth_alloc(xfer);
3038 xhci_device_generic_close(struct usb_xfer *xfer)
3042 xhci_device_done(xfer, USB_ERR_CANCELLED);
3043 if (xfer->flags_int.isochronous_xfr) {
3044 switch (xfer->xroot->udev->speed) {
3048 usb_hs_bandwidth_free(xfer);
3058 struct usb_xfer *xfer;
3061 xfer = ep->endpoint_q[stream_id].curr;
3062 if (xfer == NULL)
3070 if (!xfer->flags_int.bandwidth_reclaimed)
3073 xfer = TAILQ_FIRST(&ep->endpoint_q[stream_id].head);
3074 if (xfer == NULL) {
3080 xfer = enter_xfer;
3082 if (xfer == NULL)
3087 (void)xhci_transfer_insert(xfer);
3091 xhci_device_generic_enter(struct usb_xfer *xfer)
3096 xhci_setup_generic_chain(xfer);
3098 xhci_device_generic_multi_enter(xfer->endpoint,
3099 xfer->stream_id, xfer);
3103 xhci_device_generic_start(struct usb_xfer *xfer)
3107 /* try to insert xfer on HW queue */
3108 (void)xhci_transfer_insert(xfer);
3111 xhci_device_generic_multi_enter(xfer->endpoint,
3112 xfer->stream_id, NULL);
3115 usbd_transfer_enqueue(&xfer->xroot->bus->intr_q, xfer);
3118 if (xfer->timeout != 0)
3119 usbd_transfer_timeout_ms(xfer, &xhci_timeout, xfer->timeout);
3661 struct usb_xfer *xfer;
3666 xfer = parm->curr_xfer;
3700 xfer->flags_int.bdma_enable = 1;
3704 if (xfer->flags_int.isochronous_xfr) {
3705 ntd = ((1 * xfer->nframes)
3706 + (xfer->max_data_length / xfer->max_hc_frame_size));
3707 } else if (xfer->flags_int.control_xfr) {
3708 ntd = ((2 * xfer->nframes) + 1 /* STATUS */
3709 + (xfer->max_data_length / xfer->max_hc_frame_size));
3711 ntd = ((2 * xfer->nframes)
3712 + (xfer->max_data_length / xfer->max_hc_frame_size));
3749 xfer->td_start[xfer->flags_int.curr_dma_set] = last_obj;
3751 if (!xfer->flags_int.curr_dma_set) {
3752 xfer->flags_int.curr_dma_set = 1;
3758 xhci_configure_reset_endpoint(struct usb_xfer *xfer)
3760 struct xhci_softc *sc = XHCI_BUS2SC(xfer->xroot->bus);
3771 pepext = xhci_get_endpoint_ext(xfer->xroot->udev,
3772 xfer->endpoint->edesc);
3774 udev = xfer->xroot->udev;
3781 edesc = xfer->endpoint->edesc;
3784 stream_id = xfer->stream_id;
3798 err = xhci_configure_endpoint_by_xfer(xfer);
3849 xhci_xfer_unsetup(struct usb_xfer *xfer)
3855 xhci_start_dma_delay(struct usb_xfer *xfer)
3857 struct xhci_softc *sc = XHCI_BUS2SC(xfer->xroot->bus);
3860 usbd_transfer_enqueue(&sc->sc_bus.intr_q, xfer);
3871 struct usb_xfer *xfer;
3876 TAILQ_FOREACH(xfer, &sc->sc_bus.intr_q.head, wait_entry) {
3877 pepext = xhci_get_endpoint_ext(xfer->xroot->udev,
3878 xfer->endpoint->edesc);
3898 if (pepext->xfer[i] != NULL) {
3899 xhci_device_done(pepext->xfer[i],
3911 (void)xhci_configure_reset_endpoint(xfer);
3924 if (xfer->flags_int.did_dma_delay) {
3926 usbd_transfer_dequeue(xfer);
3929 usb_dma_delay_done_cb(xfer);
3936 TAILQ_FOREACH(xfer, &sc->sc_bus.intr_q.head, wait_entry) {
3937 /* try to insert xfer on HW queue */
3938 (void)xhci_transfer_insert(xfer);
3941 xhci_device_generic_multi_enter(xfer->endpoint,
3942 xfer->stream_id, NULL);