|
@@ -281,7 +281,8 @@ minstrel_ht_get_stats(struct minstrel_priv *mp, struct minstrel_ht_sta *mi,
|
|
|
break;
|
|
|
|
|
|
/* short preamble */
|
|
|
- if (!(mi->supported[group] & BIT(idx)))
|
|
|
+ if ((mi->supported[group] & BIT(idx + 4)) &&
|
|
|
+ (rate->flags & IEEE80211_TX_RC_USE_SHORT_PREAMBLE))
|
|
|
idx += 4;
|
|
|
}
|
|
|
return &mi->groups[group].rates[idx];
|
|
@@ -1080,18 +1081,23 @@ minstrel_ht_get_rate(void *priv, struct ieee80211_sta *sta, void *priv_sta,
|
|
|
return;
|
|
|
|
|
|
sample_group = &minstrel_mcs_groups[sample_idx / MCS_GROUP_RATES];
|
|
|
+ sample_idx %= MCS_GROUP_RATES;
|
|
|
+
|
|
|
+ if (sample_group == &minstrel_mcs_groups[MINSTREL_CCK_GROUP] &&
|
|
|
+ (sample_idx >= 4) != txrc->short_preamble)
|
|
|
+ return;
|
|
|
+
|
|
|
info->flags |= IEEE80211_TX_CTL_RATE_CTRL_PROBE;
|
|
|
rate->count = 1;
|
|
|
|
|
|
- if (sample_idx / MCS_GROUP_RATES == MINSTREL_CCK_GROUP) {
|
|
|
+ if (sample_group == &minstrel_mcs_groups[MINSTREL_CCK_GROUP]) {
|
|
|
int idx = sample_idx % ARRAY_SIZE(mp->cck_rates);
|
|
|
rate->idx = mp->cck_rates[idx];
|
|
|
} else if (sample_group->flags & IEEE80211_TX_RC_VHT_MCS) {
|
|
|
ieee80211_rate_set_vht(rate, sample_idx % MCS_GROUP_RATES,
|
|
|
sample_group->streams);
|
|
|
} else {
|
|
|
- rate->idx = sample_idx % MCS_GROUP_RATES +
|
|
|
- (sample_group->streams - 1) * 8;
|
|
|
+ rate->idx = sample_idx + (sample_group->streams - 1) * 8;
|
|
|
}
|
|
|
|
|
|
rate->flags = sample_group->flags;
|