ath9k: Enable MIB and TIM interrupts for station mode.
authorVivek Natarajan <vivek.natraj@gmail.com>
Wed, 28 Jan 2009 15:23:27 +0000 (20:53 +0530)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 9 Feb 2009 20:03:35 +0000 (15:03 -0500)
Enable operating mode specific interrupts in ath9k_add_interface instead
of ath9k_start.

Signed-off-by: Vivek Natarajan <vnatarajan@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ath9k/main.c

index d8e826659c150cbee40e085dad714bd137ffe685..91f7a7b69a308f90e9871ca296a0104048c6a12d 100644 (file)
@@ -1957,25 +1957,6 @@ static int ath9k_start(struct ieee80211_hw *hw)
        if (sc->sc_ah->ah_caps.hw_caps & ATH9K_HW_CAP_HT)
                sc->sc_imask |= ATH9K_INT_CST;
 
-       /*
-        * Enable MIB interrupts when there are hardware phy counters.
-        * Note we only do this (at the moment) for station mode.
-        */
-       if (ath9k_hw_phycounters(sc->sc_ah) &&
-           ((sc->sc_ah->ah_opmode == NL80211_IFTYPE_STATION) ||
-            (sc->sc_ah->ah_opmode == NL80211_IFTYPE_ADHOC)))
-               sc->sc_imask |= ATH9K_INT_MIB;
-       /*
-        * Some hardware processes the TIM IE and fires an
-        * interrupt when the TIM bit is set.  For hardware
-        * that does, if not overridden by configuration,
-        * enable the TIM interrupt when operating as station.
-        */
-       if ((sc->sc_ah->ah_caps.hw_caps & ATH9K_HW_CAP_ENHANCEDPM) &&
-           (sc->sc_ah->ah_opmode == NL80211_IFTYPE_STATION) &&
-           !sc->sc_config.swBeaconProcess)
-               sc->sc_imask |= ATH9K_INT_TIM;
-
        ath_cache_conf_rate(sc, &hw->conf);
 
        sc->sc_flags &= ~SC_OP_INVALID;
@@ -2124,6 +2105,27 @@ static int ath9k_add_interface(struct ieee80211_hw *hw,
        /* Set the device opmode */
        sc->sc_ah->ah_opmode = ic_opmode;
 
+       /*
+        * Enable MIB interrupts when there are hardware phy counters.
+        * Note we only do this (at the moment) for station mode.
+        */
+       if (ath9k_hw_phycounters(sc->sc_ah) &&
+           ((conf->type == NL80211_IFTYPE_STATION) ||
+            (conf->type == NL80211_IFTYPE_ADHOC)))
+               sc->sc_imask |= ATH9K_INT_MIB;
+       /*
+        * Some hardware processes the TIM IE and fires an
+        * interrupt when the TIM bit is set.  For hardware
+        * that does, if not overridden by configuration,
+        * enable the TIM interrupt when operating as station.
+        */
+       if ((sc->sc_ah->ah_caps.hw_caps & ATH9K_HW_CAP_ENHANCEDPM) &&
+           (conf->type == NL80211_IFTYPE_STATION) &&
+           !sc->sc_config.swBeaconProcess)
+               sc->sc_imask |= ATH9K_INT_TIM;
+
+       ath9k_hw_set_interrupts(sc->sc_ah, sc->sc_imask);
+
        if (conf->type == NL80211_IFTYPE_AP) {
                /* TODO: is this a suitable place to start ANI for AP mode? */
                /* Start ANI */