Lines Matching refs:ah
107 static void ath9k_hw_update_mibstats(struct ath_hw *ah, in ath9k_hw_update_mibstats() argument
114 REG_READ_MULTI(ah, &addr[0], &data[0], 5); in ath9k_hw_update_mibstats()
127 static void ath9k_ani_restart(struct ath_hw *ah) in ath9k_ani_restart() argument
131 if (!ah->curchan) in ath9k_ani_restart()
134 aniState = &ah->ani; in ath9k_ani_restart()
137 ENABLE_REGWRITE_BUFFER(ah); in ath9k_ani_restart()
139 REG_WRITE(ah, AR_PHY_ERR_1, 0); in ath9k_ani_restart()
140 REG_WRITE(ah, AR_PHY_ERR_2, 0); in ath9k_ani_restart()
141 REG_WRITE(ah, AR_PHY_ERR_MASK_1, AR_PHY_ERR_OFDM_TIMING); in ath9k_ani_restart()
142 REG_WRITE(ah, AR_PHY_ERR_MASK_2, AR_PHY_ERR_CCK_TIMING); in ath9k_ani_restart()
144 REGWRITE_BUFFER_FLUSH(ah); in ath9k_ani_restart()
146 ath9k_hw_update_mibstats(ah, &ah->ah_mibStats); in ath9k_ani_restart()
153 static void ath9k_hw_set_ofdm_nil(struct ath_hw *ah, u8 immunityLevel, in ath9k_hw_set_ofdm_nil() argument
156 struct ar5416AniState *aniState = &ah->ani; in ath9k_hw_set_ofdm_nil()
157 struct ath_common *common = ath9k_hw_common(ah); in ath9k_hw_set_ofdm_nil()
164 immunityLevel, BEACON_RSSI(ah), in ath9k_hw_set_ofdm_nil()
168 if (AR_SREV_9100(ah) && immunityLevel < ATH9K_ANI_OFDM_DEF_LEVEL) in ath9k_hw_set_ofdm_nil()
178 ath9k_hw_ani_control(ah, in ath9k_hw_set_ofdm_nil()
184 ath9k_hw_ani_control(ah, in ath9k_hw_set_ofdm_nil()
189 if (ah->opmode == NL80211_IFTYPE_STATION && in ath9k_hw_set_ofdm_nil()
190 BEACON_RSSI(ah) <= ATH9K_ANI_RSSI_THR_HIGH) in ath9k_hw_set_ofdm_nil()
197 else if (AR_SREV_9300_20_OR_LATER(ah) && in ath9k_hw_set_ofdm_nil()
198 ah->opmode != NL80211_IFTYPE_STATION) in ath9k_hw_set_ofdm_nil()
202 else if (!AR_SREV_9300_20_OR_LATER(ah) && in ath9k_hw_set_ofdm_nil()
207 ath9k_hw_ani_control(ah, ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION, in ath9k_hw_set_ofdm_nil()
210 if (!AR_SREV_9300_20_OR_LATER(ah)) in ath9k_hw_set_ofdm_nil()
214 ah->config.ofdm_trig_high = ATH9K_ANI_OFDM_TRIG_HIGH; in ath9k_hw_set_ofdm_nil()
215 ah->config.ofdm_trig_low = ATH9K_ANI_OFDM_TRIG_LOW_ABOVE_INI; in ath9k_hw_set_ofdm_nil()
217 ah->config.ofdm_trig_high = ATH9K_ANI_OFDM_TRIG_HIGH_BELOW_INI; in ath9k_hw_set_ofdm_nil()
218 ah->config.ofdm_trig_low = ATH9K_ANI_OFDM_TRIG_LOW; in ath9k_hw_set_ofdm_nil()
222 static void ath9k_hw_ani_ofdm_err_trigger(struct ath_hw *ah) in ath9k_hw_ani_ofdm_err_trigger() argument
226 if (!ah->curchan) in ath9k_hw_ani_ofdm_err_trigger()
229 aniState = &ah->ani; in ath9k_hw_ani_ofdm_err_trigger()
232 ath9k_hw_set_ofdm_nil(ah, aniState->ofdmNoiseImmunityLevel + 1, false); in ath9k_hw_ani_ofdm_err_trigger()
238 static void ath9k_hw_set_cck_nil(struct ath_hw *ah, u_int8_t immunityLevel, in ath9k_hw_set_cck_nil() argument
241 struct ar5416AniState *aniState = &ah->ani; in ath9k_hw_set_cck_nil()
242 struct ath_common *common = ath9k_hw_common(ah); in ath9k_hw_set_cck_nil()
248 BEACON_RSSI(ah), ATH9K_ANI_RSSI_THR_LOW, in ath9k_hw_set_cck_nil()
251 if (AR_SREV_9100(ah) && immunityLevel < ATH9K_ANI_CCK_DEF_LEVEL) in ath9k_hw_set_cck_nil()
254 if (ah->opmode == NL80211_IFTYPE_STATION && in ath9k_hw_set_cck_nil()
255 BEACON_RSSI(ah) <= ATH9K_ANI_RSSI_THR_LOW && in ath9k_hw_set_cck_nil()
267 ath9k_hw_ani_control(ah, in ath9k_hw_set_cck_nil()
272 if (!AR_SREV_9300_20_OR_LATER(ah) || AR_SREV_9485(ah) || in ath9k_hw_set_cck_nil()
273 AR_SREV_9565(ah) || AR_SREV_9561(ah)) in ath9k_hw_set_cck_nil()
277 ath9k_hw_ani_control(ah, in ath9k_hw_set_cck_nil()
282 static void ath9k_hw_ani_cck_err_trigger(struct ath_hw *ah) in ath9k_hw_ani_cck_err_trigger() argument
286 if (!ah->curchan) in ath9k_hw_ani_cck_err_trigger()
289 aniState = &ah->ani; in ath9k_hw_ani_cck_err_trigger()
292 ath9k_hw_set_cck_nil(ah, aniState->cckNoiseImmunityLevel + 1, in ath9k_hw_ani_cck_err_trigger()
300 static void ath9k_hw_ani_lower_immunity(struct ath_hw *ah) in ath9k_hw_ani_lower_immunity() argument
304 aniState = &ah->ani; in ath9k_hw_ani_lower_immunity()
309 ath9k_hw_set_ofdm_nil(ah, aniState->ofdmNoiseImmunityLevel - 1, in ath9k_hw_ani_lower_immunity()
316 ath9k_hw_set_cck_nil(ah, aniState->cckNoiseImmunityLevel - 1, in ath9k_hw_ani_lower_immunity()
325 void ath9k_ani_reset(struct ath_hw *ah, bool is_scanning) in ath9k_ani_reset() argument
327 struct ar5416AniState *aniState = &ah->ani; in ath9k_ani_reset()
328 struct ath9k_channel *chan = ah->curchan; in ath9k_ani_reset()
329 struct ath_common *common = ath9k_hw_common(ah); in ath9k_ani_reset()
332 if (!ah->curchan) in ath9k_ani_reset()
336 ah->stats.ast_ani_reset++; in ath9k_ani_reset()
344 (ah->opmode != NL80211_IFTYPE_STATION && in ath9k_ani_reset()
345 ah->opmode != NL80211_IFTYPE_ADHOC)) { in ath9k_ani_reset()
358 ah->opmode, in ath9k_ani_reset()
373 ah->opmode, in ath9k_ani_reset()
379 ath9k_hw_set_ofdm_nil(ah, ofdm_nil, is_scanning); in ath9k_ani_reset()
380 ath9k_hw_set_cck_nil(ah, cck_nil, is_scanning); in ath9k_ani_reset()
382 ath9k_ani_restart(ah); in ath9k_ani_reset()
385 static bool ath9k_hw_ani_read_counters(struct ath_hw *ah) in ath9k_hw_ani_read_counters() argument
387 struct ath_common *common = ath9k_hw_common(ah); in ath9k_hw_ani_read_counters()
388 struct ar5416AniState *aniState = &ah->ani; in ath9k_hw_ani_read_counters()
396 ah->stats.ast_ani_lneg_or_lzero++; in ath9k_hw_ani_read_counters()
397 ath9k_ani_restart(ah); in ath9k_hw_ani_read_counters()
403 ath9k_hw_update_mibstats(ah, &ah->ah_mibStats); in ath9k_hw_ani_read_counters()
405 phyCnt1 = REG_READ(ah, AR_PHY_ERR_1); in ath9k_hw_ani_read_counters()
406 phyCnt2 = REG_READ(ah, AR_PHY_ERR_2); in ath9k_hw_ani_read_counters()
408 ah->stats.ast_ani_ofdmerrs += phyCnt1 - aniState->ofdmPhyErrCount; in ath9k_hw_ani_read_counters()
411 ah->stats.ast_ani_cckerrs += phyCnt2 - aniState->cckPhyErrCount; in ath9k_hw_ani_read_counters()
417 void ath9k_hw_ani_monitor(struct ath_hw *ah, struct ath9k_channel *chan) in ath9k_hw_ani_monitor() argument
420 struct ath_common *common = ath9k_hw_common(ah); in ath9k_hw_ani_monitor()
423 if (!ah->curchan) in ath9k_hw_ani_monitor()
426 aniState = &ah->ani; in ath9k_hw_ani_monitor()
427 if (!ath9k_hw_ani_read_counters(ah)) in ath9k_hw_ani_monitor()
442 if (aniState->listenTime > ah->aniperiod) { in ath9k_hw_ani_monitor()
443 if (cckPhyErrRate < ah->config.cck_trig_low && in ath9k_hw_ani_monitor()
444 ofdmPhyErrRate < ah->config.ofdm_trig_low) { in ath9k_hw_ani_monitor()
445 ath9k_hw_ani_lower_immunity(ah); in ath9k_hw_ani_monitor()
447 } else if (ofdmPhyErrRate > ah->config.ofdm_trig_high) { in ath9k_hw_ani_monitor()
448 ath9k_hw_ani_ofdm_err_trigger(ah); in ath9k_hw_ani_monitor()
450 } else if (cckPhyErrRate > ah->config.cck_trig_high) { in ath9k_hw_ani_monitor()
451 ath9k_hw_ani_cck_err_trigger(ah); in ath9k_hw_ani_monitor()
454 ath9k_ani_restart(ah); in ath9k_hw_ani_monitor()
459 void ath9k_enable_mib_counters(struct ath_hw *ah) in ath9k_enable_mib_counters() argument
461 struct ath_common *common = ath9k_hw_common(ah); in ath9k_enable_mib_counters()
465 ath9k_hw_update_mibstats(ah, &ah->ah_mibStats); in ath9k_enable_mib_counters()
467 ENABLE_REGWRITE_BUFFER(ah); in ath9k_enable_mib_counters()
469 REG_WRITE(ah, AR_FILT_OFDM, 0); in ath9k_enable_mib_counters()
470 REG_WRITE(ah, AR_FILT_CCK, 0); in ath9k_enable_mib_counters()
471 REG_WRITE(ah, AR_MIBC, in ath9k_enable_mib_counters()
474 REG_WRITE(ah, AR_PHY_ERR_MASK_1, AR_PHY_ERR_OFDM_TIMING); in ath9k_enable_mib_counters()
475 REG_WRITE(ah, AR_PHY_ERR_MASK_2, AR_PHY_ERR_CCK_TIMING); in ath9k_enable_mib_counters()
477 REGWRITE_BUFFER_FLUSH(ah); in ath9k_enable_mib_counters()
481 void ath9k_hw_disable_mib_counters(struct ath_hw *ah) in ath9k_hw_disable_mib_counters() argument
483 struct ath_common *common = ath9k_hw_common(ah); in ath9k_hw_disable_mib_counters()
487 REG_WRITE(ah, AR_MIBC, AR_MIBC_FMC); in ath9k_hw_disable_mib_counters()
488 ath9k_hw_update_mibstats(ah, &ah->ah_mibStats); in ath9k_hw_disable_mib_counters()
489 REG_WRITE(ah, AR_MIBC, AR_MIBC_CMC); in ath9k_hw_disable_mib_counters()
490 REG_WRITE(ah, AR_FILT_OFDM, 0); in ath9k_hw_disable_mib_counters()
491 REG_WRITE(ah, AR_FILT_CCK, 0); in ath9k_hw_disable_mib_counters()
495 void ath9k_hw_ani_init(struct ath_hw *ah) in ath9k_hw_ani_init() argument
497 struct ath_common *common = ath9k_hw_common(ah); in ath9k_hw_ani_init()
498 struct ar5416AniState *ani = &ah->ani; in ath9k_hw_ani_init()
502 if (AR_SREV_9300_20_OR_LATER(ah)) { in ath9k_hw_ani_init()
503 ah->config.ofdm_trig_high = ATH9K_ANI_OFDM_TRIG_HIGH; in ath9k_hw_ani_init()
504 ah->config.ofdm_trig_low = ATH9K_ANI_OFDM_TRIG_LOW; in ath9k_hw_ani_init()
505 ah->config.cck_trig_high = ATH9K_ANI_CCK_TRIG_HIGH; in ath9k_hw_ani_init()
506 ah->config.cck_trig_low = ATH9K_ANI_CCK_TRIG_LOW; in ath9k_hw_ani_init()
508 ah->config.ofdm_trig_high = ATH9K_ANI_OFDM_TRIG_HIGH_OLD; in ath9k_hw_ani_init()
509 ah->config.ofdm_trig_low = ATH9K_ANI_OFDM_TRIG_LOW_OLD; in ath9k_hw_ani_init()
510 ah->config.cck_trig_high = ATH9K_ANI_CCK_TRIG_HIGH_OLD; in ath9k_hw_ani_init()
511 ah->config.cck_trig_low = ATH9K_ANI_CCK_TRIG_LOW_OLD; in ath9k_hw_ani_init()
516 ani->mrcCCK = AR_SREV_9300_20_OR_LATER(ah) ? true : false; in ath9k_hw_ani_init()
526 ah->aniperiod = ATH9K_ANI_PERIOD; in ath9k_hw_ani_init()
527 ah->config.ani_poll_interval = ATH9K_ANI_POLLINTERVAL; in ath9k_hw_ani_init()
529 ath9k_ani_restart(ah); in ath9k_hw_ani_init()
530 ath9k_enable_mib_counters(ah); in ath9k_hw_ani_init()