Skip to content

Commit 7bc0e6b

Browse files
Kuan-Chung Chengregkh
authored andcommitted
wifi: rtw89: fix EHT 20MHz TX rate for non-AP STA
[ Upstream commit fe30a8a ] The 4-octet EHT MCS/NSS subfield is only used for 20 MHz-only non-AP STA. Correct the interpretation of this subfield to prevent improper rate limitations. Fixes: f1dfcee ("wifi: rtw89: Correct EHT TX rate on 20MHz connection") Signed-off-by: Kuan-Chung Chen <[email protected]> Signed-off-by: Ping-Ke Shih <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Sasha Levin <[email protected]>
1 parent a669f79 commit 7bc0e6b

File tree

1 file changed

+7
-5
lines changed
  • drivers/net/wireless/realtek/rtw89

1 file changed

+7
-5
lines changed

drivers/net/wireless/realtek/rtw89/phy.c

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -119,10 +119,12 @@ static u64 get_eht_mcs_ra_mask(u8 *max_nss, u8 start_mcs, u8 n_nss)
119119
return mask;
120120
}
121121

122-
static u64 get_eht_ra_mask(struct ieee80211_link_sta *link_sta)
122+
static u64 get_eht_ra_mask(struct rtw89_vif_link *rtwvif_link,
123+
struct ieee80211_link_sta *link_sta)
123124
{
124-
struct ieee80211_sta_eht_cap *eht_cap = &link_sta->eht_cap;
125+
struct ieee80211_vif *vif = rtwvif_link_to_vif(rtwvif_link);
125126
struct ieee80211_eht_mcs_nss_supp_20mhz_only *mcs_nss_20mhz;
127+
struct ieee80211_sta_eht_cap *eht_cap = &link_sta->eht_cap;
126128
struct ieee80211_eht_mcs_nss_supp_bw *mcs_nss;
127129
u8 *he_phy_cap = link_sta->he_cap.he_cap_elem.phy_cap_info;
128130

@@ -136,8 +138,8 @@ static u64 get_eht_ra_mask(struct ieee80211_link_sta *link_sta)
136138
/* MCS 9, 11, 13 */
137139
return get_eht_mcs_ra_mask(mcs_nss->rx_tx_max_nss, 9, 3);
138140
case IEEE80211_STA_RX_BW_20:
139-
if (!(he_phy_cap[0] &
140-
IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_MASK_ALL)) {
141+
if (vif->type == NL80211_IFTYPE_AP &&
142+
!(he_phy_cap[0] & IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_MASK_ALL)) {
141143
mcs_nss_20mhz = &eht_cap->eht_mcs_nss_supp.only_20mhz;
142144
/* MCS 7, 9, 11, 13 */
143145
return get_eht_mcs_ra_mask(mcs_nss_20mhz->rx_tx_max_nss, 7, 4);
@@ -332,7 +334,7 @@ static void rtw89_phy_ra_sta_update(struct rtw89_dev *rtwdev,
332334
/* Set the ra mask from sta's capability */
333335
if (link_sta->eht_cap.has_eht) {
334336
mode |= RTW89_RA_MODE_EHT;
335-
ra_mask |= get_eht_ra_mask(link_sta);
337+
ra_mask |= get_eht_ra_mask(rtwvif_link, link_sta);
336338

337339
if (rtwdev->hal.no_mcs_12_13)
338340
high_rate_masks = rtw89_ra_mask_eht_mcs0_11;

0 commit comments

Comments
 (0)