--- a/net/mac80211/ieee80211_i.h
+++ b/net/mac80211/ieee80211_i.h
-@@ -726,6 +726,8 @@ struct ieee80211_sub_if_data {
+@@ -715,6 +715,8 @@ struct ieee80211_sub_if_data {
/* bitmap of allowed (non-MCS) rate indexes for rate control */
u32 rc_rateidx_mask[IEEE80211_NUM_BANDS];
union {
--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
-@@ -1914,9 +1914,20 @@ static int ieee80211_set_bitrate_mask(st
+@@ -2160,9 +2160,20 @@ static int ieee80211_set_bitrate_mask(st
}
for (i = 0; i < IEEE80211_NUM_BANDS; i++) {
return 0;
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
-@@ -3645,7 +3645,7 @@ void ieee80211_send_bar(struct ieee80211
+@@ -3721,7 +3721,7 @@ void ieee80211_send_bar(struct ieee80211
* (deprecated; this will be removed once drivers get updated to use
* rate_idx_mask)
* @rate_idx_mask: user-requested (legacy) rate mask
* @bss: whether this frame is sent out in AP or IBSS mode
*/
struct ieee80211_tx_rate_control {
-@@ -3657,7 +3657,7 @@ struct ieee80211_tx_rate_control {
+@@ -3733,7 +3733,7 @@ struct ieee80211_tx_rate_control {
bool rts, short_preamble;
u8 max_rate_idx;
u32 rate_idx_mask;
--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
-@@ -642,9 +642,11 @@ ieee80211_tx_h_rate_ctrl(struct ieee8021
+@@ -631,9 +631,11 @@ ieee80211_tx_h_rate_ctrl(struct ieee8021
txrc.max_rate_idx = -1;
else
txrc.max_rate_idx = fls(txrc.rate_idx_mask) - 1;
- memcpy(txrc.rate_idx_mcs_mask,
-- tx->sdata->rc_rateidx_mcs_mask[tx->channel->band],
+- tx->sdata->rc_rateidx_mcs_mask[info->band],
- sizeof(txrc.rate_idx_mcs_mask));
+
-+ if (tx->sdata->rc_has_mcs_mask[tx->channel->band])
++ if (tx->sdata->rc_has_mcs_mask[info->band])
+ txrc.rate_idx_mcs_mask =
-+ tx->sdata->rc_rateidx_mcs_mask[tx->channel->band];
++ tx->sdata->rc_rateidx_mcs_mask[info->band];
+
txrc.bss = (tx->sdata->vif.type == NL80211_IFTYPE_AP ||
tx->sdata->vif.type == NL80211_IFTYPE_MESH_POINT ||
tx->sdata->vif.type == NL80211_IFTYPE_ADHOC);
-@@ -2479,8 +2481,6 @@ struct sk_buff *ieee80211_beacon_get_tim
+@@ -2452,8 +2454,6 @@ struct sk_buff *ieee80211_beacon_get_tim
txrc.max_rate_idx = -1;
else
txrc.max_rate_idx = fls(txrc.rate_idx_mask) - 1;