aboutsummaryrefslogtreecommitdiffstats
path: root/package
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2012-06-27 12:45:00 +0000
committerFelix Fietkau <nbd@openwrt.org>2012-06-27 12:45:00 +0000
commitc28103fc17ebe9039b22188d9e8f97dc8893d302 (patch)
treee17f8cd1ce5301d72a22f4b5e4996cd578b34966 /package
parenta756311f34dd275476159c62580173d5a434c23f (diff)
downloadupstream-c28103fc17ebe9039b22188d9e8f97dc8893d302.tar.gz
upstream-c28103fc17ebe9039b22188d9e8f97dc8893d302.tar.bz2
upstream-c28103fc17ebe9039b22188d9e8f97dc8893d302.zip
ath9k: improve ani behavior during scanning
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@32511 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'package')
-rw-r--r--package/mac80211/patches/564-ath9k_fix_ani_update.patch86
1 files changed, 71 insertions, 15 deletions
diff --git a/package/mac80211/patches/564-ath9k_fix_ani_update.patch b/package/mac80211/patches/564-ath9k_fix_ani_update.patch
index 91ba67db7b..19df768d5d 100644
--- a/package/mac80211/patches/564-ath9k_fix_ani_update.patch
+++ b/package/mac80211/patches/564-ath9k_fix_ani_update.patch
@@ -1,28 +1,79 @@
--- a/drivers/net/wireless/ath/ath9k/ani.c
+++ b/drivers/net/wireless/ath/ath9k/ani.c
-@@ -153,9 +153,7 @@ static void ath9k_hw_set_ofdm_nil(struct
+@@ -140,7 +140,8 @@ static void ath9k_ani_restart(struct ath
+ }
+
+ /* Adjust the OFDM Noise Immunity Level */
+-static void ath9k_hw_set_ofdm_nil(struct ath_hw *ah, u8 immunityLevel)
++static void ath9k_hw_set_ofdm_nil(struct ath_hw *ah, u8 immunityLevel,
++ bool scan)
+ {
+ struct ar5416AniState *aniState = &ah->curchan->ani;
+ struct ath_common *common = ath9k_hw_common(ah);
+@@ -153,7 +154,7 @@ static void ath9k_hw_set_ofdm_nil(struct
immunityLevel, BEACON_RSSI(ah),
aniState->rssiThrLow, aniState->rssiThrHigh);
- if (aniState->update_ani)
-- aniState->ofdmNoiseImmunityLevel = immunityLevel;
--
-+ aniState->ofdmNoiseImmunityLevel = immunityLevel;
++ if (!scan)
+ aniState->ofdmNoiseImmunityLevel = immunityLevel;
+
entry_ofdm = &ofdm_level_table[aniState->ofdmNoiseImmunityLevel];
- entry_cck = &cck_level_table[aniState->cckNoiseImmunityLevel];
+@@ -199,13 +200,14 @@ static void ath9k_hw_ani_ofdm_err_trigge
+ aniState = &ah->curchan->ani;
-@@ -222,9 +220,7 @@ static void ath9k_hw_set_cck_nil(struct
+ if (aniState->ofdmNoiseImmunityLevel < ATH9K_ANI_OFDM_MAX_LEVEL)
+- ath9k_hw_set_ofdm_nil(ah, aniState->ofdmNoiseImmunityLevel + 1);
++ ath9k_hw_set_ofdm_nil(ah, aniState->ofdmNoiseImmunityLevel + 1, false);
+ }
+
+ /*
+ * Set the ANI settings to match an CCK level.
+ */
+-static void ath9k_hw_set_cck_nil(struct ath_hw *ah, u_int8_t immunityLevel)
++static void ath9k_hw_set_cck_nil(struct ath_hw *ah, u_int8_t immunityLevel,
++ bool scan)
+ {
+ struct ar5416AniState *aniState = &ah->curchan->ani;
+ struct ath_common *common = ath9k_hw_common(ah);
+@@ -222,7 +224,7 @@ static void ath9k_hw_set_cck_nil(struct
immunityLevel > ATH9K_ANI_CCK_MAX_LEVEL_LOW_RSSI)
immunityLevel = ATH9K_ANI_CCK_MAX_LEVEL_LOW_RSSI;
- if (aniState->update_ani)
-- aniState->cckNoiseImmunityLevel = immunityLevel;
--
-+ aniState->cckNoiseImmunityLevel = immunityLevel;
++ if (!scan)
+ aniState->cckNoiseImmunityLevel = immunityLevel;
+
entry_ofdm = &ofdm_level_table[aniState->ofdmNoiseImmunityLevel];
- entry_cck = &cck_level_table[aniState->cckNoiseImmunityLevel];
+@@ -254,7 +256,8 @@ static void ath9k_hw_ani_cck_err_trigger
+ aniState = &ah->curchan->ani;
-@@ -338,7 +334,6 @@ void ath9k_ani_reset(struct ath_hw *ah,
+ if (aniState->cckNoiseImmunityLevel < ATH9K_ANI_CCK_MAX_LEVEL)
+- ath9k_hw_set_cck_nil(ah, aniState->cckNoiseImmunityLevel + 1);
++ ath9k_hw_set_cck_nil(ah, aniState->cckNoiseImmunityLevel + 1,
++ false);
+ }
+
+ /*
+@@ -270,13 +273,15 @@ static void ath9k_hw_ani_lower_immunity(
+ /* lower OFDM noise immunity */
+ if (aniState->ofdmNoiseImmunityLevel > 0 &&
+ (aniState->ofdmsTurn || aniState->cckNoiseImmunityLevel == 0)) {
+- ath9k_hw_set_ofdm_nil(ah, aniState->ofdmNoiseImmunityLevel - 1);
++ ath9k_hw_set_ofdm_nil(ah, aniState->ofdmNoiseImmunityLevel - 1,
++ false);
+ return;
+ }
+
+ /* lower CCK noise immunity */
+ if (aniState->cckNoiseImmunityLevel > 0)
+- ath9k_hw_set_cck_nil(ah, aniState->cckNoiseImmunityLevel - 1);
++ ath9k_hw_set_cck_nil(ah, aniState->cckNoiseImmunityLevel - 1,
++ false);
+ }
+
+ /*
+@@ -338,7 +343,6 @@ void ath9k_ani_reset(struct ath_hw *ah,
aniState->ofdmNoiseImmunityLevel,
aniState->cckNoiseImmunityLevel);
@@ -30,16 +81,21 @@
ofdm_nil = ATH9K_ANI_OFDM_DEF_LEVEL;
cck_nil = ATH9K_ANI_CCK_DEF_LEVEL;
}
-@@ -354,8 +349,6 @@ void ath9k_ani_reset(struct ath_hw *ah,
+@@ -354,11 +358,9 @@ void ath9k_ani_reset(struct ath_hw *ah,
is_scanning,
aniState->ofdmNoiseImmunityLevel,
aniState->cckNoiseImmunityLevel);
-
- aniState->update_ani = true;
}
- ath9k_hw_set_ofdm_nil(ah, ofdm_nil);
- ath9k_hw_set_cck_nil(ah, cck_nil);
-@@ -538,7 +531,6 @@ void ath9k_hw_ani_init(struct ath_hw *ah
+- ath9k_hw_set_ofdm_nil(ah, ofdm_nil);
+- ath9k_hw_set_cck_nil(ah, cck_nil);
++ ath9k_hw_set_ofdm_nil(ah, ofdm_nil, is_scanning);
++ ath9k_hw_set_cck_nil(ah, cck_nil, is_scanning);
+
+ /*
+ * enable phy counters if hw supports or if not, enable phy
+@@ -538,7 +540,6 @@ void ath9k_hw_ani_init(struct ath_hw *ah
ani->ofdmWeakSigDetect = ATH9K_ANI_USE_OFDM_WEAK_SIG;
ani->cckNoiseImmunityLevel = ATH9K_ANI_CCK_DEF_LEVEL;
ani->ofdmNoiseImmunityLevel = ATH9K_ANI_OFDM_DEF_LEVEL;