Lines Matching refs:td
643 static void pipe_setting(struct r8a66597 *r8a66597, struct r8a66597_td *td) in pipe_setting() argument
646 struct urb *urb = td->urb; in pipe_setting()
648 if (td->pipenum > 0) { in pipe_setting()
649 info = &td->pipe->info; in pipe_setting()
656 r8a66597_pipe_toggle(r8a66597, td->pipe, 0); in pipe_setting()
657 pipe_toggle_set(r8a66597, td->pipe, urb, 0); in pipe_setting()
658 clear_all_buffer(r8a66597, td->pipe); in pipe_setting()
662 pipe_toggle_restore(r8a66597, td->pipe, urb); in pipe_setting()
850 struct r8a66597_td *td, *next; in force_dequeue() local
857 list_for_each_entry_safe(td, next, list, queue) { in force_dequeue()
858 if (td->address != address) in force_dequeue()
861 urb = td->urb; in force_dequeue()
862 list_del(&td->queue); in force_dequeue()
863 kfree(td); in force_dequeue()
1080 struct r8a66597_td *td) in prepare_setup_packet() argument
1083 __le16 *p = (__le16 *)td->urb->setup_packet; in prepare_setup_packet()
1086 r8a66597_write(r8a66597, make_devsel(td->address) | td->maxpacket, in prepare_setup_packet()
1099 struct r8a66597_td *td) in prepare_packet_read() argument
1101 struct urb *urb = td->urb; in prepare_packet_read()
1108 r8a66597_pipe_toggle(r8a66597, td->pipe, 1); in prepare_packet_read()
1111 pipe_irq_disable(r8a66597, td->pipenum); in prepare_packet_read()
1112 pipe_start(r8a66597, td->pipe); in prepare_packet_read()
1113 pipe_irq_enable(r8a66597, urb, td->pipenum); in prepare_packet_read()
1116 pipe_irq_disable(r8a66597, td->pipenum); in prepare_packet_read()
1117 pipe_setting(r8a66597, td); in prepare_packet_read()
1118 pipe_stop(r8a66597, td->pipe); in prepare_packet_read()
1119 r8a66597_write(r8a66597, ~(1 << td->pipenum), BRDYSTS); in prepare_packet_read()
1121 if (td->pipe->pipetre) { in prepare_packet_read()
1123 td->pipe->pipetre); in prepare_packet_read()
1127 td->maxpacket), in prepare_packet_read()
1128 td->pipe->pipetrn); in prepare_packet_read()
1130 td->pipe->pipetre); in prepare_packet_read()
1133 pipe_start(r8a66597, td->pipe); in prepare_packet_read()
1134 pipe_irq_enable(r8a66597, urb, td->pipenum); in prepare_packet_read()
1141 struct r8a66597_td *td) in prepare_packet_write() argument
1144 struct urb *urb = td->urb; in prepare_packet_write()
1147 pipe_stop(r8a66597, td->pipe); in prepare_packet_write()
1152 r8a66597_pipe_toggle(r8a66597, td->pipe, 1); in prepare_packet_write()
1157 pipe_setting(r8a66597, td); in prepare_packet_write()
1158 if (td->pipe->pipetre) in prepare_packet_write()
1159 r8a66597_bclr(r8a66597, TRENB, td->pipe->pipetre); in prepare_packet_write()
1161 r8a66597_write(r8a66597, ~(1 << td->pipenum), BRDYSTS); in prepare_packet_write()
1163 fifo_change_from_pipe(r8a66597, td->pipe); in prepare_packet_write()
1164 tmp = r8a66597_read(r8a66597, td->pipe->fifoctr); in prepare_packet_write()
1166 pipe_irq_enable(r8a66597, urb, td->pipenum); in prepare_packet_write()
1168 packet_write(r8a66597, td->pipenum); in prepare_packet_write()
1169 pipe_start(r8a66597, td->pipe); in prepare_packet_write()
1174 struct r8a66597_td *td) in prepare_status_packet() argument
1176 struct urb *urb = td->urb; in prepare_status_packet()
1178 r8a66597_pipe_toggle(r8a66597, td->pipe, 1); in prepare_status_packet()
1179 pipe_stop(r8a66597, td->pipe); in prepare_status_packet()
1196 pipe_start(r8a66597, td->pipe); in prepare_status_packet()
1209 static int start_transfer(struct r8a66597 *r8a66597, struct r8a66597_td *td) in start_transfer() argument
1211 BUG_ON(!td); in start_transfer()
1213 switch (td->type) { in start_transfer()
1215 if (is_set_address(td->urb->setup_packet)) { in start_transfer()
1216 td->set_address = 1; in start_transfer()
1217 td->urb->setup_packet[2] = alloc_usb_address(r8a66597, in start_transfer()
1218 td->urb); in start_transfer()
1219 if (td->urb->setup_packet[2] == 0) in start_transfer()
1222 prepare_setup_packet(r8a66597, td); in start_transfer()
1225 prepare_packet_read(r8a66597, td); in start_transfer()
1228 prepare_packet_write(r8a66597, td); in start_transfer()
1231 prepare_status_packet(r8a66597, td); in start_transfer()
1241 static int check_transfer_finish(struct r8a66597_td *td, struct urb *urb) in check_transfer_finish() argument
1244 if (urb->number_of_packets == td->iso_cnt) in check_transfer_finish()
1250 (td->short_packet) || (td->zero_packet)) in check_transfer_finish()
1257 static void set_td_timer(struct r8a66597 *r8a66597, struct r8a66597_td *td) in set_td_timer() argument
1261 BUG_ON(!td); in set_td_timer()
1263 if (!list_empty(&r8a66597->pipe_queue[td->pipenum]) && in set_td_timer()
1264 !usb_pipecontrol(td->urb->pipe) && usb_pipein(td->urb->pipe)) { in set_td_timer()
1265 r8a66597->timeout_map |= 1 << td->pipenum; in set_td_timer()
1266 switch (usb_pipetype(td->urb->pipe)) { in set_td_timer()
1276 mod_timer(&r8a66597->td_timer[td->pipenum], in set_td_timer()
1282 static void finish_request(struct r8a66597 *r8a66597, struct r8a66597_td *td, in finish_request() argument
1291 if (likely(td)) { in finish_request()
1292 if (td->set_address && (status != 0 || urb->unlinked)) in finish_request()
1295 pipe_toggle_save(r8a66597, td->pipe, urb); in finish_request()
1296 list_del(&td->queue); in finish_request()
1297 kfree(td); in finish_request()
1311 td = r8a66597_get_td(r8a66597, pipenum); in finish_request()
1312 if (unlikely(!td)) in finish_request()
1315 start_transfer(r8a66597, td); in finish_request()
1316 set_td_timer(r8a66597, td); in finish_request()
1325 struct r8a66597_td *td = r8a66597_get_td(r8a66597, pipenum); in packet_read() local
1330 if (unlikely(!td)) in packet_read()
1332 urb = td->urb; in packet_read()
1334 fifo_change_from_pipe(r8a66597, td->pipe); in packet_read()
1335 tmp = r8a66597_read(r8a66597, td->pipe->fifoctr); in packet_read()
1337 pipe_stop(r8a66597, td->pipe); in packet_read()
1340 finish_request(r8a66597, td, pipenum, td->urb, -EPIPE); in packet_read()
1348 urb->iso_frame_desc[td->iso_cnt].offset); in packet_read()
1349 urb_len = urb->iso_frame_desc[td->iso_cnt].length; in packet_read()
1354 bufsize = min(urb_len, (int) td->maxpacket); in packet_read()
1366 td->zero_packet = 1; in packet_read()
1368 td->short_packet = 1; in packet_read()
1371 urb->iso_frame_desc[td->iso_cnt].actual_length = size; in packet_read()
1372 urb->iso_frame_desc[td->iso_cnt].status = status; in packet_read()
1373 td->iso_cnt++; in packet_read()
1378 if (finish || check_transfer_finish(td, urb)) { in packet_read()
1379 pipe_stop(r8a66597, td->pipe); in packet_read()
1387 r8a66597_write(r8a66597, BCLR, td->pipe->fifoctr); in packet_read()
1389 r8a66597_read_fifo(r8a66597, td->pipe->fifoaddr, in packet_read()
1394 finish_request(r8a66597, td, pipenum, urb, status); in packet_read()
1402 struct r8a66597_td *td = r8a66597_get_td(r8a66597, pipenum); in packet_write() local
1405 if (unlikely(!td)) in packet_write()
1407 urb = td->urb; in packet_write()
1409 fifo_change_from_pipe(r8a66597, td->pipe); in packet_write()
1410 tmp = r8a66597_read(r8a66597, td->pipe->fifoctr); in packet_write()
1412 pipe_stop(r8a66597, td->pipe); in packet_write()
1415 finish_request(r8a66597, td, pipenum, urb, -EPIPE); in packet_write()
1420 bufsize = td->maxpacket; in packet_write()
1423 urb->iso_frame_desc[td->iso_cnt].offset); in packet_write()
1425 (int)urb->iso_frame_desc[td->iso_cnt].length); in packet_write()
1436 r8a66597_write_fifo(r8a66597, td->pipe, buf, size); in packet_write()
1437 if (!usb_pipebulk(urb->pipe) || td->maxpacket != size) in packet_write()
1438 r8a66597_write(r8a66597, BVAL, td->pipe->fifoctr); in packet_write()
1444 urb->iso_frame_desc[td->iso_cnt].actual_length = size; in packet_write()
1445 urb->iso_frame_desc[td->iso_cnt].status = 0; in packet_write()
1446 td->iso_cnt++; in packet_write()
1450 if (check_transfer_finish(td, urb)) { in packet_write()
1462 struct r8a66597_td *td = r8a66597_get_td(r8a66597, 0); in check_next_phase() local
1466 if (unlikely(!td)) in check_next_phase()
1468 urb = td->urb; in check_next_phase()
1470 switch (td->type) { in check_next_phase()
1473 if (check_transfer_finish(td, urb)) in check_next_phase()
1474 td->type = USB_PID_ACK; in check_next_phase()
1478 td->type = USB_PID_ACK; in check_next_phase()
1480 td->type = USB_PID_OUT; in check_next_phase()
1482 td->type = USB_PID_IN; in check_next_phase()
1490 finish_request(r8a66597, td, 0, urb, status); in check_next_phase()
1492 start_transfer(r8a66597, td); in check_next_phase()
1497 struct r8a66597_td *td = r8a66597_get_td(r8a66597, pipenum); in get_urb_error() local
1499 if (td) { in get_urb_error()
1500 u16 pid = r8a66597_read(r8a66597, td->pipe->pipectr) & PID; in get_urb_error()
1515 struct r8a66597_td *td; in irq_pipe_ready() local
1521 td = r8a66597_get_td(r8a66597, 0); in irq_pipe_ready()
1522 if (td && td->type == USB_PID_IN) in irq_pipe_ready()
1532 td = r8a66597_get_td(r8a66597, pipenum); in irq_pipe_ready()
1533 if (unlikely(!td)) in irq_pipe_ready()
1536 if (td->type == USB_PID_IN) in irq_pipe_ready()
1538 else if (td->type == USB_PID_OUT) in irq_pipe_ready()
1550 struct r8a66597_td *td; in irq_pipe_empty() local
1557 td = r8a66597_get_td(r8a66597, 0); in irq_pipe_empty()
1558 if (td && td->type != USB_PID_OUT) in irq_pipe_empty()
1566 struct r8a66597_td *td; in irq_pipe_empty() local
1567 td = r8a66597_get_td(r8a66597, pipenum); in irq_pipe_empty()
1568 if (unlikely(!td)) in irq_pipe_empty()
1571 tmp = r8a66597_read(r8a66597, td->pipe->pipectr); in irq_pipe_empty()
1575 finish_request(r8a66597, td, pipenum, td->urb, in irq_pipe_empty()
1602 struct r8a66597_td *td; in irq_pipe_nrdy() local
1603 td = r8a66597_get_td(r8a66597, pipenum); in irq_pipe_nrdy()
1604 if (unlikely(!td)) in irq_pipe_nrdy()
1609 pipe_stop(r8a66597, td->pipe); in irq_pipe_nrdy()
1610 finish_request(r8a66597, td, pipenum, td->urb, status); in irq_pipe_nrdy()
1741 struct r8a66597_td *td; in r8a66597_interval_timer() local
1751 td = r8a66597_get_td(r8a66597, pipenum); in r8a66597_interval_timer()
1752 if (td) in r8a66597_interval_timer()
1753 start_transfer(r8a66597, td); in r8a66597_interval_timer()
1764 struct r8a66597_td *td, *new_td = NULL; in r8a66597_td_timer() local
1774 td = r8a66597_get_td(r8a66597, pipenum); in r8a66597_td_timer()
1775 if (!td) { in r8a66597_td_timer()
1780 if (td->urb->actual_length) { in r8a66597_td_timer()
1781 set_td_timer(r8a66597, td); in r8a66597_td_timer()
1785 pipe = td->pipe; in r8a66597_td_timer()
1788 new_td = td; in r8a66597_td_timer()
1794 new_td = td; in r8a66597_td_timer()
1797 } while (td != new_td && td->address == new_td->address); in r8a66597_td_timer()
1801 if (td == new_td) in r8a66597_td_timer()
1869 struct r8a66597_td *td; in r8a66597_make_td() local
1872 td = kzalloc(sizeof(struct r8a66597_td), GFP_ATOMIC); in r8a66597_make_td()
1873 if (td == NULL) in r8a66597_make_td()
1877 td->pipenum = pipenum; in r8a66597_make_td()
1878 td->pipe = hep->hcpriv; in r8a66597_make_td()
1879 td->urb = urb; in r8a66597_make_td()
1880 td->address = get_urb_to_r8a66597_addr(r8a66597, urb); in r8a66597_make_td()
1881 td->maxpacket = usb_maxpacket(urb->dev, urb->pipe, in r8a66597_make_td()
1884 td->type = USB_PID_SETUP; in r8a66597_make_td()
1886 td->type = USB_PID_IN; in r8a66597_make_td()
1888 td->type = USB_PID_OUT; in r8a66597_make_td()
1889 INIT_LIST_HEAD(&td->queue); in r8a66597_make_td()
1891 return td; in r8a66597_make_td()
1900 struct r8a66597_td *td = NULL; in r8a66597_urb_enqueue() local
1930 td = r8a66597_make_td(r8a66597, urb, hep); in r8a66597_urb_enqueue()
1931 if (td == NULL) { in r8a66597_urb_enqueue()
1935 if (list_empty(&r8a66597->pipe_queue[td->pipenum])) in r8a66597_urb_enqueue()
1937 list_add_tail(&td->queue, &r8a66597->pipe_queue[td->pipenum]); in r8a66597_urb_enqueue()
1938 urb->hcpriv = td; in r8a66597_urb_enqueue()
1941 if (td->pipe->info.timer_interval) { in r8a66597_urb_enqueue()
1942 r8a66597->interval_map |= 1 << td->pipenum; in r8a66597_urb_enqueue()
1943 mod_timer(&r8a66597->interval_timer[td->pipenum], in r8a66597_urb_enqueue()
1945 td->pipe->info.timer_interval)); in r8a66597_urb_enqueue()
1947 ret = start_transfer(r8a66597, td); in r8a66597_urb_enqueue()
1949 list_del(&td->queue); in r8a66597_urb_enqueue()
1950 kfree(td); in r8a66597_urb_enqueue()
1954 set_td_timer(r8a66597, td); in r8a66597_urb_enqueue()
1968 struct r8a66597_td *td; in r8a66597_urb_dequeue() local
1978 td = urb->hcpriv; in r8a66597_urb_dequeue()
1979 pipe_stop(r8a66597, td->pipe); in r8a66597_urb_dequeue()
1980 pipe_irq_disable(r8a66597, td->pipenum); in r8a66597_urb_dequeue()
1981 disable_irq_empty(r8a66597, td->pipenum); in r8a66597_urb_dequeue()
1982 finish_request(r8a66597, td, td->pipenum, urb, status); in r8a66597_urb_dequeue()
1994 struct r8a66597_td *td; in r8a66597_endpoint_disable() local
2013 td = r8a66597_get_td(r8a66597, pipenum); in r8a66597_endpoint_disable()
2014 if (td) in r8a66597_endpoint_disable()
2015 urb = td->urb; in r8a66597_endpoint_disable()
2016 finish_request(r8a66597, td, pipenum, urb, -ESHUTDOWN); in r8a66597_endpoint_disable()