Commit b9ad70da authored by Johannes Berg's avatar Johannes Berg Committed by John W. Linville

iwlwifi: put use_rts_for_aggregation into hw_params

The hardware config ht_params shouldn't be modified,
so copy the use_rts_for_aggregation parameter into
hw_params and use/modify it there.
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
Signed-off-by: default avatarWey-Yi Guy <wey-yi.w.guy@intel.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent e7a09438
...@@ -436,8 +436,7 @@ int iwlagn_commit_rxon(struct iwl_priv *priv, struct iwl_rxon_context *ctx) ...@@ -436,8 +436,7 @@ int iwlagn_commit_rxon(struct iwl_priv *priv, struct iwl_rxon_context *ctx)
* force CTS-to-self frames protection if RTS-CTS is not preferred * force CTS-to-self frames protection if RTS-CTS is not preferred
* one aggregation protection method * one aggregation protection method
*/ */
if (!(cfg(priv)->ht_params && if (!hw_params(priv).use_rts_for_aggregation)
cfg(priv)->ht_params->use_rts_for_aggregation))
ctx->staging.flags |= RXON_FLG_SELF_CTS_EN; ctx->staging.flags |= RXON_FLG_SELF_CTS_EN;
if ((ctx->vif && ctx->vif->bss_conf.use_short_slot) || if ((ctx->vif && ctx->vif->bss_conf.use_short_slot) ||
......
...@@ -594,8 +594,7 @@ int iwlagn_tx_agg_oper(struct iwl_priv *priv, struct ieee80211_vif *vif, ...@@ -594,8 +594,7 @@ int iwlagn_tx_agg_oper(struct iwl_priv *priv, struct ieee80211_vif *vif,
sta_priv->max_agg_bufsize = sta_priv->max_agg_bufsize =
min(sta_priv->max_agg_bufsize, buf_size); min(sta_priv->max_agg_bufsize, buf_size);
if (cfg(priv)->ht_params && if (hw_params(priv).use_rts_for_aggregation) {
cfg(priv)->ht_params->use_rts_for_aggregation) {
/* /*
* switch to RTS/CTS if it is the prefer protection * switch to RTS/CTS if it is the prefer protection
* method for HT traffic * method for HT traffic
......
...@@ -1119,6 +1119,10 @@ static void iwl_uninit_drv(struct iwl_priv *priv) ...@@ -1119,6 +1119,10 @@ static void iwl_uninit_drv(struct iwl_priv *priv)
static void iwl_set_hw_params(struct iwl_priv *priv) static void iwl_set_hw_params(struct iwl_priv *priv)
{ {
if (cfg(priv)->ht_params)
hw_params(priv).use_rts_for_aggregation =
cfg(priv)->ht_params->use_rts_for_aggregation;
if (iwlagn_mod_params.amsdu_size_8K) if (iwlagn_mod_params.amsdu_size_8K)
hw_params(priv).rx_page_order = hw_params(priv).rx_page_order =
get_order(IWL_RX_BUF_SIZE_8K); get_order(IWL_RX_BUF_SIZE_8K);
......
...@@ -2431,7 +2431,7 @@ static ssize_t iwl_dbgfs_protection_mode_read(struct file *file, ...@@ -2431,7 +2431,7 @@ static ssize_t iwl_dbgfs_protection_mode_read(struct file *file,
if (cfg(priv)->ht_params) if (cfg(priv)->ht_params)
pos += scnprintf(buf + pos, bufsz - pos, pos += scnprintf(buf + pos, bufsz - pos,
"use %s for aggregation\n", "use %s for aggregation\n",
(cfg(priv)->ht_params->use_rts_for_aggregation) ? (hw_params(priv).use_rts_for_aggregation) ?
"rts/cts" : "cts-to-self"); "rts/cts" : "cts-to-self");
else else
pos += scnprintf(buf + pos, bufsz - pos, "N/A"); pos += scnprintf(buf + pos, bufsz - pos, "N/A");
...@@ -2458,9 +2458,9 @@ static ssize_t iwl_dbgfs_protection_mode_write(struct file *file, ...@@ -2458,9 +2458,9 @@ static ssize_t iwl_dbgfs_protection_mode_write(struct file *file,
if (sscanf(buf, "%d", &rts) != 1) if (sscanf(buf, "%d", &rts) != 1)
return -EINVAL; return -EINVAL;
if (rts) if (rts)
cfg(priv)->ht_params->use_rts_for_aggregation = true; hw_params(priv).use_rts_for_aggregation = true;
else else
cfg(priv)->ht_params->use_rts_for_aggregation = false; hw_params(priv).use_rts_for_aggregation = false;
return count; return count;
} }
......
...@@ -660,8 +660,8 @@ static int iwlagn_mac_ampdu_action(struct ieee80211_hw *hw, ...@@ -660,8 +660,8 @@ static int iwlagn_mac_ampdu_action(struct ieee80211_hw *hw,
IWL_DEBUG_HT(priv, "priv->agg_tids_count = %u\n", IWL_DEBUG_HT(priv, "priv->agg_tids_count = %u\n",
priv->agg_tids_count); priv->agg_tids_count);
} }
if (!priv->agg_tids_count && cfg(priv)->ht_params && if (!priv->agg_tids_count &&
cfg(priv)->ht_params->use_rts_for_aggregation) { hw_params(priv).use_rts_for_aggregation) {
/* /*
* switch off RTS/CTS if it was previously enabled * switch off RTS/CTS if it was previously enabled
*/ */
......
...@@ -174,6 +174,7 @@ struct iwl_mod_params { ...@@ -174,6 +174,7 @@ struct iwl_mod_params {
* relevant for 1000, 6000 and up * relevant for 1000, 6000 and up
* @wd_timeout: TX queues watchdog timeout * @wd_timeout: TX queues watchdog timeout
* @struct iwl_sensitivity_ranges: range of sensitivity values * @struct iwl_sensitivity_ranges: range of sensitivity values
* @use_rts_for_aggregation: use rts/cts protection for HT traffic
*/ */
struct iwl_hw_params { struct iwl_hw_params {
u8 max_txq_num; u8 max_txq_num;
...@@ -183,6 +184,7 @@ struct iwl_hw_params { ...@@ -183,6 +184,7 @@ struct iwl_hw_params {
u8 valid_tx_ant; u8 valid_tx_ant;
u8 valid_rx_ant; u8 valid_rx_ant;
u8 ht40_channel; u8 ht40_channel;
bool use_rts_for_aggregation;
u16 sku; u16 sku;
u32 rx_page_order; u32 rx_page_order;
u32 ct_kill_threshold; u32 ct_kill_threshold;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment