CC: [email protected] BCC: [email protected] CC: [email protected] TO: Wen Gong <[email protected]> CC: Kalle Valo <[email protected]>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master head: 952923ddc01120190dcf671e7b354364ce1d1362 commit: 3db26ecf7114370e451e296e33a0af3303d32819 ath11k: calculate the correct NSS of peer for HE capabilities date: 7 months ago :::::: branch date: 15 hours ago :::::: commit date: 7 months ago config: microblaze-randconfig-m031-20220605 (https://download.01.org/0day-ci/archive/20220606/[email protected]/config) compiler: microblaze-linux-gcc (GCC) 11.3.0 If you fix the issue, kindly add following tag where applicable Reported-by: kernel test robot <[email protected]> Reported-by: Dan Carpenter <[email protected]> New smatch warnings: drivers/net/wireless/ath/ath11k/mac.c:1975 ath11k_peer_assoc_h_he() error: uninitialized symbol 'rx_mcs_80'. drivers/net/wireless/ath/ath11k/mac.c:1975 ath11k_peer_assoc_h_he() error: uninitialized symbol 'rx_mcs_160'. Old smatch warnings: drivers/net/wireless/ath/ath11k/mac.c:1977 ath11k_peer_assoc_h_he() error: uninitialized symbol 'rx_mcs_80'. vim +/rx_mcs_80 +1975 drivers/net/wireless/ath/ath11k/mac.c 61fe43e7216df6 Miles Hu 2021-09-24 1914 d5c65159f28953 Kalle Valo 2019-11-23 1915 static void ath11k_peer_assoc_h_he(struct ath11k *ar, d5c65159f28953 Kalle Valo 2019-11-23 1916 struct ieee80211_vif *vif, d5c65159f28953 Kalle Valo 2019-11-23 1917 struct ieee80211_sta *sta, d5c65159f28953 Kalle Valo 2019-11-23 1918 struct peer_assoc_params *arg) d5c65159f28953 Kalle Valo 2019-11-23 1919 { 61fe43e7216df6 Miles Hu 2021-09-24 1920 struct ath11k_vif *arvif = (void *)vif->drv_priv; 61fe43e7216df6 Miles Hu 2021-09-24 1921 struct cfg80211_chan_def def; 9f056ed8ee01ad John Crispin 2019-11-25 1922 const struct ieee80211_sta_he_cap *he_cap = &sta->he_cap; 61fe43e7216df6 Miles Hu 2021-09-24 1923 enum nl80211_band band; 61fe43e7216df6 Miles Hu 2021-09-24 1924 u16 *he_mcs_mask; 61fe43e7216df6 Miles Hu 2021-09-24 1925 u8 max_nss, he_mcs; 61fe43e7216df6 Miles Hu 2021-09-24 1926 u16 he_tx_mcs = 0, v = 0; 61fe43e7216df6 Miles Hu 2021-09-24 1927 int i, he_nss, nss_idx; 61fe43e7216df6 Miles Hu 2021-09-24 1928 bool user_rate_valid = true; f552d6fd2f27ce P Praneesh 2021-09-24 1929 u32 rx_nss, tx_nss, nss_160; 3db26ecf711437 Wen Gong 2021-11-22 1930 u8 ampdu_factor, rx_mcs_80, rx_mcs_160; 3db26ecf711437 Wen Gong 2021-11-22 1931 u16 mcs_160_map, mcs_80_map; 3db26ecf711437 Wen Gong 2021-11-22 1932 bool support_160; 61fe43e7216df6 Miles Hu 2021-09-24 1933 61fe43e7216df6 Miles Hu 2021-09-24 1934 if (WARN_ON(ath11k_mac_vif_chan(vif, &def))) 61fe43e7216df6 Miles Hu 2021-09-24 1935 return; 9f056ed8ee01ad John Crispin 2019-11-25 1936 9f056ed8ee01ad John Crispin 2019-11-25 1937 if (!he_cap->has_he) 9f056ed8ee01ad John Crispin 2019-11-25 1938 return; 9f056ed8ee01ad John Crispin 2019-11-25 1939 61fe43e7216df6 Miles Hu 2021-09-24 1940 band = def.chan->band; 61fe43e7216df6 Miles Hu 2021-09-24 1941 he_mcs_mask = arvif->bitrate_mask.control[band].he_mcs; 61fe43e7216df6 Miles Hu 2021-09-24 1942 61fe43e7216df6 Miles Hu 2021-09-24 1943 if (ath11k_peer_assoc_h_he_masked(he_mcs_mask)) 61fe43e7216df6 Miles Hu 2021-09-24 1944 return; 61fe43e7216df6 Miles Hu 2021-09-24 1945 9f056ed8ee01ad John Crispin 2019-11-25 1946 arg->he_flag = true; 3db26ecf711437 Wen Gong 2021-11-22 1947 support_160 = !!(he_cap->he_cap_elem.phy_cap_info[0] & 3db26ecf711437 Wen Gong 2021-11-22 1948 IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_160MHZ_IN_5G); 3db26ecf711437 Wen Gong 2021-11-22 1949 3db26ecf711437 Wen Gong 2021-11-22 1950 /* Supported HE-MCS and NSS Set of peer he_cap is intersection with self he_cp */ 3db26ecf711437 Wen Gong 2021-11-22 1951 mcs_160_map = le16_to_cpu(he_cap->he_mcs_nss_supp.rx_mcs_160); 3db26ecf711437 Wen Gong 2021-11-22 1952 mcs_80_map = le16_to_cpu(he_cap->he_mcs_nss_supp.rx_mcs_80); 3db26ecf711437 Wen Gong 2021-11-22 1953 3db26ecf711437 Wen Gong 2021-11-22 1954 if (support_160) { 3db26ecf711437 Wen Gong 2021-11-22 1955 for (i = 7; i >= 0; i--) { 3db26ecf711437 Wen Gong 2021-11-22 1956 u8 mcs_160 = (mcs_160_map >> (2 * i)) & 3; 3db26ecf711437 Wen Gong 2021-11-22 1957 3db26ecf711437 Wen Gong 2021-11-22 1958 if (mcs_160 != IEEE80211_VHT_MCS_NOT_SUPPORTED) { 3db26ecf711437 Wen Gong 2021-11-22 1959 rx_mcs_160 = i + 1; 3db26ecf711437 Wen Gong 2021-11-22 1960 break; 3db26ecf711437 Wen Gong 2021-11-22 1961 } 3db26ecf711437 Wen Gong 2021-11-22 1962 } 3db26ecf711437 Wen Gong 2021-11-22 1963 } 3db26ecf711437 Wen Gong 2021-11-22 1964 3db26ecf711437 Wen Gong 2021-11-22 1965 for (i = 7; i >= 0; i--) { 3db26ecf711437 Wen Gong 2021-11-22 1966 u8 mcs_80 = (mcs_80_map >> (2 * i)) & 3; 3db26ecf711437 Wen Gong 2021-11-22 1967 3db26ecf711437 Wen Gong 2021-11-22 1968 if (mcs_80 != IEEE80211_VHT_MCS_NOT_SUPPORTED) { 3db26ecf711437 Wen Gong 2021-11-22 1969 rx_mcs_80 = i + 1; 3db26ecf711437 Wen Gong 2021-11-22 1970 break; 3db26ecf711437 Wen Gong 2021-11-22 1971 } 3db26ecf711437 Wen Gong 2021-11-22 1972 } 3db26ecf711437 Wen Gong 2021-11-22 1973 3db26ecf711437 Wen Gong 2021-11-22 1974 if (support_160) 3db26ecf711437 Wen Gong 2021-11-22 @1975 max_nss = min(rx_mcs_80, rx_mcs_160); 3db26ecf711437 Wen Gong 2021-11-22 1976 else 3db26ecf711437 Wen Gong 2021-11-22 1977 max_nss = rx_mcs_80; 3db26ecf711437 Wen Gong 2021-11-22 1978 3db26ecf711437 Wen Gong 2021-11-22 1979 arg->peer_nss = min(sta->rx_nss, max_nss); 9f056ed8ee01ad John Crispin 2019-11-25 1980 c8bcd82a4efd05 Kees Cook 2021-06-16 1981 memcpy_and_pad(&arg->peer_he_cap_macinfo, c8bcd82a4efd05 Kees Cook 2021-06-16 1982 sizeof(arg->peer_he_cap_macinfo), c8bcd82a4efd05 Kees Cook 2021-06-16 1983 he_cap->he_cap_elem.mac_cap_info, c8bcd82a4efd05 Kees Cook 2021-06-16 1984 sizeof(he_cap->he_cap_elem.mac_cap_info), c8bcd82a4efd05 Kees Cook 2021-06-16 1985 0); c8bcd82a4efd05 Kees Cook 2021-06-16 1986 memcpy_and_pad(&arg->peer_he_cap_phyinfo, c8bcd82a4efd05 Kees Cook 2021-06-16 1987 sizeof(arg->peer_he_cap_phyinfo), c8bcd82a4efd05 Kees Cook 2021-06-16 1988 he_cap->he_cap_elem.phy_cap_info, c8bcd82a4efd05 Kees Cook 2021-06-16 1989 sizeof(he_cap->he_cap_elem.phy_cap_info), c8bcd82a4efd05 Kees Cook 2021-06-16 1990 0); 60689de46c7f6a Rajkumar Manoharan 2020-04-24 1991 arg->peer_he_ops = vif->bss_conf.he_oper.params; 9f056ed8ee01ad John Crispin 2019-11-25 1992 9f056ed8ee01ad John Crispin 2019-11-25 1993 /* the top most byte is used to indicate BSS color info */ 9f056ed8ee01ad John Crispin 2019-11-25 1994 arg->peer_he_ops &= 0xffffff; 9f056ed8ee01ad John Crispin 2019-11-25 1995 af6d39db1b046a Tamizh Chelvam 2020-09-08 1996 /* As per section 26.6.1 11ax Draft5.0, if the Max AMPDU Exponent Extension af6d39db1b046a Tamizh Chelvam 2020-09-08 1997 * in HE cap is zero, use the arg->peer_max_mpdu as calculated while parsing af6d39db1b046a Tamizh Chelvam 2020-09-08 1998 * VHT caps(if VHT caps is present) or HT caps (if VHT caps is not present). af6d39db1b046a Tamizh Chelvam 2020-09-08 1999 * af6d39db1b046a Tamizh Chelvam 2020-09-08 2000 * For non-zero value of Max AMPDU Extponent Extension in HE MAC caps, af6d39db1b046a Tamizh Chelvam 2020-09-08 2001 * if a HE STA sends VHT cap and HE cap IE in assoc request then, use af6d39db1b046a Tamizh Chelvam 2020-09-08 2002 * MAX_AMPDU_LEN_FACTOR as 20 to calculate max_ampdu length. af6d39db1b046a Tamizh Chelvam 2020-09-08 2003 * If a HE STA that does not send VHT cap, but HE and HT cap in assoc af6d39db1b046a Tamizh Chelvam 2020-09-08 2004 * request, then use MAX_AMPDU_LEN_FACTOR as 16 to calculate max_ampdu af6d39db1b046a Tamizh Chelvam 2020-09-08 2005 * length. af6d39db1b046a Tamizh Chelvam 2020-09-08 2006 */ 1f851b8dfd76a0 Johannes Berg 2021-04-09 2007 ampdu_factor = u8_get_bits(he_cap->he_cap_elem.mac_cap_info[3], 1f851b8dfd76a0 Johannes Berg 2021-04-09 2008 IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_MASK); af6d39db1b046a Tamizh Chelvam 2020-09-08 2009 af6d39db1b046a Tamizh Chelvam 2020-09-08 2010 if (ampdu_factor) { af6d39db1b046a Tamizh Chelvam 2020-09-08 2011 if (sta->vht_cap.vht_supported) af6d39db1b046a Tamizh Chelvam 2020-09-08 2012 arg->peer_max_mpdu = (1 << (IEEE80211_HE_VHT_MAX_AMPDU_FACTOR + af6d39db1b046a Tamizh Chelvam 2020-09-08 2013 ampdu_factor)) - 1; af6d39db1b046a Tamizh Chelvam 2020-09-08 2014 else if (sta->ht_cap.ht_supported) af6d39db1b046a Tamizh Chelvam 2020-09-08 2015 arg->peer_max_mpdu = (1 << (IEEE80211_HE_HT_MAX_AMPDU_FACTOR + af6d39db1b046a Tamizh Chelvam 2020-09-08 2016 ampdu_factor)) - 1; af6d39db1b046a Tamizh Chelvam 2020-09-08 2017 } af6d39db1b046a Tamizh Chelvam 2020-09-08 2018 9f056ed8ee01ad John Crispin 2019-11-25 2019 if (he_cap->he_cap_elem.phy_cap_info[6] & 9f056ed8ee01ad John Crispin 2019-11-25 2020 IEEE80211_HE_PHY_CAP6_PPE_THRESHOLD_PRESENT) { 9f056ed8ee01ad John Crispin 2019-11-25 2021 int bit = 7; 9f056ed8ee01ad John Crispin 2019-11-25 2022 int nss, ru; 9f056ed8ee01ad John Crispin 2019-11-25 2023 9f056ed8ee01ad John Crispin 2019-11-25 2024 arg->peer_ppet.numss_m1 = he_cap->ppe_thres[0] & 9f056ed8ee01ad John Crispin 2019-11-25 2025 IEEE80211_PPE_THRES_NSS_MASK; 9f056ed8ee01ad John Crispin 2019-11-25 2026 arg->peer_ppet.ru_bit_mask = 9f056ed8ee01ad John Crispin 2019-11-25 2027 (he_cap->ppe_thres[0] & 9f056ed8ee01ad John Crispin 2019-11-25 2028 IEEE80211_PPE_THRES_RU_INDEX_BITMASK_MASK) >> 9f056ed8ee01ad John Crispin 2019-11-25 2029 IEEE80211_PPE_THRES_RU_INDEX_BITMASK_POS; 9f056ed8ee01ad John Crispin 2019-11-25 2030 9f056ed8ee01ad John Crispin 2019-11-25 2031 for (nss = 0; nss <= arg->peer_ppet.numss_m1; nss++) { 9f056ed8ee01ad John Crispin 2019-11-25 2032 for (ru = 0; ru < 4; ru++) { 9f056ed8ee01ad John Crispin 2019-11-25 2033 u32 val = 0; 9f056ed8ee01ad John Crispin 2019-11-25 2034 int i; 9f056ed8ee01ad John Crispin 2019-11-25 2035 9f056ed8ee01ad John Crispin 2019-11-25 2036 if ((arg->peer_ppet.ru_bit_mask & BIT(ru)) == 0) 9f056ed8ee01ad John Crispin 2019-11-25 2037 continue; 9f056ed8ee01ad John Crispin 2019-11-25 2038 for (i = 0; i < 6; i++) { 9f056ed8ee01ad John Crispin 2019-11-25 2039 val >>= 1; 9f056ed8ee01ad John Crispin 2019-11-25 2040 val |= ((he_cap->ppe_thres[bit / 8] >> 9f056ed8ee01ad John Crispin 2019-11-25 2041 (bit % 8)) & 0x1) << 5; 9f056ed8ee01ad John Crispin 2019-11-25 2042 bit++; 9f056ed8ee01ad John Crispin 2019-11-25 2043 } 9f056ed8ee01ad John Crispin 2019-11-25 2044 arg->peer_ppet.ppet16_ppet8_ru3_ru0[nss] |= 9f056ed8ee01ad John Crispin 2019-11-25 2045 val << (ru * 6); 9f056ed8ee01ad John Crispin 2019-11-25 2046 } 9f056ed8ee01ad John Crispin 2019-11-25 2047 } 9f056ed8ee01ad John Crispin 2019-11-25 2048 } 9f056ed8ee01ad John Crispin 2019-11-25 2049 6d293d447670da John Crispin 2019-11-25 2050 if (he_cap->he_cap_elem.mac_cap_info[0] & IEEE80211_HE_MAC_CAP0_TWT_RES) 6d293d447670da John Crispin 2019-11-25 2051 arg->twt_responder = true; 6d293d447670da John Crispin 2019-11-25 2052 if (he_cap->he_cap_elem.mac_cap_info[0] & IEEE80211_HE_MAC_CAP0_TWT_REQ) 6d293d447670da John Crispin 2019-11-25 2053 arg->twt_requester = true; 6d293d447670da John Crispin 2019-11-25 2054 61fe43e7216df6 Miles Hu 2021-09-24 2055 he_nss = ath11k_mac_max_he_nss(he_mcs_mask); 61fe43e7216df6 Miles Hu 2021-09-24 2056 61fe43e7216df6 Miles Hu 2021-09-24 2057 if (he_nss > sta->rx_nss) { 61fe43e7216df6 Miles Hu 2021-09-24 2058 user_rate_valid = false; 61fe43e7216df6 Miles Hu 2021-09-24 2059 for (nss_idx = sta->rx_nss - 1; nss_idx >= 0; nss_idx--) { 61fe43e7216df6 Miles Hu 2021-09-24 2060 if (he_mcs_mask[nss_idx]) { 61fe43e7216df6 Miles Hu 2021-09-24 2061 user_rate_valid = true; 61fe43e7216df6 Miles Hu 2021-09-24 2062 break; 61fe43e7216df6 Miles Hu 2021-09-24 2063 } 61fe43e7216df6 Miles Hu 2021-09-24 2064 } 61fe43e7216df6 Miles Hu 2021-09-24 2065 } 61fe43e7216df6 Miles Hu 2021-09-24 2066 61fe43e7216df6 Miles Hu 2021-09-24 2067 if (!user_rate_valid) { 61fe43e7216df6 Miles Hu 2021-09-24 2068 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "mac setting he range mcs value to peer supported nss %d for peer %pM\n", 61fe43e7216df6 Miles Hu 2021-09-24 2069 sta->rx_nss, sta->addr); 61fe43e7216df6 Miles Hu 2021-09-24 2070 he_mcs_mask[sta->rx_nss - 1] = he_mcs_mask[he_nss - 1]; 61fe43e7216df6 Miles Hu 2021-09-24 2071 } 61fe43e7216df6 Miles Hu 2021-09-24 2072 9f056ed8ee01ad John Crispin 2019-11-25 2073 switch (sta->bandwidth) { 9f056ed8ee01ad John Crispin 2019-11-25 2074 case IEEE80211_STA_RX_BW_160: 9f056ed8ee01ad John Crispin 2019-11-25 2075 if (he_cap->he_cap_elem.phy_cap_info[0] & 9f056ed8ee01ad John Crispin 2019-11-25 2076 IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_80PLUS80_MHZ_IN_5G) { 9f056ed8ee01ad John Crispin 2019-11-25 2077 v = le16_to_cpu(he_cap->he_mcs_nss_supp.rx_mcs_80p80); 61fe43e7216df6 Miles Hu 2021-09-24 2078 v = ath11k_peer_assoc_h_he_limit(v, he_mcs_mask); 9f056ed8ee01ad John Crispin 2019-11-25 2079 arg->peer_he_rx_mcs_set[WMI_HECAP_TXRX_MCS_NSS_IDX_80_80] = v; 9f056ed8ee01ad John Crispin 2019-11-25 2080 9f056ed8ee01ad John Crispin 2019-11-25 2081 v = le16_to_cpu(he_cap->he_mcs_nss_supp.tx_mcs_80p80); 9f056ed8ee01ad John Crispin 2019-11-25 2082 arg->peer_he_tx_mcs_set[WMI_HECAP_TXRX_MCS_NSS_IDX_80_80] = v; 9f056ed8ee01ad John Crispin 2019-11-25 2083 9f056ed8ee01ad John Crispin 2019-11-25 2084 arg->peer_he_mcs_count++; 61fe43e7216df6 Miles Hu 2021-09-24 2085 he_tx_mcs = v; 9f056ed8ee01ad John Crispin 2019-11-25 2086 } 9f056ed8ee01ad John Crispin 2019-11-25 2087 v = le16_to_cpu(he_cap->he_mcs_nss_supp.rx_mcs_160); 9f056ed8ee01ad John Crispin 2019-11-25 2088 arg->peer_he_rx_mcs_set[WMI_HECAP_TXRX_MCS_NSS_IDX_160] = v; 9f056ed8ee01ad John Crispin 2019-11-25 2089 9f056ed8ee01ad John Crispin 2019-11-25 2090 v = le16_to_cpu(he_cap->he_mcs_nss_supp.tx_mcs_160); 61fe43e7216df6 Miles Hu 2021-09-24 2091 v = ath11k_peer_assoc_h_he_limit(v, he_mcs_mask); 9f056ed8ee01ad John Crispin 2019-11-25 2092 arg->peer_he_tx_mcs_set[WMI_HECAP_TXRX_MCS_NSS_IDX_160] = v; 9f056ed8ee01ad John Crispin 2019-11-25 2093 9f056ed8ee01ad John Crispin 2019-11-25 2094 arg->peer_he_mcs_count++; 61fe43e7216df6 Miles Hu 2021-09-24 2095 if (!he_tx_mcs) 61fe43e7216df6 Miles Hu 2021-09-24 2096 he_tx_mcs = v; 0b294aebb6a00b Gustavo A. R. Silva 2020-07-27 2097 fallthrough; 9f056ed8ee01ad John Crispin 2019-11-25 2098 9f056ed8ee01ad John Crispin 2019-11-25 2099 default: 9f056ed8ee01ad John Crispin 2019-11-25 2100 v = le16_to_cpu(he_cap->he_mcs_nss_supp.rx_mcs_80); 9f056ed8ee01ad John Crispin 2019-11-25 2101 arg->peer_he_rx_mcs_set[WMI_HECAP_TXRX_MCS_NSS_IDX_80] = v; 9f056ed8ee01ad John Crispin 2019-11-25 2102 9f056ed8ee01ad John Crispin 2019-11-25 2103 v = le16_to_cpu(he_cap->he_mcs_nss_supp.tx_mcs_80); 61fe43e7216df6 Miles Hu 2021-09-24 2104 v = ath11k_peer_assoc_h_he_limit(v, he_mcs_mask); 9f056ed8ee01ad John Crispin 2019-11-25 2105 arg->peer_he_tx_mcs_set[WMI_HECAP_TXRX_MCS_NSS_IDX_80] = v; 9f056ed8ee01ad John Crispin 2019-11-25 2106 9f056ed8ee01ad John Crispin 2019-11-25 2107 arg->peer_he_mcs_count++; 61fe43e7216df6 Miles Hu 2021-09-24 2108 if (!he_tx_mcs) 61fe43e7216df6 Miles Hu 2021-09-24 2109 he_tx_mcs = v; 9f056ed8ee01ad John Crispin 2019-11-25 2110 break; 9f056ed8ee01ad John Crispin 2019-11-25 2111 } 61fe43e7216df6 Miles Hu 2021-09-24 2112 61fe43e7216df6 Miles Hu 2021-09-24 2113 /* Calculate peer NSS capability from HE capabilities if STA 61fe43e7216df6 Miles Hu 2021-09-24 2114 * supports HE. 61fe43e7216df6 Miles Hu 2021-09-24 2115 */ 61fe43e7216df6 Miles Hu 2021-09-24 2116 for (i = 0, max_nss = 0, he_mcs = 0; i < NL80211_HE_NSS_MAX; i++) { 61fe43e7216df6 Miles Hu 2021-09-24 2117 he_mcs = he_tx_mcs >> (2 * i) & 3; 61fe43e7216df6 Miles Hu 2021-09-24 2118 61fe43e7216df6 Miles Hu 2021-09-24 2119 /* In case of fixed rates, MCS Range in he_tx_mcs might have 61fe43e7216df6 Miles Hu 2021-09-24 2120 * unsupported range, with he_mcs_mask set, so check either of them 61fe43e7216df6 Miles Hu 2021-09-24 2121 * to find nss. 61fe43e7216df6 Miles Hu 2021-09-24 2122 */ 61fe43e7216df6 Miles Hu 2021-09-24 2123 if (he_mcs != IEEE80211_HE_MCS_NOT_SUPPORTED || 61fe43e7216df6 Miles Hu 2021-09-24 2124 he_mcs_mask[i]) 61fe43e7216df6 Miles Hu 2021-09-24 2125 max_nss = i + 1; 61fe43e7216df6 Miles Hu 2021-09-24 2126 } 61fe43e7216df6 Miles Hu 2021-09-24 2127 arg->peer_nss = min(sta->rx_nss, max_nss); 61fe43e7216df6 Miles Hu 2021-09-24 2128 f552d6fd2f27ce P Praneesh 2021-09-24 2129 if (arg->peer_phymode == MODE_11AX_HE160 || f552d6fd2f27ce P Praneesh 2021-09-24 2130 arg->peer_phymode == MODE_11AX_HE80_80) { f552d6fd2f27ce P Praneesh 2021-09-24 2131 tx_nss = ath11k_get_nss_160mhz(ar, max_nss); f552d6fd2f27ce P Praneesh 2021-09-24 2132 rx_nss = min(arg->peer_nss, tx_nss); f552d6fd2f27ce P Praneesh 2021-09-24 2133 arg->peer_bw_rxnss_override = ATH11K_BW_NSS_MAP_ENABLE; f552d6fd2f27ce P Praneesh 2021-09-24 2134 f552d6fd2f27ce P Praneesh 2021-09-24 2135 if (!rx_nss) { f552d6fd2f27ce P Praneesh 2021-09-24 2136 ath11k_warn(ar->ab, "invalid max_nss\n"); f552d6fd2f27ce P Praneesh 2021-09-24 2137 return; f552d6fd2f27ce P Praneesh 2021-09-24 2138 } f552d6fd2f27ce P Praneesh 2021-09-24 2139 f552d6fd2f27ce P Praneesh 2021-09-24 2140 if (arg->peer_phymode == MODE_11AX_HE160) f552d6fd2f27ce P Praneesh 2021-09-24 2141 nss_160 = FIELD_PREP(ATH11K_PEER_RX_NSS_160MHZ, rx_nss - 1); f552d6fd2f27ce P Praneesh 2021-09-24 2142 else f552d6fd2f27ce P Praneesh 2021-09-24 2143 nss_160 = FIELD_PREP(ATH11K_PEER_RX_NSS_80_80MHZ, rx_nss - 1); f552d6fd2f27ce P Praneesh 2021-09-24 2144 f552d6fd2f27ce P Praneesh 2021-09-24 2145 arg->peer_bw_rxnss_override |= nss_160; f552d6fd2f27ce P Praneesh 2021-09-24 2146 } f552d6fd2f27ce P Praneesh 2021-09-24 2147 61fe43e7216df6 Miles Hu 2021-09-24 2148 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, f552d6fd2f27ce P Praneesh 2021-09-24 2149 "mac he peer %pM nss %d mcs cnt %d nss_override 0x%x\n", f552d6fd2f27ce P Praneesh 2021-09-24 2150 sta->addr, arg->peer_nss, f552d6fd2f27ce P Praneesh 2021-09-24 2151 arg->peer_he_mcs_count, f552d6fd2f27ce P Praneesh 2021-09-24 2152 arg->peer_bw_rxnss_override); d5c65159f28953 Kalle Valo 2019-11-23 2153 } d5c65159f28953 Kalle Valo 2019-11-23 2154 -- 0-DAY CI Kernel Test Service https://01.org/lkp _______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
