|
@@ -235,7 +235,8 @@ static void rc_send_low_basicrate(s8 *idx, u32 basic_rates,
|
|
|
static void __rate_control_send_low(struct ieee80211_hw *hw,
|
|
|
struct ieee80211_supported_band *sband,
|
|
|
struct ieee80211_sta *sta,
|
|
|
- struct ieee80211_tx_info *info)
|
|
|
+ struct ieee80211_tx_info *info,
|
|
|
+ u32 rate_mask)
|
|
|
{
|
|
|
int i;
|
|
|
u32 rate_flags =
|
|
@@ -247,6 +248,9 @@ static void __rate_control_send_low(struct ieee80211_hw *hw,
|
|
|
|
|
|
info->control.rates[0].idx = 0;
|
|
|
for (i = 0; i < sband->n_bitrates; i++) {
|
|
|
+ if (!(rate_mask & BIT(i)))
|
|
|
+ continue;
|
|
|
+
|
|
|
if ((rate_flags & sband->bitrates[i].flags) != rate_flags)
|
|
|
continue;
|
|
|
|
|
@@ -277,7 +281,8 @@ bool rate_control_send_low(struct ieee80211_sta *pubsta,
|
|
|
bool use_basicrate = false;
|
|
|
|
|
|
if (!pubsta || !priv_sta || rc_no_data_or_no_ack_use_min(txrc)) {
|
|
|
- __rate_control_send_low(txrc->hw, sband, pubsta, info);
|
|
|
+ __rate_control_send_low(txrc->hw, sband, pubsta, info,
|
|
|
+ txrc->rate_idx_mask);
|
|
|
|
|
|
if (!pubsta && txrc->bss) {
|
|
|
mcast_rate = txrc->bss_conf->mcast_rate[sband->band];
|
|
@@ -659,7 +664,8 @@ void ieee80211_get_tx_rates(struct ieee80211_vif *vif,
|
|
|
rate_control_apply_mask(sdata, sta, sband, info, dest, max_rates);
|
|
|
|
|
|
if (dest[0].idx < 0)
|
|
|
- __rate_control_send_low(&sdata->local->hw, sband, sta, info);
|
|
|
+ __rate_control_send_low(&sdata->local->hw, sband, sta, info,
|
|
|
+ sdata->rc_rateidx_mask[info->band]);
|
|
|
|
|
|
if (sta)
|
|
|
rate_fixup_ratelist(vif, sband, info, dest, max_rates);
|