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 | 2 |
4 files changed, 23 insertions, 3 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-6000.c b/drivers/net/wireless/iwlwifi/iwl-6000.c index c295b8ee9228..1473452ba22f 100644 --- a/drivers/net/wireless/iwlwifi/iwl-6000.c +++ b/drivers/net/wireless/iwlwifi/iwl-6000.c | |||
| @@ -175,6 +175,7 @@ struct iwl_cfg iwl6000h_2agn_cfg = { | |||
| 175 | .max_ll_items = OTP_MAX_LL_ITEMS_6x00, | 175 | .max_ll_items = OTP_MAX_LL_ITEMS_6x00, |
| 176 | .shadow_ram_support = true, | 176 | .shadow_ram_support = true, |
| 177 | .ht_greenfield_support = true, | 177 | .ht_greenfield_support = true, |
| 178 | .use_rts_for_ht = true, /* use rts/cts protection */ | ||
| 178 | }; | 179 | }; |
| 179 | 180 | ||
| 180 | /* | 181 | /* |
| @@ -198,6 +199,7 @@ struct iwl_cfg iwl6000i_2agn_cfg = { | |||
| 198 | .max_ll_items = OTP_MAX_LL_ITEMS_6x00, | 199 | .max_ll_items = OTP_MAX_LL_ITEMS_6x00, |
| 199 | .shadow_ram_support = true, | 200 | .shadow_ram_support = true, |
| 200 | .ht_greenfield_support = true, | 201 | .ht_greenfield_support = true, |
| 202 | .use_rts_for_ht = true, /* use rts/cts protection */ | ||
| 201 | }; | 203 | }; |
| 202 | 204 | ||
| 203 | struct iwl_cfg iwl6050_2agn_cfg = { | 205 | struct iwl_cfg iwl6050_2agn_cfg = { |
| @@ -218,6 +220,7 @@ struct iwl_cfg iwl6050_2agn_cfg = { | |||
| 218 | .max_ll_items = OTP_MAX_LL_ITEMS_6x00, | 220 | .max_ll_items = OTP_MAX_LL_ITEMS_6x00, |
| 219 | .shadow_ram_support = true, | 221 | .shadow_ram_support = true, |
| 220 | .ht_greenfield_support = true, | 222 | .ht_greenfield_support = true, |
| 223 | .use_rts_for_ht = true, /* use rts/cts protection */ | ||
| 221 | }; | 224 | }; |
| 222 | 225 | ||
| 223 | struct iwl_cfg iwl6000_3agn_cfg = { | 226 | struct iwl_cfg iwl6000_3agn_cfg = { |
| @@ -238,6 +241,7 @@ struct iwl_cfg iwl6000_3agn_cfg = { | |||
| 238 | .max_ll_items = OTP_MAX_LL_ITEMS_6x00, | 241 | .max_ll_items = OTP_MAX_LL_ITEMS_6x00, |
| 239 | .shadow_ram_support = true, | 242 | .shadow_ram_support = true, |
| 240 | .ht_greenfield_support = true, | 243 | .ht_greenfield_support = true, |
| 244 | .use_rts_for_ht = true, /* use rts/cts protection */ | ||
| 241 | }; | 245 | }; |
| 242 | 246 | ||
| 243 | struct iwl_cfg iwl6050_3agn_cfg = { | 247 | struct iwl_cfg iwl6050_3agn_cfg = { |
| @@ -258,6 +262,7 @@ struct iwl_cfg iwl6050_3agn_cfg = { | |||
| 258 | .max_ll_items = OTP_MAX_LL_ITEMS_6x00, | 262 | .max_ll_items = OTP_MAX_LL_ITEMS_6x00, |
| 259 | .shadow_ram_support = true, | 263 | .shadow_ram_support = true, |
| 260 | .ht_greenfield_support = true, | 264 | .ht_greenfield_support = true, |
| 265 | .use_rts_for_ht = true, /* use rts/cts protection */ | ||
| 261 | }; | 266 | }; |
| 262 | 267 | ||
| 263 | MODULE_FIRMWARE(IWL6000_MODULE_FIRMWARE(IWL6000_UCODE_API_MAX)); | 268 | 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 346dc06fa7b7..81726ee32858 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 9b5ea8ba7216..877af443aac0 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 e50103a956b1..7754538c2194 100644 --- a/drivers/net/wireless/iwlwifi/iwl-core.h +++ b/drivers/net/wireless/iwlwifi/iwl-core.h | |||
| @@ -213,6 +213,7 @@ struct iwl_mod_params { | |||
| 213 | * @pa_type: used by 6000 series only to identify the type of Power Amplifier | 213 | * @pa_type: used by 6000 series only to identify the type of Power Amplifier |
| 214 | * @max_ll_items: max number of OTP blocks | 214 | * @max_ll_items: max number of OTP blocks |
| 215 | * @shadow_ram_support: shadow support for OTP memory | 215 | * @shadow_ram_support: shadow support for OTP memory |
| 216 | * @use_rts_for_ht: use rts/cts protection for HT traffic | ||
| 216 | * | 217 | * |
| 217 | * We enable the driver to be backward compatible wrt API version. The | 218 | * We enable the driver to be backward compatible wrt API version. The |
| 218 | * driver specifies which APIs it supports (with @ucode_api_max being the | 219 | * driver specifies which APIs it supports (with @ucode_api_max being the |
| @@ -255,6 +256,7 @@ struct iwl_cfg { | |||
| 255 | const bool shadow_ram_support; | 256 | const bool shadow_ram_support; |
| 256 | const bool ht_greenfield_support; | 257 | const bool ht_greenfield_support; |
| 257 | const bool broken_powersave; | 258 | const bool broken_powersave; |
| 259 | bool use_rts_for_ht; | ||
| 258 | }; | 260 | }; |
| 259 | 261 | ||
| 260 | /*************************** | 262 | /*************************** |
