Index: sys/dev/usb/if_mue.c =================================================================== RCS file: /cvsroot/src/sys/dev/usb/if_mue.c,v retrieving revision 1.28 diff -p -u -r1.28 if_mue.c --- sys/dev/usb/if_mue.c 22 Jan 2019 03:42:28 -0000 1.28 +++ sys/dev/usb/if_mue.c 27 Jan 2019 16:45:37 -0000 @@ -933,11 +933,16 @@ mue_attach(device_t parent, device_t sel sc->mue_flags = MUE_LOOKUP(uaa)->mue_flags; /* Decide on what our bufsize will be. */ - if (sc->mue_flags & LAN7500) + if (sc->mue_flags & LAN7500) { sc->mue_rxbufsz = (sc->mue_udev->ud_speed == USB_SPEED_HIGH) ? MUE_7500_HS_RX_BUFSIZE : MUE_7500_FS_RX_BUFSIZE; - else + sc->mue_rx_list_cnt = 1; + sc->mue_tx_list_cnt = 1; + } else { sc->mue_rxbufsz = MUE_7800_RX_BUFSIZE; + sc->mue_rx_list_cnt = MUE_RX_LIST_CNT; + sc->mue_tx_list_cnt = MUE_TX_LIST_CNT; + } sc->mue_txbufsz = MUE_TX_BUFSIZE; /* Find endpoints. */ @@ -1124,7 +1129,7 @@ mue_rx_list_init(struct mue_softc *sc) int err; cd = &sc->mue_cdata; - for (i = 0; i < __arraycount(cd->mue_rx_chain); i++) { + for (i = 0; i < sc->mue_rx_list_cnt; i++) { c = &cd->mue_rx_chain[i]; c->mue_sc = sc; c->mue_idx = i; @@ -1149,7 +1154,7 @@ mue_tx_list_init(struct mue_softc *sc) int err; cd = &sc->mue_cdata; - for (i = 0; i < __arraycount(cd->mue_tx_chain); i++) { + for (i = 0; i < sc->mue_tx_list_cnt; i++) { c = &cd->mue_tx_chain[i]; c->mue_sc = sc; c->mue_idx = i; @@ -1197,7 +1202,7 @@ mue_startup_rx_pipes(struct mue_softc *s size_t i; /* Start up the receive pipe. */ - for (i = 0; i < __arraycount(sc->mue_cdata.mue_rx_chain); i++) { + for (i = 0; i < sc->mue_rx_list_cnt; i++) { c = &sc->mue_cdata.mue_rx_chain[i]; usbd_setup_xfer(c->mue_xfer, c, c->mue_buf, sc->mue_rxbufsz, USBD_SHORT_XFER_OK, USBD_NO_TIMEOUT, mue_rxeof); @@ -1454,11 +1459,6 @@ mue_rxeof(struct usbd_xfer *xfer, void * return; } - if (__predict_false(!(ifp->if_flags & IFF_RUNNING))) { - DPRINTF(sc, "not running\n"); - return; - } - if (__predict_false(status != USBD_NORMAL_COMPLETION)) { DPRINTF(sc, "%s\n", usbd_errstr(status)); if (status == USBD_NOT_STARTED || status == USBD_CANCELLED) @@ -1783,7 +1783,7 @@ mue_start(struct ifnet *ifp) } idx = cd->mue_tx_prod; - while (cd->mue_tx_cnt < MUE_TX_LIST_CNT) { + while ((unsigned)cd->mue_tx_cnt < sc->mue_tx_list_cnt) { IFQ_POLL(&ifp->if_snd, m); if (m == NULL) break; @@ -1797,13 +1797,13 @@ mue_start(struct ifnet *ifp) bpf_mtap(ifp, m, BPF_D_OUT); m_freem(m); - idx = (idx + 1) % MUE_TX_LIST_CNT; + idx = (idx + 1) % sc->mue_tx_list_cnt; cd->mue_tx_cnt++; } cd->mue_tx_prod = idx; - if (cd->mue_tx_cnt >= MUE_TX_LIST_CNT) + if ((unsigned)cd->mue_tx_cnt >= sc->mue_tx_list_cnt) ifp->if_flags |= IFF_OACTIVE; /* Set a timeout in case the chip goes out to lunch. */ @@ -1834,7 +1834,7 @@ mue_stop(struct ifnet *ifp, int disable } /* Free RX resources. */ - for (i = 0; i < __arraycount(sc->mue_cdata.mue_rx_chain); i++) + for (i = 0; i < sc->mue_rx_list_cnt; i++) if (sc->mue_cdata.mue_rx_chain[i].mue_xfer != NULL) { usbd_destroy_xfer( sc->mue_cdata.mue_rx_chain[i].mue_xfer); @@ -1842,7 +1842,7 @@ mue_stop(struct ifnet *ifp, int disable } /* Free TX resources. */ - for (i = 0; i < __arraycount(sc->mue_cdata.mue_tx_chain); i++) + for (i = 0; i < sc->mue_tx_list_cnt; i++) if (sc->mue_cdata.mue_tx_chain[i].mue_xfer != NULL) { usbd_destroy_xfer( sc->mue_cdata.mue_tx_chain[i].mue_xfer); Index: sys/dev/usb/if_muevar.h =================================================================== RCS file: /cvsroot/src/sys/dev/usb/if_muevar.h,v retrieving revision 1.4 diff -p -u -r1.4 if_muevar.h --- sys/dev/usb/if_muevar.h 5 Jan 2019 07:56:07 -0000 1.4 +++ sys/dev/usb/if_muevar.h 27 Jan 2019 16:45:37 -0000 @@ -117,6 +117,9 @@ struct mue_softc { uint32_t mue_rxbufsz; uint32_t mue_txbufsz; int mue_link; + + unsigned mue_rx_list_cnt; + unsigned mue_tx_list_cnt; }; #endif /* _IF_MUEVAR_H_ */