iwlagn: move iwl_stop / wake_queue to the upper layer
authorEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Thu, 15 Sep 2011 18:46:31 +0000 (11:46 -0700)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 19 Sep 2011 19:58:26 +0000 (15:58 -0400)
Add a wrapper in the upper layer to call the mac80211's function.
This allows not to have the transport layer call mac80211 directly.

Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/iwlwifi/iwl-agn-tt.c
drivers/net/wireless/iwlwifi/iwl-agn.c
drivers/net/wireless/iwlwifi/iwl-core.c
drivers/net/wireless/iwlwifi/iwl-dev.h
drivers/net/wireless/iwlwifi/iwl-shared.h
drivers/net/wireless/iwlwifi/iwl-trans-int-pcie.h

index 92ba8cd0ecd50f12196def3916a6df7e3a2119c0..495f936647414b8ceaf38b74ea5bc7d26cd15a95 100644 (file)
@@ -209,7 +209,7 @@ static void iwl_perform_ct_kill_task(struct iwl_priv *priv,
 {
        if (stop) {
                IWL_DEBUG_TEMP(priv, "Stop all queues\n");
-               if (priv->shrd->mac80211_registered)
+               if (priv->mac80211_registered)
                        ieee80211_stop_queues(priv->hw);
                IWL_DEBUG_TEMP(priv,
                                "Schedule 5 seconds CT_KILL Timer\n");
@@ -217,7 +217,7 @@ static void iwl_perform_ct_kill_task(struct iwl_priv *priv,
                          jiffies + CT_KILL_EXIT_DURATION * HZ);
        } else {
                IWL_DEBUG_TEMP(priv, "Wake all queues\n");
-               if (priv->shrd->mac80211_registered)
+               if (priv->mac80211_registered)
                        ieee80211_wake_queues(priv->hw);
        }
 }
index 1142d85ea8817c483fb43910e985834fbb6ecb13..61f8ea6413c06d61a192482a961772087e6db991 100644 (file)
@@ -1519,7 +1519,7 @@ static void __iwl_down(struct iwl_priv *priv)
        if (!exit_pending)
                clear_bit(STATUS_EXIT_PENDING, &priv->shrd->status);
 
-       if (priv->shrd->mac80211_registered)
+       if (priv->mac80211_registered)
                ieee80211_stop_queues(priv->hw);
 
        iwl_trans_stop_device(trans(priv));
@@ -1863,7 +1863,7 @@ static int iwl_mac_setup_register(struct iwl_priv *priv,
                IWL_ERR(priv, "Failed to register hw (error %d)\n", ret);
                return ret;
        }
-       priv->shrd->mac80211_registered = 1;
+       priv->mac80211_registered = 1;
 
        return 0;
 }
@@ -3311,7 +3311,6 @@ int iwl_probe(struct iwl_bus *bus, const struct iwl_trans_ops *trans_ops,
        priv->shrd = &priv->_shrd;
        priv->shrd->bus = bus;
        priv->shrd->priv = priv;
-       priv->shrd->hw = hw;
        bus_set_drv_data(priv->bus, priv->shrd);
 
        priv->shrd->trans = trans_ops->alloc(priv->shrd);
@@ -3487,9 +3486,9 @@ void __devexit iwl_remove(struct iwl_priv * priv)
        iwl_testmode_cleanup(priv);
        iwl_leds_exit(priv);
 
-       if (priv->shrd->mac80211_registered) {
+       if (priv->mac80211_registered) {
                ieee80211_unregister_hw(priv->hw);
-               priv->shrd->mac80211_registered = 0;
+               priv->mac80211_registered = 0;
        }
 
        iwl_tt_exit(priv);
index 5e490dbe0d0705916fe33114288d1140c24bf6f5..208ca218d6b1f56cf484d6f67cd5e8a17072859c 100644 (file)
@@ -1885,3 +1885,13 @@ void iwl_free_skb(struct iwl_priv *priv, struct sk_buff *skb)
        kmem_cache_free(priv->tx_cmd_pool, (info->driver_data[1]));
        dev_kfree_skb_any(skb);
 }
+
+void iwl_stop_sw_queue(struct iwl_priv *priv, u8 ac)
+{
+       ieee80211_stop_queue(priv->hw, ac);
+}
+
+void iwl_wake_sw_queue(struct iwl_priv *priv, u8 ac)
+{
+       ieee80211_wake_queue(priv->hw, ac);
+}
index 8438a33e17ee03a41c4c6aa01ed05755df1c0d19..f69e556bd3c2877fc46b5caceb345a71e69bb3d2 100644 (file)
@@ -958,6 +958,8 @@ struct iwl_priv {
        struct iwl_station_entry stations[IWLAGN_STATION_COUNT];
        unsigned long ucode_key_table;
 
+       u8 mac80211_registered;
+
        /* Indication if ieee80211_ops->open has been called */
        u8 is_open;
 
index bdfbc6058ba1fa1061dddeb4fe5becc5bac39383..0f15d588303f0f4da94d4e0d7c933b84e8ae073e 100644 (file)
@@ -246,12 +246,6 @@ struct iwl_shared {
        spinlock_t sta_lock;
        struct mutex mutex;
 
-       /*these 2 shouldn't really be here, but they are needed for
-        * iwl_queue_stop, which is called from the upper layer too
-        */
-       u8 mac80211_registered;
-       struct ieee80211_hw *hw;
-
        struct iwl_tid_data tid_data[IWLAGN_STATION_COUNT][IWL_MAX_TID_COUNT];
 
        wait_queue_head_t wait_command_queue;
@@ -397,6 +391,9 @@ void iwlagn_fw_error(struct iwl_priv *priv, bool ondemand);
 const char *get_cmd_string(u8 cmd);
 bool iwl_check_for_ct_kill(struct iwl_priv *priv);
 
+void iwl_stop_sw_queue(struct iwl_priv *priv, u8 ac);
+void iwl_wake_sw_queue(struct iwl_priv *priv, u8 ac);
+
 #ifdef CONFIG_IWLWIFI_DEBUGFS
 void iwl_reset_traffic_log(struct iwl_priv *priv);
 #endif /* CONFIG_IWLWIFI_DEBUGFS */
index fc337547354177234b8cbbf377fa1f0c5bcc453c..49cd5a7682805ca88ebd17f072142ea7a25a51b3 100644 (file)
@@ -375,12 +375,9 @@ static inline void iwl_wake_queue(struct iwl_trans *trans,
        struct iwl_trans_pcie *trans_pcie =
                IWL_TRANS_GET_PCIE_TRANS(trans);
 
-       if (unlikely(!trans->shrd->mac80211_registered))
-               return;
-
        if (test_and_clear_bit(hwq, trans_pcie->queue_stopped))
                if (atomic_dec_return(&trans_pcie->queue_stop_count[ac]) <= 0)
-                       ieee80211_wake_queue(trans->shrd->hw, ac);
+                       iwl_wake_sw_queue(priv(trans), ac);
 }
 
 static inline void iwl_stop_queue(struct iwl_trans *trans,
@@ -392,12 +389,9 @@ static inline void iwl_stop_queue(struct iwl_trans *trans,
        struct iwl_trans_pcie *trans_pcie =
                IWL_TRANS_GET_PCIE_TRANS(trans);
 
-       if (unlikely(!trans->shrd->mac80211_registered))
-               return;
-
        if (!test_and_set_bit(hwq, trans_pcie->queue_stopped))
                if (atomic_inc_return(&trans_pcie->queue_stop_count[ac]) > 0)
-                       ieee80211_stop_queue(trans->shrd->hw, ac);
+                       iwl_stop_sw_queue(priv(trans), ac);
 }
 
 #ifdef ieee80211_stop_queue