ath9k: Use TSFOOR interrupt to trigger TSF sync with next Beacon
authorJouni Malinen <jouni.malinen@atheros.com>
Tue, 19 May 2009 14:01:40 +0000 (17:01 +0300)
committerJohn W. Linville <linville@tuxdriver.com>
Wed, 20 May 2009 18:46:33 +0000 (14:46 -0400)
If the chip complains about TSF sync, make sure we remain awake to
sync with the next Beacon frame. In theory, this should not be needed
since we are currently trying to receive all Beacon frames, anyway,
better have this code ready should we ever change that.

Signed-off-by: Jouni Malinen <jouni.malinen@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ath/ath9k/main.c

index dd54fa727a613252eec16b1b6b39965439c020ef..d2ef9732c1d9717f66f9e296d5db90be68ca419f 100644 (file)
@@ -480,6 +480,16 @@ static void ath9k_tasklet(unsigned long data)
        if (status & ATH9K_INT_TX)
                ath_tx_tasklet(sc);
 
+       if ((status & ATH9K_INT_TSFOOR) &&
+           (sc->hw->conf.flags & IEEE80211_CONF_PS)) {
+               /*
+                * TSF sync does not look correct; remain awake to sync with
+                * the next Beacon.
+                */
+               DPRINTF(sc, ATH_DBG_PS, "TSFOOR - Sync with next Beacon\n");
+               sc->sc_flags |= SC_OP_WAIT_FOR_BEACON;
+       }
+
        /* re-enable hardware interrupt */
        ath9k_hw_set_interrupts(sc->sc_ah, sc->imask);
        ath9k_ps_restore(sc);