OSDN Git Service

iwlwifi: stop_hw replace enable_rfkill_int
authorEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Mon, 9 Jan 2012 14:35:08 +0000 (16:35 +0200)
committerWey-Yi Guy <wey-yi.w.guy@intel.com>
Thu, 2 Feb 2012 22:37:52 +0000 (14:37 -0800)
This trans_ops->stop_hw leaves the RFKILL interrupt enabled,
we can call that one instead of enable_rfkill_int. By that,
we reduce the numbers of acceesses to the NIC from the upper
layers.

Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
drivers/net/wireless/iwlwifi/iwl-core.h
drivers/net/wireless/iwlwifi/iwl-mac80211.c
drivers/net/wireless/iwlwifi/iwl-trans-pcie-rx.c
drivers/net/wireless/iwlwifi/iwl-trans-pcie.c

index e74bfb7..8d60dcf 100644 (file)
@@ -297,12 +297,6 @@ static inline bool iwl_advanced_bt_coexist(struct iwl_priv *priv)
               cfg(priv)->bt_params->advanced_bt_coexist;
 }
 
-static inline void iwl_enable_rfkill_int(struct iwl_priv *priv)
-{
-       IWL_DEBUG_ISR(priv, "Enabling rfkill interrupt\n");
-       iwl_write32(trans(priv), CSR_INT_MASK, CSR_INT_BIT_RF_KILL);
-}
-
 extern bool bt_siso_mode;
 
 #endif /* __iwl_core_h__ */
index 78bc1e8..7177fd7 100644 (file)
@@ -346,9 +346,10 @@ static void iwlagn_mac_stop(struct ieee80211_hw *hw)
        flush_workqueue(priv->shrd->workqueue);
 
        /* User space software may expect getting rfkill changes
-        * even if interface is down */
-       iwl_write32(trans(priv), CSR_INT, 0xFFFFFFFF);
-       iwl_enable_rfkill_int(priv);
+        * even if interface is down, trans->down will leave the RF
+        * kill interrupt enabled
+        */
+       iwl_trans_stop_hw(trans(priv));
 
        IWL_DEBUG_MAC80211(priv, "leave\n");
 }
index 731f287..78abff0 100644 (file)
@@ -1149,8 +1149,10 @@ void iwl_irq_tasklet(struct iwl_trans *trans)
        if (test_bit(STATUS_INT_ENABLED, &trans->shrd->status))
                iwl_enable_interrupts(trans);
        /* Re-enable RF_KILL if it occurred */
-       else if (handled & CSR_INT_BIT_RF_KILL)
-               iwl_enable_rfkill_int(priv(trans));
+       else if (handled & CSR_INT_BIT_RF_KILL) {
+               IWL_DEBUG_ISR(trans, "Enabling rfkill interrupt\n");
+               iwl_write32(trans, CSR_INT_MASK, CSR_INT_BIT_RF_KILL);
+       }
 }
 
 /******************************************************************************
index ed2a921..ec26950 100644 (file)
@@ -1532,6 +1532,8 @@ static void iwl_trans_pcie_stop_hw(struct iwl_trans *trans)
 {
        iwl_apm_stop(trans);
 
+       iwl_write32(trans, CSR_INT, 0xFFFFFFFF);
+
        /* Even if we stop the HW, we still want the RF kill interrupt */
        IWL_DEBUG_ISR(trans, "Enabling rfkill interrupt\n");
        iwl_write32(trans, CSR_INT_MASK, CSR_INT_BIT_RF_KILL);