diff options
author | Karl Beldan <karl.beldan@rivierawaves.com> | 2013-04-15 11:09:29 -0400 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2013-04-16 10:02:18 -0400 |
commit | 6bc8312f95f982c0a6f26e87d0a6c299a697ed53 (patch) | |
tree | 09c322e4559d42d61c2feb25eb64f101f8110346 /include/net/mac80211.h | |
parent | fffa4b1c170a3cabc58671495b0ae89ded007199 (diff) |
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>
Diffstat (limited to 'include/net/mac80211.h')
-rw-r--r-- | include/net/mac80211.h | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/include/net/mac80211.h b/include/net/mac80211.h index 9ff10b33b711..bc5d8184c489 100644 --- a/include/net/mac80211.h +++ b/include/net/mac80211.h | |||
@@ -601,8 +601,8 @@ static inline void ieee80211_rate_set_vht(struct ieee80211_tx_rate *rate, | |||
601 | u8 mcs, u8 nss) | 601 | u8 mcs, u8 nss) |
602 | { | 602 | { |
603 | WARN_ON(mcs & ~0xF); | 603 | WARN_ON(mcs & ~0xF); |
604 | WARN_ON(nss & ~0x7); | 604 | WARN_ON((nss - 1) & ~0x7); |
605 | rate->idx = (nss << 4) | mcs; | 605 | rate->idx = ((nss - 1) << 4) | mcs; |
606 | } | 606 | } |
607 | 607 | ||
608 | static inline u8 | 608 | static inline u8 |
@@ -614,7 +614,7 @@ ieee80211_rate_get_vht_mcs(const struct ieee80211_tx_rate *rate) | |||
614 | static inline u8 | 614 | static inline u8 |
615 | ieee80211_rate_get_vht_nss(const struct ieee80211_tx_rate *rate) | 615 | ieee80211_rate_get_vht_nss(const struct ieee80211_tx_rate *rate) |
616 | { | 616 | { |
617 | return rate->idx >> 4; | 617 | return (rate->idx >> 4) + 1; |
618 | } | 618 | } |
619 | 619 | ||
620 | /** | 620 | /** |