aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2010-04-28 11:44:52 -0400
committerReinette Chatre <reinette.chatre@intel.com>2010-05-10 18:08:53 -0400
commit1fa61b2e793dad51271c7ce39377daade51261d7 (patch)
tree1165dc3d721f1db83a459687b70bb3b4fdfafec9 /drivers/net/wireless
parentc0222df86e55576ef879795b5a158c46e6653f07 (diff)
iwlwifi: manage IBSS station properly
Currently iwlwifi will eventually exhaust the station table when adding the BSSID station for IBSS mode, unless the interface is set down. The new mac80211 ibss joined/left notification allows us to fix that easily by moving the code to add the IBSS station to the notification, and also adding code to remove it again when we leave the IBSS. Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Reinette Chatre <reinette.chatre@intel.com>
Diffstat (limited to 'drivers/net/wireless')
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-1000.c1
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-3945.c30
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-3945.h9
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-4965.c1
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-5000.c2
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-6000.c2
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn-lib.c9
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn.c6
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn.h4
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-core.c9
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-core.h2
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-sta.c7
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-sta.h1
-rw-r--r--drivers/net/wireless/iwlwifi/iwl3945-base.c11
14 files changed, 66 insertions, 28 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-1000.c b/drivers/net/wireless/iwlwifi/iwl-1000.c
index 4d360d74b0cd..ebaf02d47e73 100644
--- a/drivers/net/wireless/iwlwifi/iwl-1000.c
+++ b/drivers/net/wireless/iwlwifi/iwl-1000.c
@@ -213,6 +213,7 @@ static struct iwl_lib_ops iwl1000_lib = {
213 .set_ct_kill = iwl1000_set_ct_threshold, 213 .set_ct_kill = iwl1000_set_ct_threshold,
214 }, 214 },
215 .add_bcast_station = iwl_add_bcast_station, 215 .add_bcast_station = iwl_add_bcast_station,
216 .manage_ibss_station = iwlagn_manage_ibss_station,
216 .debugfs_ops = { 217 .debugfs_ops = {
217 .rx_stats_read = iwl_ucode_rx_stats_read, 218 .rx_stats_read = iwl_ucode_rx_stats_read,
218 .tx_stats_read = iwl_ucode_tx_stats_read, 219 .tx_stats_read = iwl_ucode_tx_stats_read,
diff --git a/drivers/net/wireless/iwlwifi/iwl-3945.c b/drivers/net/wireless/iwlwifi/iwl-3945.c
index 360781326cb7..1e9593968c36 100644
--- a/drivers/net/wireless/iwlwifi/iwl-3945.c
+++ b/drivers/net/wireless/iwlwifi/iwl-3945.c
@@ -884,7 +884,8 @@ void iwl3945_hw_build_tx_cmd_rate(struct iwl_priv *priv,
884 tx_cmd->supp_rates[1], tx_cmd->supp_rates[0]); 884 tx_cmd->supp_rates[1], tx_cmd->supp_rates[0]);
885} 885}
886 886
887u8 iwl3945_sync_sta(struct iwl_priv *priv, int sta_id, u16 tx_rate, u8 flags) 887static u8 iwl3945_sync_sta(struct iwl_priv *priv, int sta_id,
888 u16 tx_rate, u8 flags)
888{ 889{
889 unsigned long flags_spin; 890 unsigned long flags_spin;
890 struct iwl_station_entry *station; 891 struct iwl_station_entry *station;
@@ -2395,6 +2396,32 @@ static u16 iwl3945_build_addsta_hcmd(const struct iwl_addsta_cmd *cmd, u8 *data)
2395 return (u16)sizeof(struct iwl3945_addsta_cmd); 2396 return (u16)sizeof(struct iwl3945_addsta_cmd);
2396} 2397}
2397 2398
2399static int iwl3945_manage_ibss_station(struct iwl_priv *priv,
2400 struct ieee80211_vif *vif, bool add)
2401{
2402 int ret;
2403
2404 /*
2405 * NB: this assumes that the station it gets will be
2406 * IWL_STA_ID, which will happen but isn't obvious.
2407 */
2408
2409 if (add) {
2410 ret = iwl_add_local_station(priv, vif->bss_conf.bssid, false);
2411 if (ret)
2412 return ret;
2413
2414 iwl3945_sync_sta(priv, IWL_STA_ID,
2415 (priv->band == IEEE80211_BAND_5GHZ) ?
2416 IWL_RATE_6M_PLCP : IWL_RATE_1M_PLCP,
2417 CMD_ASYNC);
2418 iwl3945_rate_scale_init(priv->hw, IWL_STA_ID);
2419
2420 return 0;
2421 }
2422
2423 return iwl_remove_station(priv, vif->bss_conf.bssid);
2424}
2398 2425
2399/** 2426/**
2400 * iwl3945_init_hw_rate_table - Initialize the hardware rate fallback table 2427 * iwl3945_init_hw_rate_table - Initialize the hardware rate fallback table
@@ -2802,6 +2829,7 @@ static struct iwl_lib_ops iwl3945_lib = {
2802 .post_associate = iwl3945_post_associate, 2829 .post_associate = iwl3945_post_associate,
2803 .isr = iwl_isr_legacy, 2830 .isr = iwl_isr_legacy,
2804 .config_ap = iwl3945_config_ap, 2831 .config_ap = iwl3945_config_ap,
2832 .manage_ibss_station = iwl3945_manage_ibss_station,
2805 .add_bcast_station = iwl3945_add_bcast_station, 2833 .add_bcast_station = iwl3945_add_bcast_station,
2806 2834
2807 .debugfs_ops = { 2835 .debugfs_ops = {
diff --git a/drivers/net/wireless/iwlwifi/iwl-3945.h b/drivers/net/wireless/iwlwifi/iwl-3945.h
index 643adb644bb8..cea824c15bc5 100644
--- a/drivers/net/wireless/iwlwifi/iwl-3945.h
+++ b/drivers/net/wireless/iwlwifi/iwl-3945.h
@@ -211,13 +211,6 @@ extern int iwl3945_dump_nic_event_log(struct iwl_priv *priv, bool full_log,
211 char **buf, bool display); 211 char **buf, bool display);
212extern void iwl3945_dump_nic_error_log(struct iwl_priv *priv); 212extern void iwl3945_dump_nic_error_log(struct iwl_priv *priv);
213 213
214/*
215 * Currently used by iwl-3945-rs... look at restructuring so that it doesn't
216 * call this... todo... fix that.
217*/
218extern u8 iwl3945_sync_station(struct iwl_priv *priv, int sta_id,
219 u16 tx_rate, u8 flags);
220
221/****************************************************************************** 214/******************************************************************************
222 * 215 *
223 * Functions implemented in iwl-[34]*.c which are forward declared here 216 * Functions implemented in iwl-[34]*.c which are forward declared here
@@ -288,8 +281,6 @@ extern __le32 iwl3945_get_antenna_flags(const struct iwl_priv *priv);
288extern int iwl3945_init_hw_rate_table(struct iwl_priv *priv); 281extern int iwl3945_init_hw_rate_table(struct iwl_priv *priv);
289extern void iwl3945_reg_txpower_periodic(struct iwl_priv *priv); 282extern void iwl3945_reg_txpower_periodic(struct iwl_priv *priv);
290extern int iwl3945_txpower_set_from_eeprom(struct iwl_priv *priv); 283extern int iwl3945_txpower_set_from_eeprom(struct iwl_priv *priv);
291extern u8 iwl3945_sync_sta(struct iwl_priv *priv, int sta_id,
292 u16 tx_rate, u8 flags);
293 284
294extern const struct iwl_channel_info *iwl3945_get_channel_info( 285extern const struct iwl_channel_info *iwl3945_get_channel_info(
295 const struct iwl_priv *priv, enum ieee80211_band band, u16 channel); 286 const struct iwl_priv *priv, enum ieee80211_band band, u16 channel);
diff --git a/drivers/net/wireless/iwlwifi/iwl-4965.c b/drivers/net/wireless/iwlwifi/iwl-4965.c
index 6b0ae74546dd..5904a1beac4d 100644
--- a/drivers/net/wireless/iwlwifi/iwl-4965.c
+++ b/drivers/net/wireless/iwlwifi/iwl-4965.c
@@ -2219,6 +2219,7 @@ static struct iwl_lib_ops iwl4965_lib = {
2219 .set_ct_kill = iwl4965_set_ct_threshold, 2219 .set_ct_kill = iwl4965_set_ct_threshold,
2220 }, 2220 },
2221 .add_bcast_station = iwl_add_bcast_station, 2221 .add_bcast_station = iwl_add_bcast_station,
2222 .manage_ibss_station = iwlagn_manage_ibss_station,
2222 .debugfs_ops = { 2223 .debugfs_ops = {
2223 .rx_stats_read = iwl_ucode_rx_stats_read, 2224 .rx_stats_read = iwl_ucode_rx_stats_read,
2224 .tx_stats_read = iwl_ucode_tx_stats_read, 2225 .tx_stats_read = iwl_ucode_tx_stats_read,
diff --git a/drivers/net/wireless/iwlwifi/iwl-5000.c b/drivers/net/wireless/iwlwifi/iwl-5000.c
index 8ed616e59631..bde0f18cbae9 100644
--- a/drivers/net/wireless/iwlwifi/iwl-5000.c
+++ b/drivers/net/wireless/iwlwifi/iwl-5000.c
@@ -352,6 +352,7 @@ static struct iwl_lib_ops iwl5000_lib = {
352 .set_ct_kill = iwl5000_set_ct_threshold, 352 .set_ct_kill = iwl5000_set_ct_threshold,
353 }, 353 },
354 .add_bcast_station = iwl_add_bcast_station, 354 .add_bcast_station = iwl_add_bcast_station,
355 .manage_ibss_station = iwlagn_manage_ibss_station,
355 .debugfs_ops = { 356 .debugfs_ops = {
356 .rx_stats_read = iwl_ucode_rx_stats_read, 357 .rx_stats_read = iwl_ucode_rx_stats_read,
357 .tx_stats_read = iwl_ucode_tx_stats_read, 358 .tx_stats_read = iwl_ucode_tx_stats_read,
@@ -414,6 +415,7 @@ static struct iwl_lib_ops iwl5150_lib = {
414 .set_ct_kill = iwl5150_set_ct_threshold, 415 .set_ct_kill = iwl5150_set_ct_threshold,
415 }, 416 },
416 .add_bcast_station = iwl_add_bcast_station, 417 .add_bcast_station = iwl_add_bcast_station,
418 .manage_ibss_station = iwlagn_manage_ibss_station,
417 .debugfs_ops = { 419 .debugfs_ops = {
418 .rx_stats_read = iwl_ucode_rx_stats_read, 420 .rx_stats_read = iwl_ucode_rx_stats_read,
419 .tx_stats_read = iwl_ucode_tx_stats_read, 421 .tx_stats_read = iwl_ucode_tx_stats_read,
diff --git a/drivers/net/wireless/iwlwifi/iwl-6000.c b/drivers/net/wireless/iwlwifi/iwl-6000.c
index b69fa36fb87a..5f0f58693104 100644
--- a/drivers/net/wireless/iwlwifi/iwl-6000.c
+++ b/drivers/net/wireless/iwlwifi/iwl-6000.c
@@ -318,6 +318,7 @@ static struct iwl_lib_ops iwl6000_lib = {
318 .set_ct_kill = iwl6000_set_ct_threshold, 318 .set_ct_kill = iwl6000_set_ct_threshold,
319 }, 319 },
320 .add_bcast_station = iwl_add_bcast_station, 320 .add_bcast_station = iwl_add_bcast_station,
321 .manage_ibss_station = iwlagn_manage_ibss_station,
321 .debugfs_ops = { 322 .debugfs_ops = {
322 .rx_stats_read = iwl_ucode_rx_stats_read, 323 .rx_stats_read = iwl_ucode_rx_stats_read,
323 .tx_stats_read = iwl_ucode_tx_stats_read, 324 .tx_stats_read = iwl_ucode_tx_stats_read,
@@ -391,6 +392,7 @@ static struct iwl_lib_ops iwl6050_lib = {
391 .set_calib_version = iwl6050_set_calib_version, 392 .set_calib_version = iwl6050_set_calib_version,
392 }, 393 },
393 .add_bcast_station = iwl_add_bcast_station, 394 .add_bcast_station = iwl_add_bcast_station,
395 .manage_ibss_station = iwlagn_manage_ibss_station,
394 .debugfs_ops = { 396 .debugfs_ops = {
395 .rx_stats_read = iwl_ucode_rx_stats_read, 397 .rx_stats_read = iwl_ucode_rx_stats_read,
396 .tx_stats_read = iwl_ucode_tx_stats_read, 398 .tx_stats_read = iwl_ucode_tx_stats_read,
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-lib.c b/drivers/net/wireless/iwlwifi/iwl-agn-lib.c
index a27347425968..50ff313c549c 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn-lib.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn-lib.c
@@ -38,6 +38,7 @@
38#include "iwl-helpers.h" 38#include "iwl-helpers.h"
39#include "iwl-agn-hw.h" 39#include "iwl-agn-hw.h"
40#include "iwl-agn.h" 40#include "iwl-agn.h"
41#include "iwl-sta.h"
41 42
42static inline u32 iwlagn_get_scd_ssn(struct iwl5000_tx_resp *tx_resp) 43static inline u32 iwlagn_get_scd_ssn(struct iwl5000_tx_resp *tx_resp)
43{ 44{
@@ -1513,3 +1514,11 @@ void iwlagn_request_scan(struct iwl_priv *priv)
1513 /* inform mac80211 scan aborted */ 1514 /* inform mac80211 scan aborted */
1514 queue_work(priv->workqueue, &priv->scan_completed); 1515 queue_work(priv->workqueue, &priv->scan_completed);
1515} 1516}
1517
1518int iwlagn_manage_ibss_station(struct iwl_priv *priv,
1519 struct ieee80211_vif *vif, bool add)
1520{
1521 if (add)
1522 return iwl_add_local_station(priv, vif->bss_conf.bssid, true);
1523 return iwl_remove_station(priv, vif->bss_conf.bssid);
1524}
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c
index 5cf38227c6c7..dd1324d6f4c0 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
@@ -2606,17 +2606,11 @@ void iwl_post_associate(struct iwl_priv *priv)
2606 switch (priv->iw_mode) { 2606 switch (priv->iw_mode) {
2607 case NL80211_IFTYPE_STATION: 2607 case NL80211_IFTYPE_STATION:
2608 break; 2608 break;
2609
2610 case NL80211_IFTYPE_ADHOC: 2609 case NL80211_IFTYPE_ADHOC:
2611
2612 /* assume default assoc id */ 2610 /* assume default assoc id */
2613 priv->assoc_id = 1; 2611 priv->assoc_id = 1;
2614
2615 iwl_add_local_station(priv, priv->bssid, true);
2616 iwl_send_beacon_cmd(priv); 2612 iwl_send_beacon_cmd(priv);
2617
2618 break; 2613 break;
2619
2620 default: 2614 default:
2621 IWL_ERR(priv, "%s Should not be called in %d mode\n", 2615 IWL_ERR(priv, "%s Should not be called in %d mode\n",
2622 __func__, priv->iw_mode); 2616 __func__, priv->iw_mode);
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.h b/drivers/net/wireless/iwlwifi/iwl-agn.h
index cfee9994383e..a9ba9fc6740a 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn.h
+++ b/drivers/net/wireless/iwlwifi/iwl-agn.h
@@ -174,4 +174,8 @@ static inline bool iwl_is_tx_success(u32 status)
174/* scan */ 174/* scan */
175void iwlagn_request_scan(struct iwl_priv *priv); 175void iwlagn_request_scan(struct iwl_priv *priv);
176 176
177/* station mgmt */
178int iwlagn_manage_ibss_station(struct iwl_priv *priv,
179 struct ieee80211_vif *vif, bool add);
180
177#endif /* __iwl_agn_h__ */ 181#endif /* __iwl_agn_h__ */
diff --git a/drivers/net/wireless/iwlwifi/iwl-core.c b/drivers/net/wireless/iwlwifi/iwl-core.c
index e8c9bcafe564..5c6f25462a09 100644
--- a/drivers/net/wireless/iwlwifi/iwl-core.c
+++ b/drivers/net/wireless/iwlwifi/iwl-core.c
@@ -1960,6 +1960,15 @@ void iwl_bss_info_changed(struct ieee80211_hw *hw,
1960 iwl_set_no_assoc(priv); 1960 iwl_set_no_assoc(priv);
1961 } 1961 }
1962 1962
1963 if (changes & BSS_CHANGED_IBSS) {
1964 ret = priv->cfg->ops->lib->manage_ibss_station(priv, vif,
1965 bss_conf->ibss_joined);
1966 if (ret)
1967 IWL_ERR(priv, "failed to %s IBSS station %pM\n",
1968 bss_conf->ibss_joined ? "add" : "remove",
1969 bss_conf->bssid);
1970 }
1971
1963 mutex_unlock(&priv->mutex); 1972 mutex_unlock(&priv->mutex);
1964 1973
1965 IWL_DEBUG_MAC80211(priv, "leave\n"); 1974 IWL_DEBUG_MAC80211(priv, "leave\n");
diff --git a/drivers/net/wireless/iwlwifi/iwl-core.h b/drivers/net/wireless/iwlwifi/iwl-core.h
index 8d53fc973a43..0fa99650f75a 100644
--- a/drivers/net/wireless/iwlwifi/iwl-core.h
+++ b/drivers/net/wireless/iwlwifi/iwl-core.h
@@ -202,6 +202,8 @@ struct iwl_lib_ops {
202 struct iwl_temp_ops temp_ops; 202 struct iwl_temp_ops temp_ops;
203 /* station management */ 203 /* station management */
204 int (*add_bcast_station)(struct iwl_priv *priv); 204 int (*add_bcast_station)(struct iwl_priv *priv);
205 int (*manage_ibss_station)(struct iwl_priv *priv,
206 struct ieee80211_vif *vif, bool add);
205 /* recover from tx queue stall */ 207 /* recover from tx queue stall */
206 void (*recover_from_tx_stall)(unsigned long data); 208 void (*recover_from_tx_stall)(unsigned long data);
207 /* check for plcp health */ 209 /* check for plcp health */
diff --git a/drivers/net/wireless/iwlwifi/iwl-sta.c b/drivers/net/wireless/iwlwifi/iwl-sta.c
index 354eb13a8515..7da8edeb5256 100644
--- a/drivers/net/wireless/iwlwifi/iwl-sta.c
+++ b/drivers/net/wireless/iwlwifi/iwl-sta.c
@@ -596,7 +596,7 @@ static int iwl_send_remove_station(struct iwl_priv *priv,
596/** 596/**
597 * iwl_remove_station - Remove driver's knowledge of station. 597 * iwl_remove_station - Remove driver's knowledge of station.
598 */ 598 */
599static int iwl_remove_station(struct iwl_priv *priv, const u8 *addr) 599int iwl_remove_station(struct iwl_priv *priv, const u8 *addr)
600{ 600{
601 int sta_id = IWL_INVALID_STATION; 601 int sta_id = IWL_INVALID_STATION;
602 int i, ret = -EINVAL; 602 int i, ret = -EINVAL;
@@ -647,6 +647,10 @@ static int iwl_remove_station(struct iwl_priv *priv, const u8 *addr)
647 goto out; 647 goto out;
648 } 648 }
649 649
650 if (priv->stations[sta_id].used & IWL_STA_LOCAL) {
651 kfree(priv->stations[sta_id].lq);
652 priv->stations[sta_id].lq = NULL;
653 }
650 654
651 priv->stations[sta_id].used &= ~IWL_STA_DRIVER_ACTIVE; 655 priv->stations[sta_id].used &= ~IWL_STA_DRIVER_ACTIVE;
652 656
@@ -663,6 +667,7 @@ out:
663 spin_unlock_irqrestore(&priv->sta_lock, flags); 667 spin_unlock_irqrestore(&priv->sta_lock, flags);
664 return ret; 668 return ret;
665} 669}
670EXPORT_SYMBOL_GPL(iwl_remove_station);
666 671
667/** 672/**
668 * iwl_clear_ucode_stations() - clear entire station table driver and/or ucode 673 * iwl_clear_ucode_stations() - clear entire station table driver and/or ucode
diff --git a/drivers/net/wireless/iwlwifi/iwl-sta.h b/drivers/net/wireless/iwlwifi/iwl-sta.h
index b0ed2eb931fd..9a869f1031fd 100644
--- a/drivers/net/wireless/iwlwifi/iwl-sta.h
+++ b/drivers/net/wireless/iwlwifi/iwl-sta.h
@@ -74,6 +74,7 @@ int iwl_add_station_common(struct iwl_priv *priv, const u8 *addr,
74 bool is_ap, 74 bool is_ap,
75 struct ieee80211_sta_ht_cap *ht_info, 75 struct ieee80211_sta_ht_cap *ht_info,
76 u8 *sta_id_r); 76 u8 *sta_id_r);
77int iwl_remove_station(struct iwl_priv *priv, const u8 *addr);
77int iwl_mac_sta_remove(struct ieee80211_hw *hw, struct ieee80211_vif *vif, 78int iwl_mac_sta_remove(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
78 struct ieee80211_sta *sta); 79 struct ieee80211_sta *sta);
79void iwl_sta_tx_modify_enable_tid(struct iwl_priv *priv, int sta_id, int tid); 80void iwl_sta_tx_modify_enable_tid(struct iwl_priv *priv, int sta_id, int tid);
diff --git a/drivers/net/wireless/iwlwifi/iwl3945-base.c b/drivers/net/wireless/iwlwifi/iwl3945-base.c
index 4f20cca06fb0..9486b3248245 100644
--- a/drivers/net/wireless/iwlwifi/iwl3945-base.c
+++ b/drivers/net/wireless/iwlwifi/iwl3945-base.c
@@ -3103,21 +3103,10 @@ void iwl3945_post_associate(struct iwl_priv *priv)
3103 case NL80211_IFTYPE_STATION: 3103 case NL80211_IFTYPE_STATION:
3104 iwl3945_rate_scale_init(priv->hw, IWL_AP_ID); 3104 iwl3945_rate_scale_init(priv->hw, IWL_AP_ID);
3105 break; 3105 break;
3106
3107 case NL80211_IFTYPE_ADHOC: 3106 case NL80211_IFTYPE_ADHOC:
3108
3109 priv->assoc_id = 1; 3107 priv->assoc_id = 1;
3110 iwl_add_local_station(priv, priv->bssid, false);
3111 iwl3945_sync_sta(priv, IWL_STA_ID,
3112 (priv->band == IEEE80211_BAND_5GHZ) ?
3113 IWL_RATE_6M_PLCP : IWL_RATE_1M_PLCP,
3114 CMD_ASYNC);
3115 iwl3945_rate_scale_init(priv->hw, IWL_STA_ID);
3116
3117 iwl3945_send_beacon_cmd(priv); 3108 iwl3945_send_beacon_cmd(priv);
3118
3119 break; 3109 break;
3120
3121 default: 3110 default:
3122 IWL_ERR(priv, "%s Should not be called in %d mode\n", 3111 IWL_ERR(priv, "%s Should not be called in %d mode\n",
3123 __func__, priv->iw_mode); 3112 __func__, priv->iw_mode);