Lines Matching refs:qtd

99 				    struct dwc2_qtd *qtd)  in dwc2_hc_handle_tt_clear()  argument
110 if (!qtd->urb) in dwc2_hc_handle_tt_clear()
113 usb_urb = qtd->urb->priv; in dwc2_hc_handle_tt_clear()
126 if (qtd->urb->status != -EPIPE && qtd->urb->status != -EREMOTEIO) { in dwc2_hc_handle_tt_clear()
438 struct dwc2_qtd *qtd, in dwc2_get_actual_xfer_length() argument
454 length = qtd->ssplit_out_xfer_count; in dwc2_get_actual_xfer_length()
493 struct dwc2_qtd *qtd) in dwc2_update_urb_state() argument
498 int xfer_length = dwc2_get_actual_xfer_length(hsotg, chan, chnum, qtd, in dwc2_update_urb_state()
542 struct dwc2_qtd *qtd) in dwc2_hcd_save_data_toggle() argument
557 if (WARN(!qtd, in dwc2_hcd_save_data_toggle()
562 qtd->data_toggle = DWC2_HC_PID_DATA0; in dwc2_hcd_save_data_toggle()
564 qtd->data_toggle = DWC2_HC_PID_DATA1; in dwc2_hcd_save_data_toggle()
586 int chnum, struct dwc2_qtd *qtd, in dwc2_update_isoc_urb_state() argument
590 struct dwc2_hcd_urb *urb = qtd->urb; in dwc2_update_isoc_urb_state()
595 frame_desc = &urb->iso_descs[qtd->isoc_frame_index]; in dwc2_update_isoc_urb_state()
601 chan, chnum, qtd, halt_status, NULL); in dwc2_update_isoc_urb_state()
620 chan, chnum, qtd, halt_status, NULL); in dwc2_update_isoc_urb_state()
626 qtd->complete_split = 0; in dwc2_update_isoc_urb_state()
627 qtd->isoc_split_offset = 0; in dwc2_update_isoc_urb_state()
637 if (++qtd->isoc_frame_index == urb->packet_count) { in dwc2_update_isoc_urb_state()
642 dwc2_host_complete(hsotg, qtd, 0); in dwc2_update_isoc_urb_state()
662 struct dwc2_qtd *qtd; in dwc2_deactivate_qh() local
673 qtd = list_first_entry(&qh->qtd_list, struct dwc2_qtd, qtd_list_entry); in dwc2_deactivate_qh()
675 if (qtd->complete_split) in dwc2_deactivate_qh()
677 else if (qtd->isoc_split_pos == DWC2_HCSPLT_XACTPOS_MID || in dwc2_deactivate_qh()
678 qtd->isoc_split_pos == DWC2_HCSPLT_XACTPOS_END) in dwc2_deactivate_qh()
682 dwc2_hcd_qtd_unlink_and_free(hsotg, qtd, qh); in dwc2_deactivate_qh()
706 struct dwc2_qtd *qtd, in dwc2_release_channel() argument
727 if (qtd && qtd->error_count >= 3) { in dwc2_release_channel()
731 dwc2_host_complete(hsotg, qtd, -EPROTO); in dwc2_release_channel()
744 dwc2_host_complete(hsotg, qtd, -EIO); in dwc2_release_channel()
804 struct dwc2_host_chan *chan, struct dwc2_qtd *qtd, in dwc2_halt_channel() argument
813 dwc2_release_channel(hsotg, chan, qtd, halt_status); in dwc2_halt_channel()
865 int chnum, struct dwc2_qtd *qtd, in dwc2_complete_non_periodic_xfer() argument
870 qtd->error_count = 0; in dwc2_complete_non_periodic_xfer()
898 dwc2_halt_channel(hsotg, chan, qtd, halt_status); in dwc2_complete_non_periodic_xfer()
904 dwc2_release_channel(hsotg, chan, qtd, halt_status); in dwc2_complete_non_periodic_xfer()
915 struct dwc2_qtd *qtd, in dwc2_complete_periodic_xfer() argument
920 qtd->error_count = 0; in dwc2_complete_periodic_xfer()
924 dwc2_release_channel(hsotg, chan, qtd, halt_status); in dwc2_complete_periodic_xfer()
927 dwc2_halt_channel(hsotg, chan, qtd, halt_status); in dwc2_complete_periodic_xfer()
932 struct dwc2_qtd *qtd) in dwc2_xfercomp_isoc_split_in() argument
939 if (!qtd->urb) in dwc2_xfercomp_isoc_split_in()
942 frame_desc = &qtd->urb->iso_descs[qtd->isoc_frame_index]; in dwc2_xfercomp_isoc_split_in()
943 len = dwc2_get_actual_xfer_length(hsotg, chan, chnum, qtd, in dwc2_xfercomp_isoc_split_in()
945 if (!len && !qtd->isoc_split_offset) { in dwc2_xfercomp_isoc_split_in()
946 qtd->complete_split = 0; in dwc2_xfercomp_isoc_split_in()
956 memcpy(qtd->urb->buf + (chan->xfer_dma - qtd->urb->dma), in dwc2_xfercomp_isoc_split_in()
960 qtd->isoc_split_offset += len; in dwc2_xfercomp_isoc_split_in()
967 qtd->isoc_frame_index++; in dwc2_xfercomp_isoc_split_in()
968 qtd->complete_split = 0; in dwc2_xfercomp_isoc_split_in()
969 qtd->isoc_split_offset = 0; in dwc2_xfercomp_isoc_split_in()
972 if (qtd->isoc_frame_index == qtd->urb->packet_count) { in dwc2_xfercomp_isoc_split_in()
973 dwc2_host_complete(hsotg, qtd, 0); in dwc2_xfercomp_isoc_split_in()
974 dwc2_release_channel(hsotg, chan, qtd, in dwc2_xfercomp_isoc_split_in()
977 dwc2_release_channel(hsotg, chan, qtd, in dwc2_xfercomp_isoc_split_in()
990 struct dwc2_qtd *qtd) in dwc2_hc_xfercomp_intr() argument
992 struct dwc2_hcd_urb *urb = qtd->urb; in dwc2_hc_xfercomp_intr()
1019 if (qtd->complete_split && in dwc2_hc_xfercomp_intr()
1021 qtd)) in dwc2_hc_xfercomp_intr()
1024 qtd->complete_split = 0; in dwc2_hc_xfercomp_intr()
1031 switch (qtd->control_phase) { in dwc2_hc_xfercomp_intr()
1034 qtd->control_phase = DWC2_CONTROL_DATA; in dwc2_hc_xfercomp_intr()
1036 qtd->control_phase = DWC2_CONTROL_STATUS; in dwc2_hc_xfercomp_intr()
1043 chnum, urb, qtd); in dwc2_hc_xfercomp_intr()
1045 qtd->control_phase = DWC2_CONTROL_STATUS; in dwc2_hc_xfercomp_intr()
1050 qtd); in dwc2_hc_xfercomp_intr()
1058 dwc2_host_complete(hsotg, qtd, urb->status); in dwc2_hc_xfercomp_intr()
1063 dwc2_complete_non_periodic_xfer(hsotg, chan, chnum, qtd, in dwc2_hc_xfercomp_intr()
1069 qtd); in dwc2_hc_xfercomp_intr()
1071 dwc2_host_complete(hsotg, qtd, urb->status); in dwc2_hc_xfercomp_intr()
1077 dwc2_hcd_save_data_toggle(hsotg, chan, chnum, qtd); in dwc2_hc_xfercomp_intr()
1078 dwc2_complete_non_periodic_xfer(hsotg, chan, chnum, qtd, in dwc2_hc_xfercomp_intr()
1084 qtd); in dwc2_hc_xfercomp_intr()
1091 dwc2_host_complete(hsotg, qtd, urb->status); in dwc2_hc_xfercomp_intr()
1097 dwc2_hcd_save_data_toggle(hsotg, chan, chnum, qtd); in dwc2_hc_xfercomp_intr()
1098 dwc2_complete_periodic_xfer(hsotg, chan, chnum, qtd, in dwc2_hc_xfercomp_intr()
1104 if (qtd->isoc_split_pos == DWC2_HCSPLT_XACTPOS_ALL) in dwc2_hc_xfercomp_intr()
1106 chnum, qtd, in dwc2_hc_xfercomp_intr()
1108 dwc2_complete_periodic_xfer(hsotg, chan, chnum, qtd, in dwc2_hc_xfercomp_intr()
1123 struct dwc2_qtd *qtd) in dwc2_hc_stall_intr() argument
1125 struct dwc2_hcd_urb *urb = qtd->urb; in dwc2_hc_stall_intr()
1143 dwc2_host_complete(hsotg, qtd, -EPIPE); in dwc2_hc_stall_intr()
1147 dwc2_host_complete(hsotg, qtd, -EPIPE); in dwc2_hc_stall_intr()
1159 dwc2_halt_channel(hsotg, chan, qtd, DWC2_HC_XFER_STALL); in dwc2_hc_stall_intr()
1174 struct dwc2_qtd *qtd, in dwc2_update_urb_state_abn() argument
1178 qtd, halt_status, NULL); in dwc2_update_urb_state_abn()
1213 struct dwc2_qtd *qtd) in dwc2_hc_nak_intr() argument
1215 if (!qtd) { in dwc2_hc_nak_intr()
1220 if (!qtd->urb) { in dwc2_hc_nak_intr()
1250 qtd->error_count = 0; in dwc2_hc_nak_intr()
1251 qtd->complete_split = 0; in dwc2_hc_nak_intr()
1252 qtd->num_naks++; in dwc2_hc_nak_intr()
1253 qtd->qh->want_wait = qtd->num_naks >= DWC2_NAKS_BEFORE_DELAY && in dwc2_hc_nak_intr()
1256 dwc2_halt_channel(hsotg, chan, qtd, DWC2_HC_XFER_NAK); in dwc2_hc_nak_intr()
1260 switch (dwc2_hcd_get_pipe_type(&qtd->urb->pipe_info)) { in dwc2_hc_nak_intr()
1270 qtd->error_count = 0; in dwc2_hc_nak_intr()
1279 qtd->error_count = 0; in dwc2_hc_nak_intr()
1282 dwc2_update_urb_state_abn(hsotg, chan, chnum, qtd->urb, in dwc2_hc_nak_intr()
1283 qtd, DWC2_HC_XFER_NAK); in dwc2_hc_nak_intr()
1284 dwc2_hcd_save_data_toggle(hsotg, chan, chnum, qtd); in dwc2_hc_nak_intr()
1295 dwc2_halt_channel(hsotg, chan, qtd, DWC2_HC_XFER_NAK); in dwc2_hc_nak_intr()
1298 qtd->error_count = 0; in dwc2_hc_nak_intr()
1299 dwc2_halt_channel(hsotg, chan, qtd, DWC2_HC_XFER_NAK); in dwc2_hc_nak_intr()
1318 struct dwc2_qtd *qtd) in dwc2_hc_ack_intr() argument
1330 qtd->ssplit_out_xfer_count = chan->xfer_len; in dwc2_hc_ack_intr()
1333 qtd->complete_split = 1; in dwc2_hc_ack_intr()
1334 dwc2_halt_channel(hsotg, chan, qtd, DWC2_HC_XFER_ACK); in dwc2_hc_ack_intr()
1341 qtd->isoc_split_pos = DWC2_HCSPLT_XACTPOS_ALL; in dwc2_hc_ack_intr()
1342 qtd->isoc_split_offset = 0; in dwc2_hc_ack_intr()
1351 frame_desc = &qtd->urb->iso_descs[ in dwc2_hc_ack_intr()
1352 qtd->isoc_frame_index]; in dwc2_hc_ack_intr()
1353 qtd->isoc_split_offset += 188; in dwc2_hc_ack_intr()
1355 if (frame_desc->length - qtd->isoc_split_offset in dwc2_hc_ack_intr()
1357 qtd->isoc_split_pos = in dwc2_hc_ack_intr()
1360 qtd->isoc_split_pos = in dwc2_hc_ack_intr()
1366 qtd->error_count = 0; in dwc2_hc_ack_intr()
1377 dwc2_halt_channel(hsotg, chan, qtd, DWC2_HC_XFER_ACK); in dwc2_hc_ack_intr()
1397 struct dwc2_qtd *qtd) in dwc2_hc_nyet_intr() argument
1410 qtd->complete_split = 0; in dwc2_hc_nyet_intr()
1411 qtd->isoc_split_offset = 0; in dwc2_hc_nyet_intr()
1412 qtd->isoc_frame_index++; in dwc2_hc_nyet_intr()
1413 if (qtd->urb && in dwc2_hc_nyet_intr()
1414 qtd->isoc_frame_index == qtd->urb->packet_count) { in dwc2_hc_nyet_intr()
1415 dwc2_host_complete(hsotg, qtd, 0); in dwc2_hc_nyet_intr()
1416 dwc2_release_channel(hsotg, chan, qtd, in dwc2_hc_nyet_intr()
1419 dwc2_release_channel(hsotg, chan, qtd, in dwc2_hc_nyet_intr()
1484 qtd->error_count++; in dwc2_hc_nyet_intr()
1486 qtd->complete_split = 0; in dwc2_hc_nyet_intr()
1487 dwc2_halt_channel(hsotg, chan, qtd, in dwc2_hc_nyet_intr()
1494 dwc2_halt_channel(hsotg, chan, qtd, DWC2_HC_XFER_NYET); in dwc2_hc_nyet_intr()
1499 qtd->error_count = 0; in dwc2_hc_nyet_intr()
1501 dwc2_update_urb_state_abn(hsotg, chan, chnum, qtd->urb, qtd, in dwc2_hc_nyet_intr()
1503 dwc2_hcd_save_data_toggle(hsotg, chan, chnum, qtd); in dwc2_hc_nyet_intr()
1509 dwc2_halt_channel(hsotg, chan, qtd, DWC2_HC_XFER_NYET); in dwc2_hc_nyet_intr()
1521 struct dwc2_qtd *qtd) in dwc2_hc_babble_intr() argument
1526 dwc2_hc_handle_tt_clear(hsotg, chan, qtd); in dwc2_hc_babble_intr()
1535 dwc2_host_complete(hsotg, qtd, -EOVERFLOW); in dwc2_hc_babble_intr()
1536 dwc2_halt_channel(hsotg, chan, qtd, DWC2_HC_XFER_BABBLE_ERR); in dwc2_hc_babble_intr()
1541 qtd, DWC2_HC_XFER_BABBLE_ERR); in dwc2_hc_babble_intr()
1542 dwc2_halt_channel(hsotg, chan, qtd, halt_status); in dwc2_hc_babble_intr()
1555 struct dwc2_qtd *qtd) in dwc2_hc_ahberr_intr() argument
1557 struct dwc2_hcd_urb *urb = qtd->urb; in dwc2_hc_ahberr_intr()
1570 dwc2_hc_handle_tt_clear(hsotg, chan, qtd); in dwc2_hc_ahberr_intr()
1640 dwc2_host_complete(hsotg, qtd, -EIO); in dwc2_hc_ahberr_intr()
1659 struct dwc2_qtd *qtd) in dwc2_hc_xacterr_intr() argument
1664 dwc2_hc_handle_tt_clear(hsotg, chan, qtd); in dwc2_hc_xacterr_intr()
1672 switch (dwc2_hcd_get_pipe_type(&qtd->urb->pipe_info)) { in dwc2_hc_xacterr_intr()
1675 qtd->error_count++; in dwc2_hc_xacterr_intr()
1677 dwc2_update_urb_state_abn(hsotg, chan, chnum, qtd->urb, in dwc2_hc_xacterr_intr()
1678 qtd, DWC2_HC_XFER_XACT_ERR); in dwc2_hc_xacterr_intr()
1679 dwc2_hcd_save_data_toggle(hsotg, chan, chnum, qtd); in dwc2_hc_xacterr_intr()
1688 dwc2_halt_channel(hsotg, chan, qtd, DWC2_HC_XFER_XACT_ERR); in dwc2_hc_xacterr_intr()
1691 qtd->error_count++; in dwc2_hc_xacterr_intr()
1693 qtd->complete_split = 0; in dwc2_hc_xacterr_intr()
1694 dwc2_halt_channel(hsotg, chan, qtd, DWC2_HC_XFER_XACT_ERR); in dwc2_hc_xacterr_intr()
1701 chnum, qtd, DWC2_HC_XFER_XACT_ERR); in dwc2_hc_xacterr_intr()
1702 dwc2_halt_channel(hsotg, chan, qtd, halt_status); in dwc2_hc_xacterr_intr()
1717 struct dwc2_qtd *qtd) in dwc2_hc_frmovrun_intr() argument
1725 dwc2_hc_handle_tt_clear(hsotg, chan, qtd); in dwc2_hc_frmovrun_intr()
1727 switch (dwc2_hcd_get_pipe_type(&qtd->urb->pipe_info)) { in dwc2_hc_frmovrun_intr()
1732 dwc2_halt_channel(hsotg, chan, qtd, DWC2_HC_XFER_FRAME_OVERRUN); in dwc2_hc_frmovrun_intr()
1736 qtd, DWC2_HC_XFER_FRAME_OVERRUN); in dwc2_hc_frmovrun_intr()
1737 dwc2_halt_channel(hsotg, chan, qtd, halt_status); in dwc2_hc_frmovrun_intr()
1750 struct dwc2_qtd *qtd) in dwc2_hc_datatglerr_intr() argument
1756 qtd->error_count = 0; in dwc2_hc_datatglerr_intr()
1762 dwc2_hc_handle_tt_clear(hsotg, chan, qtd); in dwc2_hc_datatglerr_intr()
1775 struct dwc2_qtd *qtd) in dwc2_halt_status_ok() argument
1801 if (qtd) in dwc2_halt_status_ok()
1803 qtd->complete_split); in dwc2_halt_status_ok()
1821 dwc2_halt_channel(hsotg, chan, qtd, chan->halt_status); in dwc2_halt_status_ok()
1835 struct dwc2_qtd *qtd) in dwc2_hc_chhltd_intr_dma() argument
1870 dwc2_release_channel(hsotg, chan, qtd, in dwc2_hc_chhltd_intr_dma()
1886 dwc2_hc_ack_intr(hsotg, chan, chnum, qtd); in dwc2_hc_chhltd_intr_dma()
1887 dwc2_hc_xfercomp_intr(hsotg, chan, chnum, qtd); in dwc2_hc_chhltd_intr_dma()
1889 dwc2_hc_stall_intr(hsotg, chan, chnum, qtd); in dwc2_hc_chhltd_intr_dma()
1897 qtd->error_count = 0; in dwc2_hc_chhltd_intr_dma()
1909 dwc2_hc_xacterr_intr(hsotg, chan, chnum, qtd); in dwc2_hc_chhltd_intr_dma()
1912 dwc2_hc_xacterr_intr(hsotg, chan, chnum, qtd); in dwc2_hc_chhltd_intr_dma()
1915 dwc2_hc_ahberr_intr(hsotg, chan, chnum, qtd); in dwc2_hc_chhltd_intr_dma()
1917 dwc2_hc_babble_intr(hsotg, chan, chnum, qtd); in dwc2_hc_chhltd_intr_dma()
1919 dwc2_hc_frmovrun_intr(hsotg, chan, chnum, qtd); in dwc2_hc_chhltd_intr_dma()
1928 dwc2_hc_nyet_intr(hsotg, chan, chnum, qtd); in dwc2_hc_chhltd_intr_dma()
1938 dwc2_hc_nak_intr(hsotg, chan, chnum, qtd); in dwc2_hc_chhltd_intr_dma()
1948 dwc2_hc_ack_intr(hsotg, chan, chnum, qtd); in dwc2_hc_chhltd_intr_dma()
1961 dwc2_halt_channel(hsotg, chan, qtd, in dwc2_hc_chhltd_intr_dma()
1980 qtd->error_count++; in dwc2_hc_chhltd_intr_dma()
1981 dwc2_update_urb_state_abn(hsotg, chan, chnum, qtd->urb, in dwc2_hc_chhltd_intr_dma()
1982 qtd, DWC2_HC_XFER_XACT_ERR); in dwc2_hc_chhltd_intr_dma()
1993 if (qtd->urb->actual_length >= qtd->urb->length) in dwc2_hc_chhltd_intr_dma()
1994 qtd->error_count = 3; in dwc2_hc_chhltd_intr_dma()
1995 dwc2_hcd_save_data_toggle(hsotg, chan, chnum, qtd); in dwc2_hc_chhltd_intr_dma()
1996 dwc2_halt_channel(hsotg, chan, qtd, DWC2_HC_XFER_XACT_ERR); in dwc2_hc_chhltd_intr_dma()
2013 struct dwc2_qtd *qtd) in dwc2_hc_chhltd_intr() argument
2020 dwc2_hc_chhltd_intr_dma(hsotg, chan, chnum, qtd); in dwc2_hc_chhltd_intr()
2022 if (!dwc2_halt_status_ok(hsotg, chan, chnum, qtd)) in dwc2_hc_chhltd_intr()
2024 dwc2_release_channel(hsotg, chan, qtd, chan->halt_status); in dwc2_hc_chhltd_intr()
2034 static bool dwc2_check_qtd_still_ok(struct dwc2_qtd *qtd, struct dwc2_qh *qh) in dwc2_check_qtd_still_ok() argument
2043 return (cur_head == qtd); in dwc2_check_qtd_still_ok()
2049 struct dwc2_qtd *qtd; in dwc2_hc_n_intr() local
2121 qtd = list_first_entry(&chan->qh->qtd_list, struct dwc2_qtd, in dwc2_hc_n_intr()
2130 dwc2_hc_xfercomp_intr(hsotg, chan, chnum, qtd); in dwc2_hc_n_intr()
2140 dwc2_hc_chhltd_intr(hsotg, chan, chnum, qtd); in dwc2_hc_n_intr()
2141 if (!dwc2_check_qtd_still_ok(qtd, chan->qh)) in dwc2_hc_n_intr()
2145 dwc2_hc_ahberr_intr(hsotg, chan, chnum, qtd); in dwc2_hc_n_intr()
2146 if (!dwc2_check_qtd_still_ok(qtd, chan->qh)) in dwc2_hc_n_intr()
2150 dwc2_hc_stall_intr(hsotg, chan, chnum, qtd); in dwc2_hc_n_intr()
2151 if (!dwc2_check_qtd_still_ok(qtd, chan->qh)) in dwc2_hc_n_intr()
2155 dwc2_hc_nak_intr(hsotg, chan, chnum, qtd); in dwc2_hc_n_intr()
2156 if (!dwc2_check_qtd_still_ok(qtd, chan->qh)) in dwc2_hc_n_intr()
2160 dwc2_hc_ack_intr(hsotg, chan, chnum, qtd); in dwc2_hc_n_intr()
2161 if (!dwc2_check_qtd_still_ok(qtd, chan->qh)) in dwc2_hc_n_intr()
2165 dwc2_hc_nyet_intr(hsotg, chan, chnum, qtd); in dwc2_hc_n_intr()
2166 if (!dwc2_check_qtd_still_ok(qtd, chan->qh)) in dwc2_hc_n_intr()
2170 dwc2_hc_xacterr_intr(hsotg, chan, chnum, qtd); in dwc2_hc_n_intr()
2171 if (!dwc2_check_qtd_still_ok(qtd, chan->qh)) in dwc2_hc_n_intr()
2175 dwc2_hc_babble_intr(hsotg, chan, chnum, qtd); in dwc2_hc_n_intr()
2176 if (!dwc2_check_qtd_still_ok(qtd, chan->qh)) in dwc2_hc_n_intr()
2180 dwc2_hc_frmovrun_intr(hsotg, chan, chnum, qtd); in dwc2_hc_n_intr()
2181 if (!dwc2_check_qtd_still_ok(qtd, chan->qh)) in dwc2_hc_n_intr()
2185 dwc2_hc_datatglerr_intr(hsotg, chan, chnum, qtd); in dwc2_hc_n_intr()
2186 if (!dwc2_check_qtd_still_ok(qtd, chan->qh)) in dwc2_hc_n_intr()