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>
{
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");
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);
}
}
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));
IWL_ERR(priv, "Failed to register hw (error %d)\n", ret);
return ret;
}
- priv->shrd->mac80211_registered = 1;
+ priv->mac80211_registered = 1;
return 0;
}
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);
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);
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);
+}
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;
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;
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 */
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,
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