From 4f42b6112e4091c489500879377130a58988c05b Mon Sep 17 00:00:00 2001
From: Felix Fietkau <nbd@openwrt.org>
Date: Wed, 25 Mar 2009 01:26:36 +0000
Subject: madwifi: treat rxorn like rx, reset after rxorn seems to do more harm
 than good

SVN-Revision: 15030
---
 package/madwifi/patches/413-rxorn.patch | 31 +++++++++++++++++++++++++++++++
 1 file changed, 31 insertions(+)
 create mode 100644 package/madwifi/patches/413-rxorn.patch

(limited to 'package')

diff --git a/package/madwifi/patches/413-rxorn.patch b/package/madwifi/patches/413-rxorn.patch
new file mode 100644
index 0000000..b417471
--- /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;
-- 
cgit v1.1