ath9k_htc: Handle host RX disable
authorSujith <Sujith.Manoharan@atheros.com>
Tue, 1 Jun 2010 09:44:18 +0000 (15:14 +0530)
committerJohn W. Linville <linville@tuxdriver.com>
Thu, 3 Jun 2010 18:14:41 +0000 (14:14 -0400)
The MIB counters used by ANI have to be disabled
on the host because the FW doesn't do it on the target side.
Also, flush the receive buffers before initializing
RX on the target.

Signed-off-by: Sujith <Sujith.Manoharan@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ath/ath9k/ani.c
drivers/net/wireless/ath/ath9k/htc_drv_main.c

index ba8b20f01594a8908f135620dd10b392d1498227..3da820ffc65eefbaee5023fd3408011948be0541 100644 (file)
@@ -495,6 +495,7 @@ void ath9k_hw_disable_mib_counters(struct ath_hw *ah)
        REG_WRITE(ah, AR_FILT_OFDM, 0);
        REG_WRITE(ah, AR_FILT_CCK, 0);
 }
+EXPORT_SYMBOL(ath9k_hw_disable_mib_counters);
 
 u32 ath9k_hw_GetMibCycleCountsPct(struct ath_hw *ah,
                                  u32 *rxc_pcnt,
index ba26a983adcb91cb81733eec211851aa992902e0..6bc05fe9be8c876af2207881a7464481b60c528a 100644 (file)
@@ -1117,6 +1117,12 @@ static void ath9k_htc_radio_disable(struct ieee80211_hw *hw)
        /* Stop RX */
        WMI_CMD(WMI_STOP_RECV_CMDID);
 
+       /*
+        * The MIB counters have to be disabled here,
+        * since the target doesn't do it.
+        */
+       ath9k_hw_disable_mib_counters(ah);
+
        if (!ah->curchan)
                ah->curchan = ath9k_cmn_get_curchannel(hw, ah);
 
@@ -1198,6 +1204,10 @@ static int ath9k_htc_start(struct ieee80211_hw *hw)
                  "Starting driver with initial channel: %d MHz\n",
                  curchan->center_freq);
 
+       /* Ensure that HW is awake before flushing RX */
+       ath9k_htc_setpower(priv, ATH9K_PM_AWAKE);
+       WMI_CMD(WMI_FLUSH_RECV_CMDID);
+
        /* setup initial channel */
        init_channel = ath9k_cmn_get_curchannel(hw, ah);