aboutsummaryrefslogtreecommitdiffstats
path: root/package/madwifi/patches/413-rxorn.patch
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2009-03-25 01:26:36 +0000
committerFelix Fietkau <nbd@openwrt.org>2009-03-25 01:26:36 +0000
commit4f42b6112e4091c489500879377130a58988c05b (patch)
tree6dbad853dc283c4067bf0a747365f941380c23ed /package/madwifi/patches/413-rxorn.patch
parent87783599b286fcd2d2a8b675f76718ace632b5a4 (diff)
downloadupstream-4f42b6112e4091c489500879377130a58988c05b.tar.gz
upstream-4f42b6112e4091c489500879377130a58988c05b.tar.bz2
upstream-4f42b6112e4091c489500879377130a58988c05b.zip
madwifi: treat rxorn like rx, reset after rxorn seems to do more harm than good
SVN-Revision: 15030
Diffstat (limited to 'package/madwifi/patches/413-rxorn.patch')
-rw-r--r--package/madwifi/patches/413-rxorn.patch31
1 files changed, 31 insertions, 0 deletions
diff --git a/package/madwifi/patches/413-rxorn.patch b/package/madwifi/patches/413-rxorn.patch
new file mode 100644
index 0000000000..b4174716d7
--- /dev/null
+++ b/package/madwifi/patches/413-rxorn.patch
@@ -0,0 +1,31 @@
+--- a/ath/if_ath.c
++++ b/ath/if_ath.c
+@@ -2307,6 +2307,17 @@ ath_intr(int irq, void *dev_id, struct p
+
+ sc->sc_isr = status;
+ status &= sc->sc_imask; /* discard unasked for bits */
++
++ /* Treat RXORN as non-fatal. Either the bus is busy or the CPU
++ * is not fast enough to process all frames. Treat it like
++ * an Rx interrupt
++ */
++ if (status & HAL_INT_RXORN) {
++ sc->sc_stats.ast_rxorn++;
++ status &= ~HAL_INT_RXORN;
++ status |= HAL_INT_RX;
++ }
++
+ /* As soon as we know we have a real interrupt we intend to service,
+ * we will check to see if we need an initial hardware TSF reading.
+ * Normally we would just populate this all the time to keep things
+@@ -2319,10 +2330,6 @@ ath_intr(int irq, void *dev_id, struct p
+ sc->sc_stats.ast_hardware++;
+ ath_hal_intrset(ah, 0); /* disable intr's until reset */
+ ATH_SCHEDULE_TQUEUE(&sc->sc_fataltq, &needmark);
+- } else if (status & HAL_INT_RXORN) {
+- sc->sc_stats.ast_rxorn++;
+- ath_hal_intrset(ah, 0); /* disable intr's until reset */
+- ATH_SCHEDULE_TQUEUE(&sc->sc_rxorntq, &needmark);
+ } else {
+ if (status & HAL_INT_SWBA) {
+ struct ieee80211vap * vap;