svn commit: r286780 - head/sys/dev/usb/controller
Hans Petter Selasky
hselasky at FreeBSD.org
Fri Aug 14 14:20:12 UTC 2015
Author: hselasky
Date: Fri Aug 14 14:20:10 2015
New Revision: 286780
URL: https://svnweb.freebsd.org/changeset/base/286780
Log:
Handle NYET high speed tokens and predict NAK'ing is up next.
MFC after: 2 weeks
Modified:
head/sys/dev/usb/controller/dwc_otg.c
Modified: head/sys/dev/usb/controller/dwc_otg.c
==============================================================================
--- head/sys/dev/usb/controller/dwc_otg.c Fri Aug 14 14:17:04 2015 (r286779)
+++ head/sys/dev/usb/controller/dwc_otg.c Fri Aug 14 14:20:10 2015 (r286780)
@@ -1060,34 +1060,36 @@ dwc_otg_host_rate_check_interrupt(struct
static uint8_t
dwc_otg_host_rate_check(struct dwc_otg_softc *sc, struct dwc_otg_td *td)
{
+ uint8_t frame_num = (uint8_t)sc->sc_last_frame_num;
+
if (td->ep_type == UE_ISOCHRONOUS) {
/* non TT isochronous traffic */
if ((td->tmr_val != 0) ||
- (sc->sc_last_frame_num & (td->tmr_res - 1))) {
+ (frame_num & (td->tmr_res - 1))) {
goto busy;
}
td->tmr_val = 1; /* executed */
td->toggle = 0;
-
+ return (0);
} else if (td->ep_type == UE_INTERRUPT) {
if (!td->tt_scheduled)
goto busy;
td->tt_scheduled = 0;
+ return (0);
} else if (td->did_nak != 0) {
- uint8_t frame_num = (uint8_t)sc->sc_last_frame_num;
/* check if we should pause sending queries for 125us */
if (td->tmr_res == frame_num) {
/* wait a bit */
dwc_otg_enable_sof_irq(sc);
goto busy;
}
- /* query for data one more time */
- td->tmr_res = frame_num;
- td->did_nak = 0;
} else if (td->set_toggle) {
td->set_toggle = 0;
td->toggle = 1;
}
+ /* query for data one more time */
+ td->tmr_res = frame_num;
+ td->did_nak = 0;
return (0);
busy:
return (1);
@@ -1658,7 +1660,11 @@ dwc_otg_host_data_tx(struct dwc_otg_soft
td->offset += td->tx_bytes;
td->remainder -= td->tx_bytes;
td->toggle ^= 1;
- td->did_nak = 0;
+ /* check if next response will be a NAK */
+ if (hcint & HCINT_NYET)
+ td->did_nak = 1;
+ else
+ td->did_nak = 0;
td->tt_scheduled = 0;
/* check remainder */
More information about the svn-src-all
mailing list