Lines Matching refs:qtd

88 				    struct dwc2_qtd *qtd)  in dwc2_hc_handle_tt_clear()  argument
98 if (!qtd->urb) in dwc2_hc_handle_tt_clear()
101 usb_urb = qtd->urb->priv; in dwc2_hc_handle_tt_clear()
105 if (qtd->urb->status != -EPIPE && qtd->urb->status != -EREMOTEIO) { in dwc2_hc_handle_tt_clear()
405 struct dwc2_qtd *qtd, in dwc2_get_actual_xfer_length() argument
421 length = qtd->ssplit_out_xfer_count; in dwc2_get_actual_xfer_length()
454 struct dwc2_qtd *qtd) in dwc2_update_urb_state() argument
459 int xfer_length = dwc2_get_actual_xfer_length(hsotg, chan, chnum, qtd, in dwc2_update_urb_state()
515 struct dwc2_qtd *qtd) in dwc2_hcd_save_data_toggle() argument
527 qtd->data_toggle = DWC2_HC_PID_DATA0; in dwc2_hcd_save_data_toggle()
529 qtd->data_toggle = DWC2_HC_PID_DATA1; in dwc2_hcd_save_data_toggle()
545 int chnum, struct dwc2_qtd *qtd, in dwc2_update_isoc_urb_state() argument
549 struct dwc2_hcd_urb *urb = qtd->urb; in dwc2_update_isoc_urb_state()
554 frame_desc = &urb->iso_descs[qtd->isoc_frame_index]; in dwc2_update_isoc_urb_state()
560 chan, chnum, qtd, halt_status, NULL); in dwc2_update_isoc_urb_state()
572 qtd->isoc_split_offset, in dwc2_update_isoc_urb_state()
594 chan, chnum, qtd, halt_status, NULL); in dwc2_update_isoc_urb_state()
606 qtd->isoc_split_offset, in dwc2_update_isoc_urb_state()
615 qtd->complete_split = 0; in dwc2_update_isoc_urb_state()
616 qtd->isoc_split_offset = 0; in dwc2_update_isoc_urb_state()
626 if (++qtd->isoc_frame_index == urb->packet_count) { in dwc2_update_isoc_urb_state()
631 dwc2_host_complete(hsotg, qtd, 0); in dwc2_update_isoc_urb_state()
651 struct dwc2_qtd *qtd; in dwc2_deactivate_qh() local
662 qtd = list_first_entry(&qh->qtd_list, struct dwc2_qtd, qtd_list_entry); in dwc2_deactivate_qh()
664 if (qtd->complete_split) in dwc2_deactivate_qh()
666 else if (qtd->isoc_split_pos == DWC2_HCSPLT_XACTPOS_MID || in dwc2_deactivate_qh()
667 qtd->isoc_split_pos == DWC2_HCSPLT_XACTPOS_END) in dwc2_deactivate_qh()
671 dwc2_hcd_qtd_unlink_and_free(hsotg, qtd, qh); in dwc2_deactivate_qh()
697 struct dwc2_qtd *qtd, in dwc2_release_channel() argument
718 if (qtd && qtd->error_count >= 3) { in dwc2_release_channel()
722 dwc2_host_complete(hsotg, qtd, -EPROTO); in dwc2_release_channel()
735 dwc2_host_complete(hsotg, qtd, -EIO); in dwc2_release_channel()
795 struct dwc2_host_chan *chan, struct dwc2_qtd *qtd, in dwc2_halt_channel() argument
804 dwc2_release_channel(hsotg, chan, qtd, halt_status); in dwc2_halt_channel()
856 int chnum, struct dwc2_qtd *qtd, in dwc2_complete_non_periodic_xfer() argument
861 qtd->error_count = 0; in dwc2_complete_non_periodic_xfer()
889 dwc2_halt_channel(hsotg, chan, qtd, halt_status); in dwc2_complete_non_periodic_xfer()
895 dwc2_release_channel(hsotg, chan, qtd, halt_status); in dwc2_complete_non_periodic_xfer()
906 struct dwc2_qtd *qtd, in dwc2_complete_periodic_xfer() argument
911 qtd->error_count = 0; in dwc2_complete_periodic_xfer()
915 dwc2_release_channel(hsotg, chan, qtd, halt_status); in dwc2_complete_periodic_xfer()
918 dwc2_halt_channel(hsotg, chan, qtd, halt_status); in dwc2_complete_periodic_xfer()
923 struct dwc2_qtd *qtd) in dwc2_xfercomp_isoc_split_in() argument
928 if (!qtd->urb) in dwc2_xfercomp_isoc_split_in()
931 frame_desc = &qtd->urb->iso_descs[qtd->isoc_frame_index]; in dwc2_xfercomp_isoc_split_in()
932 len = dwc2_get_actual_xfer_length(hsotg, chan, chnum, qtd, in dwc2_xfercomp_isoc_split_in()
935 qtd->complete_split = 0; in dwc2_xfercomp_isoc_split_in()
936 qtd->isoc_split_offset = 0; in dwc2_xfercomp_isoc_split_in()
946 memcpy(qtd->urb->buf + frame_desc->offset + in dwc2_xfercomp_isoc_split_in()
947 qtd->isoc_split_offset, chan->qh->dw_align_buf, len); in dwc2_xfercomp_isoc_split_in()
950 qtd->isoc_split_offset += len; in dwc2_xfercomp_isoc_split_in()
954 qtd->isoc_frame_index++; in dwc2_xfercomp_isoc_split_in()
955 qtd->complete_split = 0; in dwc2_xfercomp_isoc_split_in()
956 qtd->isoc_split_offset = 0; in dwc2_xfercomp_isoc_split_in()
959 if (qtd->isoc_frame_index == qtd->urb->packet_count) { in dwc2_xfercomp_isoc_split_in()
960 dwc2_host_complete(hsotg, qtd, 0); in dwc2_xfercomp_isoc_split_in()
961 dwc2_release_channel(hsotg, chan, qtd, in dwc2_xfercomp_isoc_split_in()
964 dwc2_release_channel(hsotg, chan, qtd, in dwc2_xfercomp_isoc_split_in()
977 struct dwc2_qtd *qtd) in dwc2_hc_xfercomp_intr() argument
979 struct dwc2_hcd_urb *urb = qtd->urb; in dwc2_hc_xfercomp_intr()
1006 if (qtd->complete_split && in dwc2_hc_xfercomp_intr()
1008 qtd)) in dwc2_hc_xfercomp_intr()
1011 qtd->complete_split = 0; in dwc2_hc_xfercomp_intr()
1018 switch (qtd->control_phase) { in dwc2_hc_xfercomp_intr()
1021 qtd->control_phase = DWC2_CONTROL_DATA; in dwc2_hc_xfercomp_intr()
1023 qtd->control_phase = DWC2_CONTROL_STATUS; in dwc2_hc_xfercomp_intr()
1030 chnum, urb, qtd); in dwc2_hc_xfercomp_intr()
1032 qtd->control_phase = DWC2_CONTROL_STATUS; in dwc2_hc_xfercomp_intr()
1037 qtd); in dwc2_hc_xfercomp_intr()
1045 dwc2_host_complete(hsotg, qtd, urb->status); in dwc2_hc_xfercomp_intr()
1050 dwc2_complete_non_periodic_xfer(hsotg, chan, chnum, qtd, in dwc2_hc_xfercomp_intr()
1056 qtd); in dwc2_hc_xfercomp_intr()
1058 dwc2_host_complete(hsotg, qtd, urb->status); in dwc2_hc_xfercomp_intr()
1064 dwc2_hcd_save_data_toggle(hsotg, chan, chnum, qtd); in dwc2_hc_xfercomp_intr()
1065 dwc2_complete_non_periodic_xfer(hsotg, chan, chnum, qtd, in dwc2_hc_xfercomp_intr()
1071 qtd); in dwc2_hc_xfercomp_intr()
1078 dwc2_host_complete(hsotg, qtd, urb->status); in dwc2_hc_xfercomp_intr()
1084 dwc2_hcd_save_data_toggle(hsotg, chan, chnum, qtd); in dwc2_hc_xfercomp_intr()
1085 dwc2_complete_periodic_xfer(hsotg, chan, chnum, qtd, in dwc2_hc_xfercomp_intr()
1091 if (qtd->isoc_split_pos == DWC2_HCSPLT_XACTPOS_ALL) in dwc2_hc_xfercomp_intr()
1093 chnum, qtd, DWC2_HC_XFER_COMPLETE); in dwc2_hc_xfercomp_intr()
1094 dwc2_complete_periodic_xfer(hsotg, chan, chnum, qtd, in dwc2_hc_xfercomp_intr()
1109 struct dwc2_qtd *qtd) in dwc2_hc_stall_intr() argument
1111 struct dwc2_hcd_urb *urb = qtd->urb; in dwc2_hc_stall_intr()
1129 dwc2_host_complete(hsotg, qtd, -EPIPE); in dwc2_hc_stall_intr()
1133 dwc2_host_complete(hsotg, qtd, -EPIPE); in dwc2_hc_stall_intr()
1145 dwc2_halt_channel(hsotg, chan, qtd, DWC2_HC_XFER_STALL); in dwc2_hc_stall_intr()
1160 struct dwc2_qtd *qtd, in dwc2_update_urb_state_abn() argument
1164 qtd, halt_status, NULL); in dwc2_update_urb_state_abn()
1209 struct dwc2_qtd *qtd) in dwc2_hc_nak_intr() argument
1211 if (!qtd) { in dwc2_hc_nak_intr()
1216 if (!qtd->urb) { in dwc2_hc_nak_intr()
1231 qtd->error_count = 0; in dwc2_hc_nak_intr()
1232 qtd->complete_split = 0; in dwc2_hc_nak_intr()
1233 dwc2_halt_channel(hsotg, chan, qtd, DWC2_HC_XFER_NAK); in dwc2_hc_nak_intr()
1237 switch (dwc2_hcd_get_pipe_type(&qtd->urb->pipe_info)) { in dwc2_hc_nak_intr()
1247 qtd->error_count = 0; in dwc2_hc_nak_intr()
1256 qtd->error_count = 0; in dwc2_hc_nak_intr()
1259 dwc2_update_urb_state_abn(hsotg, chan, chnum, qtd->urb, in dwc2_hc_nak_intr()
1260 qtd, DWC2_HC_XFER_NAK); in dwc2_hc_nak_intr()
1261 dwc2_hcd_save_data_toggle(hsotg, chan, chnum, qtd); in dwc2_hc_nak_intr()
1272 dwc2_halt_channel(hsotg, chan, qtd, DWC2_HC_XFER_NAK); in dwc2_hc_nak_intr()
1275 qtd->error_count = 0; in dwc2_hc_nak_intr()
1276 dwc2_halt_channel(hsotg, chan, qtd, DWC2_HC_XFER_NAK); in dwc2_hc_nak_intr()
1295 struct dwc2_qtd *qtd) in dwc2_hc_ack_intr() argument
1307 qtd->ssplit_out_xfer_count = chan->xfer_len; in dwc2_hc_ack_intr()
1310 qtd->complete_split = 1; in dwc2_hc_ack_intr()
1311 dwc2_halt_channel(hsotg, chan, qtd, DWC2_HC_XFER_ACK); in dwc2_hc_ack_intr()
1318 qtd->isoc_split_pos = DWC2_HCSPLT_XACTPOS_ALL; in dwc2_hc_ack_intr()
1319 qtd->isoc_split_offset = 0; in dwc2_hc_ack_intr()
1328 frame_desc = &qtd->urb->iso_descs[ in dwc2_hc_ack_intr()
1329 qtd->isoc_frame_index]; in dwc2_hc_ack_intr()
1330 qtd->isoc_split_offset += 188; in dwc2_hc_ack_intr()
1332 if (frame_desc->length - qtd->isoc_split_offset in dwc2_hc_ack_intr()
1334 qtd->isoc_split_pos = in dwc2_hc_ack_intr()
1337 qtd->isoc_split_pos = in dwc2_hc_ack_intr()
1343 qtd->error_count = 0; in dwc2_hc_ack_intr()
1354 dwc2_halt_channel(hsotg, chan, qtd, DWC2_HC_XFER_ACK); in dwc2_hc_ack_intr()
1374 struct dwc2_qtd *qtd) in dwc2_hc_nyet_intr() argument
1387 qtd->complete_split = 0; in dwc2_hc_nyet_intr()
1388 qtd->isoc_split_offset = 0; in dwc2_hc_nyet_intr()
1389 qtd->isoc_frame_index++; in dwc2_hc_nyet_intr()
1390 if (qtd->urb && in dwc2_hc_nyet_intr()
1391 qtd->isoc_frame_index == qtd->urb->packet_count) { in dwc2_hc_nyet_intr()
1392 dwc2_host_complete(hsotg, qtd, 0); in dwc2_hc_nyet_intr()
1393 dwc2_release_channel(hsotg, chan, qtd, in dwc2_hc_nyet_intr()
1396 dwc2_release_channel(hsotg, chan, qtd, in dwc2_hc_nyet_intr()
1420 qtd->error_count++; in dwc2_hc_nyet_intr()
1422 qtd->complete_split = 0; in dwc2_hc_nyet_intr()
1423 dwc2_halt_channel(hsotg, chan, qtd, in dwc2_hc_nyet_intr()
1430 dwc2_halt_channel(hsotg, chan, qtd, DWC2_HC_XFER_NYET); in dwc2_hc_nyet_intr()
1435 qtd->error_count = 0; in dwc2_hc_nyet_intr()
1437 dwc2_update_urb_state_abn(hsotg, chan, chnum, qtd->urb, qtd, in dwc2_hc_nyet_intr()
1439 dwc2_hcd_save_data_toggle(hsotg, chan, chnum, qtd); in dwc2_hc_nyet_intr()
1445 dwc2_halt_channel(hsotg, chan, qtd, DWC2_HC_XFER_NYET); in dwc2_hc_nyet_intr()
1457 struct dwc2_qtd *qtd) in dwc2_hc_babble_intr() argument
1462 dwc2_hc_handle_tt_clear(hsotg, chan, qtd); in dwc2_hc_babble_intr()
1471 dwc2_host_complete(hsotg, qtd, -EOVERFLOW); in dwc2_hc_babble_intr()
1472 dwc2_halt_channel(hsotg, chan, qtd, DWC2_HC_XFER_BABBLE_ERR); in dwc2_hc_babble_intr()
1477 qtd, DWC2_HC_XFER_BABBLE_ERR); in dwc2_hc_babble_intr()
1478 dwc2_halt_channel(hsotg, chan, qtd, halt_status); in dwc2_hc_babble_intr()
1491 struct dwc2_qtd *qtd) in dwc2_hc_ahberr_intr() argument
1493 struct dwc2_hcd_urb *urb = qtd->urb; in dwc2_hc_ahberr_intr()
1506 dwc2_hc_handle_tt_clear(hsotg, chan, qtd); in dwc2_hc_ahberr_intr()
1575 dwc2_host_complete(hsotg, qtd, -EIO); in dwc2_hc_ahberr_intr()
1594 struct dwc2_qtd *qtd) in dwc2_hc_xacterr_intr() argument
1599 dwc2_hc_handle_tt_clear(hsotg, chan, qtd); in dwc2_hc_xacterr_intr()
1607 switch (dwc2_hcd_get_pipe_type(&qtd->urb->pipe_info)) { in dwc2_hc_xacterr_intr()
1610 qtd->error_count++; in dwc2_hc_xacterr_intr()
1613 dwc2_update_urb_state_abn(hsotg, chan, chnum, qtd->urb, in dwc2_hc_xacterr_intr()
1614 qtd, DWC2_HC_XFER_XACT_ERR); in dwc2_hc_xacterr_intr()
1615 dwc2_hcd_save_data_toggle(hsotg, chan, chnum, qtd); in dwc2_hc_xacterr_intr()
1624 dwc2_halt_channel(hsotg, chan, qtd, DWC2_HC_XFER_XACT_ERR); in dwc2_hc_xacterr_intr()
1627 qtd->error_count++; in dwc2_hc_xacterr_intr()
1629 qtd->complete_split = 0; in dwc2_hc_xacterr_intr()
1630 dwc2_halt_channel(hsotg, chan, qtd, DWC2_HC_XFER_XACT_ERR); in dwc2_hc_xacterr_intr()
1637 chnum, qtd, DWC2_HC_XFER_XACT_ERR); in dwc2_hc_xacterr_intr()
1638 dwc2_halt_channel(hsotg, chan, qtd, halt_status); in dwc2_hc_xacterr_intr()
1653 struct dwc2_qtd *qtd) in dwc2_hc_frmovrun_intr() argument
1661 dwc2_hc_handle_tt_clear(hsotg, chan, qtd); in dwc2_hc_frmovrun_intr()
1663 switch (dwc2_hcd_get_pipe_type(&qtd->urb->pipe_info)) { in dwc2_hc_frmovrun_intr()
1668 dwc2_halt_channel(hsotg, chan, qtd, DWC2_HC_XFER_FRAME_OVERRUN); in dwc2_hc_frmovrun_intr()
1672 qtd, DWC2_HC_XFER_FRAME_OVERRUN); in dwc2_hc_frmovrun_intr()
1673 dwc2_halt_channel(hsotg, chan, qtd, halt_status); in dwc2_hc_frmovrun_intr()
1686 struct dwc2_qtd *qtd) in dwc2_hc_datatglerr_intr() argument
1692 qtd->error_count = 0; in dwc2_hc_datatglerr_intr()
1698 dwc2_hc_handle_tt_clear(hsotg, chan, qtd); in dwc2_hc_datatglerr_intr()
1711 struct dwc2_qtd *qtd) in dwc2_halt_status_ok() argument
1737 if (qtd) in dwc2_halt_status_ok()
1739 qtd->complete_split); in dwc2_halt_status_ok()
1757 dwc2_halt_channel(hsotg, chan, qtd, chan->halt_status); in dwc2_halt_status_ok()
1771 struct dwc2_qtd *qtd) in dwc2_hc_chhltd_intr_dma() argument
1806 dwc2_release_channel(hsotg, chan, qtd, in dwc2_hc_chhltd_intr_dma()
1822 dwc2_hc_ack_intr(hsotg, chan, chnum, qtd); in dwc2_hc_chhltd_intr_dma()
1823 dwc2_hc_xfercomp_intr(hsotg, chan, chnum, qtd); in dwc2_hc_chhltd_intr_dma()
1825 dwc2_hc_stall_intr(hsotg, chan, chnum, qtd); in dwc2_hc_chhltd_intr_dma()
1833 qtd->error_count = 0; in dwc2_hc_chhltd_intr_dma()
1845 dwc2_hc_xacterr_intr(hsotg, chan, chnum, qtd); in dwc2_hc_chhltd_intr_dma()
1848 dwc2_hc_xacterr_intr(hsotg, chan, chnum, qtd); in dwc2_hc_chhltd_intr_dma()
1851 dwc2_hc_ahberr_intr(hsotg, chan, chnum, qtd); in dwc2_hc_chhltd_intr_dma()
1853 dwc2_hc_babble_intr(hsotg, chan, chnum, qtd); in dwc2_hc_chhltd_intr_dma()
1855 dwc2_hc_frmovrun_intr(hsotg, chan, chnum, qtd); in dwc2_hc_chhltd_intr_dma()
1864 dwc2_hc_nyet_intr(hsotg, chan, chnum, qtd); in dwc2_hc_chhltd_intr_dma()
1874 dwc2_hc_nak_intr(hsotg, chan, chnum, qtd); in dwc2_hc_chhltd_intr_dma()
1884 dwc2_hc_ack_intr(hsotg, chan, chnum, qtd); in dwc2_hc_chhltd_intr_dma()
1897 dwc2_halt_channel(hsotg, chan, qtd, in dwc2_hc_chhltd_intr_dma()
1916 qtd->error_count++; in dwc2_hc_chhltd_intr_dma()
1917 dwc2_update_urb_state_abn(hsotg, chan, chnum, qtd->urb, in dwc2_hc_chhltd_intr_dma()
1918 qtd, DWC2_HC_XFER_XACT_ERR); in dwc2_hc_chhltd_intr_dma()
1919 dwc2_hcd_save_data_toggle(hsotg, chan, chnum, qtd); in dwc2_hc_chhltd_intr_dma()
1920 dwc2_halt_channel(hsotg, chan, qtd, DWC2_HC_XFER_XACT_ERR); in dwc2_hc_chhltd_intr_dma()
1937 struct dwc2_qtd *qtd) in dwc2_hc_chhltd_intr() argument
1944 dwc2_hc_chhltd_intr_dma(hsotg, chan, chnum, qtd); in dwc2_hc_chhltd_intr()
1946 if (!dwc2_halt_status_ok(hsotg, chan, chnum, qtd)) in dwc2_hc_chhltd_intr()
1948 dwc2_release_channel(hsotg, chan, qtd, chan->halt_status); in dwc2_hc_chhltd_intr()
1958 static bool dwc2_check_qtd_still_ok(struct dwc2_qtd *qtd, struct dwc2_qh *qh) in dwc2_check_qtd_still_ok() argument
1967 return (cur_head == qtd); in dwc2_check_qtd_still_ok()
1973 struct dwc2_qtd *qtd; in dwc2_hc_n_intr() local
2035 qtd = list_first_entry(&chan->qh->qtd_list, struct dwc2_qtd, in dwc2_hc_n_intr()
2044 dwc2_hc_xfercomp_intr(hsotg, chan, chnum, qtd); in dwc2_hc_n_intr()
2054 dwc2_hc_chhltd_intr(hsotg, chan, chnum, qtd); in dwc2_hc_n_intr()
2055 if (!dwc2_check_qtd_still_ok(qtd, chan->qh)) in dwc2_hc_n_intr()
2059 dwc2_hc_ahberr_intr(hsotg, chan, chnum, qtd); in dwc2_hc_n_intr()
2060 if (!dwc2_check_qtd_still_ok(qtd, chan->qh)) in dwc2_hc_n_intr()
2064 dwc2_hc_stall_intr(hsotg, chan, chnum, qtd); in dwc2_hc_n_intr()
2065 if (!dwc2_check_qtd_still_ok(qtd, chan->qh)) in dwc2_hc_n_intr()
2069 dwc2_hc_nak_intr(hsotg, chan, chnum, qtd); in dwc2_hc_n_intr()
2070 if (!dwc2_check_qtd_still_ok(qtd, chan->qh)) in dwc2_hc_n_intr()
2074 dwc2_hc_ack_intr(hsotg, chan, chnum, qtd); in dwc2_hc_n_intr()
2075 if (!dwc2_check_qtd_still_ok(qtd, chan->qh)) in dwc2_hc_n_intr()
2079 dwc2_hc_nyet_intr(hsotg, chan, chnum, qtd); in dwc2_hc_n_intr()
2080 if (!dwc2_check_qtd_still_ok(qtd, chan->qh)) in dwc2_hc_n_intr()
2084 dwc2_hc_xacterr_intr(hsotg, chan, chnum, qtd); in dwc2_hc_n_intr()
2085 if (!dwc2_check_qtd_still_ok(qtd, chan->qh)) in dwc2_hc_n_intr()
2089 dwc2_hc_babble_intr(hsotg, chan, chnum, qtd); in dwc2_hc_n_intr()
2090 if (!dwc2_check_qtd_still_ok(qtd, chan->qh)) in dwc2_hc_n_intr()
2094 dwc2_hc_frmovrun_intr(hsotg, chan, chnum, qtd); in dwc2_hc_n_intr()
2095 if (!dwc2_check_qtd_still_ok(qtd, chan->qh)) in dwc2_hc_n_intr()
2099 dwc2_hc_datatglerr_intr(hsotg, chan, chnum, qtd); in dwc2_hc_n_intr()
2100 if (!dwc2_check_qtd_still_ok(qtd, chan->qh)) in dwc2_hc_n_intr()