Lines Matching refs:xfer

120 static void ohci_device_done(struct usb_xfer *xfer, usb_error_t error);
122 static uint8_t ohci_check_transfer(struct usb_xfer *xfer);
640 ohci_transfer_intr_enqueue(struct usb_xfer *xfer)
643 if (ohci_check_transfer(xfer)) {
647 usbd_transfer_enqueue(&xfer->xroot->bus->intr_q, xfer);
650 if (xfer->timeout != 0) {
651 usbd_transfer_timeout_ms(xfer, &ohci_timeout, xfer->timeout);
718 ohci_isoc_done(struct usb_xfer *xfer)
721 uint32_t *plen = xfer->frlengths;
724 ohci_itd_t *td = xfer->td_transfer_first;
762 if (((void *)td) == xfer->td_transfer_last) {
768 xfer->aframes = xfer->nframes;
769 ohci_device_done(xfer, USB_ERR_NORMAL_COMPLETION);
800 ohci_non_isoc_done_sub(struct usb_xfer *xfer)
810 td = xfer->td_transfer_cache;
814 if (xfer->aframes != xfer->nframes) {
815 usbd_xfer_set_frame_len(xfer, xfer->aframes, 0);
838 } else if (xfer->aframes != xfer->nframes) {
843 xfer->frlengths[xfer->aframes] += td->len - temp;
846 if (xfer->aframes != xfer->nframes) {
848 xfer->frlengths[xfer->aframes] += td->len;
852 if (((void *)td) == xfer->td_transfer_last) {
864 if (xfer->flags_int.short_frames_ok) {
883 xfer->td_transfer_cache = td;
893 ohci_non_isoc_done(struct usb_xfer *xfer)
897 DPRINTFN(13, "xfer=%p endpoint=%p transfer done\n",
898 xfer, xfer->endpoint);
902 ohci_dump_tds(xfer->td_transfer_first);
908 xfer->td_transfer_cache = xfer->td_transfer_first;
910 if (xfer->flags_int.control_xfr) {
912 if (xfer->flags_int.control_hdr) {
914 err = ohci_non_isoc_done_sub(xfer);
916 xfer->aframes = 1;
918 if (xfer->td_transfer_cache == NULL) {
922 while (xfer->aframes != xfer->nframes) {
924 err = ohci_non_isoc_done_sub(xfer);
925 xfer->aframes++;
927 if (xfer->td_transfer_cache == NULL) {
932 if (xfer->flags_int.control_xfr &&
933 !xfer->flags_int.control_act) {
935 err = ohci_non_isoc_done_sub(xfer);
938 ohci_device_done(xfer, err);
945 ohci_check_transfer_sub(struct usb_xfer *xfer)
954 td = xfer->td_transfer_cache;
964 if (((void *)td) == xfer->td_transfer_last) {
991 xfer->td_transfer_cache = td;
995 ed = xfer->qh_start[xfer->flags_int.curr_dma_set];
1000 DPRINTFN(13, "xfer=%p following alt next\n", xfer);
1007 if (xfer->xroot->udev->flags.self_suspended) {
1009 } else if (xfer->endpoint->methods == &ohci_device_bulk_methods) {
1010 ohci_softc_t *sc = OHCI_BUS2SC(xfer->xroot->bus);
1013 } else if (xfer->endpoint->methods == &ohci_device_ctrl_methods) {
1014 ohci_softc_t *sc = OHCI_BUS2SC(xfer->xroot->bus);
1029 ohci_check_transfer(struct usb_xfer *xfer)
1035 DPRINTFN(13, "xfer=%p checking transfer\n", xfer);
1037 ed = xfer->qh_start[xfer->flags_int.curr_dma_set];
1045 if (xfer->endpoint->methods == &ohci_device_isoc_methods) {
1047 ohci_isoc_done(xfer);
1049 if (xfer->flags_int.short_frames_ok) {
1050 ohci_check_transfer_sub(xfer);
1051 if (xfer->td_transfer_cache) {
1058 xfer->endpoint->toggle_next = 1;
1060 xfer->endpoint->toggle_next = 0;
1064 ohci_non_isoc_done(xfer);
1068 DPRINTFN(13, "xfer=%p is still active\n", xfer);
1091 struct usb_xfer *xfer;
1094 TAILQ_FOREACH(xfer, &sc->sc_bus.intr_q.head, wait_entry) {
1098 if (ohci_check_transfer(xfer)) {
1227 struct usb_xfer *xfer = arg;
1229 DPRINTF("xfer=%p\n", xfer);
1231 USB_BUS_LOCK_ASSERT(xfer->xroot->bus, MA_OWNED);
1234 ohci_device_done(xfer, USB_ERR_TIMEOUT);
1392 ohci_setup_standard_chain(struct usb_xfer *xfer, ohci_ed_t **ed_last)
1402 xfer->address, UE_GET_ADDR(xfer->endpointno),
1403 xfer->sumlen, usbd_get_speed(xfer->xroot->udev));
1405 temp.average = xfer->max_hc_frame_size;
1406 temp.max_frame_size = xfer->max_frame_size;
1409 xfer->flags_int.curr_dma_set ^= 1;
1412 td = xfer->td_start[xfer->flags_int.curr_dma_set];
1414 xfer->td_transfer_first = td;
1415 xfer->td_transfer_cache = td;
1420 temp.setup_alt_next = xfer->flags_int.short_frames_ok;
1422 methods = xfer->endpoint->methods;
1426 if (xfer->flags_int.control_xfr) {
1427 if (xfer->flags_int.control_hdr) {
1432 temp.len = xfer->frlengths[0];
1433 temp.pc = xfer->frbuffers + 0;
1436 if (xfer->nframes == 1) {
1438 if (xfer->flags_int.control_act) {
1449 xfer->endpoint->toggle_next = 1;
1459 if (xfer->endpoint->toggle_next) {
1467 if (UE_GET_DIR(xfer->endpointno) == UE_DIR_IN) {
1473 while (x != xfer->nframes) {
1477 temp.len = xfer->frlengths[x];
1478 temp.pc = xfer->frbuffers + x;
1482 if (x == xfer->nframes) {
1483 if (xfer->flags_int.control_xfr) {
1485 if (xfer->flags_int.control_act) {
1504 temp.shortpkt = (xfer->flags.force_short_xfer) ? 0 : 1;
1512 if (xfer->flags_int.control_xfr &&
1513 !xfer->flags_int.control_act) {
1522 if (UE_GET_DIR(xfer->endpointno) == UE_DIR_IN) {
1549 xfer->td_transfer_last = td;
1554 xfer->endpoint->toggle_next);
1555 ohci_dump_tds(xfer->td_transfer_first);
1559 ed = xfer->qh_start[xfer->flags_int.curr_dma_set];
1561 ed_flags = (OHCI_ED_SET_FA(xfer->address) |
1562 OHCI_ED_SET_EN(UE_GET_ADDR(xfer->endpointno)) |
1563 OHCI_ED_SET_MAXP(xfer->max_frame_size));
1567 if (xfer->xroot->udev->speed == USB_SPEED_LOW) {
1572 td = xfer->td_transfer_first;
1576 if (xfer->xroot->udev->flags.self_suspended == 0) {
1581 ohci_softc_t *sc = OHCI_BUS2SC(xfer->xroot->bus);
1586 ohci_softc_t *sc = OHCI_BUS2SC(xfer->xroot->bus);
1632 ohci_device_done(struct usb_xfer *xfer, usb_error_t error)
1634 const struct usb_pipe_methods *methods = xfer->endpoint->methods;
1635 ohci_softc_t *sc = OHCI_BUS2SC(xfer->xroot->bus);
1641 DPRINTFN(2, "xfer=%p, endpoint=%p, error=%d\n",
1642 xfer, xfer->endpoint, error);
1644 ed = xfer->qh_start[xfer->flags_int.curr_dma_set];
1655 OHCI_REMOVE_QH(ed, sc->sc_intr_p_last[xfer->qh_pos]);
1660 xfer->td_transfer_first = NULL;
1661 xfer->td_transfer_last = NULL;
1664 usbd_transfer_done(xfer, error);
1671 ohci_device_bulk_open(struct usb_xfer *xfer)
1677 ohci_device_bulk_close(struct usb_xfer *xfer)
1679 ohci_device_done(xfer, USB_ERR_CANCELLED);
1683 ohci_device_bulk_enter(struct usb_xfer *xfer)
1689 ohci_device_bulk_start(struct usb_xfer *xfer)
1691 ohci_softc_t *sc = OHCI_BUS2SC(xfer->xroot->bus);
1694 ohci_setup_standard_chain(xfer, &sc->sc_bulk_p_last);
1697 ohci_transfer_intr_enqueue(xfer);
1712 ohci_device_ctrl_open(struct usb_xfer *xfer)
1718 ohci_device_ctrl_close(struct usb_xfer *xfer)
1720 ohci_device_done(xfer, USB_ERR_CANCELLED);
1724 ohci_device_ctrl_enter(struct usb_xfer *xfer)
1730 ohci_device_ctrl_start(struct usb_xfer *xfer)
1732 ohci_softc_t *sc = OHCI_BUS2SC(xfer->xroot->bus);
1735 ohci_setup_standard_chain(xfer, &sc->sc_ctrl_p_last);
1738 ohci_transfer_intr_enqueue(xfer);
1753 ohci_device_intr_open(struct usb_xfer *xfer)
1755 ohci_softc_t *sc = OHCI_BUS2SC(xfer->xroot->bus);
1763 if (xfer->interval >= bit) {
1779 xfer->qh_pos = best;
1782 best, xfer->interval);
1786 ohci_device_intr_close(struct usb_xfer *xfer)
1788 ohci_softc_t *sc = OHCI_BUS2SC(xfer->xroot->bus);
1790 sc->sc_intr_stat[xfer->qh_pos]--;
1792 ohci_device_done(xfer, USB_ERR_CANCELLED);
1796 ohci_device_intr_enter(struct usb_xfer *xfer)
1802 ohci_device_intr_start(struct usb_xfer *xfer)
1804 ohci_softc_t *sc = OHCI_BUS2SC(xfer->xroot->bus);
1807 ohci_setup_standard_chain(xfer, &sc->sc_intr_p_last[xfer->qh_pos]);
1810 ohci_transfer_intr_enqueue(xfer);
1825 ohci_device_isoc_open(struct usb_xfer *xfer)
1831 ohci_device_isoc_close(struct usb_xfer *xfer)
1834 ohci_device_done(xfer, USB_ERR_CANCELLED);
1838 ohci_device_isoc_enter(struct usb_xfer *xfer)
1841 ohci_softc_t *sc = OHCI_BUS2SC(xfer->xroot->bus);
1858 DPRINTFN(6, "xfer=%p isoc_next=%u nframes=%u hcca_fn=%u\n",
1859 xfer, xfer->endpoint->isoc_next, xfer->nframes, nframes);
1861 if ((xfer->endpoint->is_synced == 0) ||
1862 (((nframes - xfer->endpoint->isoc_next) & 0xFFFF) < xfer->nframes) ||
1863 (((xfer->endpoint->isoc_next - nframes) & 0xFFFF) >= 128)) {
1870 xfer->endpoint->isoc_next = (nframes + 3) & 0xFFFF;
1871 xfer->endpoint->is_synced = 1;
1872 DPRINTFN(3, "start next=%d\n", xfer->endpoint->isoc_next);
1878 buf_offset = ((xfer->endpoint->isoc_next - nframes) & 0xFFFF);
1883 xfer->isoc_time_complete =
1885 xfer->nframes);
1889 nframes = xfer->nframes;
1893 plen = xfer->frlengths;
1896 xfer->flags_int.curr_dma_set ^= 1;
1899 td = xfer->td_start[xfer->flags_int.curr_dma_set];
1901 xfer->td_transfer_first = td;
1927 OHCI_ITD_SET_SF(xfer->endpoint->isoc_next) |
1932 xfer->endpoint->isoc_next += ncur;
1944 usbd_get_page(xfer->frbuffers, buf_offset - length, &buf_res);
1949 usbd_get_page(xfer->frbuffers, buf_offset - 1, &buf_res);
1980 xfer->td_transfer_last = td_last;
1985 ohci_dump_itds(xfer->td_transfer_first);
1988 ed = xfer->qh_start[xfer->flags_int.curr_dma_set];
1990 if (UE_GET_DIR(xfer->endpointno) == UE_DIR_IN)
1995 ed_flags |= (OHCI_ED_SET_FA(xfer->address) |
1996 OHCI_ED_SET_EN(UE_GET_ADDR(xfer->endpointno)) |
1997 OHCI_ED_SET_MAXP(xfer->max_frame_size));
1999 if (xfer->xroot->udev->speed == USB_SPEED_LOW) {
2004 td = xfer->td_transfer_first;
2015 ohci_device_isoc_start(struct usb_xfer *xfer)
2018 ohci_transfer_intr_enqueue(xfer);
2387 struct usb_xfer *xfer;
2395 xfer = parm->curr_xfer;
2405 xfer->flags_int.bdma_enable = 1;
2410 ntd = ((2 * xfer->nframes) + 1 /* STATUS */
2411 + (xfer->max_data_length / xfer->max_hc_frame_size));
2415 xfer->flags_int.bdma_enable = 1;
2420 ntd = ((2 * xfer->nframes)
2421 + (xfer->max_data_length / xfer->max_hc_frame_size));
2425 xfer->flags_int.bdma_enable = 1;
2430 ntd = ((2 * xfer->nframes)
2431 + (xfer->max_data_length / xfer->max_hc_frame_size));
2435 xfer->flags_int.bdma_enable = 1;
2439 nitd = ((xfer->max_data_length / OHCI_PAGE_SIZE) +
2440 howmany(xfer->nframes, OHCI_ITD_NOFFSET) +
2509 xfer->td_start[xfer->flags_int.curr_dma_set] = last_obj;
2537 xfer->qh_start[xfer->flags_int.curr_dma_set] = last_obj;
2539 if (!xfer->flags_int.curr_dma_set) {
2540 xfer->flags_int.curr_dma_set = 1;
2580 ohci_xfer_unsetup(struct usb_xfer *xfer)
2599 struct usb_xfer *xfer;
2607 TAILQ_FOREACH(xfer, &sc->sc_bus.intr_q.head, wait_entry) {
2609 if (xfer->xroot->udev == udev) {
2611 methods = xfer->endpoint->methods;
2612 ed = xfer->qh_start[xfer->flags_int.curr_dma_set];
2623 OHCI_APPEND_QH(ed, sc->sc_intr_p_last[xfer->qh_pos]);
2637 struct usb_xfer *xfer;
2645 TAILQ_FOREACH(xfer, &sc->sc_bus.intr_q.head, wait_entry) {
2647 if (xfer->xroot->udev == udev) {
2649 methods = xfer->endpoint->methods;
2650 ed = xfer->qh_start[xfer->flags_int.curr_dma_set];
2659 OHCI_REMOVE_QH(ed, sc->sc_intr_p_last[xfer->qh_pos]);