mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-26 21:54:11 +08:00
mac80211: always pick a basic rate to tx RTS/CTS for pre-HT rates
When the 1st rate control entry is a pre-HT rate we want to set rts_cts_rate_idx "as the fastest basic rate that is not faster than the data rate"(code comments). But in case some bss allowed rate indexes are lower than the lowest bss basic rate, if the rate control selects a rate among the formers for its 1st rate control entry, rts_cts_rate_idx remains 0 and is not a basic rate index. This commit sets rts_cts_rate_idx to the lowest bss basic rate index in this situation. Note that the code assumes that lowest indexes == lowest bitrates. Signed-off-by: Karl Beldan <karl.beldan@rivierawaves.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
2419ea14bb
commit
5253ffb8c9
@ -712,19 +712,22 @@ ieee80211_tx_h_rate_ctrl(struct ieee80211_tx_data *tx)
|
||||
}
|
||||
|
||||
/*
|
||||
* set up the RTS/CTS rate as the fastest basic rate
|
||||
* that is not faster than the data rate
|
||||
* Set up the RTS/CTS rate as the fastest basic rate
|
||||
* that is not faster than the data rate unless there
|
||||
* is no basic rate slower than the data rate, in which
|
||||
* case we pick the slowest basic rate
|
||||
*
|
||||
* XXX: Should this check all retry rates?
|
||||
*/
|
||||
if (!(info->control.rates[0].flags & IEEE80211_TX_RC_MCS)) {
|
||||
s8 baserate = 0;
|
||||
u32 basic_rates = tx->sdata->vif.bss_conf.basic_rates;
|
||||
s8 baserate = basic_rates ? ffs(basic_rates - 1) : 0;
|
||||
|
||||
rate = &sband->bitrates[info->control.rates[0].idx];
|
||||
|
||||
for (i = 0; i < sband->n_bitrates; i++) {
|
||||
/* must be a basic rate */
|
||||
if (!(tx->sdata->vif.bss_conf.basic_rates & BIT(i)))
|
||||
if (!(basic_rates & BIT(i)))
|
||||
continue;
|
||||
/* must not be faster than the data rate */
|
||||
if (sband->bitrates[i].bitrate > rate->bitrate)
|
||||
|
Loading…
Reference in New Issue
Block a user