diff options
author | Felix Fietkau <nbd@openwrt.org> | 2013-04-16 13:38:42 +0200 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2013-04-16 23:42:29 +0200 |
commit | 2ffbe6d333664a089f17b13aa79eefe38f794bb7 (patch) | |
tree | 29927d762aff0f9d8a8eea57784fb0067fb58ca7 /net/mac80211/cfg.c | |
parent | dad6330d034a24a22008ee28b8ec447cbb0961c9 (diff) | |
download | lwn-2ffbe6d333664a089f17b13aa79eefe38f794bb7.tar.gz lwn-2ffbe6d333664a089f17b13aa79eefe38f794bb7.zip |
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/cfg.c')
-rw-r--r-- | net/mac80211/cfg.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c index fdd95bd751a1..72ab1c0e3ca7 100644 --- a/net/mac80211/cfg.c +++ b/net/mac80211/cfg.c @@ -2417,9 +2417,22 @@ static int ieee80211_set_bitrate_mask(struct wiphy *wiphy, } for (i = 0; i < IEEE80211_NUM_BANDS; i++) { + struct ieee80211_supported_band *sband = wiphy->bands[i]; + int j; + sdata->rc_rateidx_mask[i] = mask->control[i].legacy; memcpy(sdata->rc_rateidx_mcs_mask[i], mask->control[i].mcs, sizeof(mask->control[i].mcs)); + + sdata->rc_has_mcs_mask[i] = false; + if (!sband) + continue; + + for (j = 0; j < IEEE80211_HT_MCS_MASK_LEN; j++) + if (~sdata->rc_rateidx_mcs_mask[i][j]) { + sdata->rc_has_mcs_mask[i] = true; + break; + } } return 0; |