summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoradrian <adrian@FreeBSD.org>2011-10-02 13:43:06 +0000
committeradrian <adrian@FreeBSD.org>2011-10-02 13:43:06 +0000
commit5efb6b86950670c683657199e12fbd41264b23b3 (patch)
treeb79b263d8112a15e39a11e229f7b003565f9c766
parente4db1744452286cf0ae874147a0706e4eef80e5e (diff)
downloadFreeBSD-src-5efb6b86950670c683657199e12fbd41264b23b3.zip
FreeBSD-src-5efb6b86950670c683657199e12fbd41264b23b3.tar.gz
Disable TX interrupt mitigation just for the time being.
There are some timing concerns which I've yet to fully map out. In any case, there's an existing software driven mitigation method for TX interrupts and when TX'ing 11n frames, the whole frame itself generates an interrupt rather then the subframes.
-rw-r--r--sys/dev/ath/ath_hal/ar5416/ar5416_interrupts.c17
-rw-r--r--sys/dev/ath/ath_hal/ar5416/ar5416_reset.c6
2 files changed, 5 insertions, 18 deletions
diff --git a/sys/dev/ath/ath_hal/ar5416/ar5416_interrupts.c b/sys/dev/ath/ath_hal/ar5416/ar5416_interrupts.c
index 03d3544..48dbe24 100644
--- a/sys/dev/ath/ath_hal/ar5416/ar5416_interrupts.c
+++ b/sys/dev/ath/ath_hal/ar5416/ar5416_interrupts.c
@@ -142,8 +142,6 @@ ar5416GetPendingInterrupts(struct ath_hal *ah, HAL_INT *masked)
#ifdef AH_AR5416_INTERRUPT_MITIGATION
if (isr & (AR_ISR_RXMINTR | AR_ISR_RXINTM))
*masked |= HAL_INT_RX;
- if (isr & (AR_ISR_TXMINTR | AR_ISR_TXINTM))
- *masked |= HAL_INT_TX;
#endif
*masked |= mask2;
}
@@ -216,18 +214,12 @@ ar5416SetInterrupts(struct ath_hal *ah, HAL_INT ints)
* Overwrite default mask if Interrupt mitigation
* is specified for AR5416
*/
- mask = ints & HAL_INT_COMMON;
- if (ints & HAL_INT_TX)
- mask |= AR_IMR_TXMINTR | AR_IMR_TXINTM;
if (ints & HAL_INT_RX)
mask |= AR_IMR_RXERR | AR_IMR_RXMINTR | AR_IMR_RXINTM;
- if (ints & HAL_INT_TX) {
- if (ahp->ah_txErrInterruptMask)
- mask |= AR_IMR_TXERR;
- if (ahp->ah_txEolInterruptMask)
- mask |= AR_IMR_TXEOL;
- }
#else
+ if (ints & HAL_INT_RX)
+ mask |= AR_IMR_RXOK | AR_IMR_RXERR | AR_IMR_RXDESC;
+#endif
if (ints & HAL_INT_TX) {
if (ahp->ah_txOkInterruptMask)
mask |= AR_IMR_TXOK;
@@ -238,9 +230,6 @@ ar5416SetInterrupts(struct ath_hal *ah, HAL_INT ints)
if (ahp->ah_txEolInterruptMask)
mask |= AR_IMR_TXEOL;
}
- if (ints & HAL_INT_RX)
- mask |= AR_IMR_RXOK | AR_IMR_RXERR | AR_IMR_RXDESC;
-#endif
if (ints & (HAL_INT_BMISC)) {
mask |= AR_IMR_BCNMISC;
if (ints & HAL_INT_TIM)
diff --git a/sys/dev/ath/ath_hal/ar5416/ar5416_reset.c b/sys/dev/ath/ath_hal/ar5416/ar5416_reset.c
index 112d966..2e4e618 100644
--- a/sys/dev/ath/ath_hal/ar5416/ar5416_reset.c
+++ b/sys/dev/ath/ath_hal/ar5416/ar5416_reset.c
@@ -360,10 +360,8 @@ ar5416Reset(struct ath_hal *ah, HAL_OPMODE opmode,
#ifdef AH_AR5416_INTERRUPT_MITIGATION
OS_REG_WRITE(ah, AR_MIRT, 0);
- OS_REG_RMW_FIELD(ah, AR_RIMT, AR_RIMT_LAST, 500);
- OS_REG_RMW_FIELD(ah, AR_RIMT, AR_RIMT_FIRST, 2000);
- OS_REG_RMW_FIELD(ah, AR_TIMT, AR_TIMT_LAST, 300);
- OS_REG_RMW_FIELD(ah, AR_TIMT, AR_TIMT_FIRST, 750);
+ OS_REG_RMW_FIELD(ah, AR_RIMT, AR_RIMT_LAST, 250);
+ OS_REG_RMW_FIELD(ah, AR_RIMT, AR_RIMT_FIRST, 700);
#endif
ar5416InitBB(ah, chan);
OpenPOWER on IntegriCloud