diff options
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-6000.c | 5 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn-rs.c | 9 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn.c | 10 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-core.h | 4 |
4 files changed, 24 insertions, 4 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-6000.c b/drivers/net/wireless/iwlwifi/iwl-6000.c index 48b2b7d2170c..a9665ce1d658 100644 --- a/drivers/net/wireless/iwlwifi/iwl-6000.c +++ b/drivers/net/wireless/iwlwifi/iwl-6000.c | |||
@@ -259,6 +259,7 @@ struct iwl_cfg iwl6000h_2agn_cfg = { | |||
259 | .shadow_ram_support = true, | 259 | .shadow_ram_support = true, |
260 | .ht_greenfield_support = true, | 260 | .ht_greenfield_support = true, |
261 | .led_compensation = 51, | 261 | .led_compensation = 51, |
262 | .use_rts_for_ht = true, /* use rts/cts protection */ | ||
262 | }; | 263 | }; |
263 | 264 | ||
264 | /* | 265 | /* |
@@ -283,6 +284,7 @@ struct iwl_cfg iwl6000i_2agn_cfg = { | |||
283 | .shadow_ram_support = true, | 284 | .shadow_ram_support = true, |
284 | .ht_greenfield_support = true, | 285 | .ht_greenfield_support = true, |
285 | .led_compensation = 51, | 286 | .led_compensation = 51, |
287 | .use_rts_for_ht = true, /* use rts/cts protection */ | ||
286 | }; | 288 | }; |
287 | 289 | ||
288 | struct iwl_cfg iwl6050_2agn_cfg = { | 290 | struct iwl_cfg iwl6050_2agn_cfg = { |
@@ -304,6 +306,7 @@ struct iwl_cfg iwl6050_2agn_cfg = { | |||
304 | .shadow_ram_support = true, | 306 | .shadow_ram_support = true, |
305 | .ht_greenfield_support = true, | 307 | .ht_greenfield_support = true, |
306 | .led_compensation = 51, | 308 | .led_compensation = 51, |
309 | .use_rts_for_ht = true, /* use rts/cts protection */ | ||
307 | }; | 310 | }; |
308 | 311 | ||
309 | struct iwl_cfg iwl6000_3agn_cfg = { | 312 | struct iwl_cfg iwl6000_3agn_cfg = { |
@@ -325,6 +328,7 @@ struct iwl_cfg iwl6000_3agn_cfg = { | |||
325 | .shadow_ram_support = true, | 328 | .shadow_ram_support = true, |
326 | .ht_greenfield_support = true, | 329 | .ht_greenfield_support = true, |
327 | .led_compensation = 51, | 330 | .led_compensation = 51, |
331 | .use_rts_for_ht = true, /* use rts/cts protection */ | ||
328 | }; | 332 | }; |
329 | 333 | ||
330 | struct iwl_cfg iwl6050_3agn_cfg = { | 334 | struct iwl_cfg iwl6050_3agn_cfg = { |
@@ -346,6 +350,7 @@ struct iwl_cfg iwl6050_3agn_cfg = { | |||
346 | .shadow_ram_support = true, | 350 | .shadow_ram_support = true, |
347 | .ht_greenfield_support = true, | 351 | .ht_greenfield_support = true, |
348 | .led_compensation = 51, | 352 | .led_compensation = 51, |
353 | .use_rts_for_ht = true, /* use rts/cts protection */ | ||
349 | }; | 354 | }; |
350 | 355 | ||
351 | MODULE_FIRMWARE(IWL6000_MODULE_FIRMWARE(IWL6000_UCODE_API_MAX)); | 356 | MODULE_FIRMWARE(IWL6000_MODULE_FIRMWARE(IWL6000_UCODE_API_MAX)); |
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-rs.c b/drivers/net/wireless/iwlwifi/iwl-agn-rs.c index 18af37c964cb..469d56321d88 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn-rs.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn-rs.c | |||
@@ -418,6 +418,15 @@ static void rs_tl_turn_on_agg(struct iwl_priv *priv, u8 tid, | |||
418 | else if (tid == IWL_AGG_ALL_TID) | 418 | else if (tid == IWL_AGG_ALL_TID) |
419 | for (tid = 0; tid < TID_MAX_LOAD_COUNT; tid++) | 419 | for (tid = 0; tid < TID_MAX_LOAD_COUNT; tid++) |
420 | rs_tl_turn_on_agg_for_tid(priv, lq_data, tid, sta); | 420 | rs_tl_turn_on_agg_for_tid(priv, lq_data, tid, sta); |
421 | if (priv->cfg->use_rts_for_ht) { | ||
422 | /* | ||
423 | * switch to RTS/CTS if it is the prefer protection method | ||
424 | * for HT traffic | ||
425 | */ | ||
426 | IWL_DEBUG_HT(priv, "use RTS/CTS protection for HT\n"); | ||
427 | priv->staging_rxon.flags &= ~RXON_FLG_SELF_CTS_EN; | ||
428 | iwlcore_commit_rxon(priv); | ||
429 | } | ||
421 | } | 430 | } |
422 | 431 | ||
423 | static inline int get_num_of_ant_from_rate(u32 rate_n_flags) | 432 | static inline int get_num_of_ant_from_rate(u32 rate_n_flags) |
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c index cdc07c477457..a3739628c1d6 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn.c | |||
@@ -115,9 +115,6 @@ int iwl_commit_rxon(struct iwl_priv *priv) | |||
115 | 115 | ||
116 | /* always get timestamp with Rx frame */ | 116 | /* always get timestamp with Rx frame */ |
117 | priv->staging_rxon.flags |= RXON_FLG_TSF2HOST_MSK; | 117 | priv->staging_rxon.flags |= RXON_FLG_TSF2HOST_MSK; |
118 | /* allow CTS-to-self if possible. this is relevant only for | ||
119 | * 5000, but will not damage 4965 */ | ||
120 | priv->staging_rxon.flags |= RXON_FLG_SELF_CTS_EN; | ||
121 | 118 | ||
122 | ret = iwl_check_rxon_cmd(priv); | 119 | ret = iwl_check_rxon_cmd(priv); |
123 | if (ret) { | 120 | if (ret) { |
@@ -217,6 +214,13 @@ int iwl_commit_rxon(struct iwl_priv *priv) | |||
217 | "Could not send WEP static key.\n"); | 214 | "Could not send WEP static key.\n"); |
218 | } | 215 | } |
219 | 216 | ||
217 | /* | ||
218 | * allow CTS-to-self if possible for new association. | ||
219 | * this is relevant only for 5000 series and up, | ||
220 | * but will not damage 4965 | ||
221 | */ | ||
222 | priv->staging_rxon.flags |= RXON_FLG_SELF_CTS_EN; | ||
223 | |||
220 | /* Apply the new configuration | 224 | /* Apply the new configuration |
221 | * RXON assoc doesn't clear the station table in uCode, | 225 | * RXON assoc doesn't clear the station table in uCode, |
222 | */ | 226 | */ |
diff --git a/drivers/net/wireless/iwlwifi/iwl-core.h b/drivers/net/wireless/iwlwifi/iwl-core.h index a2ee95028c6e..c7675c387140 100644 --- a/drivers/net/wireless/iwlwifi/iwl-core.h +++ b/drivers/net/wireless/iwlwifi/iwl-core.h | |||
@@ -216,6 +216,7 @@ struct iwl_mod_params { | |||
216 | * @led_compensation: compensate on the led on/off time per HW according | 216 | * @led_compensation: compensate on the led on/off time per HW according |
217 | * to the deviation to achieve the desired led frequency. | 217 | * to the deviation to achieve the desired led frequency. |
218 | * The detail algorithm is described in iwl-led.c | 218 | * The detail algorithm is described in iwl-led.c |
219 | * @use_rts_for_ht: use rts/cts protection for HT traffic | ||
219 | * | 220 | * |
220 | * We enable the driver to be backward compatible wrt API version. The | 221 | * We enable the driver to be backward compatible wrt API version. The |
221 | * driver specifies which APIs it supports (with @ucode_api_max being the | 222 | * driver specifies which APIs it supports (with @ucode_api_max being the |
@@ -257,8 +258,9 @@ struct iwl_cfg { | |||
257 | const u16 max_ll_items; | 258 | const u16 max_ll_items; |
258 | const bool shadow_ram_support; | 259 | const bool shadow_ram_support; |
259 | const bool ht_greenfield_support; | 260 | const bool ht_greenfield_support; |
260 | const bool broken_powersave; | ||
261 | u16 led_compensation; | 261 | u16 led_compensation; |
262 | const bool broken_powersave; | ||
263 | bool use_rts_for_ht; | ||
262 | }; | 264 | }; |
263 | 265 | ||
264 | /*************************** | 266 | /*************************** |