mac80211: VHT off-by-one NSS
authorKarl Beldan <karl.beldan@rivierawaves.com>
Mon, 15 Apr 2013 15:09:29 +0000 (17:09 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Tue, 16 Apr 2013 14:02:18 +0000 (16:02 +0200)
commit6bc8312f95f982c0a6f26e87d0a6c299a697ed53
tree09c322e4559d42d61c2feb25eb64f101f8110346
parentfffa4b1c170a3cabc58671495b0ae89ded007199
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>
include/net/mac80211.h