@@ -1037,15 +1037,18 @@ mt7996_set_stream_he_txbf_caps(struct mt7996_phy *phy,
10371037 return ;
10381038
10391039 elem -> phy_cap_info [3 ] |= IEEE80211_HE_PHY_CAP3_SU_BEAMFORMER ;
1040- if (vif == NL80211_IFTYPE_AP )
1041- elem -> phy_cap_info [4 ] |= IEEE80211_HE_PHY_CAP4_MU_BEAMFORMER ;
10421040
10431041 c = FIELD_PREP (IEEE80211_HE_PHY_CAP5_BEAMFORMEE_NUM_SND_DIM_UNDER_80MHZ_MASK ,
10441042 sts - 1 ) |
10451043 FIELD_PREP (IEEE80211_HE_PHY_CAP5_BEAMFORMEE_NUM_SND_DIM_ABOVE_80MHZ_MASK ,
10461044 sts - 1 );
10471045 elem -> phy_cap_info [5 ] |= c ;
10481046
1047+ if (vif != NL80211_IFTYPE_AP )
1048+ return ;
1049+
1050+ elem -> phy_cap_info [4 ] |= IEEE80211_HE_PHY_CAP4_MU_BEAMFORMER ;
1051+
10491052 c = IEEE80211_HE_PHY_CAP6_TRIG_SU_BEAMFORMING_FB |
10501053 IEEE80211_HE_PHY_CAP6_TRIG_MU_BEAMFORMING_PARTIAL_BW_FB ;
10511054 elem -> phy_cap_info [6 ] |= c ;
@@ -1205,7 +1208,6 @@ mt7996_init_eht_caps(struct mt7996_phy *phy, enum nl80211_band band,
12051208 IEEE80211_EHT_MAC_CAP0_OM_CONTROL ;
12061209
12071210 eht_cap_elem -> phy_cap_info [0 ] =
1208- IEEE80211_EHT_PHY_CAP0_320MHZ_IN_6GHZ |
12091211 IEEE80211_EHT_PHY_CAP0_NDP_4_EHT_LFT_32_GI |
12101212 IEEE80211_EHT_PHY_CAP0_SU_BEAMFORMER |
12111213 IEEE80211_EHT_PHY_CAP0_SU_BEAMFORMEE ;
@@ -1219,30 +1221,36 @@ mt7996_init_eht_caps(struct mt7996_phy *phy, enum nl80211_band band,
12191221 u8_encode_bits (u8_get_bits (val , GENMASK (2 , 1 )),
12201222 IEEE80211_EHT_PHY_CAP1_BEAMFORMEE_SS_80MHZ_MASK ) |
12211223 u8_encode_bits (val ,
1222- IEEE80211_EHT_PHY_CAP1_BEAMFORMEE_SS_160MHZ_MASK ) |
1223- u8_encode_bits (val ,
1224- IEEE80211_EHT_PHY_CAP1_BEAMFORMEE_SS_320MHZ_MASK );
1224+ IEEE80211_EHT_PHY_CAP1_BEAMFORMEE_SS_160MHZ_MASK );
12251225
12261226 eht_cap_elem -> phy_cap_info [2 ] =
12271227 u8_encode_bits (sts - 1 , IEEE80211_EHT_PHY_CAP2_SOUNDING_DIM_80MHZ_MASK ) |
1228- u8_encode_bits (sts - 1 , IEEE80211_EHT_PHY_CAP2_SOUNDING_DIM_160MHZ_MASK ) |
1229- u8_encode_bits (sts - 1 , IEEE80211_EHT_PHY_CAP2_SOUNDING_DIM_320MHZ_MASK );
1228+ u8_encode_bits (sts - 1 , IEEE80211_EHT_PHY_CAP2_SOUNDING_DIM_160MHZ_MASK );
1229+
1230+ if (band == NL80211_BAND_6GHZ ) {
1231+ eht_cap_elem -> phy_cap_info [0 ] |=
1232+ IEEE80211_EHT_PHY_CAP0_320MHZ_IN_6GHZ ;
1233+
1234+ eht_cap_elem -> phy_cap_info [1 ] |=
1235+ u8_encode_bits (val ,
1236+ IEEE80211_EHT_PHY_CAP1_BEAMFORMEE_SS_320MHZ_MASK );
1237+
1238+ eht_cap_elem -> phy_cap_info [2 ] |=
1239+ u8_encode_bits (sts - 1 ,
1240+ IEEE80211_EHT_PHY_CAP2_SOUNDING_DIM_320MHZ_MASK );
1241+ }
12301242
12311243 eht_cap_elem -> phy_cap_info [3 ] =
12321244 IEEE80211_EHT_PHY_CAP3_NG_16_SU_FEEDBACK |
12331245 IEEE80211_EHT_PHY_CAP3_NG_16_MU_FEEDBACK |
12341246 IEEE80211_EHT_PHY_CAP3_CODEBOOK_4_2_SU_FDBK |
1235- IEEE80211_EHT_PHY_CAP3_CODEBOOK_7_5_MU_FDBK |
1236- IEEE80211_EHT_PHY_CAP3_TRIG_SU_BF_FDBK |
1237- IEEE80211_EHT_PHY_CAP3_TRIG_MU_BF_PART_BW_FDBK |
1238- IEEE80211_EHT_PHY_CAP3_TRIG_CQI_FDBK ;
1247+ IEEE80211_EHT_PHY_CAP3_CODEBOOK_7_5_MU_FDBK ;
12391248
12401249 eht_cap_elem -> phy_cap_info [4 ] =
12411250 u8_encode_bits (min_t (int , sts - 1 , 2 ),
12421251 IEEE80211_EHT_PHY_CAP4_MAX_NC_MASK );
12431252
12441253 eht_cap_elem -> phy_cap_info [5 ] =
1245- IEEE80211_EHT_PHY_CAP5_NON_TRIG_CQI_FEEDBACK |
12461254 u8_encode_bits (IEEE80211_EHT_PHY_CAP5_COMMON_NOMINAL_PKT_PAD_16US ,
12471255 IEEE80211_EHT_PHY_CAP5_COMMON_NOMINAL_PKT_PAD_MASK ) |
12481256 u8_encode_bits (u8_get_bits (0x11 , GENMASK (1 , 0 )),
@@ -1256,14 +1264,6 @@ mt7996_init_eht_caps(struct mt7996_phy *phy, enum nl80211_band band,
12561264 IEEE80211_EHT_PHY_CAP6_MAX_NUM_SUPP_EHT_LTF_MASK ) |
12571265 u8_encode_bits (val , IEEE80211_EHT_PHY_CAP6_MCS15_SUPP_MASK );
12581266
1259- eht_cap_elem -> phy_cap_info [7 ] =
1260- IEEE80211_EHT_PHY_CAP7_NON_OFDMA_UL_MU_MIMO_80MHZ |
1261- IEEE80211_EHT_PHY_CAP7_NON_OFDMA_UL_MU_MIMO_160MHZ |
1262- IEEE80211_EHT_PHY_CAP7_NON_OFDMA_UL_MU_MIMO_320MHZ |
1263- IEEE80211_EHT_PHY_CAP7_MU_BEAMFORMER_80MHZ |
1264- IEEE80211_EHT_PHY_CAP7_MU_BEAMFORMER_160MHZ |
1265- IEEE80211_EHT_PHY_CAP7_MU_BEAMFORMER_320MHZ ;
1266-
12671267 val = u8_encode_bits (nss , IEEE80211_EHT_MCS_NSS_RX ) |
12681268 u8_encode_bits (nss , IEEE80211_EHT_MCS_NSS_TX );
12691269#define SET_EHT_MAX_NSS (_bw , _val ) do { \
@@ -1274,8 +1274,29 @@ mt7996_init_eht_caps(struct mt7996_phy *phy, enum nl80211_band band,
12741274
12751275 SET_EHT_MAX_NSS (80 , val );
12761276 SET_EHT_MAX_NSS (160 , val );
1277- SET_EHT_MAX_NSS (320 , val );
1277+ if (band == NL80211_BAND_6GHZ )
1278+ SET_EHT_MAX_NSS (320 , val );
12781279#undef SET_EHT_MAX_NSS
1280+
1281+ if (iftype != NL80211_IFTYPE_AP )
1282+ return ;
1283+
1284+ eht_cap_elem -> phy_cap_info [3 ] |=
1285+ IEEE80211_EHT_PHY_CAP3_TRIG_SU_BF_FDBK |
1286+ IEEE80211_EHT_PHY_CAP3_TRIG_MU_BF_PART_BW_FDBK ;
1287+
1288+ eht_cap_elem -> phy_cap_info [7 ] =
1289+ IEEE80211_EHT_PHY_CAP7_NON_OFDMA_UL_MU_MIMO_80MHZ |
1290+ IEEE80211_EHT_PHY_CAP7_NON_OFDMA_UL_MU_MIMO_160MHZ |
1291+ IEEE80211_EHT_PHY_CAP7_MU_BEAMFORMER_80MHZ |
1292+ IEEE80211_EHT_PHY_CAP7_MU_BEAMFORMER_160MHZ ;
1293+
1294+ if (band != NL80211_BAND_6GHZ )
1295+ return ;
1296+
1297+ eht_cap_elem -> phy_cap_info [7 ] |=
1298+ IEEE80211_EHT_PHY_CAP7_NON_OFDMA_UL_MU_MIMO_320MHZ |
1299+ IEEE80211_EHT_PHY_CAP7_MU_BEAMFORMER_320MHZ ;
12791300}
12801301
12811302static void
0 commit comments