Skip to content
  • Karl Beldan's avatar
    mac80211: VHT off-by-one NSS · 6bc8312f
    Karl Beldan authored
    
    
    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: default avatarKarl Beldan <karl.beldan@rivierawaves.com>
    Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
    6bc8312f