Lines Matching refs:td

133 static int	musbotg_channel_alloc(struct musbotg_softc *, struct musbotg_td *td, uint8_t);
134 static void musbotg_channel_free(struct musbotg_softc *, struct musbotg_td *td);
151 musbotg_channel_alloc(struct musbotg_softc *sc, struct musbotg_td *td, uint8_t is_tx)
156 ep = td->ep_no;
181 if (td->max_frame_size >
185 if (td->max_frame_size >
200 musbotg_channel_free(struct musbotg_softc *sc, struct musbotg_td *td)
203 DPRINTFN(1, "ep_no=%d\n", td->channel);
208 if (td == NULL)
210 if (td->channel == -1)
213 musbotg_ep_int_set(sc, td->channel, 0);
214 sc->sc_channel_mask &= ~(1 << td->channel);
216 td->channel = -1;
379 musbotg_dev_ctrl_setup_rx(struct musbotg_td *td)
387 sc = MUSBOTG_PC2SC(td->pc);
389 if (td->channel == -1)
390 td->channel = musbotg_channel_alloc(sc, td, 0);
393 if (td->channel == -1)
396 DPRINTFN(1, "ep_no=%d\n", td->channel);
412 td->did_stall = 1;
446 if (count != td->remainder) {
452 td->did_stall = 1;
461 td->did_stall = 1;
465 td->did_stall = 0;
472 usbd_copy_in(td->pc, 0, &req, sizeof(req));
474 td->offset = sizeof(req);
475 td->remainder = 0;
491 musbotg_channel_free(sc, td);
496 if (!td->did_stall) {
500 td->did_stall = 1;
506 musbotg_host_ctrl_setup_tx(struct musbotg_td *td)
513 sc = MUSBOTG_PC2SC(td->pc);
515 if (td->channel == -1)
516 td->channel = musbotg_channel_alloc(sc, td, 1);
519 if (td->channel == -1)
522 DPRINTFN(1, "ep_no=%d\n", td->channel);
542 td->error = 1;
564 td->error = 1;
567 if (td->error) {
568 musbotg_channel_free(sc, td);
577 if (td->remainder == 0) {
579 musbotg_channel_free(sc, td);
584 usbd_copy_out(td->pc, 0, &req, sizeof(req));
591 td->offset += sizeof(req);
592 td->remainder -= sizeof(req);
596 MUSB2_WRITE_1(sc, MUSB2_REG_TXFADDR(0), td->dev_addr);
597 MUSB2_WRITE_1(sc, MUSB2_REG_TXHADDR(0), td->haddr);
598 MUSB2_WRITE_1(sc, MUSB2_REG_TXHUBPORT(0), td->hport);
599 MUSB2_WRITE_1(sc, MUSB2_REG_TXTI, td->transfer_type);
607 td->transaction_started = 1;
615 musbotg_dev_ctrl_data_rx(struct musbotg_td *td)
624 sc = MUSBOTG_PC2SC(td->pc);
643 if (td->remainder == 0) {
654 td->error = 1;
664 if (count != td->max_frame_size) {
665 if (count < td->max_frame_size) {
667 td->short_pkt = 1;
671 td->error = 1;
676 if (count > td->remainder) {
678 td->error = 1;
684 usbd_get_page(td->pc, td->offset, &buf_res);
708 usbd_copy_in(td->pc, td->offset,
712 td->offset += count;
713 td->remainder -= count;
728 td->offset += temp;
729 td->remainder -= temp;
738 td->offset += buf_res.length;
739 td->remainder -= buf_res.length;
743 if ((td->remainder == 0) || got_short) {
744 if (td->short_pkt) {
758 musbotg_dev_ctrl_data_tx(struct musbotg_td *td)
766 sc = MUSBOTG_PC2SC(td->pc);
787 td->error = 1;
793 count = td->max_frame_size;
794 if (td->remainder < count) {
796 td->short_pkt = 1;
797 count = td->remainder;
802 usbd_get_page(td->pc, td->offset, &buf_res);
811 usbd_copy_out(td->pc, td->offset,
830 td->offset += count;
831 td->remainder -= count;
846 td->offset += temp;
847 td->remainder -= temp;
856 td->offset += buf_res.length;
857 td->remainder -= buf_res.length;
861 if (td->remainder == 0) {
862 if (td->short_pkt) {
876 musbotg_host_ctrl_data_rx(struct musbotg_td *td)
885 sc = MUSBOTG_PC2SC(td->pc);
887 if (td->channel == -1)
888 td->channel = musbotg_channel_alloc(sc, td, 0);
891 if (td->channel == -1)
894 DPRINTFN(1, "ep_no=%d\n", td->channel);
905 if (!td->transaction_started) {
906 td->transaction_started = 1;
911 td->dev_addr);
912 MUSB2_WRITE_1(sc, MUSB2_REG_RXHADDR(0), td->haddr);
913 MUSB2_WRITE_1(sc, MUSB2_REG_RXHUBPORT(0), td->hport);
914 MUSB2_WRITE_1(sc, MUSB2_REG_RXTI, td->transfer_type);
929 td->error = 1;
939 td->error = 1;
942 if (td->error) {
943 musbotg_channel_free(sc, td);
954 if (count != td->max_frame_size) {
955 if (count < td->max_frame_size) {
957 td->short_pkt = 1;
961 td->error = 1;
962 musbotg_channel_free(sc, td);
967 if (count > td->remainder) {
969 td->error = 1;
970 musbotg_channel_free(sc, td);
976 usbd_get_page(td->pc, td->offset, &buf_res);
1000 usbd_copy_in(td->pc, td->offset,
1004 td->offset += count;
1005 td->remainder -= count;
1020 td->offset += temp;
1021 td->remainder -= temp;
1030 td->offset += buf_res.length;
1031 td->remainder -= buf_res.length;
1038 if ((td->remainder == 0) || got_short) {
1039 if (td->short_pkt) {
1042 musbotg_channel_free(sc, td);
1048 td->transaction_started = 1;
1056 musbotg_host_ctrl_data_tx(struct musbotg_td *td)
1064 sc = MUSBOTG_PC2SC(td->pc);
1066 if (td->channel == -1)
1067 td->channel = musbotg_channel_alloc(sc, td, 1);
1070 if (td->channel == -1)
1073 DPRINTFN(1, "ep_no=%d\n", td->channel);
1086 td->error = 1;
1107 td->error = 1;
1111 if (td->error) {
1112 musbotg_channel_free(sc, td);
1129 if (td->transaction_started) {
1131 if (td->remainder == 0) {
1132 if (td->short_pkt) {
1133 musbotg_channel_free(sc, td);
1140 td->transaction_started = 0;
1144 count = td->max_frame_size;
1145 if (td->remainder < count) {
1147 td->short_pkt = 1;
1148 count = td->remainder;
1154 usbd_get_page(td->pc, td->offset, &buf_res);
1163 usbd_copy_out(td->pc, td->offset,
1182 td->offset += count;
1183 td->remainder -= count;
1198 td->offset += temp;
1199 td->remainder -= temp;
1209 td->offset += buf_res.length;
1210 td->remainder -= buf_res.length;
1214 MUSB2_WRITE_1(sc, MUSB2_REG_TXFADDR(0), td->dev_addr);
1215 MUSB2_WRITE_1(sc, MUSB2_REG_TXHADDR(0), td->haddr);
1216 MUSB2_WRITE_1(sc, MUSB2_REG_TXHUBPORT(0), td->hport);
1217 MUSB2_WRITE_1(sc, MUSB2_REG_TXTI, td->transfer_type);
1226 td->transaction_started = 1;
1232 musbotg_dev_ctrl_status(struct musbotg_td *td)
1238 sc = MUSBOTG_PC2SC(td->pc);
1263 musbotg_channel_free(sc, td);
1268 musbotg_host_ctrl_status_rx(struct musbotg_td *td)
1274 sc = MUSBOTG_PC2SC(td->pc);
1276 if (td->channel == -1)
1277 td->channel = musbotg_channel_alloc(sc, td, 0);
1280 if (td->channel == -1)
1283 DPRINTFN(1, "ep_no=%d\n", td->channel);
1288 if (!td->transaction_started) {
1290 td->dev_addr);
1292 MUSB2_WRITE_1(sc, MUSB2_REG_RXHADDR(0), td->haddr);
1293 MUSB2_WRITE_1(sc, MUSB2_REG_RXHUBPORT(0), td->hport);
1294 MUSB2_WRITE_1(sc, MUSB2_REG_RXTI, td->transfer_type);
1299 td->transaction_started = 1;
1322 musbotg_channel_free(sc, td);
1333 td->error = 1;
1343 td->error = 1;
1346 if (td->error) {
1347 musbotg_channel_free(sc, td);
1355 musbotg_host_ctrl_status_tx(struct musbotg_td *td)
1361 sc = MUSBOTG_PC2SC(td->pc);
1363 if (td->channel == -1)
1364 td->channel = musbotg_channel_alloc(sc, td, 1);
1367 if (td->channel == -1)
1370 DPRINTFN(1, "ep_no=%d/%d [%d@%d.%d/%02x]\n", td->channel, td->transaction_started,
1371 td->dev_addr,td->haddr,td->hport, td->transfer_type);
1390 td->error = 1;
1391 musbotg_channel_free(sc, td);
1395 if (td->transaction_started) {
1396 musbotg_channel_free(sc, td);
1402 MUSB2_WRITE_1(sc, MUSB2_REG_TXFADDR(0), td->dev_addr);
1403 MUSB2_WRITE_1(sc, MUSB2_REG_TXHADDR(0), td->haddr);
1404 MUSB2_WRITE_1(sc, MUSB2_REG_TXHUBPORT(0), td->hport);
1405 MUSB2_WRITE_1(sc, MUSB2_REG_TXTI, td->transfer_type);
1410 td->transaction_started = 1;
1421 musbotg_dev_data_rx(struct musbotg_td *td)
1434 sc = MUSBOTG_PC2SC(td->pc);
1436 if (td->channel == -1)
1437 td->channel = musbotg_channel_alloc(sc, td, 0);
1440 if (td->channel == -1)
1444 MUSB2_WRITE_1(sc, MUSB2_REG_EPINDEX, td->channel);
1471 if (count != td->max_frame_size) {
1472 if (count < td->max_frame_size) {
1474 td->short_pkt = 1;
1478 td->error = 1;
1479 musbotg_channel_free(sc, td);
1484 if (count > td->remainder) {
1486 td->error = 1;
1487 musbotg_channel_free(sc, td);
1493 usbd_get_page(td->pc, td->offset, &buf_res);
1507 MUSB2_REG_EPFIFO(td->channel), sc->sc_bounce_buf,
1514 sc->sc_io_hdl, MUSB2_REG_EPFIFO(td->channel),
1517 usbd_copy_in(td->pc, td->offset,
1521 td->offset += count;
1522 td->remainder -= count;
1530 MUSB2_REG_EPFIFO(td->channel), buf_res.buffer,
1537 td->offset += temp;
1538 td->remainder -= temp;
1543 MUSB2_REG_EPFIFO(td->channel), buf_res.buffer,
1548 td->offset += buf_res.length;
1549 td->remainder -= buf_res.length;
1556 if ((td->remainder == 0) || got_short) {
1557 if (td->short_pkt) {
1559 musbotg_channel_free(sc, td);
1571 musbotg_dev_data_tx(struct musbotg_td *td)
1582 sc = MUSBOTG_PC2SC(td->pc);
1584 if (td->channel == -1)
1585 td->channel = musbotg_channel_alloc(sc, td, 1);
1588 if (td->channel == -1)
1592 MUSB2_WRITE_1(sc, MUSB2_REG_EPINDEX, td->channel);
1610 count = td->max_frame_size;
1611 if (td->remainder < count) {
1613 td->short_pkt = 1;
1614 count = td->remainder;
1619 usbd_get_page(td->pc, td->offset, &buf_res);
1628 usbd_copy_out(td->pc, td->offset,
1636 sc->sc_io_hdl, MUSB2_REG_EPFIFO(td->channel),
1643 MUSB2_REG_EPFIFO(td->channel),
1647 td->offset += count;
1648 td->remainder -= count;
1656 MUSB2_REG_EPFIFO(td->channel), buf_res.buffer,
1663 td->offset += temp;
1664 td->remainder -= temp;
1669 MUSB2_REG_EPFIFO(td->channel), buf_res.buffer,
1674 td->offset += buf_res.length;
1675 td->remainder -= buf_res.length;
1679 MUSB2_WRITE_2(sc, MUSB2_REG_TXMAXP, td->reg_max_packet);
1686 if (td->remainder == 0) {
1687 if (td->short_pkt) {
1688 musbotg_channel_free(sc, td);
1700 musbotg_host_data_rx(struct musbotg_td *td)
1710 sc = MUSBOTG_PC2SC(td->pc);
1712 if (td->channel == -1)
1713 td->channel = musbotg_channel_alloc(sc, td, 0);
1716 if (td->channel == -1)
1719 DPRINTFN(1, "ep_no=%d\n", td->channel);
1725 MUSB2_WRITE_1(sc, MUSB2_REG_EPINDEX, td->channel);
1732 if (!td->transaction_started) {
1734 MUSB2_WRITE_1(sc, MUSB2_REG_RXFADDR(td->channel),
1735 td->dev_addr);
1738 MUSB2_WRITE_1(sc, MUSB2_REG_RXHADDR(td->channel),
1739 td->haddr);
1740 MUSB2_WRITE_1(sc, MUSB2_REG_RXHUBPORT(td->channel),
1741 td->hport);
1744 if (td->transfer_type & MUSB2_MASK_TI_PROTO_ISOC)
1750 MUSB2_WRITE_1(sc, MUSB2_REG_RXTI, td->transfer_type);
1753 MUSB2_WRITE_2(sc, MUSB2_REG_RXMAXP, td->reg_max_packet);
1760 if (td->toggle)
1772 td->transaction_started = 1;
1787 td->error = 1;
1792 td->error = 1;
1797 td->error = 1;
1800 if (td->error) {
1801 musbotg_channel_free(sc, td);
1810 td->toggle ^= 1;
1818 if (count != td->max_frame_size) {
1819 if (count < td->max_frame_size) {
1821 td->short_pkt = 1;
1825 td->error = 1;
1826 musbotg_channel_free(sc, td);
1832 if (count > td->remainder) {
1834 td->error = 1;
1835 musbotg_channel_free(sc, td);
1842 usbd_get_page(td->pc, td->offset, &buf_res);
1856 MUSB2_REG_EPFIFO(td->channel), sc->sc_bounce_buf,
1863 sc->sc_io_hdl, MUSB2_REG_EPFIFO(td->channel),
1866 usbd_copy_in(td->pc, td->offset,
1870 td->offset += count;
1871 td->remainder -= count;
1879 MUSB2_REG_EPFIFO(td->channel), buf_res.buffer,
1886 td->offset += temp;
1887 td->remainder -= temp;
1892 MUSB2_REG_EPFIFO(td->channel), buf_res.buffer,
1897 td->offset += buf_res.length;
1898 td->remainder -= buf_res.length;
1905 if ((td->remainder == 0) || got_short) {
1906 if (td->short_pkt) {
1908 musbotg_channel_free(sc, td);
1915 td->transaction_started = 0;
1924 musbotg_host_data_tx(struct musbotg_td *td)
1932 sc = MUSBOTG_PC2SC(td->pc);
1934 if (td->channel == -1)
1935 td->channel = musbotg_channel_alloc(sc, td, 1);
1938 if (td->channel == -1)
1941 DPRINTFN(1, "ep_no=%d\n", td->channel);
1944 MUSB2_WRITE_1(sc, MUSB2_REG_EPINDEX, td->channel);
1954 td->error = 1;
1955 musbotg_channel_free(sc, td);
1977 td->error = 1;
1978 musbotg_channel_free(sc, td);
1995 if (td->transaction_started) {
1997 if (td->remainder == 0) {
1998 if (td->short_pkt) {
1999 musbotg_channel_free(sc, td);
2006 td->transaction_started = 0;
2010 count = td->max_frame_size;
2011 if (td->remainder < count) {
2013 td->short_pkt = 1;
2014 count = td->remainder;
2020 usbd_get_page(td->pc, td->offset, &buf_res);
2029 usbd_copy_out(td->pc, td->offset,
2037 sc->sc_io_hdl, MUSB2_REG_EPFIFO(td->channel),
2044 MUSB2_REG_EPFIFO(td->channel),
2048 td->offset += count;
2049 td->remainder -= count;
2057 MUSB2_REG_EPFIFO(td->channel), buf_res.buffer,
2064 td->offset += temp;
2065 td->remainder -= temp;
2070 MUSB2_REG_EPFIFO(td->channel), buf_res.buffer,
2075 td->offset += buf_res.length;
2076 td->remainder -= buf_res.length;
2080 MUSB2_WRITE_1(sc, MUSB2_REG_TXFADDR(td->channel),
2081 td->dev_addr);
2084 MUSB2_WRITE_1(sc, MUSB2_REG_TXHADDR(td->channel),
2085 td->haddr);
2086 MUSB2_WRITE_1(sc, MUSB2_REG_TXHUBPORT(td->channel),
2087 td->hport);
2090 if (td->transfer_type & MUSB2_MASK_TI_PROTO_ISOC)
2096 MUSB2_WRITE_1(sc, MUSB2_REG_TXTI, td->transfer_type);
2099 MUSB2_WRITE_2(sc, MUSB2_REG_TXMAXP, td->reg_max_packet);
2101 if (!td->transaction_started) {
2106 if (td->toggle)
2120 td->toggle ^= 1;
2121 td->transaction_started = 1;
2130 struct musbotg_td *td;
2135 td = xfer->td_transfer_cache;
2138 if ((td->func) (td)) {
2143 if (((void *)td) == xfer->td_transfer_last) {
2146 if (td->error) {
2148 } else if (td->remainder > 0) {
2153 if (!td->alt_next) {
2161 td = td->obj_next;
2162 xfer->td_transfer_cache = td;
2367 struct musbotg_td *td;
2370 td = temp->td_next;
2371 temp->td = td;
2374 temp->td_next = td->obj_next;
2377 td->func = temp->func;
2378 td->pc = temp->pc;
2379 td->offset = temp->offset;
2380 td->remainder = temp->len;
2381 td->error = 0;
2382 td->transaction_started = 0;
2383 td->did_stall = temp->did_stall;
2384 td->short_pkt = temp->short_pkt;
2385 td->alt_next = temp->setup_alt_next;
2386 td->channel = temp->channel;
2387 td->dev_addr = temp->dev_addr;
2388 td->haddr = temp->haddr;
2389 td->hport = temp->hport;
2390 td->transfer_type = temp->transfer_type;
2398 struct musbotg_td *td;
2415 td = xfer->td_start[0];
2416 xfer->td_transfer_first = td;
2417 xfer->td_transfer_cache = td;
2425 temp.td = NULL;
2475 td->toggle = xfer->endpoint->toggle_next;
2609 td = temp.td;
2610 xfer->td_transfer_last = td;
2707 struct musbotg_td *td;
2713 td = xfer->td_transfer_cache;
2716 len = td->remainder;
2718 xfer->endpoint->toggle_next = td->toggle;
2726 td->error = 1;
2732 if (td->error) {
2735 td = NULL;
2743 if (td->alt_next) {
2744 td = td->obj_next;
2746 td = NULL;
2750 td = NULL;
2755 td = td->obj_next;
2765 xfer->td_transfer_cache = td;
2823 struct musbotg_td *td;
2834 td = xfer->td_transfer_cache;
2836 if (td && (td->channel != -1))
2837 musbotg_channel_free(sc, td);
4152 struct musbotg_td *td;
4156 td = USB_ADD_BYTES(parm->buf, parm->size[0]);
4159 td->max_frame_size = xfer->max_frame_size;
4160 td->reg_max_packet = xfer->max_packet_size |
4162 td->ep_no = ep_no;
4163 td->obj_next = last_obj;
4165 last_obj = td;
4167 parm->size[0] += sizeof(*td);