aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211/rate.c
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2013-04-16 07:38:42 -0400
committerJohannes Berg <johannes.berg@intel.com>2013-04-16 17:42:29 -0400
commit2ffbe6d333664a089f17b13aa79eefe38f794bb7 (patch)
tree29927d762aff0f9d8a8eea57784fb0067fb58ca7 /net/mac80211/rate.c
parentdad6330d034a24a22008ee28b8ec447cbb0961c9 (diff)
mac80211: fix and optimize MCS mask handling
Currently the code always copies the configured MCS mask (even if it is set to default), but only uses it if legacy rates were also masked out. Fix this by adding a flag that tracks whether the configured MCS mask is set to default or not. Optimize the code further by storing a pointer to the configured rate mask in txrc instead of using memcpy. Signed-off-by: Felix Fietkau <nbd@openwrt.org> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net/mac80211/rate.c')
-rw-r--r--net/mac80211/rate.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/net/mac80211/rate.c b/net/mac80211/rate.c
index dd88381c53b7..5d545dd2d050 100644
--- a/net/mac80211/rate.c
+++ b/net/mac80211/rate.c
@@ -460,9 +460,12 @@ void rate_control_get_rate(struct ieee80211_sub_if_data *sdata,
460 * the common case. 460 * the common case.
461 */ 461 */
462 mask = sdata->rc_rateidx_mask[info->band]; 462 mask = sdata->rc_rateidx_mask[info->band];
463 memcpy(mcs_mask, sdata->rc_rateidx_mcs_mask[info->band], 463 if (mask != (1 << txrc->sband->n_bitrates) - 1 || txrc->rate_idx_mcs_mask) {
464 sizeof(mcs_mask)); 464 if (txrc->rate_idx_mcs_mask)
465 if (mask != (1 << txrc->sband->n_bitrates) - 1) { 465 memcpy(mcs_mask, txrc->rate_idx_mcs_mask, sizeof(mcs_mask));
466 else
467 memset(mcs_mask, 0xff, sizeof(mcs_mask));
468
466 if (sta) { 469 if (sta) {
467 /* Filter out rates that the STA does not support */ 470 /* Filter out rates that the STA does not support */
468 mask &= sta->sta.supp_rates[info->band]; 471 mask &= sta->sta.supp_rates[info->band];