ath9k: Nuke struct ath9k_node_stats
[pandora-kernel.git] / drivers / net / wireless / ath / ath9k / ani.c
index aad259b..a7cbb07 100644 (file)
@@ -236,36 +236,35 @@ static void ath9k_ani_restart(struct ath_hw *ah)
                return;
 
        aniState = ah->curani;
-
        aniState->listenTime = 0;
-       if (ah->has_hw_phycounters) {
-               if (aniState->ofdmTrigHigh > AR_PHY_COUNTMAX) {
-                       aniState->ofdmPhyErrBase = 0;
-                       DPRINTF(ah->ah_sc, ATH_DBG_ANI,
-                               "OFDM Trigger is too high for hw counters\n");
-               } else {
-                       aniState->ofdmPhyErrBase =
-                               AR_PHY_COUNTMAX - aniState->ofdmTrigHigh;
-               }
-               if (aniState->cckTrigHigh > AR_PHY_COUNTMAX) {
-                       aniState->cckPhyErrBase = 0;
-                       DPRINTF(ah->ah_sc, ATH_DBG_ANI,
-                               "CCK Trigger is too high for hw counters\n");
-               } else {
-                       aniState->cckPhyErrBase =
-                               AR_PHY_COUNTMAX - aniState->cckTrigHigh;
-               }
+
+       if (aniState->ofdmTrigHigh > AR_PHY_COUNTMAX) {
+               aniState->ofdmPhyErrBase = 0;
                DPRINTF(ah->ah_sc, ATH_DBG_ANI,
-                       "Writing ofdmbase=%u   cckbase=%u\n",
-                       aniState->ofdmPhyErrBase,
-                       aniState->cckPhyErrBase);
-               REG_WRITE(ah, AR_PHY_ERR_1, aniState->ofdmPhyErrBase);
-               REG_WRITE(ah, AR_PHY_ERR_2, aniState->cckPhyErrBase);
-               REG_WRITE(ah, AR_PHY_ERR_MASK_1, AR_PHY_ERR_OFDM_TIMING);
-               REG_WRITE(ah, AR_PHY_ERR_MASK_2, AR_PHY_ERR_CCK_TIMING);
-
-               ath9k_hw_update_mibstats(ah, &ah->ah_mibStats);
+                       "OFDM Trigger is too high for hw counters\n");
+       } else {
+               aniState->ofdmPhyErrBase =
+                       AR_PHY_COUNTMAX - aniState->ofdmTrigHigh;
+       }
+       if (aniState->cckTrigHigh > AR_PHY_COUNTMAX) {
+               aniState->cckPhyErrBase = 0;
+               DPRINTF(ah->ah_sc, ATH_DBG_ANI,
+                       "CCK Trigger is too high for hw counters\n");
+       } else {
+               aniState->cckPhyErrBase =
+                       AR_PHY_COUNTMAX - aniState->cckTrigHigh;
        }
+       DPRINTF(ah->ah_sc, ATH_DBG_ANI,
+               "Writing ofdmbase=%u   cckbase=%u\n",
+               aniState->ofdmPhyErrBase,
+               aniState->cckPhyErrBase);
+       REG_WRITE(ah, AR_PHY_ERR_1, aniState->ofdmPhyErrBase);
+       REG_WRITE(ah, AR_PHY_ERR_2, aniState->cckPhyErrBase);
+       REG_WRITE(ah, AR_PHY_ERR_MASK_1, AR_PHY_ERR_OFDM_TIMING);
+       REG_WRITE(ah, AR_PHY_ERR_MASK_2, AR_PHY_ERR_CCK_TIMING);
+
+       ath9k_hw_update_mibstats(ah, &ah->ah_mibStats);
+
        aniState->ofdmPhyErrCount = 0;
        aniState->cckPhyErrCount = 0;
 }
@@ -530,32 +529,26 @@ void ath9k_ani_reset(struct ath_hw *ah)
        if (aniState->firstepLevel != 0)
                ath9k_hw_ani_control(ah, ATH9K_ANI_FIRSTEP_LEVEL,
                                     aniState->firstepLevel);
-       if (ah->has_hw_phycounters) {
-               ath9k_hw_setrxfilter(ah, ath9k_hw_getrxfilter(ah) &
-                                    ~ATH9K_RX_FILTER_PHYERR);
-               ath9k_ani_restart(ah);
-               REG_WRITE(ah, AR_PHY_ERR_MASK_1, AR_PHY_ERR_OFDM_TIMING);
-               REG_WRITE(ah, AR_PHY_ERR_MASK_2, AR_PHY_ERR_CCK_TIMING);
 
-       } else {
-               ath9k_ani_restart(ah);
-               ath9k_hw_setrxfilter(ah, ath9k_hw_getrxfilter(ah) |
-                                    ATH9K_RX_FILTER_PHYERR);
-       }
+       ath9k_hw_setrxfilter(ah, ath9k_hw_getrxfilter(ah) &
+                            ~ATH9K_RX_FILTER_PHYERR);
+       ath9k_ani_restart(ah);
+       REG_WRITE(ah, AR_PHY_ERR_MASK_1, AR_PHY_ERR_OFDM_TIMING);
+       REG_WRITE(ah, AR_PHY_ERR_MASK_2, AR_PHY_ERR_CCK_TIMING);
 }
 
 void ath9k_hw_ani_monitor(struct ath_hw *ah,
-                         const struct ath9k_node_stats *stats,
                          struct ath9k_channel *chan)
 {
        struct ar5416AniState *aniState;
        int32_t listenTime;
+       u32 phyCnt1, phyCnt2;
+       u32 ofdmPhyErrCnt, cckPhyErrCnt;
 
        if (!DO_ANI(ah))
                return;
 
        aniState = ah->curani;
-       ah->stats.ast_nodestats = *stats;
 
        listenTime = ath9k_hw_ani_get_listen_time(ah);
        if (listenTime < 0) {
@@ -566,50 +559,45 @@ void ath9k_hw_ani_monitor(struct ath_hw *ah,
 
        aniState->listenTime += listenTime;
 
-       if (ah->has_hw_phycounters) {
-               u32 phyCnt1, phyCnt2;
-               u32 ofdmPhyErrCnt, cckPhyErrCnt;
+       ath9k_hw_update_mibstats(ah, &ah->ah_mibStats);
 
-               ath9k_hw_update_mibstats(ah, &ah->ah_mibStats);
-
-               phyCnt1 = REG_READ(ah, AR_PHY_ERR_1);
-               phyCnt2 = REG_READ(ah, AR_PHY_ERR_2);
-
-               if (phyCnt1 < aniState->ofdmPhyErrBase ||
-                   phyCnt2 < aniState->cckPhyErrBase) {
-                       if (phyCnt1 < aniState->ofdmPhyErrBase) {
-                               DPRINTF(ah->ah_sc, ATH_DBG_ANI,
-                                       "phyCnt1 0x%x, resetting "
-                                       "counter value to 0x%x\n",
-                                       phyCnt1, aniState->ofdmPhyErrBase);
-                               REG_WRITE(ah, AR_PHY_ERR_1,
-                                         aniState->ofdmPhyErrBase);
-                               REG_WRITE(ah, AR_PHY_ERR_MASK_1,
-                                         AR_PHY_ERR_OFDM_TIMING);
-                       }
-                       if (phyCnt2 < aniState->cckPhyErrBase) {
-                               DPRINTF(ah->ah_sc, ATH_DBG_ANI,
-                                       "phyCnt2 0x%x, resetting "
-                                       "counter value to 0x%x\n",
-                                       phyCnt2, aniState->cckPhyErrBase);
-                               REG_WRITE(ah, AR_PHY_ERR_2,
-                                         aniState->cckPhyErrBase);
-                               REG_WRITE(ah, AR_PHY_ERR_MASK_2,
-                                         AR_PHY_ERR_CCK_TIMING);
-                       }
-                       return;
+       phyCnt1 = REG_READ(ah, AR_PHY_ERR_1);
+       phyCnt2 = REG_READ(ah, AR_PHY_ERR_2);
+
+       if (phyCnt1 < aniState->ofdmPhyErrBase ||
+           phyCnt2 < aniState->cckPhyErrBase) {
+               if (phyCnt1 < aniState->ofdmPhyErrBase) {
+                       DPRINTF(ah->ah_sc, ATH_DBG_ANI,
+                               "phyCnt1 0x%x, resetting "
+                               "counter value to 0x%x\n",
+                               phyCnt1, aniState->ofdmPhyErrBase);
+                       REG_WRITE(ah, AR_PHY_ERR_1,
+                                 aniState->ofdmPhyErrBase);
+                       REG_WRITE(ah, AR_PHY_ERR_MASK_1,
+                                 AR_PHY_ERR_OFDM_TIMING);
+               }
+               if (phyCnt2 < aniState->cckPhyErrBase) {
+                       DPRINTF(ah->ah_sc, ATH_DBG_ANI,
+                               "phyCnt2 0x%x, resetting "
+                               "counter value to 0x%x\n",
+                               phyCnt2, aniState->cckPhyErrBase);
+                       REG_WRITE(ah, AR_PHY_ERR_2,
+                                 aniState->cckPhyErrBase);
+                       REG_WRITE(ah, AR_PHY_ERR_MASK_2,
+                                 AR_PHY_ERR_CCK_TIMING);
                }
+               return;
+       }
 
-               ofdmPhyErrCnt = phyCnt1 - aniState->ofdmPhyErrBase;
-               ah->stats.ast_ani_ofdmerrs +=
-                       ofdmPhyErrCnt - aniState->ofdmPhyErrCount;
-               aniState->ofdmPhyErrCount = ofdmPhyErrCnt;
+       ofdmPhyErrCnt = phyCnt1 - aniState->ofdmPhyErrBase;
+       ah->stats.ast_ani_ofdmerrs +=
+               ofdmPhyErrCnt - aniState->ofdmPhyErrCount;
+       aniState->ofdmPhyErrCount = ofdmPhyErrCnt;
 
-               cckPhyErrCnt = phyCnt2 - aniState->cckPhyErrBase;
-               ah->stats.ast_ani_cckerrs +=
-                       cckPhyErrCnt - aniState->cckPhyErrCount;
-               aniState->cckPhyErrCount = cckPhyErrCnt;
-       }
+       cckPhyErrCnt = phyCnt2 - aniState->cckPhyErrBase;
+       ah->stats.ast_ani_cckerrs +=
+               cckPhyErrCnt - aniState->cckPhyErrCount;
+       aniState->cckPhyErrCount = cckPhyErrCnt;
 
        if (aniState->listenTime > 5 * ah->aniperiod) {
                if (aniState->ofdmPhyErrCount <= aniState->listenTime *
@@ -632,11 +620,6 @@ void ath9k_hw_ani_monitor(struct ath_hw *ah,
        }
 }
 
-bool ath9k_hw_phycounters(struct ath_hw *ah)
-{
-       return ah->has_hw_phycounters ? true : false;
-}
-
 void ath9k_enable_mib_counters(struct ath_hw *ah)
 {
        DPRINTF(ah->ah_sc, ATH_DBG_ANI, "Enable MIB counters\n");
@@ -708,8 +691,7 @@ u32 ath9k_hw_GetMibCycleCountsPct(struct ath_hw *ah,
  * any of the MIB counters overflow/trigger so don't assume we're
  * here because a PHY error counter triggered.
  */
-void ath9k_hw_procmibevent(struct ath_hw *ah,
-                          const struct ath9k_node_stats *stats)
+void ath9k_hw_procmibevent(struct ath_hw *ah)
 {
        u32 phyCnt1, phyCnt2;
 
@@ -721,7 +703,6 @@ void ath9k_hw_procmibevent(struct ath_hw *ah,
 
        /* Clear the mib counters and save them in the stats */
        ath9k_hw_update_mibstats(ah, &ah->ah_mibStats);
-       ah->stats.ast_nodestats = *stats;
 
        if (!DO_ANI(ah))
                return;
@@ -777,13 +758,11 @@ void ath9k_hw_ani_setup(struct ath_hw *ah)
        }
 }
 
-void ath9k_hw_ani_attach(struct ath_hw *ah)
+void ath9k_hw_ani_init(struct ath_hw *ah)
 {
        int i;
 
-       DPRINTF(ah->ah_sc, ATH_DBG_ANI, "Attach ANI\n");
-
-       ah->has_hw_phycounters = 1;
+       DPRINTF(ah->ah_sc, ATH_DBG_ANI, "Initialize ANI\n");
 
        memset(ah->ani, 0, sizeof(ah->ani));
        for (i = 0; i < ARRAY_SIZE(ah->ani); i++) {
@@ -799,36 +778,32 @@ void ath9k_hw_ani_attach(struct ath_hw *ah)
                        ATH9K_ANI_CCK_WEAK_SIG_THR;
                ah->ani[i].spurImmunityLevel = ATH9K_ANI_SPUR_IMMUNE_LVL;
                ah->ani[i].firstepLevel = ATH9K_ANI_FIRSTEP_LVL;
-               if (ah->has_hw_phycounters) {
-                       ah->ani[i].ofdmPhyErrBase =
-                               AR_PHY_COUNTMAX - ATH9K_ANI_OFDM_TRIG_HIGH;
-                       ah->ani[i].cckPhyErrBase =
-                               AR_PHY_COUNTMAX - ATH9K_ANI_CCK_TRIG_HIGH;
-               }
-       }
-       if (ah->has_hw_phycounters) {
-               DPRINTF(ah->ah_sc, ATH_DBG_ANI,
-                       "Setting OfdmErrBase = 0x%08x\n",
-                       ah->ani[0].ofdmPhyErrBase);
-               DPRINTF(ah->ah_sc, ATH_DBG_ANI, "Setting cckErrBase = 0x%08x\n",
-                       ah->ani[0].cckPhyErrBase);
-
-               REG_WRITE(ah, AR_PHY_ERR_1, ah->ani[0].ofdmPhyErrBase);
-               REG_WRITE(ah, AR_PHY_ERR_2, ah->ani[0].cckPhyErrBase);
-               ath9k_enable_mib_counters(ah);
+               ah->ani[i].ofdmPhyErrBase =
+                       AR_PHY_COUNTMAX - ATH9K_ANI_OFDM_TRIG_HIGH;
+               ah->ani[i].cckPhyErrBase =
+                       AR_PHY_COUNTMAX - ATH9K_ANI_CCK_TRIG_HIGH;
        }
+
+       DPRINTF(ah->ah_sc, ATH_DBG_ANI,
+               "Setting OfdmErrBase = 0x%08x\n",
+               ah->ani[0].ofdmPhyErrBase);
+       DPRINTF(ah->ah_sc, ATH_DBG_ANI, "Setting cckErrBase = 0x%08x\n",
+               ah->ani[0].cckPhyErrBase);
+
+       REG_WRITE(ah, AR_PHY_ERR_1, ah->ani[0].ofdmPhyErrBase);
+       REG_WRITE(ah, AR_PHY_ERR_2, ah->ani[0].cckPhyErrBase);
+       ath9k_enable_mib_counters(ah);
+
        ah->aniperiod = ATH9K_ANI_PERIOD;
        if (ah->config.enable_ani)
                ah->proc_phyerr |= HAL_PROCESS_ANI;
 }
 
-void ath9k_hw_ani_detach(struct ath_hw *ah)
+void ath9k_hw_ani_disable(struct ath_hw *ah)
 {
-       DPRINTF(ah->ah_sc, ATH_DBG_ANI, "Detach ANI\n");
+       DPRINTF(ah->ah_sc, ATH_DBG_ANI, "Disabling ANI\n");
 
-       if (ah->has_hw_phycounters) {
-               ath9k_hw_disable_mib_counters(ah);
-               REG_WRITE(ah, AR_PHY_ERR_1, 0);
-               REG_WRITE(ah, AR_PHY_ERR_2, 0);
-       }
+       ath9k_hw_disable_mib_counters(ah);
+       REG_WRITE(ah, AR_PHY_ERR_1, 0);
+       REG_WRITE(ah, AR_PHY_ERR_2, 0);
 }