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()
1210 struct dwc2_qtd *qtd) in dwc2_hc_nak_intr() argument
1212 if (!qtd) { in dwc2_hc_nak_intr()
1217 if (!qtd->urb) { in dwc2_hc_nak_intr()
1247 qtd->error_count = 0; in dwc2_hc_nak_intr()
1248 qtd->complete_split = 0; in dwc2_hc_nak_intr()
1249 qtd->num_naks++; in dwc2_hc_nak_intr()
1250 qtd->qh->want_wait = qtd->num_naks >= DWC2_NAKS_BEFORE_DELAY && in dwc2_hc_nak_intr()
1253 dwc2_halt_channel(hsotg, chan, qtd, DWC2_HC_XFER_NAK); in dwc2_hc_nak_intr()
1257 switch (dwc2_hcd_get_pipe_type(&qtd->urb->pipe_info)) { in dwc2_hc_nak_intr()
1267 qtd->error_count = 0; in dwc2_hc_nak_intr()
1276 qtd->error_count = 0; in dwc2_hc_nak_intr()
1279 dwc2_update_urb_state_abn(hsotg, chan, chnum, qtd->urb, in dwc2_hc_nak_intr()
1280 qtd, DWC2_HC_XFER_NAK); in dwc2_hc_nak_intr()
1281 dwc2_hcd_save_data_toggle(hsotg, chan, chnum, qtd); in dwc2_hc_nak_intr()
1292 dwc2_halt_channel(hsotg, chan, qtd, DWC2_HC_XFER_NAK); in dwc2_hc_nak_intr()
1295 qtd->error_count = 0; in dwc2_hc_nak_intr()
1296 dwc2_halt_channel(hsotg, chan, qtd, DWC2_HC_XFER_NAK); in dwc2_hc_nak_intr()
1315 struct dwc2_qtd *qtd) in dwc2_hc_ack_intr() argument
1327 qtd->ssplit_out_xfer_count = chan->xfer_len; in dwc2_hc_ack_intr()
1330 qtd->complete_split = 1; in dwc2_hc_ack_intr()
1331 dwc2_halt_channel(hsotg, chan, qtd, DWC2_HC_XFER_ACK); in dwc2_hc_ack_intr()
1338 qtd->isoc_split_pos = DWC2_HCSPLT_XACTPOS_ALL; in dwc2_hc_ack_intr()
1339 qtd->isoc_split_offset = 0; in dwc2_hc_ack_intr()
1348 frame_desc = &qtd->urb->iso_descs[ in dwc2_hc_ack_intr()
1349 qtd->isoc_frame_index]; in dwc2_hc_ack_intr()
1350 qtd->isoc_split_offset += 188; in dwc2_hc_ack_intr()
1352 if (frame_desc->length - qtd->isoc_split_offset in dwc2_hc_ack_intr()
1354 qtd->isoc_split_pos = in dwc2_hc_ack_intr()
1357 qtd->isoc_split_pos = in dwc2_hc_ack_intr()
1363 qtd->error_count = 0; in dwc2_hc_ack_intr()
1374 dwc2_halt_channel(hsotg, chan, qtd, DWC2_HC_XFER_ACK); in dwc2_hc_ack_intr()
1394 struct dwc2_qtd *qtd) in dwc2_hc_nyet_intr() argument
1407 qtd->complete_split = 0; in dwc2_hc_nyet_intr()
1408 qtd->isoc_split_offset = 0; in dwc2_hc_nyet_intr()
1409 qtd->isoc_frame_index++; in dwc2_hc_nyet_intr()
1410 if (qtd->urb && in dwc2_hc_nyet_intr()
1411 qtd->isoc_frame_index == qtd->urb->packet_count) { in dwc2_hc_nyet_intr()
1412 dwc2_host_complete(hsotg, qtd, 0); in dwc2_hc_nyet_intr()
1413 dwc2_release_channel(hsotg, chan, qtd, in dwc2_hc_nyet_intr()
1416 dwc2_release_channel(hsotg, chan, qtd, in dwc2_hc_nyet_intr()
1481 qtd->error_count++; in dwc2_hc_nyet_intr()
1483 qtd->complete_split = 0; in dwc2_hc_nyet_intr()
1484 dwc2_halt_channel(hsotg, chan, qtd, in dwc2_hc_nyet_intr()
1491 dwc2_halt_channel(hsotg, chan, qtd, DWC2_HC_XFER_NYET); in dwc2_hc_nyet_intr()
1496 qtd->error_count = 0; in dwc2_hc_nyet_intr()
1498 dwc2_update_urb_state_abn(hsotg, chan, chnum, qtd->urb, qtd, in dwc2_hc_nyet_intr()
1500 dwc2_hcd_save_data_toggle(hsotg, chan, chnum, qtd); in dwc2_hc_nyet_intr()
1506 dwc2_halt_channel(hsotg, chan, qtd, DWC2_HC_XFER_NYET); in dwc2_hc_nyet_intr()
1518 struct dwc2_qtd *qtd) in dwc2_hc_babble_intr() argument
1523 dwc2_hc_handle_tt_clear(hsotg, chan, qtd); in dwc2_hc_babble_intr()
1532 dwc2_host_complete(hsotg, qtd, -EOVERFLOW); in dwc2_hc_babble_intr()
1533 dwc2_halt_channel(hsotg, chan, qtd, DWC2_HC_XFER_BABBLE_ERR); in dwc2_hc_babble_intr()
1538 qtd, DWC2_HC_XFER_BABBLE_ERR); in dwc2_hc_babble_intr()
1539 dwc2_halt_channel(hsotg, chan, qtd, halt_status); in dwc2_hc_babble_intr()
1552 struct dwc2_qtd *qtd) in dwc2_hc_ahberr_intr() argument
1554 struct dwc2_hcd_urb *urb = qtd->urb; in dwc2_hc_ahberr_intr()
1567 dwc2_hc_handle_tt_clear(hsotg, chan, qtd); in dwc2_hc_ahberr_intr()
1637 dwc2_host_complete(hsotg, qtd, -EIO); in dwc2_hc_ahberr_intr()
1656 struct dwc2_qtd *qtd) in dwc2_hc_xacterr_intr() argument
1661 dwc2_hc_handle_tt_clear(hsotg, chan, qtd); in dwc2_hc_xacterr_intr()
1669 switch (dwc2_hcd_get_pipe_type(&qtd->urb->pipe_info)) { in dwc2_hc_xacterr_intr()
1672 qtd->error_count++; in dwc2_hc_xacterr_intr()
1674 dwc2_update_urb_state_abn(hsotg, chan, chnum, qtd->urb, in dwc2_hc_xacterr_intr()
1675 qtd, DWC2_HC_XFER_XACT_ERR); in dwc2_hc_xacterr_intr()
1676 dwc2_hcd_save_data_toggle(hsotg, chan, chnum, qtd); in dwc2_hc_xacterr_intr()
1685 dwc2_halt_channel(hsotg, chan, qtd, DWC2_HC_XFER_XACT_ERR); in dwc2_hc_xacterr_intr()
1688 qtd->error_count++; in dwc2_hc_xacterr_intr()
1690 qtd->complete_split = 0; in dwc2_hc_xacterr_intr()
1691 dwc2_halt_channel(hsotg, chan, qtd, DWC2_HC_XFER_XACT_ERR); in dwc2_hc_xacterr_intr()
1698 chnum, qtd, DWC2_HC_XFER_XACT_ERR); in dwc2_hc_xacterr_intr()
1699 dwc2_halt_channel(hsotg, chan, qtd, halt_status); in dwc2_hc_xacterr_intr()
1714 struct dwc2_qtd *qtd) in dwc2_hc_frmovrun_intr() argument
1722 dwc2_hc_handle_tt_clear(hsotg, chan, qtd); in dwc2_hc_frmovrun_intr()
1724 switch (dwc2_hcd_get_pipe_type(&qtd->urb->pipe_info)) { in dwc2_hc_frmovrun_intr()
1729 dwc2_halt_channel(hsotg, chan, qtd, DWC2_HC_XFER_FRAME_OVERRUN); in dwc2_hc_frmovrun_intr()
1733 qtd, DWC2_HC_XFER_FRAME_OVERRUN); in dwc2_hc_frmovrun_intr()
1734 dwc2_halt_channel(hsotg, chan, qtd, halt_status); in dwc2_hc_frmovrun_intr()
1747 struct dwc2_qtd *qtd) in dwc2_hc_datatglerr_intr() argument
1753 qtd->error_count = 0; in dwc2_hc_datatglerr_intr()
1759 dwc2_hc_handle_tt_clear(hsotg, chan, qtd); in dwc2_hc_datatglerr_intr()
1772 struct dwc2_qtd *qtd) in dwc2_halt_status_ok() argument
1798 if (qtd) in dwc2_halt_status_ok()
1800 qtd->complete_split); in dwc2_halt_status_ok()
1818 dwc2_halt_channel(hsotg, chan, qtd, chan->halt_status); in dwc2_halt_status_ok()
1832 struct dwc2_qtd *qtd) in dwc2_hc_chhltd_intr_dma() argument
1867 dwc2_release_channel(hsotg, chan, qtd, in dwc2_hc_chhltd_intr_dma()
1883 dwc2_hc_ack_intr(hsotg, chan, chnum, qtd); in dwc2_hc_chhltd_intr_dma()
1884 dwc2_hc_xfercomp_intr(hsotg, chan, chnum, qtd); in dwc2_hc_chhltd_intr_dma()
1886 dwc2_hc_stall_intr(hsotg, chan, chnum, qtd); in dwc2_hc_chhltd_intr_dma()
1894 qtd->error_count = 0; in dwc2_hc_chhltd_intr_dma()
1906 dwc2_hc_xacterr_intr(hsotg, chan, chnum, qtd); in dwc2_hc_chhltd_intr_dma()
1909 dwc2_hc_xacterr_intr(hsotg, chan, chnum, qtd); in dwc2_hc_chhltd_intr_dma()
1912 dwc2_hc_ahberr_intr(hsotg, chan, chnum, qtd); in dwc2_hc_chhltd_intr_dma()
1914 dwc2_hc_babble_intr(hsotg, chan, chnum, qtd); in dwc2_hc_chhltd_intr_dma()
1916 dwc2_hc_frmovrun_intr(hsotg, chan, chnum, qtd); in dwc2_hc_chhltd_intr_dma()
1925 dwc2_hc_nyet_intr(hsotg, chan, chnum, qtd); in dwc2_hc_chhltd_intr_dma()
1935 dwc2_hc_nak_intr(hsotg, chan, chnum, qtd); in dwc2_hc_chhltd_intr_dma()
1945 dwc2_hc_ack_intr(hsotg, chan, chnum, qtd); in dwc2_hc_chhltd_intr_dma()
1958 dwc2_halt_channel(hsotg, chan, qtd, in dwc2_hc_chhltd_intr_dma()
1977 qtd->error_count++; in dwc2_hc_chhltd_intr_dma()
1978 dwc2_update_urb_state_abn(hsotg, chan, chnum, qtd->urb, in dwc2_hc_chhltd_intr_dma()
1979 qtd, DWC2_HC_XFER_XACT_ERR); in dwc2_hc_chhltd_intr_dma()
1990 if (qtd->urb->actual_length >= qtd->urb->length) in dwc2_hc_chhltd_intr_dma()
1991 qtd->error_count = 3; in dwc2_hc_chhltd_intr_dma()
1992 dwc2_hcd_save_data_toggle(hsotg, chan, chnum, qtd); in dwc2_hc_chhltd_intr_dma()
1993 dwc2_halt_channel(hsotg, chan, qtd, DWC2_HC_XFER_XACT_ERR); in dwc2_hc_chhltd_intr_dma()
2010 struct dwc2_qtd *qtd) in dwc2_hc_chhltd_intr() argument
2017 dwc2_hc_chhltd_intr_dma(hsotg, chan, chnum, qtd); in dwc2_hc_chhltd_intr()
2019 if (!dwc2_halt_status_ok(hsotg, chan, chnum, qtd)) in dwc2_hc_chhltd_intr()
2021 dwc2_release_channel(hsotg, chan, qtd, chan->halt_status); in dwc2_hc_chhltd_intr()
2031 static bool dwc2_check_qtd_still_ok(struct dwc2_qtd *qtd, struct dwc2_qh *qh) in dwc2_check_qtd_still_ok() argument
2040 return (cur_head == qtd); in dwc2_check_qtd_still_ok()
2046 struct dwc2_qtd *qtd; in dwc2_hc_n_intr() local
2118 qtd = list_first_entry(&chan->qh->qtd_list, struct dwc2_qtd, in dwc2_hc_n_intr()
2127 dwc2_hc_xfercomp_intr(hsotg, chan, chnum, qtd); in dwc2_hc_n_intr()
2137 dwc2_hc_chhltd_intr(hsotg, chan, chnum, qtd); in dwc2_hc_n_intr()
2138 if (!dwc2_check_qtd_still_ok(qtd, chan->qh)) in dwc2_hc_n_intr()
2142 dwc2_hc_ahberr_intr(hsotg, chan, chnum, qtd); in dwc2_hc_n_intr()
2143 if (!dwc2_check_qtd_still_ok(qtd, chan->qh)) in dwc2_hc_n_intr()
2147 dwc2_hc_stall_intr(hsotg, chan, chnum, qtd); in dwc2_hc_n_intr()
2148 if (!dwc2_check_qtd_still_ok(qtd, chan->qh)) in dwc2_hc_n_intr()
2152 dwc2_hc_nak_intr(hsotg, chan, chnum, qtd); in dwc2_hc_n_intr()
2153 if (!dwc2_check_qtd_still_ok(qtd, chan->qh)) in dwc2_hc_n_intr()
2157 dwc2_hc_ack_intr(hsotg, chan, chnum, qtd); in dwc2_hc_n_intr()
2158 if (!dwc2_check_qtd_still_ok(qtd, chan->qh)) in dwc2_hc_n_intr()
2162 dwc2_hc_nyet_intr(hsotg, chan, chnum, qtd); in dwc2_hc_n_intr()
2163 if (!dwc2_check_qtd_still_ok(qtd, chan->qh)) in dwc2_hc_n_intr()
2167 dwc2_hc_xacterr_intr(hsotg, chan, chnum, qtd); in dwc2_hc_n_intr()
2168 if (!dwc2_check_qtd_still_ok(qtd, chan->qh)) in dwc2_hc_n_intr()
2172 dwc2_hc_babble_intr(hsotg, chan, chnum, qtd); in dwc2_hc_n_intr()
2173 if (!dwc2_check_qtd_still_ok(qtd, chan->qh)) in dwc2_hc_n_intr()
2177 dwc2_hc_frmovrun_intr(hsotg, chan, chnum, qtd); in dwc2_hc_n_intr()
2178 if (!dwc2_check_qtd_still_ok(qtd, chan->qh)) in dwc2_hc_n_intr()
2182 dwc2_hc_datatglerr_intr(hsotg, chan, chnum, qtd); in dwc2_hc_n_intr()
2183 if (!dwc2_check_qtd_still_ok(qtd, chan->qh)) in dwc2_hc_n_intr()