mac80211: VHT off-by-one NSS
The number of VHT spatial streams (NSS) is found in: - s8 ieee80211_tx_rate.rate.idx[6:4] (tx - filled by rate control) - u8 ieee80211_rx_status.vht_nss (rx - filled by driver) Tx discriminates valid rates indexes with the sign bit and encodes NSS starting from 0 to 7 (note this matches some hw encodings e.g IWLMVM). Rx does not have the same constraints, and encodes NSS starting from 1 to 8 (note this matches what wireshark expects in the radiotap header). To handle ieee80211_tx_rate.rate.idx[6:4] ieee80211_rate_set_vht() and ieee80211_rate_get_vht_nss() assume their nss parameter and return value respectively runs from 0 to 7. ATM, there are only 2 users of these: cfg.c:sta_set_rate_info_t() and iwlwifi/mvm/tx.c:iwl_mvm_hwrate_to_tx_control(), but both assume nss runs from 1 to 8. This patch fixes this inconsistency by making ieee80211_rate_set_vht() and ieee80211_rate_get_vht_nss() handle an nss running from 1 to 8. Signed-off-by: Karl Beldan <karl.beldan@rivierawaves.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
fffa4b1c17
commit
6bc8312f95
|
@ -601,8 +601,8 @@ static inline void ieee80211_rate_set_vht(struct ieee80211_tx_rate *rate,
|
|||
u8 mcs, u8 nss)
|
||||
{
|
||||
WARN_ON(mcs & ~0xF);
|
||||
WARN_ON(nss & ~0x7);
|
||||
rate->idx = (nss << 4) | mcs;
|
||||
WARN_ON((nss - 1) & ~0x7);
|
||||
rate->idx = ((nss - 1) << 4) | mcs;
|
||||
}
|
||||
|
||||
static inline u8
|
||||
|
@ -614,7 +614,7 @@ ieee80211_rate_get_vht_mcs(const struct ieee80211_tx_rate *rate)
|
|||
static inline u8
|
||||
ieee80211_rate_get_vht_nss(const struct ieee80211_tx_rate *rate)
|
||||
{
|
||||
return rate->idx >> 4;
|
||||
return (rate->idx >> 4) + 1;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue