diff options
author | Matti Gottlieb <matti.gottlieb@intel.com> | 2016-05-17 03:50:08 -0400 |
---|---|---|
committer | Luca Coelho <luciano.coelho@intel.com> | 2016-07-05 18:18:06 -0400 |
commit | ff7a68d0e7a7da411d0f87f57dde7e276e01ac92 (patch) | |
tree | 733c1ed6ac7a6556b53e49daca00d8a1a5a52dfb /drivers/net/wireless/intel/iwlwifi/mvm/rs.c | |
parent | d7fdd0e528c5184fd22153a317683549f0c58a19 (diff) |
iwlwifi: mvm: Do not open aggregations for null data packets
Currently we try to open an aggregation for every packet (given that one
is not already open).
This causes redundant overhead (addba/delba) for null data packets.
Do not open an aggregation for null data packets.
Signed-off-by: Matti Gottlieb <matti.gottlieb@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
Diffstat (limited to 'drivers/net/wireless/intel/iwlwifi/mvm/rs.c')
-rw-r--r-- | drivers/net/wireless/intel/iwlwifi/mvm/rs.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/rs.c b/drivers/net/wireless/intel/iwlwifi/mvm/rs.c index 81dd2f6a48a5..7aecf46e2ab8 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/rs.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/rs.c | |||
@@ -399,7 +399,7 @@ static int iwl_hwrate_to_plcp_idx(u32 rate_n_flags) | |||
399 | static void rs_rate_scale_perform(struct iwl_mvm *mvm, | 399 | static void rs_rate_scale_perform(struct iwl_mvm *mvm, |
400 | struct ieee80211_sta *sta, | 400 | struct ieee80211_sta *sta, |
401 | struct iwl_lq_sta *lq_sta, | 401 | struct iwl_lq_sta *lq_sta, |
402 | int tid); | 402 | int tid, bool ndp); |
403 | static void rs_fill_lq_cmd(struct iwl_mvm *mvm, | 403 | static void rs_fill_lq_cmd(struct iwl_mvm *mvm, |
404 | struct ieee80211_sta *sta, | 404 | struct ieee80211_sta *sta, |
405 | struct iwl_lq_sta *lq_sta, | 405 | struct iwl_lq_sta *lq_sta, |
@@ -1161,7 +1161,7 @@ static u8 rs_get_tid(struct ieee80211_hdr *hdr) | |||
1161 | } | 1161 | } |
1162 | 1162 | ||
1163 | void iwl_mvm_rs_tx_status(struct iwl_mvm *mvm, struct ieee80211_sta *sta, | 1163 | void iwl_mvm_rs_tx_status(struct iwl_mvm *mvm, struct ieee80211_sta *sta, |
1164 | int tid, struct ieee80211_tx_info *info) | 1164 | int tid, struct ieee80211_tx_info *info, bool ndp) |
1165 | { | 1165 | { |
1166 | int legacy_success; | 1166 | int legacy_success; |
1167 | int retries; | 1167 | int retries; |
@@ -1384,7 +1384,7 @@ void iwl_mvm_rs_tx_status(struct iwl_mvm *mvm, struct ieee80211_sta *sta, | |||
1384 | done: | 1384 | done: |
1385 | /* See if there's a better rate or modulation mode to try. */ | 1385 | /* See if there's a better rate or modulation mode to try. */ |
1386 | if (sta->supp_rates[info->band]) | 1386 | if (sta->supp_rates[info->band]) |
1387 | rs_rate_scale_perform(mvm, sta, lq_sta, tid); | 1387 | rs_rate_scale_perform(mvm, sta, lq_sta, tid, ndp); |
1388 | } | 1388 | } |
1389 | 1389 | ||
1390 | /* | 1390 | /* |
@@ -1407,7 +1407,8 @@ static void rs_mac80211_tx_status(void *mvm_r, | |||
1407 | info->flags & IEEE80211_TX_CTL_NO_ACK) | 1407 | info->flags & IEEE80211_TX_CTL_NO_ACK) |
1408 | return; | 1408 | return; |
1409 | 1409 | ||
1410 | iwl_mvm_rs_tx_status(mvm, sta, rs_get_tid(hdr), info); | 1410 | iwl_mvm_rs_tx_status(mvm, sta, rs_get_tid(hdr), info, |
1411 | ieee80211_is_qos_nullfunc(hdr->frame_control)); | ||
1411 | } | 1412 | } |
1412 | 1413 | ||
1413 | /* | 1414 | /* |
@@ -2213,7 +2214,7 @@ static bool rs_tpc_perform(struct iwl_mvm *mvm, | |||
2213 | static void rs_rate_scale_perform(struct iwl_mvm *mvm, | 2214 | static void rs_rate_scale_perform(struct iwl_mvm *mvm, |
2214 | struct ieee80211_sta *sta, | 2215 | struct ieee80211_sta *sta, |
2215 | struct iwl_lq_sta *lq_sta, | 2216 | struct iwl_lq_sta *lq_sta, |
2216 | int tid) | 2217 | int tid, bool ndp) |
2217 | { | 2218 | { |
2218 | int low = IWL_RATE_INVALID; | 2219 | int low = IWL_RATE_INVALID; |
2219 | int high = IWL_RATE_INVALID; | 2220 | int high = IWL_RATE_INVALID; |
@@ -2512,7 +2513,7 @@ lq_update: | |||
2512 | (lq_sta->tx_agg_tid_en & (1 << tid)) && | 2513 | (lq_sta->tx_agg_tid_en & (1 << tid)) && |
2513 | (tid != IWL_MAX_TID_COUNT)) { | 2514 | (tid != IWL_MAX_TID_COUNT)) { |
2514 | tid_data = &sta_priv->tid_data[tid]; | 2515 | tid_data = &sta_priv->tid_data[tid]; |
2515 | if (tid_data->state == IWL_AGG_OFF) { | 2516 | if (tid_data->state == IWL_AGG_OFF && !ndp) { |
2516 | IWL_DEBUG_RATE(mvm, | 2517 | IWL_DEBUG_RATE(mvm, |
2517 | "try to aggregate tid %d\n", | 2518 | "try to aggregate tid %d\n", |
2518 | tid); | 2519 | tid); |