2012-06-27 05:15:25 +03:00
|
|
|
--- a/drivers/net/wireless/ath/ath9k/ani.c
|
|
|
|
+++ b/drivers/net/wireless/ath/ath9k/ani.c
|
2012-06-27 15:45:00 +03:00
|
|
|
@@ -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
|
2012-06-27 05:15:25 +03:00
|
|
|
immunityLevel, BEACON_RSSI(ah),
|
|
|
|
aniState->rssiThrLow, aniState->rssiThrHigh);
|
|
|
|
|
|
|
|
- if (aniState->update_ani)
|
2012-06-27 15:45:00 +03:00
|
|
|
+ if (!scan)
|
|
|
|
aniState->ofdmNoiseImmunityLevel = immunityLevel;
|
|
|
|
|
2012-06-27 05:15:25 +03:00
|
|
|
entry_ofdm = &ofdm_level_table[aniState->ofdmNoiseImmunityLevel];
|
2012-06-27 15:45:00 +03:00
|
|
|
@@ -199,13 +200,14 @@ static void ath9k_hw_ani_ofdm_err_trigge
|
|
|
|
aniState = &ah->curchan->ani;
|
2012-06-27 05:15:25 +03:00
|
|
|
|
2012-06-27 15:45:00 +03:00
|
|
|
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
|
2012-06-27 05:15:25 +03:00
|
|
|
immunityLevel > ATH9K_ANI_CCK_MAX_LEVEL_LOW_RSSI)
|
|
|
|
immunityLevel = ATH9K_ANI_CCK_MAX_LEVEL_LOW_RSSI;
|
|
|
|
|
|
|
|
- if (aniState->update_ani)
|
2012-06-27 15:45:00 +03:00
|
|
|
+ if (!scan)
|
|
|
|
aniState->cckNoiseImmunityLevel = immunityLevel;
|
|
|
|
|
2012-06-27 05:15:25 +03:00
|
|
|
entry_ofdm = &ofdm_level_table[aniState->ofdmNoiseImmunityLevel];
|
2012-06-27 15:45:00 +03:00
|
|
|
@@ -254,7 +256,8 @@ static void ath9k_hw_ani_cck_err_trigger
|
|
|
|
aniState = &ah->curchan->ani;
|
2012-06-27 05:15:25 +03:00
|
|
|
|
2012-06-27 15:45:00 +03:00
|
|
|
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,
|
2012-06-27 05:15:25 +03:00
|
|
|
aniState->ofdmNoiseImmunityLevel,
|
|
|
|
aniState->cckNoiseImmunityLevel);
|
|
|
|
|
|
|
|
- aniState->update_ani = false;
|
|
|
|
ofdm_nil = ATH9K_ANI_OFDM_DEF_LEVEL;
|
|
|
|
cck_nil = ATH9K_ANI_CCK_DEF_LEVEL;
|
|
|
|
}
|
2012-06-27 15:45:00 +03:00
|
|
|
@@ -354,11 +358,9 @@ void ath9k_ani_reset(struct ath_hw *ah,
|
2012-06-27 05:15:25 +03:00
|
|
|
is_scanning,
|
|
|
|
aniState->ofdmNoiseImmunityLevel,
|
|
|
|
aniState->cckNoiseImmunityLevel);
|
|
|
|
-
|
|
|
|
- aniState->update_ani = true;
|
|
|
|
}
|
2012-06-27 15:45:00 +03:00
|
|
|
- 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
|
2012-06-27 05:15:25 +03:00
|
|
|
ani->ofdmWeakSigDetect = ATH9K_ANI_USE_OFDM_WEAK_SIG;
|
|
|
|
ani->cckNoiseImmunityLevel = ATH9K_ANI_CCK_DEF_LEVEL;
|
|
|
|
ani->ofdmNoiseImmunityLevel = ATH9K_ANI_OFDM_DEF_LEVEL;
|
|
|
|
- ani->update_ani = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
--- a/drivers/net/wireless/ath/ath9k/ani.h
|
|
|
|
+++ b/drivers/net/wireless/ath/ath9k/ani.h
|
|
|
|
@@ -116,7 +116,6 @@ struct ar5416AniState {
|
|
|
|
u8 firstepLevel;
|
|
|
|
u8 ofdmWeakSigDetect;
|
|
|
|
u8 cckWeakSigThreshold;
|
|
|
|
- bool update_ani;
|
|
|
|
u32 listenTime;
|
|
|
|
int32_t rssiThrLow;
|
|
|
|
int32_t rssiThrHigh;
|