ath9k: process TSF out of range before RX
authorRajkumar Manoharan <rmanoharan@atheros.com>
Fri, 6 May 2011 12:57:47 +0000 (18:27 +0530)
committerJohn W. Linville <linville@tuxdriver.com>
Tue, 10 May 2011 19:54:45 +0000 (15:54 -0400)
Processing TSF out of range before RX helps to update beacon
timers so early in the succeeding rx process.

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

index c171d111ecf7458037b185430312b7536c47577c..11d9eca8fb6e7e7a5d4b69d7e9219286411ebbff 100644 (file)
@@ -689,6 +689,17 @@ void ath9k_tasklet(unsigned long data)
            !ath9k_hw_check_alive(ah))
                ieee80211_queue_work(sc->hw, &sc->hw_check_work);
 
+       if ((status & ATH9K_INT_TSFOOR) && sc->ps_enabled) {
+               /*
+                * TSF sync does not look correct; remain awake to sync with
+                * the next Beacon.
+                */
+               ath_dbg(common, ATH_DBG_PS,
+                       "TSFOOR - Sync with next Beacon\n");
+               sc->ps_flags |= PS_WAIT_FOR_BEACON | PS_BEACON_SYNC |
+                               PS_TSFOOR_SYNC;
+       }
+
        if (ah->caps.hw_caps & ATH9K_HW_CAP_EDMA)
                rxmask = (ATH9K_INT_RXHP | ATH9K_INT_RXLP | ATH9K_INT_RXEOL |
                          ATH9K_INT_RXORN);
@@ -711,17 +722,6 @@ void ath9k_tasklet(unsigned long data)
                        ath_tx_tasklet(sc);
        }
 
-       if ((status & ATH9K_INT_TSFOOR) && sc->ps_enabled) {
-               /*
-                * TSF sync does not look correct; remain awake to sync with
-                * the next Beacon.
-                */
-               ath_dbg(common, ATH_DBG_PS,
-                       "TSFOOR - Sync with next Beacon\n");
-               sc->ps_flags |= PS_WAIT_FOR_BEACON | PS_BEACON_SYNC |
-                               PS_TSFOOR_SYNC;
-       }
-
        if (ah->btcoex_hw.scheme == ATH_BTCOEX_CFG_3WIRE)
                if (status & ATH9K_INT_GENTIMER)
                        ath_gen_timer_isr(sc->sc_ah);