ath9k: Do not maintain ANI state per-channel
ANI state can be maintained globally instead of per-channel. This reduces memory usage and since default values are used during a scan run, per-channel state is not required. Signed-off-by: Sujith Manoharan <c_manoha@qca.qualcomm.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
6e4d291eec
commit
c24bd3620c
@ -121,7 +121,7 @@ static void ath9k_ani_restart(struct ath_hw *ah)
|
|||||||
if (!ah->curchan)
|
if (!ah->curchan)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
aniState = &ah->curchan->ani;
|
aniState = &ah->ani;
|
||||||
aniState->listenTime = 0;
|
aniState->listenTime = 0;
|
||||||
|
|
||||||
ENABLE_REGWRITE_BUFFER(ah);
|
ENABLE_REGWRITE_BUFFER(ah);
|
||||||
@ -143,7 +143,7 @@ static void ath9k_ani_restart(struct ath_hw *ah)
|
|||||||
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)
|
bool scan)
|
||||||
{
|
{
|
||||||
struct ar5416AniState *aniState = &ah->curchan->ani;
|
struct ar5416AniState *aniState = &ah->ani;
|
||||||
struct ath_common *common = ath9k_hw_common(ah);
|
struct ath_common *common = ath9k_hw_common(ah);
|
||||||
const struct ani_ofdm_level_entry *entry_ofdm;
|
const struct ani_ofdm_level_entry *entry_ofdm;
|
||||||
const struct ani_cck_level_entry *entry_cck;
|
const struct ani_cck_level_entry *entry_cck;
|
||||||
@ -198,7 +198,7 @@ static void ath9k_hw_ani_ofdm_err_trigger(struct ath_hw *ah)
|
|||||||
if (!ah->curchan)
|
if (!ah->curchan)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
aniState = &ah->curchan->ani;
|
aniState = &ah->ani;
|
||||||
|
|
||||||
if (aniState->ofdmNoiseImmunityLevel < ATH9K_ANI_OFDM_MAX_LEVEL)
|
if (aniState->ofdmNoiseImmunityLevel < ATH9K_ANI_OFDM_MAX_LEVEL)
|
||||||
ath9k_hw_set_ofdm_nil(ah, aniState->ofdmNoiseImmunityLevel + 1, false);
|
ath9k_hw_set_ofdm_nil(ah, aniState->ofdmNoiseImmunityLevel + 1, false);
|
||||||
@ -210,7 +210,7 @@ static void ath9k_hw_ani_ofdm_err_trigger(struct ath_hw *ah)
|
|||||||
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)
|
bool scan)
|
||||||
{
|
{
|
||||||
struct ar5416AniState *aniState = &ah->curchan->ani;
|
struct ar5416AniState *aniState = &ah->ani;
|
||||||
struct ath_common *common = ath9k_hw_common(ah);
|
struct ath_common *common = ath9k_hw_common(ah);
|
||||||
const struct ani_ofdm_level_entry *entry_ofdm;
|
const struct ani_ofdm_level_entry *entry_ofdm;
|
||||||
const struct ani_cck_level_entry *entry_cck;
|
const struct ani_cck_level_entry *entry_cck;
|
||||||
@ -254,7 +254,7 @@ static void ath9k_hw_ani_cck_err_trigger(struct ath_hw *ah)
|
|||||||
if (!ah->curchan)
|
if (!ah->curchan)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
aniState = &ah->curchan->ani;
|
aniState = &ah->ani;
|
||||||
|
|
||||||
if (aniState->cckNoiseImmunityLevel < ATH9K_ANI_CCK_MAX_LEVEL)
|
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,
|
||||||
@ -269,7 +269,7 @@ static void ath9k_hw_ani_lower_immunity(struct ath_hw *ah)
|
|||||||
{
|
{
|
||||||
struct ar5416AniState *aniState;
|
struct ar5416AniState *aniState;
|
||||||
|
|
||||||
aniState = &ah->curchan->ani;
|
aniState = &ah->ani;
|
||||||
|
|
||||||
/* lower OFDM noise immunity */
|
/* lower OFDM noise immunity */
|
||||||
if (aniState->ofdmNoiseImmunityLevel > 0 &&
|
if (aniState->ofdmNoiseImmunityLevel > 0 &&
|
||||||
@ -292,7 +292,7 @@ static void ath9k_hw_ani_lower_immunity(struct ath_hw *ah)
|
|||||||
*/
|
*/
|
||||||
void ath9k_ani_reset(struct ath_hw *ah, bool is_scanning)
|
void ath9k_ani_reset(struct ath_hw *ah, bool is_scanning)
|
||||||
{
|
{
|
||||||
struct ar5416AniState *aniState = &ah->curchan->ani;
|
struct ar5416AniState *aniState = &ah->ani;
|
||||||
struct ath9k_channel *chan = ah->curchan;
|
struct ath9k_channel *chan = ah->curchan;
|
||||||
struct ath_common *common = ath9k_hw_common(ah);
|
struct ath_common *common = ath9k_hw_common(ah);
|
||||||
int ofdm_nil, cck_nil;
|
int ofdm_nil, cck_nil;
|
||||||
@ -380,7 +380,7 @@ void ath9k_ani_reset(struct ath_hw *ah, bool is_scanning)
|
|||||||
static bool ath9k_hw_ani_read_counters(struct ath_hw *ah)
|
static bool ath9k_hw_ani_read_counters(struct ath_hw *ah)
|
||||||
{
|
{
|
||||||
struct ath_common *common = ath9k_hw_common(ah);
|
struct ath_common *common = ath9k_hw_common(ah);
|
||||||
struct ar5416AniState *aniState = &ah->curchan->ani;
|
struct ar5416AniState *aniState = &ah->ani;
|
||||||
u32 phyCnt1, phyCnt2;
|
u32 phyCnt1, phyCnt2;
|
||||||
int32_t listenTime;
|
int32_t listenTime;
|
||||||
|
|
||||||
@ -418,7 +418,7 @@ void ath9k_hw_ani_monitor(struct ath_hw *ah, struct ath9k_channel *chan)
|
|||||||
if (!ah->curchan)
|
if (!ah->curchan)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
aniState = &ah->curchan->ani;
|
aniState = &ah->ani;
|
||||||
if (!ath9k_hw_ani_read_counters(ah))
|
if (!ath9k_hw_ani_read_counters(ah))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -490,28 +490,22 @@ EXPORT_SYMBOL(ath9k_hw_disable_mib_counters);
|
|||||||
void ath9k_hw_ani_init(struct ath_hw *ah)
|
void ath9k_hw_ani_init(struct ath_hw *ah)
|
||||||
{
|
{
|
||||||
struct ath_common *common = ath9k_hw_common(ah);
|
struct ath_common *common = ath9k_hw_common(ah);
|
||||||
int i;
|
struct ar5416AniState *ani = &ah->ani;
|
||||||
|
|
||||||
ath_dbg(common, ANI, "Initialize ANI\n");
|
ath_dbg(common, ANI, "Initialize ANI\n");
|
||||||
|
|
||||||
ah->config.ofdm_trig_high = ATH9K_ANI_OFDM_TRIG_HIGH;
|
ah->config.ofdm_trig_high = ATH9K_ANI_OFDM_TRIG_HIGH;
|
||||||
ah->config.ofdm_trig_low = ATH9K_ANI_OFDM_TRIG_LOW;
|
ah->config.ofdm_trig_low = ATH9K_ANI_OFDM_TRIG_LOW;
|
||||||
|
|
||||||
ah->config.cck_trig_high = ATH9K_ANI_CCK_TRIG_HIGH;
|
ah->config.cck_trig_high = ATH9K_ANI_CCK_TRIG_HIGH;
|
||||||
ah->config.cck_trig_low = ATH9K_ANI_CCK_TRIG_LOW;
|
ah->config.cck_trig_low = ATH9K_ANI_CCK_TRIG_LOW;
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(ah->channels); i++) {
|
ani->spurImmunityLevel = ATH9K_ANI_SPUR_IMMUNE_LVL;
|
||||||
struct ath9k_channel *chan = &ah->channels[i];
|
ani->firstepLevel = ATH9K_ANI_FIRSTEP_LVL;
|
||||||
struct ar5416AniState *ani = &chan->ani;
|
ani->mrcCCK = AR_SREV_9300_20_OR_LATER(ah) ? true : false;
|
||||||
|
ani->ofdmsTurn = true;
|
||||||
ani->spurImmunityLevel = ATH9K_ANI_SPUR_IMMUNE_LVL;
|
ani->ofdmWeakSigDetect = true;
|
||||||
ani->firstepLevel = ATH9K_ANI_FIRSTEP_LVL;
|
ani->cckNoiseImmunityLevel = ATH9K_ANI_CCK_DEF_LEVEL;
|
||||||
ani->mrcCCK = AR_SREV_9300_20_OR_LATER(ah) ? true : false;
|
ani->ofdmNoiseImmunityLevel = ATH9K_ANI_OFDM_DEF_LEVEL;
|
||||||
ani->ofdmsTurn = true;
|
|
||||||
ani->ofdmWeakSigDetect = true;
|
|
||||||
ani->cckNoiseImmunityLevel = ATH9K_ANI_CCK_DEF_LEVEL;
|
|
||||||
ani->ofdmNoiseImmunityLevel = ATH9K_ANI_OFDM_DEF_LEVEL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* since we expect some ongoing maintenance on the tables, let's sanity
|
* since we expect some ongoing maintenance on the tables, let's sanity
|
||||||
|
@ -931,7 +931,7 @@ static bool ar5008_hw_ani_control_new(struct ath_hw *ah,
|
|||||||
{
|
{
|
||||||
struct ath_common *common = ath9k_hw_common(ah);
|
struct ath_common *common = ath9k_hw_common(ah);
|
||||||
struct ath9k_channel *chan = ah->curchan;
|
struct ath9k_channel *chan = ah->curchan;
|
||||||
struct ar5416AniState *aniState = &chan->ani;
|
struct ar5416AniState *aniState = &ah->ani;
|
||||||
s32 value, value2;
|
s32 value, value2;
|
||||||
|
|
||||||
switch (cmd & ah->ani_function) {
|
switch (cmd & ah->ani_function) {
|
||||||
@ -1207,7 +1207,7 @@ static void ar5008_hw_ani_cache_ini_regs(struct ath_hw *ah)
|
|||||||
{
|
{
|
||||||
struct ath_common *common = ath9k_hw_common(ah);
|
struct ath_common *common = ath9k_hw_common(ah);
|
||||||
struct ath9k_channel *chan = ah->curchan;
|
struct ath9k_channel *chan = ah->curchan;
|
||||||
struct ar5416AniState *aniState = &chan->ani;
|
struct ar5416AniState *aniState = &ah->ani;
|
||||||
struct ath9k_ani_default *iniDef;
|
struct ath9k_ani_default *iniDef;
|
||||||
u32 val;
|
u32 val;
|
||||||
|
|
||||||
|
@ -904,7 +904,7 @@ static bool ar9003_hw_ani_control(struct ath_hw *ah,
|
|||||||
{
|
{
|
||||||
struct ath_common *common = ath9k_hw_common(ah);
|
struct ath_common *common = ath9k_hw_common(ah);
|
||||||
struct ath9k_channel *chan = ah->curchan;
|
struct ath9k_channel *chan = ah->curchan;
|
||||||
struct ar5416AniState *aniState = &chan->ani;
|
struct ar5416AniState *aniState = &ah->ani;
|
||||||
s32 value, value2;
|
s32 value, value2;
|
||||||
|
|
||||||
switch (cmd & ah->ani_function) {
|
switch (cmd & ah->ani_function) {
|
||||||
@ -1172,7 +1172,7 @@ static void ar9003_hw_ani_cache_ini_regs(struct ath_hw *ah)
|
|||||||
struct ath9k_ani_default *iniDef;
|
struct ath9k_ani_default *iniDef;
|
||||||
u32 val;
|
u32 val;
|
||||||
|
|
||||||
aniState = &ah->curchan->ani;
|
aniState = &ah->ani;
|
||||||
iniDef = &aniState->iniDef;
|
iniDef = &aniState->iniDef;
|
||||||
|
|
||||||
ath_dbg(common, ANI, "ver %d.%d opmode %u chan %d Mhz/0x%x\n",
|
ath_dbg(common, ANI, "ver %d.%d opmode %u chan %d Mhz/0x%x\n",
|
||||||
|
@ -420,7 +420,6 @@ struct ath9k_hw_cal_data {
|
|||||||
|
|
||||||
struct ath9k_channel {
|
struct ath9k_channel {
|
||||||
struct ieee80211_channel *chan;
|
struct ieee80211_channel *chan;
|
||||||
struct ar5416AniState ani;
|
|
||||||
u16 channel;
|
u16 channel;
|
||||||
u32 channelFlags;
|
u32 channelFlags;
|
||||||
u32 chanmode;
|
u32 chanmode;
|
||||||
@ -854,6 +853,7 @@ struct ath_hw {
|
|||||||
u32 aniperiod;
|
u32 aniperiod;
|
||||||
enum ath9k_ani_cmd ani_function;
|
enum ath9k_ani_cmd ani_function;
|
||||||
u32 ani_skip_count;
|
u32 ani_skip_count;
|
||||||
|
struct ar5416AniState ani;
|
||||||
|
|
||||||
#ifdef CONFIG_ATH9K_BTCOEX_SUPPORT
|
#ifdef CONFIG_ATH9K_BTCOEX_SUPPORT
|
||||||
struct ath_btcoex_hw btcoex_hw;
|
struct ath_btcoex_hw btcoex_hw;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user