From 27434f79f514b076dc5848601b71de00834d320e Mon Sep 17 00:00:00 2001 From: Alexander Egorenkov Date: Tue, 16 Feb 2010 23:15:36 +0100 Subject: [PATCH] Improved Tx processing loop --- rt2860.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/rt2860.c b/rt2860.c index 76ee649..6a7455d 100644 --- a/rt2860.c +++ b/rt2860.c @@ -4334,6 +4334,20 @@ static void rt2860_tx_done_task(void *context, int pending) if (!(ifp->if_drv_flags & IFF_DRV_RUNNING)) return; + for (i = RT2860_SOFTC_TX_RING_COUNT - 1; i >= 0; i--) + { + if (sc->intr_pending_mask & (RT2860_REG_INT_TX_AC0_DONE << i)) + { + sc->intr_pending_mask &= ~(RT2860_REG_INT_TX_AC0_DONE << i); + + rt2860_tx_eof(sc, &sc->tx_ring[i]); + } + } + + sc->tx_timer = 0; + + ifp->if_drv_flags &= ~IFF_DRV_OACTIVE; + intr_mask = (RT2860_REG_INT_TX_MGMT_DONE | RT2860_REG_INT_TX_HCCA_DONE | RT2860_REG_INT_TX_AC3_DONE | @@ -4341,15 +4355,6 @@ static void rt2860_tx_done_task(void *context, int pending) RT2860_REG_INT_TX_AC1_DONE | RT2860_REG_INT_TX_AC0_DONE); - sc->intr_pending_mask &= ~intr_mask; - - for (i = RT2860_SOFTC_TX_RING_COUNT - 1; i >= 0; i--) - rt2860_tx_eof(sc, &sc->tx_ring[i]); - - sc->tx_timer = 0; - - ifp->if_drv_flags &= ~IFF_DRV_OACTIVE; - RT2860_SOFTC_LOCK(sc); rt2860_intr_enable(sc, ~sc->intr_pending_mask & -- 2.11.4.GIT