diff options
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-1000.c | 1 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-4965.c | 1 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-5000.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-6000.c | 1 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-core.c | 3 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-core.h | 1 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-sta.c | 30 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-sta.h | 1 |
8 files changed, 40 insertions, 0 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-1000.c b/drivers/net/wireless/iwlwifi/iwl-1000.c index 24743b97ba35..1daf159914ad 100644 --- a/drivers/net/wireless/iwlwifi/iwl-1000.c +++ b/drivers/net/wireless/iwlwifi/iwl-1000.c | |||
@@ -217,6 +217,7 @@ static struct iwl_lib_ops iwl1000_lib = { | |||
217 | .set_ct_kill = iwl1000_set_ct_threshold, | 217 | .set_ct_kill = iwl1000_set_ct_threshold, |
218 | }, | 218 | }, |
219 | .manage_ibss_station = iwlagn_manage_ibss_station, | 219 | .manage_ibss_station = iwlagn_manage_ibss_station, |
220 | .update_bcast_station = iwl_update_bcast_station, | ||
220 | .debugfs_ops = { | 221 | .debugfs_ops = { |
221 | .rx_stats_read = iwl_ucode_rx_stats_read, | 222 | .rx_stats_read = iwl_ucode_rx_stats_read, |
222 | .tx_stats_read = iwl_ucode_tx_stats_read, | 223 | .tx_stats_read = iwl_ucode_tx_stats_read, |
diff --git a/drivers/net/wireless/iwlwifi/iwl-4965.c b/drivers/net/wireless/iwlwifi/iwl-4965.c index 67526a1be025..1dd3bc4c107e 100644 --- a/drivers/net/wireless/iwlwifi/iwl-4965.c +++ b/drivers/net/wireless/iwlwifi/iwl-4965.c | |||
@@ -2280,6 +2280,7 @@ static struct iwl_lib_ops iwl4965_lib = { | |||
2280 | .set_ct_kill = iwl4965_set_ct_threshold, | 2280 | .set_ct_kill = iwl4965_set_ct_threshold, |
2281 | }, | 2281 | }, |
2282 | .manage_ibss_station = iwlagn_manage_ibss_station, | 2282 | .manage_ibss_station = iwlagn_manage_ibss_station, |
2283 | .update_bcast_station = iwl_update_bcast_station, | ||
2283 | .debugfs_ops = { | 2284 | .debugfs_ops = { |
2284 | .rx_stats_read = iwl_ucode_rx_stats_read, | 2285 | .rx_stats_read = iwl_ucode_rx_stats_read, |
2285 | .tx_stats_read = iwl_ucode_tx_stats_read, | 2286 | .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 fa2dbb56177c..b8f3e20f2c80 100644 --- a/drivers/net/wireless/iwlwifi/iwl-5000.c +++ b/drivers/net/wireless/iwlwifi/iwl-5000.c | |||
@@ -393,6 +393,7 @@ static struct iwl_lib_ops iwl5000_lib = { | |||
393 | .set_ct_kill = iwl5000_set_ct_threshold, | 393 | .set_ct_kill = iwl5000_set_ct_threshold, |
394 | }, | 394 | }, |
395 | .manage_ibss_station = iwlagn_manage_ibss_station, | 395 | .manage_ibss_station = iwlagn_manage_ibss_station, |
396 | .update_bcast_station = iwl_update_bcast_station, | ||
396 | .debugfs_ops = { | 397 | .debugfs_ops = { |
397 | .rx_stats_read = iwl_ucode_rx_stats_read, | 398 | .rx_stats_read = iwl_ucode_rx_stats_read, |
398 | .tx_stats_read = iwl_ucode_tx_stats_read, | 399 | .tx_stats_read = iwl_ucode_tx_stats_read, |
@@ -455,6 +456,7 @@ static struct iwl_lib_ops iwl5150_lib = { | |||
455 | .set_ct_kill = iwl5150_set_ct_threshold, | 456 | .set_ct_kill = iwl5150_set_ct_threshold, |
456 | }, | 457 | }, |
457 | .manage_ibss_station = iwlagn_manage_ibss_station, | 458 | .manage_ibss_station = iwlagn_manage_ibss_station, |
459 | .update_bcast_station = iwl_update_bcast_station, | ||
458 | .debugfs_ops = { | 460 | .debugfs_ops = { |
459 | .rx_stats_read = iwl_ucode_rx_stats_read, | 461 | .rx_stats_read = iwl_ucode_rx_stats_read, |
460 | .tx_stats_read = iwl_ucode_tx_stats_read, | 462 | .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 c909a9c5e5e1..61cf0b3e88c2 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_calib_version = iwl6000_set_calib_version, | 318 | .set_calib_version = iwl6000_set_calib_version, |
319 | }, | 319 | }, |
320 | .manage_ibss_station = iwlagn_manage_ibss_station, | 320 | .manage_ibss_station = iwlagn_manage_ibss_station, |
321 | .update_bcast_station = iwl_update_bcast_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, |
diff --git a/drivers/net/wireless/iwlwifi/iwl-core.c b/drivers/net/wireless/iwlwifi/iwl-core.c index 329e5107b5c3..f47a58ff3252 100644 --- a/drivers/net/wireless/iwlwifi/iwl-core.c +++ b/drivers/net/wireless/iwlwifi/iwl-core.c | |||
@@ -2110,6 +2110,9 @@ int iwl_mac_config(struct ieee80211_hw *hw, u32 changed) | |||
2110 | iwl_set_flags_for_band(priv, conf->channel->band, priv->vif); | 2110 | iwl_set_flags_for_band(priv, conf->channel->band, priv->vif); |
2111 | spin_unlock_irqrestore(&priv->lock, flags); | 2111 | spin_unlock_irqrestore(&priv->lock, flags); |
2112 | 2112 | ||
2113 | if (priv->cfg->ops->lib->update_bcast_station) | ||
2114 | ret = priv->cfg->ops->lib->update_bcast_station(priv); | ||
2115 | |||
2113 | set_ch_out: | 2116 | set_ch_out: |
2114 | /* The list of supported rates and rate mask can be different | 2117 | /* The list of supported rates and rate mask can be different |
2115 | * for each band; since the band may have changed, reset | 2118 | * for each band; since the band may have changed, reset |
diff --git a/drivers/net/wireless/iwlwifi/iwl-core.h b/drivers/net/wireless/iwlwifi/iwl-core.h index cdcb51d8bc21..15930e064022 100644 --- a/drivers/net/wireless/iwlwifi/iwl-core.h +++ b/drivers/net/wireless/iwlwifi/iwl-core.h | |||
@@ -196,6 +196,7 @@ struct iwl_lib_ops { | |||
196 | /* station management */ | 196 | /* station management */ |
197 | int (*manage_ibss_station)(struct iwl_priv *priv, | 197 | int (*manage_ibss_station)(struct iwl_priv *priv, |
198 | struct ieee80211_vif *vif, bool add); | 198 | struct ieee80211_vif *vif, bool add); |
199 | int (*update_bcast_station)(struct iwl_priv *priv); | ||
199 | /* recover from tx queue stall */ | 200 | /* recover from tx queue stall */ |
200 | void (*recover_from_tx_stall)(unsigned long data); | 201 | void (*recover_from_tx_stall)(unsigned long data); |
201 | /* check for plcp health */ | 202 | /* check for plcp health */ |
diff --git a/drivers/net/wireless/iwlwifi/iwl-sta.c b/drivers/net/wireless/iwlwifi/iwl-sta.c index 6a9cd08bd449..9511f03f07e0 100644 --- a/drivers/net/wireless/iwlwifi/iwl-sta.c +++ b/drivers/net/wireless/iwlwifi/iwl-sta.c | |||
@@ -1259,6 +1259,36 @@ int iwl_alloc_bcast_station(struct iwl_priv *priv, bool init_lq) | |||
1259 | } | 1259 | } |
1260 | EXPORT_SYMBOL_GPL(iwl_alloc_bcast_station); | 1260 | EXPORT_SYMBOL_GPL(iwl_alloc_bcast_station); |
1261 | 1261 | ||
1262 | /** | ||
1263 | * iwl_update_bcast_station - update broadcast station's LQ command | ||
1264 | * | ||
1265 | * Only used by iwlagn. Placed here to have all bcast station management | ||
1266 | * code together. | ||
1267 | */ | ||
1268 | int iwl_update_bcast_station(struct iwl_priv *priv) | ||
1269 | { | ||
1270 | unsigned long flags; | ||
1271 | struct iwl_link_quality_cmd *link_cmd; | ||
1272 | u8 sta_id = priv->hw_params.bcast_sta_id; | ||
1273 | |||
1274 | link_cmd = iwl_sta_alloc_lq(priv, sta_id); | ||
1275 | if (!link_cmd) { | ||
1276 | IWL_ERR(priv, "Unable to initialize rate scaling for bcast station.\n"); | ||
1277 | return -ENOMEM; | ||
1278 | } | ||
1279 | |||
1280 | spin_lock_irqsave(&priv->sta_lock, flags); | ||
1281 | if (priv->stations[sta_id].lq) | ||
1282 | kfree(priv->stations[sta_id].lq); | ||
1283 | else | ||
1284 | IWL_DEBUG_INFO(priv, "Bcast station rate scaling has not been initialized yet.\n"); | ||
1285 | priv->stations[sta_id].lq = link_cmd; | ||
1286 | spin_unlock_irqrestore(&priv->sta_lock, flags); | ||
1287 | |||
1288 | return 0; | ||
1289 | } | ||
1290 | EXPORT_SYMBOL_GPL(iwl_update_bcast_station); | ||
1291 | |||
1262 | void iwl_dealloc_bcast_station(struct iwl_priv *priv) | 1292 | void iwl_dealloc_bcast_station(struct iwl_priv *priv) |
1263 | { | 1293 | { |
1264 | unsigned long flags; | 1294 | unsigned long flags; |
diff --git a/drivers/net/wireless/iwlwifi/iwl-sta.h b/drivers/net/wireless/iwlwifi/iwl-sta.h index 619bb99d85cf..ba95b1a590a5 100644 --- a/drivers/net/wireless/iwlwifi/iwl-sta.h +++ b/drivers/net/wireless/iwlwifi/iwl-sta.h | |||
@@ -60,6 +60,7 @@ void iwl_restore_stations(struct iwl_priv *priv); | |||
60 | void iwl_clear_ucode_stations(struct iwl_priv *priv); | 60 | void iwl_clear_ucode_stations(struct iwl_priv *priv); |
61 | int iwl_alloc_bcast_station(struct iwl_priv *priv, bool init_lq); | 61 | int iwl_alloc_bcast_station(struct iwl_priv *priv, bool init_lq); |
62 | void iwl_dealloc_bcast_station(struct iwl_priv *priv); | 62 | void iwl_dealloc_bcast_station(struct iwl_priv *priv); |
63 | int iwl_update_bcast_station(struct iwl_priv *priv); | ||
63 | int iwl_get_free_ucode_key_index(struct iwl_priv *priv); | 64 | int iwl_get_free_ucode_key_index(struct iwl_priv *priv); |
64 | int iwl_send_add_sta(struct iwl_priv *priv, | 65 | int iwl_send_add_sta(struct iwl_priv *priv, |
65 | struct iwl_addsta_cmd *sta, u8 flags); | 66 | struct iwl_addsta_cmd *sta, u8 flags); |