summaryrefslogtreecommitdiffstats
path: root/sys/dev/dwc/if_dwc.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/dwc/if_dwc.c')
-rw-r--r--sys/dev/dwc/if_dwc.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/sys/dev/dwc/if_dwc.c b/sys/dev/dwc/if_dwc.c
index 57e6b44..7ca16ac 100644
--- a/sys/dev/dwc/if_dwc.c
+++ b/sys/dev/dwc/if_dwc.c
@@ -741,9 +741,11 @@ dwc_txfinish_locked(struct dwc_softc *sc)
{
struct dwc_bufmap *bmap;
struct dwc_hwdesc *desc;
+ struct ifnet *ifp;
DWC_ASSERT_LOCKED(sc);
+ ifp = sc->ifp;
while (sc->tx_idx_tail != sc->tx_idx_head) {
desc = &sc->txdesc_ring[sc->tx_idx_tail];
if ((desc->tdes0 & DDESC_TDES0_OWN) != 0)
@@ -756,6 +758,7 @@ dwc_txfinish_locked(struct dwc_softc *sc)
bmap->mbuf = NULL;
dwc_setup_txdesc(sc, sc->tx_idx_tail, 0, 0);
sc->tx_idx_tail = next_txidx(sc, sc->tx_idx_tail);
+ ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
}
/* If there are no buffers outstanding, muzzle the watchdog. */
@@ -838,8 +841,10 @@ dwc_intr(void *arg)
if (reg & DMA_STATUS_RI)
dwc_rxfinish_locked(sc);
- if (reg & DMA_STATUS_TI)
+ if (reg & DMA_STATUS_TI) {
dwc_txfinish_locked(sc);
+ dwc_txstart_locked(sc);
+ }
}
if (reg & DMA_STATUS_AIS) {
OpenPOWER on IntegriCloud