wifi: rtw89: consider UL-bandwidth of trigger frame as clue to improve OFDMA performance
Ping-Ke Shih
maintainercover wifi: rtw89: consider UL-bandwidth of trigger frame as clue to improve OFDMA performance
Patch 3/3 is the main patch to improve UL-OFDMA performance when UL-bandwidth is 160MHz and RU < 106. In this case, apply pre-calculated matrix to transmit with proper power.
To assist that, patch 1/3 is to add UL-bandwidth definition of trigger frame. Patch 2/3 is to adjust naming of waveform control related to trigger frame to avoid ambiguity.
Po-Hao Huang (3):
wifi: ieee80211: add UL-bandwidth definition of trigger frame
wifi: rtw89: refine uplink trigger based control mechanism
wifi: rtw89: refine bandwidth 160MHz uplink OFDMA performance
drivers/net/wireless/realtek/rtw89/core.c | 17 ++- drivers/net/wireless/realtek/rtw89/core.h | 29 +++- drivers/net/wireless/realtek/rtw89/phy.c | 129 ++++++++++++++---- drivers/net/wireless/realtek/rtw89/reg.h | 12 ++ drivers/net/wireless/realtek/rtw89/rtw8851b.c | 3 +- drivers/net/wireless/realtek/rtw89/rtw8852a.c | 3 +- drivers/net/wireless/realtek/rtw89/rtw8852b.c | 3 +- drivers/net/wireless/realtek/rtw89/rtw8852c.c | 3 +- include/linux/ieee80211.h | 7 + 9 files changed, 166 insertions(+), 40 deletions(-)
Signature · 1 line
2.25.1
Ping-Ke Shih
maintainerPATCH 1/3 wifi: ieee80211: add UL-bandwidth definition of trigger frame
From: Po-Hao Huang <[email protected]>
Define UL-bandwidth values of trigger frame according to 802.11 std.
--- include/linux/ieee80211.h | 7 +++++++ 1 file changed, 7 insertions(+)
include/linux/ieee80211.h +7 -0
@@ -307,6 +307,13 @@ static inline u16 ieee80211_sn_sub(u16 sn1, u16 sn2)#define IEEE80211_TRIGGER_TYPE_BQRP 0x6#define IEEE80211_TRIGGER_TYPE_NFRP 0x7 +/* UL-bandwidth within common_info of trigger frame */ +#define IEEE80211_TRIGGER_ULBW_MASK 0xc0000 +#define IEEE80211_TRIGGER_ULBW_20MHZ 0x0 +#define IEEE80211_TRIGGER_ULBW_40MHZ 0x1 +#define IEEE80211_TRIGGER_ULBW_80MHZ 0x2 +#define IEEE80211_TRIGGER_ULBW_160_80P80MHZ 0x3 +struct ieee80211_hdr {__le16 frame_control;__le16 duration_id;
Signature · 1 line
2.25.1
Ping-Ke Shih
maintainerPATCH 2/3 wifi: rtw89: refine uplink trigger based control mechanism
In reply to Ping-Ke ShihFrom: Po-Hao Huang <[email protected]>
Rename support_ul_tb_ctrl to waveform_ctrl since we need to do more trigger based control and the naming could be confusing. Move related code to leaf function so we make each functions separate and can be easier to maintain.
--- drivers/net/wireless/realtek/rtw89/core.h | 2 +- drivers/net/wireless/realtek/rtw89/phy.c | 72 +++++++++++-------- drivers/net/wireless/realtek/rtw89/rtw8851b.c | 2 +- drivers/net/wireless/realtek/rtw89/rtw8852a.c | 2 +- drivers/net/wireless/realtek/rtw89/rtw8852b.c | 2 +- drivers/net/wireless/realtek/rtw89/rtw8852c.c | 2 +- 6 files changed, 47 insertions(+), 35 deletions(-)
drivers/net/wireless/realtek/rtw89/core.h +1 -1
@@ -3648,7 +3648,7 @@ struct rtw89_chip_info {u8 support_bands;bool support_bw160;bool support_unii4; -bool support_ul_tb_ctrl; +bool ul_tb_waveform_ctrl;bool hw_sec_hdr;u8 rf_path_num;u8 tx_nss;
drivers/net/wireless/realtek/rtw89/phy.c +42 -30
118 lines not on this page · raw message
drivers/net/wireless/realtek/rtw89/rtw8851b.c +1 -1
@@ -2379,7 +2379,7 @@ const struct rtw89_chip_info rtw8851b_chip_info = {BIT (NL80211_BAND_5GHZ ), .support_bw160 = false, .support_unii4 = true, - .support_ul_tb_ctrl = true, + .ul_tb_waveform_ctrl = true, .hw_sec_hdr = false, .rf_path_num = 1, .tx_nss = 1,
drivers/net/wireless/realtek/rtw89/rtw8852a.c +1 -1
@@ -2115,7 +2115,7 @@ const struct rtw89_chip_info rtw8852a_chip_info = {BIT (NL80211_BAND_5GHZ ), .support_bw160 = false, .support_unii4 = false, - .support_ul_tb_ctrl = false, + .ul_tb_waveform_ctrl = false, .hw_sec_hdr = false, .rf_path_num = 2, .tx_nss = 2,
drivers/net/wireless/realtek/rtw89/rtw8852b.c +1 -1
@@ -2549,7 +2549,7 @@ const struct rtw89_chip_info rtw8852b_chip_info = {BIT (NL80211_BAND_5GHZ ), .support_bw160 = false, .support_unii4 = true, - .support_ul_tb_ctrl = true, + .ul_tb_waveform_ctrl = true, .hw_sec_hdr = false, .rf_path_num = 2, .tx_nss = 2,
drivers/net/wireless/realtek/rtw89/rtw8852c.c +1 -1
@@ -2859,7 +2859,7 @@ const struct rtw89_chip_info rtw8852c_chip_info = {BIT (NL80211_BAND_6GHZ ), .support_bw160 = true, .support_unii4 = true, - .support_ul_tb_ctrl = false, + .ul_tb_waveform_ctrl = false, .hw_sec_hdr = true, .rf_path_num = 2, .tx_nss = 2,
Signature · 1 line
2.25.1
Re: [PATCH 2/3] wifi: rtw89: refine uplink trigger based control mechanism
Quoted 9 lines · Ping-Ke Shih
From: Po-Hao Huang <[email protected]>
Rename
support_ul_tb_ctrltowaveform_ctrlsince we need to do more trigger based control and the naming could be confusing. Move related code to leaf function so we make each functions separate and can be easier to maintain.Signed-off-by Po-Hao Huang <[email protected]>Signed-off-by Ping-Ke Shih <[email protected]>
I don't see patch 1 in patchwork and I see patch 3 twice. Please check and resend.
3 patches set to Changes Requested.
13397427 [2/3] wifi: rtw89: refine uplink trigger based control mechanism 13397424 [3/3] wifi: rtw89: Refine bandwidth 160MHz uplink OFDMA performance 13397426 [3/3] wifi: rtw89: refine bandwidth 160MHz uplink OFDMA performance
Signature · 3 lines
https://patchwork.kernel.org/project/linux-wireless/patch/[email protected]/ https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches
Re: [PATCH 2/3] wifi: rtw89: refine uplink trigger based control mechanism
Quoted 12 lines · Kalle Valo
Quoted 9 lines · Ping-Ke Shih
From: Po-Hao Huang <[email protected]>
Rename
support_ul_tb_ctrltowaveform_ctrlsince we need to do more trigger based control and the naming could be confusing. Move related code to leaf function so we make each functions separate and can be easier to maintain.Signed-off-by Po-Hao Huang <[email protected]>Signed-off-by Ping-Ke Shih <[email protected]>
Quoted 8 lines
I don't see patch 1 in patchwork and I see patch 3 twice. Please check and resend.
3 patches set to Changes Requested.
13397427 [2/3] wifi: rtw89: refine uplink trigger based control mechanism 13397424 [3/3] wifi: rtw89: Refine bandwidth 160MHz uplink OFDMA performance 13397426 [3/3] wifi: rtw89: refine bandwidth 160MHz uplink OFDMA performance
Actually patch 1 was assigned to Johannes and he has already applied it. But due to seeing patch 3 twice it's still best to resend.
Signature · 3 lines
https://patchwork.kernel.org/project/linux-wireless/list/ https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches
Ping-Ke Shih
maintainerRe: [PATCH 2/3] wifi: rtw89: refine uplink trigger based control mechanism
Quoted 18 lines · Kalle Valo
Quoted 15 lines · Kalle Valo
Quoted 9 lines · Ping-Ke Shih
From: Po-Hao Huang <[email protected]>
Rename
support_ul_tb_ctrltowaveform_ctrlsince we need to do more trigger based control and the naming could be confusing. Move related code to leaf function so we make each functions separate and can be easier to maintain.Signed-off-by Po-Hao Huang <[email protected]>Signed-off-by Ping-Ke Shih <[email protected]>I don't see patch 1 in patchwork and I see patch 3 twice. Please check and resend.
Quoted 9 lines
Quoted 5 lines
3 patches set to Changes Requested.
13397427 [2/3] wifi: rtw89: refine uplink trigger based control mechanism 13397424 [3/3] wifi: rtw89: Refine bandwidth 160MHz uplink OFDMA performance 13397426 [3/3] wifi: rtw89: refine bandwidth 160MHz uplink OFDMA performance
Actually patch 1 was assigned to Johannes and he has already applied it. But due to seeing patch 3 twice it's still best to resend.
Oops. I modified the commit message as well as subject during submission, but forgot to remove the old ones. I send v2 to correct this.
Thank you and Johannes.
Ping-Ke
Ping-Ke Shih
maintainerPATCH 3/3 wifi: rtw89: Refine bandwidth 160MHz uplink OFDMA performance
In reply to Ping-Ke ShihFrom: Po-Hao Huang <[email protected]>
This improves 160MHz performance degradation with certain APs. Some ICs transmit preamble that are hard to decode by others, continuous retries then yield low throughput. Fix it with pre-calculated antenna matrices.
--- drivers/net/wireless/realtek/rtw89/core.c | 17 ++++-- drivers/net/wireless/realtek/rtw89/core.h | 27 +++++++++ drivers/net/wireless/realtek/rtw89/phy.c | 59 ++++++++++++++++++- drivers/net/wireless/realtek/rtw89/reg.h | 12 ++++ drivers/net/wireless/realtek/rtw89/rtw8851b.c | 1 + drivers/net/wireless/realtek/rtw89/rtw8852a.c | 1 + drivers/net/wireless/realtek/rtw89/rtw8852b.c | 1 + drivers/net/wireless/realtek/rtw89/rtw8852c.c | 1 + 8 files changed, 113 insertions(+), 6 deletions(-)
drivers/net/wireless/realtek/rtw89/core.c +12 -5
@@ -1671,8 +1671,8 @@ static void rtw89_stats_trigger_frame(struct rtw89_dev *rtwdev, {struct rtw89_vif *rtwvif = (struct rtw89_vif *)vif->drv_priv;struct ieee80211_trigger *tf = (struct ieee80211_trigger *)skb->data; -u8 *pos, *end, type; -u16 aid; +u8 *pos, *end, type, tf_bw; +u16 aid, tf_rua; if (!ether_addr_equal(vif->bss_conf.bssid, tf->ta) || rtwvif->wifi_role != RTW89_WIFI_ROLE_STATION ||
@@ -1680,7 +1680,7 @@ static void rtw89_stats_trigger_frame(struct rtw89_dev *rtwdev,return ; type =le64_get_bits (tf->common_info,IEEE80211_TRIGGER_TYPE_MASK ); -if (type !=IEEE80211_TRIGGER_TYPE_BASIC ) +if (type !=IEEE80211_TRIGGER_TYPE_BASIC && type !=IEEE80211_TRIGGER_TYPE_MU_BAR )return ; end = (u8 *)tf + skb->len;
@@ -1688,17 +1688,24 @@ static void rtw89_stats_trigger_frame(struct rtw89_dev *rtwdev,while (end - pos >=RTW89_TF_BASIC_USER_INFO_SZ ) { aid =RTW89_GET_TF_USER_INFO_AID12 (pos); + tf_rua =RTW89_GET_TF_USER_INFO_RUA (pos); + tf_bw =le64_get_bits (tf->common_info,IEEE80211_TRIGGER_ULBW_MASK );rtw89_debug (rtwdev,RTW89_DBG_TXRX , -"[TF] aid: %d, ul_mcs: %d, rua: %d\n" , +"[TF] aid: %d, ul_mcs: %d, rua: %d, bw: %d\n" , aid,RTW89_GET_TF_USER_INFO_UL_MCS (pos), -RTW89_GET_TF_USER_INFO_RUA (pos)); + tf_rua, tf_bw);if (aid ==RTW89_TF_PAD )break ;if (aid == vif->cfg.aid) { +enum nl80211_he_ru_alloc rua =rtw89_he_rua_to_ru_alloc (tf_rua >>1 ); + rtwvif->stats.rx_tf_acc++; rtwdev->stats.rx_tf_acc++; +if (tf_bw ==IEEE80211_TRIGGER_ULBW_160_80P80MHZ && + rua <=NL80211_RATE_INFO_HE_RU_ALLOC_106 ) + rtwvif->pwr_diff_en = true;break ; }
drivers/net/wireless/realtek/rtw89/core.h +27 -0
@@ -3044,6 +3044,8 @@ struct rtw89_vif {bool is_hesta;bool last_a_ctrl;bool dyn_tb_bedge_en; +bool pre_pwr_diff_en; +bool pwr_diff_en;u8 def_tri_idx;u32 tdls_peer;struct work_struct update_beacon_work;
@@ -3649,6 +3651,7 @@ struct rtw89_chip_info {bool support_bw160;bool support_unii4;bool ul_tb_waveform_ctrl; +bool ul_tb_pwr_diff;bool hw_sec_hdr;u8 rf_path_num;u8 tx_nss;
@@ -5204,6 +5207,30 @@ enum rtw89_bandwidth nl_to_rtw89_bandwidth(enum nl80211_chan_width width) } } +static inline +enum nl80211_he_ru_alloc rtw89_he_rua_to_ru_alloc (u16 rua) +{ +switch (rua) { +default : +WARN (1 ,"Invalid RU allocation: %d\n" , rua); + fallthrough; + case 0 ... 36: +return NL80211_RATE_INFO_HE_RU_ALLOC_26 ; + case 37 ... 52: +return NL80211_RATE_INFO_HE_RU_ALLOC_52 ; + case 53 ... 60: +return NL80211_RATE_INFO_HE_RU_ALLOC_106 ; + case 61 ... 64: +return NL80211_RATE_INFO_HE_RU_ALLOC_242 ; + case 65 ... 66: +return NL80211_RATE_INFO_HE_RU_ALLOC_484 ; +case 67 : +return NL80211_RATE_INFO_HE_RU_ALLOC_996 ; +case 68 : +return NL80211_RATE_INFO_HE_RU_ALLOC_2x996; + } +} +static inline struct rtw89_addr_cam_entry *rtw89_get_addr_cam_of (struct rtw89_vif *rtwvif,struct rtw89_sta *rtwsta)
drivers/net/wireless/realtek/rtw89/phy.c +58 -1
77 lines not on this page · raw message
drivers/net/wireless/realtek/rtw89/reg.h +12 -0
@@ -3360,9 +3360,11 @@#define R_AX_PWR_UL_TB_1T 0xD28C#define B_AX_PWR_UL_TB_1T_MASK GENMASK(4, 0)#define B_AX_PWR_UL_TB_1T_V1_MASK GENMASK(7, 0) +#define B_AX_PWR_UL_TB_1T_NORM_BW160 GENMASK(31, 24)#define R_AX_PWR_UL_TB_2T 0xD290#define B_AX_PWR_UL_TB_2T_MASK GENMASK(4, 0)#define B_AX_PWR_UL_TB_2T_V1_MASK GENMASK(7, 0) +#define B_AX_PWR_UL_TB_2T_NORM_BW160 GENMASK(31, 24)#define R_AX_PWR_BY_RATE_TABLE0 0xD2C0#define R_AX_PWR_BY_RATE_TABLE6 0xD2D8#define R_AX_PWR_BY_RATE_TABLE10 0xD2E8
@@ -3390,11 +3392,13 @@#define AX_PATH_COM0_PATHB 0x11111900#define AX_PATH_COM0_PATHAB 0x19999980#define R_AX_PATH_COM1 0xD804 +#define B_AX_PATH_COM1_NORM_1STS GENMASK(31, 28)#define AX_PATH_COM1_DFVAL 0x00000000#define AX_PATH_COM1_PATHA 0x13111111#define AX_PATH_COM1_PATHB 0x23222222#define AX_PATH_COM1_PATHAB 0x33333333#define R_AX_PATH_COM2 0xD808 +#define B_AX_PATH_COM2_RESP_1STS_PATH GENMASK(7, 4)#define AX_PATH_COM2_DFVAL 0x00000000#define AX_PATH_COM2_PATHA 0x01209313#define AX_PATH_COM2_PATHB 0x01209323
@@ -4669,12 +4673,20 @@#define B_ANT_RX_1RCCA_SEG1 GENMASK(21, 18)#define B_ANT_RX_1RCCA_SEG0 GENMASK(17, 14)#define B_FC0_BW_INV GENMASK(6, 0) +#define R_Q_MATRIX_00 0x497C +#define B_Q_MATRIX_00_IMAGINARY GENMASK(15, 0) +#define B_Q_MATRIX_00_REAL GENMASK(31, 16)#define R_CHBW_MOD 0x4978#define R_CHBW_MOD_V1 0x49C4#define B_BT_SHARE BIT(14)#define B_CHBW_MOD_SBW GENMASK(13, 12)#define B_CHBW_MOD_PRICH GENMASK(11, 8)#define B_ANT_RX_SEG0 GENMASK(3, 0) +#define R_Q_MATRIX_11 0x4988 +#define B_Q_MATRIX_11_IMAGINARY GENMASK(15, 0) +#define B_Q_MATRIX_11_REAL GENMASK(31, 16) +#define R_CUSTOMIZE_Q_MATRIX 0x498C +#define B_CUSTOMIZE_Q_MATRIX_EN BIT(0)#define R_P0_RPL1 0x49B0#define B_P0_RPL1_41_MASK GENMASK(31, 24)#define B_P0_RPL1_40_MASK GENMASK(23, 16)
drivers/net/wireless/realtek/rtw89/rtw8851b.c +1 -0
@@ -2380,6 +2380,7 @@ const struct rtw89_chip_info rtw8851b_chip_info = { .support_bw160 = false, .support_unii4 = true, .ul_tb_waveform_ctrl = true, + .ul_tb_pwr_diff = false, .hw_sec_hdr = false, .rf_path_num = 1, .tx_nss = 1,
drivers/net/wireless/realtek/rtw89/rtw8852a.c +1 -0
@@ -2116,6 +2116,7 @@ const struct rtw89_chip_info rtw8852a_chip_info = { .support_bw160 = false, .support_unii4 = false, .ul_tb_waveform_ctrl = false, + .ul_tb_pwr_diff = false, .hw_sec_hdr = false, .rf_path_num = 2, .tx_nss = 2,
drivers/net/wireless/realtek/rtw89/rtw8852b.c +1 -0
@@ -2550,6 +2550,7 @@ const struct rtw89_chip_info rtw8852b_chip_info = { .support_bw160 = false, .support_unii4 = true, .ul_tb_waveform_ctrl = true, + .ul_tb_pwr_diff = false, .hw_sec_hdr = false, .rf_path_num = 2, .tx_nss = 2,
drivers/net/wireless/realtek/rtw89/rtw8852c.c +1 -0
@@ -2860,6 +2860,7 @@ const struct rtw89_chip_info rtw8852c_chip_info = { .support_bw160 = true, .support_unii4 = true, .ul_tb_waveform_ctrl = false, + .ul_tb_pwr_diff = true, .hw_sec_hdr = true, .rf_path_num = 2, .tx_nss = 2,
Signature · 1 line
2.25.1
Ping-Ke Shih
maintainerPATCH 3/3 wifi: rtw89: refine bandwidth 160MHz uplink OFDMA performance
In reply to Ping-Ke ShihFrom: Po-Hao Huang <[email protected]>
This improves 160MHz performance degradation with certain APs. Some ICs transmit preamble that are hard to decode by others, continuous retries then yield low throughput. Fix it with pre-calculated antenna matrices.
--- drivers/net/wireless/realtek/rtw89/core.c | 17 ++++-- drivers/net/wireless/realtek/rtw89/core.h | 27 +++++++++ drivers/net/wireless/realtek/rtw89/phy.c | 59 ++++++++++++++++++- drivers/net/wireless/realtek/rtw89/reg.h | 12 ++++ drivers/net/wireless/realtek/rtw89/rtw8851b.c | 1 + drivers/net/wireless/realtek/rtw89/rtw8852a.c | 1 + drivers/net/wireless/realtek/rtw89/rtw8852b.c | 1 + drivers/net/wireless/realtek/rtw89/rtw8852c.c | 1 + 8 files changed, 113 insertions(+), 6 deletions(-)
drivers/net/wireless/realtek/rtw89/core.c +12 -5
@@ -1671,8 +1671,8 @@ static void rtw89_stats_trigger_frame(struct rtw89_dev *rtwdev, {struct rtw89_vif *rtwvif = (struct rtw89_vif *)vif->drv_priv;struct ieee80211_trigger *tf = (struct ieee80211_trigger *)skb->data; -u8 *pos, *end, type; -u16 aid; +u8 *pos, *end, type, tf_bw; +u16 aid, tf_rua; if (!ether_addr_equal(vif->bss_conf.bssid, tf->ta) || rtwvif->wifi_role != RTW89_WIFI_ROLE_STATION ||
@@ -1680,7 +1680,7 @@ static void rtw89_stats_trigger_frame(struct rtw89_dev *rtwdev,return ; type =le64_get_bits (tf->common_info,IEEE80211_TRIGGER_TYPE_MASK ); -if (type !=IEEE80211_TRIGGER_TYPE_BASIC ) +if (type !=IEEE80211_TRIGGER_TYPE_BASIC && type !=IEEE80211_TRIGGER_TYPE_MU_BAR )return ; end = (u8 *)tf + skb->len;
@@ -1688,17 +1688,24 @@ static void rtw89_stats_trigger_frame(struct rtw89_dev *rtwdev,while (end - pos >=RTW89_TF_BASIC_USER_INFO_SZ ) { aid =RTW89_GET_TF_USER_INFO_AID12 (pos); + tf_rua =RTW89_GET_TF_USER_INFO_RUA (pos); + tf_bw =le64_get_bits (tf->common_info,IEEE80211_TRIGGER_ULBW_MASK );rtw89_debug (rtwdev,RTW89_DBG_TXRX , -"[TF] aid: %d, ul_mcs: %d, rua: %d\n" , +"[TF] aid: %d, ul_mcs: %d, rua: %d, bw: %d\n" , aid,RTW89_GET_TF_USER_INFO_UL_MCS (pos), -RTW89_GET_TF_USER_INFO_RUA (pos)); + tf_rua, tf_bw);if (aid ==RTW89_TF_PAD )break ;if (aid == vif->cfg.aid) { +enum nl80211_he_ru_alloc rua =rtw89_he_rua_to_ru_alloc (tf_rua >>1 ); + rtwvif->stats.rx_tf_acc++; rtwdev->stats.rx_tf_acc++; +if (tf_bw ==IEEE80211_TRIGGER_ULBW_160_80P80MHZ && + rua <=NL80211_RATE_INFO_HE_RU_ALLOC_106 ) + rtwvif->pwr_diff_en = true;break ; }
drivers/net/wireless/realtek/rtw89/core.h +27 -0
@@ -3044,6 +3044,8 @@ struct rtw89_vif {bool is_hesta;bool last_a_ctrl;bool dyn_tb_bedge_en; +bool pre_pwr_diff_en; +bool pwr_diff_en;u8 def_tri_idx;u32 tdls_peer;struct work_struct update_beacon_work;
@@ -3649,6 +3651,7 @@ struct rtw89_chip_info {bool support_bw160;bool support_unii4;bool ul_tb_waveform_ctrl; +bool ul_tb_pwr_diff;bool hw_sec_hdr;u8 rf_path_num;u8 tx_nss;
@@ -5204,6 +5207,30 @@ enum rtw89_bandwidth nl_to_rtw89_bandwidth(enum nl80211_chan_width width) } } +static inline +enum nl80211_he_ru_alloc rtw89_he_rua_to_ru_alloc (u16 rua) +{ +switch (rua) { +default : +WARN (1 ,"Invalid RU allocation: %d\n" , rua); + fallthrough; + case 0 ... 36: +return NL80211_RATE_INFO_HE_RU_ALLOC_26 ; + case 37 ... 52: +return NL80211_RATE_INFO_HE_RU_ALLOC_52 ; + case 53 ... 60: +return NL80211_RATE_INFO_HE_RU_ALLOC_106 ; + case 61 ... 64: +return NL80211_RATE_INFO_HE_RU_ALLOC_242 ; + case 65 ... 66: +return NL80211_RATE_INFO_HE_RU_ALLOC_484 ; +case 67 : +return NL80211_RATE_INFO_HE_RU_ALLOC_996 ; +case 68 : +return NL80211_RATE_INFO_HE_RU_ALLOC_2x996; + } +} +static inline struct rtw89_addr_cam_entry *rtw89_get_addr_cam_of (struct rtw89_vif *rtwvif,struct rtw89_sta *rtwsta)
drivers/net/wireless/realtek/rtw89/phy.c +58 -1
77 lines not on this page · raw message
drivers/net/wireless/realtek/rtw89/reg.h +12 -0
@@ -3360,9 +3360,11 @@#define R_AX_PWR_UL_TB_1T 0xD28C#define B_AX_PWR_UL_TB_1T_MASK GENMASK(4, 0)#define B_AX_PWR_UL_TB_1T_V1_MASK GENMASK(7, 0) +#define B_AX_PWR_UL_TB_1T_NORM_BW160 GENMASK(31, 24)#define R_AX_PWR_UL_TB_2T 0xD290#define B_AX_PWR_UL_TB_2T_MASK GENMASK(4, 0)#define B_AX_PWR_UL_TB_2T_V1_MASK GENMASK(7, 0) +#define B_AX_PWR_UL_TB_2T_NORM_BW160 GENMASK(31, 24)#define R_AX_PWR_BY_RATE_TABLE0 0xD2C0#define R_AX_PWR_BY_RATE_TABLE6 0xD2D8#define R_AX_PWR_BY_RATE_TABLE10 0xD2E8
@@ -3390,11 +3392,13 @@#define AX_PATH_COM0_PATHB 0x11111900#define AX_PATH_COM0_PATHAB 0x19999980#define R_AX_PATH_COM1 0xD804 +#define B_AX_PATH_COM1_NORM_1STS GENMASK(31, 28)#define AX_PATH_COM1_DFVAL 0x00000000#define AX_PATH_COM1_PATHA 0x13111111#define AX_PATH_COM1_PATHB 0x23222222#define AX_PATH_COM1_PATHAB 0x33333333#define R_AX_PATH_COM2 0xD808 +#define B_AX_PATH_COM2_RESP_1STS_PATH GENMASK(7, 4)#define AX_PATH_COM2_DFVAL 0x00000000#define AX_PATH_COM2_PATHA 0x01209313#define AX_PATH_COM2_PATHB 0x01209323
@@ -4669,12 +4673,20 @@#define B_ANT_RX_1RCCA_SEG1 GENMASK(21, 18)#define B_ANT_RX_1RCCA_SEG0 GENMASK(17, 14)#define B_FC0_BW_INV GENMASK(6, 0) +#define R_Q_MATRIX_00 0x497C +#define B_Q_MATRIX_00_IMAGINARY GENMASK(15, 0) +#define B_Q_MATRIX_00_REAL GENMASK(31, 16)#define R_CHBW_MOD 0x4978#define R_CHBW_MOD_V1 0x49C4#define B_BT_SHARE BIT(14)#define B_CHBW_MOD_SBW GENMASK(13, 12)#define B_CHBW_MOD_PRICH GENMASK(11, 8)#define B_ANT_RX_SEG0 GENMASK(3, 0) +#define R_Q_MATRIX_11 0x4988 +#define B_Q_MATRIX_11_IMAGINARY GENMASK(15, 0) +#define B_Q_MATRIX_11_REAL GENMASK(31, 16) +#define R_CUSTOMIZE_Q_MATRIX 0x498C +#define B_CUSTOMIZE_Q_MATRIX_EN BIT(0)#define R_P0_RPL1 0x49B0#define B_P0_RPL1_41_MASK GENMASK(31, 24)#define B_P0_RPL1_40_MASK GENMASK(23, 16)
drivers/net/wireless/realtek/rtw89/rtw8851b.c +1 -0
@@ -2380,6 +2380,7 @@ const struct rtw89_chip_info rtw8851b_chip_info = { .support_bw160 = false, .support_unii4 = true, .ul_tb_waveform_ctrl = true, + .ul_tb_pwr_diff = false, .hw_sec_hdr = false, .rf_path_num = 1, .tx_nss = 1,
drivers/net/wireless/realtek/rtw89/rtw8852a.c +1 -0
@@ -2116,6 +2116,7 @@ const struct rtw89_chip_info rtw8852a_chip_info = { .support_bw160 = false, .support_unii4 = false, .ul_tb_waveform_ctrl = false, + .ul_tb_pwr_diff = false, .hw_sec_hdr = false, .rf_path_num = 2, .tx_nss = 2,
drivers/net/wireless/realtek/rtw89/rtw8852b.c +1 -0
@@ -2550,6 +2550,7 @@ const struct rtw89_chip_info rtw8852b_chip_info = { .support_bw160 = false, .support_unii4 = true, .ul_tb_waveform_ctrl = true, + .ul_tb_pwr_diff = false, .hw_sec_hdr = false, .rf_path_num = 2, .tx_nss = 2,
drivers/net/wireless/realtek/rtw89/rtw8852c.c +1 -0
@@ -2860,6 +2860,7 @@ const struct rtw89_chip_info rtw8852c_chip_info = { .support_bw160 = true, .support_unii4 = true, .ul_tb_waveform_ctrl = false, + .ul_tb_pwr_diff = true, .hw_sec_hdr = true, .rf_path_num = 2, .tx_nss = 2,
Signature · 1 line
2.25.1