rtlwifi: add more materials for 8822be
[email protected]
maintainerv2 cover rtlwifi: add more materials for 8822be
From: Ping-Ke Shih <[email protected]>
I continue to submit more materials needed by 8822be. A special patch is "PATCH 10/10" that add new files to support 8822be btcoex in case wifi only. In my plan, 8822be btcoex for combo card will be sumitted in next patchset.
v2: Add 'Acked-by: Larry Finger' if the commits are acked
Use 'switch...case' to replace verbose 'if...else if...else if...else' Use extern declaration to quiet sparse warnings
Ping-Ke Shih (10):
rtlwifi: enable mac80211 fast-tx support
rtlwifi: Add Support VHT to spec_ver
rtlwifi: Use 6 bits as sequence number of TX report
rtlwifi: Extend tx_power_by_rate_offset size for newer IC
rtlwifi: Add rate section and its related definition and comment
rtlwifi: Fix VHT NSS in RC
rtlwifi: add definition radio_mask for RF and maximum bandwidth
rtlwifi: add efuse ops for other components
rtlwifi: btcoex: add routine to set default port id
rtlwifi: btcoex: Add 8822be btcoex supported files for wifi only
drivers/net/wireless/realtek/rtlwifi/base.c | 34 ++++++++++--- .../rtlwifi/btcoexist/halbtc8822bwifionly.c | 55 ++++++++++++++++++++++ .../rtlwifi/btcoexist/halbtc8822bwifionly.h | 25 ++++++++++ .../realtek/rtlwifi/btcoexist/halbtcoutsrc.c | 22 +++++++++ drivers/net/wireless/realtek/rtlwifi/efuse.c | 13 +++++ drivers/net/wireless/realtek/rtlwifi/efuse.h | 2 +- drivers/net/wireless/realtek/rtlwifi/pci.c | 1 + drivers/net/wireless/realtek/rtlwifi/rc.c | 49 +++++++++++++++---- .../net/wireless/realtek/rtlwifi/rtl8821ae/sw.c | 1 + drivers/net/wireless/realtek/rtlwifi/wifi.h | 39 +++++++++++++-- 10 files changed, 221 insertions(+), 20 deletions(-) create mode 100644 drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtc8822bwifionly.c create mode 100644 drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtc8822bwifionly.h
Signature · 1 line
2.15.1
[email protected]
maintainerPATCH v2 1/10 rtlwifi: enable mac80211 fast-tx support
From: Ping-Ke Shih <[email protected]>
Enable the mac80211 fast-tx feature, since our driver already support hw_flags required by fast-tx and is able to let mac80211 stack to transmit packet through fast-xmit path.
--- drivers/net/wireless/realtek/rtlwifi/base.c | 1 + 1 file changed, 1 insertion(+)
drivers/net/wireless/realtek/rtlwifi/base.c +1 -0
@@ -397,6 +397,7 @@ static void _rtl_init_mac80211(struct ieee80211_hw *hw)ieee80211_hw_set (hw,MFP_CAPABLE );ieee80211_hw_set (hw,REPORTS_TX_ACK_STATUS );ieee80211_hw_set (hw,SUPPORTS_AMSDU_IN_AMPDU ); +ieee80211_hw_set (hw,SUPPORT_FAST_XMIT );/* swlps or hwlps has been set in diff chip in init_sw_vars */ if (rtlpriv->psc.swctrl_lps) {
Signature · 1 line
2.15.1
Re: [v2,01/10] rtlwifi: enable mac80211 fast-tx support
Quoted 9 lines · Ping-Ke Shih
From: Ping-Ke Shih <[email protected]>
Enable the mac80211 fast-tx feature, since our driver already support
hw_flagsrequired by fast-tx and is able to let mac80211 stack to transmit packet through fast-xmit path.Signed-off-by Yan-Hsuan Chuang <[email protected]>Signed-off-by Ping-Ke Shih <[email protected]>Acked-by Larry Finger <[email protected]>
10 patches applied to wireless-drivers-next.git, thanks.
6942bdc4bf57 rtlwifi: enable mac80211 fast-tx support 1ca72c3047aa rtlwifi: Add Support VHT to spec_ver5f380ceff5f5 rtlwifi: Use 6 bits as sequence number of TX report 4a7093b914aa rtlwifi: Extend tx_power_by_rate_offset size for newer IC 81b813ed2fde rtlwifi: Add rate section and its related definition and comment 50da5da1562b rtlwifi: Fix VHT NSS in RCed979a1ed46b rtlwifi: add definition radio_mask for RF and maximum bandwidth 2cdd634e7e36 rtlwifi: add efuse ops for other components d7297a86fc86 rtlwifi: btcoex: add routine to set default port id 94907e8d135b rtlwifi: btcoex: Add 8822be btcoex supported files for wifi only
Signature · 3 lines
https://patchwork.kernel.org/patch/10188949/ https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches
[email protected]
maintainerPATCH v2 2/10 rtlwifi: Add Support VHT to spec_ver
In reply to [email protected]From: Ping-Ke Shih <[email protected]>
We are going to add 8822be, which is a VHT 2x2 wifi chip, so add VHT flag to replace enumeration of chips.
--- drivers/net/wireless/realtek/rtlwifi/base.c | 6 ++++-- drivers/net/wireless/realtek/rtlwifi/rtl8821ae/sw.c | 1 + drivers/net/wireless/realtek/rtlwifi/wifi.h | 1 + 3 files changed, 6 insertions(+), 2 deletions(-)
drivers/net/wireless/realtek/rtlwifi/base.c +4 -2
@@ -244,6 +244,9 @@ static void _rtl_init_hw_vht_capab(struct ieee80211_hw *hw,struct rtl_priv *rtlpriv =rtl_priv (hw);struct rtl_hal *rtlhal =rtl_hal (rtlpriv); +if (!(rtlpriv->cfg->spec_ver &RTL_SPEC_SUPPORT_VHT )) +return ; +if (rtlhal->hw_type ==HARDWARE_TYPE_RTL8812AE || rtlhal->hw_type ==HARDWARE_TYPE_RTL8822BE ) {u16 mcs_map;
@@ -887,8 +890,7 @@ static void _rtl_query_bandwidth_mode(struct ieee80211_hw *hw, tcb_desc->packet_bw =HT_CHANNEL_WIDTH_20_40 ; -if (rtlpriv->rtlhal.hw_type ==HARDWARE_TYPE_RTL8812AE || - rtlpriv->rtlhal.hw_type ==HARDWARE_TYPE_RTL8821AE ) { +if (rtlpriv->cfg->spec_ver &RTL_SPEC_SUPPORT_VHT ) {if (mac->opmode ==NL80211_IFTYPE_AP || mac->opmode ==NL80211_IFTYPE_ADHOC || mac->opmode ==NL80211_IFTYPE_MESH_POINT ) {
drivers/net/wireless/realtek/rtlwifi/rtl8821ae/sw.c +1 -0
@@ -328,6 +328,7 @@ static const struct rtl_hal_cfg rtl8821ae_hal_cfg = { .alt_fw_name = "rtlwifi/rtl8821aefw.bin", .ops = &rtl8821ae_hal_ops, .mod_params = &rtl8821ae_mod_params, + .spec_ver = RTL_SPEC_SUPPORT_VHT, .maps[SYS_ISO_CTRL] = REG_SYS_ISO_CTRL, .maps[SYS_FUNC_EN] = REG_SYS_FUNC_EN, .maps[SYS_CLK] = REG_SYS_CLKR,
drivers/net/wireless/realtek/rtlwifi/wifi.h +1 -0
@@ -951,6 +951,7 @@ enum package_type {enum rtl_spec_ver {RTL_SPEC_NEW_RATEID =BIT (0 ),/* use ratr_table_mode_new */ +RTL_SPEC_SUPPORT_VHT =BIT (1 ),/* support VHT */ };struct octet_string {
Signature · 1 line
2.15.1
[email protected]
maintainerPATCH v2 3/10 rtlwifi: Use 6 bits as sequence number of TX report
In reply to [email protected]From: Ping-Ke Shih <[email protected]>
In new design, SW_DEFINE[1:0] of tx desc are used by firmware, and the TX report only contains SW_DEFINE[7:0]. To satisfy with all cases, driver uses SW_DEFINE[7:2] as sequence number.
Besides, the format of tx report have been changed, so a new flag RTL_SPEC_EXT_C2H is used to access report.
--- drivers/net/wireless/realtek/rtlwifi/base.c | 22 ++++++++++++++++++---- drivers/net/wireless/realtek/rtlwifi/wifi.h | 8 ++++++++ 2 files changed, 26 insertions(+), 4 deletions(-)
drivers/net/wireless/realtek/rtlwifi/base.c +18 -4
@@ -1597,7 +1597,11 @@ static u16 rtl_get_tx_report_sn(struct ieee80211_hw *hw)struct rtl_tx_report *tx_report = &rtlpriv->tx_report;u16 sn; - sn =atomic_inc_return (&tx_report->sn) &0x0FFF ; +/* SW_DEFINE[11:8] are reserved (driver fills zeros) +* SW_DEFINE[7:2] are used by driver +* SW_DEFINE[1:0] are reserved for firmware (driver fills zeros) +*/ + sn = (atomic_inc_return (&tx_report->sn) &0x003F ) <<2 ; tx_report->last_sent_sn = sn; tx_report->last_sent_time = jiffies;
@@ -1625,14 +1629,23 @@ void rtl_tx_report_handler(struct ieee80211_hw *hw, u8 *tmp_buf, u8 c2h_cmd_len)struct rtl_priv *rtlpriv =rtl_priv (hw);struct rtl_tx_report *tx_report = &rtlpriv->tx_report;u16 sn; +u8 st, retry; - sn = ((tmp_buf[7 ] &0x0F ) <<8 ) | tmp_buf[6 ]; +if (rtlpriv->cfg->spec_ver &RTL_SPEC_EXT_C2H ) { + sn =GET_TX_REPORT_SN_V2 (tmp_buf); + st =GET_TX_REPORT_ST_V2 (tmp_buf); + retry =GET_TX_REPORT_RETRY_V2 (tmp_buf); + }else { + sn =GET_TX_REPORT_SN_V1 (tmp_buf); + st =GET_TX_REPORT_ST_V1 (tmp_buf); + retry =GET_TX_REPORT_RETRY_V1 (tmp_buf); + } tx_report->last_recv_sn = sn;RT_TRACE (rtlpriv,COMP_TX_REPORT ,DBG_DMESG ,"Recv TX-Report st=0x%02X sn=0x%X retry=0x%X\n" , - tmp_buf[0 ], sn, tmp_buf[2 ]); + st, sn, retry); }EXPORT_SYMBOL_GPL (rtl_tx_report_handler);
@@ -1646,7 +1659,8 @@ bool rtl_check_tx_report_acked(struct ieee80211_hw *hw)if (time_before (tx_report->last_sent_time +3 *HZ , jiffies)) {RT_TRACE (rtlpriv,COMP_TX_REPORT ,DBG_WARNING , -"Check TX-Report timeout!!\n" ); +"Check TX-Report timeout!! s_sn=0x%X r_sn=0x%X\n" , + tx_report->last_sent_sn, tx_report->last_recv_sn);return true;/* 3 sec. (timeout) seen as acked */ }
drivers/net/wireless/realtek/rtlwifi/wifi.h +8 -0
@@ -153,6 +153,13 @@ enum rtl8192c_h2c_cmd { MAX_H2CCMD }; +#define GET_TX_REPORT_SN_V1 (c2h) (c2h[6]) +#define GET_TX_REPORT_ST_V1 (c2h) (c2h[0] & 0xC0) +#define GET_TX_REPORT_RETRY_V1 (c2h) (c2h[2] & 0x3F) +#define GET_TX_REPORT_SN_V2 (c2h) (c2h[6]) +#define GET_TX_REPORT_ST_V2 (c2h) (c2h[7] & 0xC0) +#define GET_TX_REPORT_RETRY_V2 (c2h) (c2h[8] & 0x3F) +#define MAX_TX_COUNT 4#define MAX_REGULATION_NUM 4#define MAX_RF_PATH_NUM 4
@@ -952,6 +959,7 @@ enum package_type {enum rtl_spec_ver {RTL_SPEC_NEW_RATEID =BIT (0 ),/* use ratr_table_mode_new */ RTL_SPEC_SUPPORT_VHT =BIT (1 ),/* support VHT */ +RTL_SPEC_EXT_C2H =BIT (2 ),/* extend FW C2H (e.g. TX REPORT) */ };struct octet_string {
Signature · 1 line
2.15.1
[email protected]
maintainerPATCH v2 4/10 rtlwifi: Extend tx_power_by_rate_offset size for newer IC
In reply to [email protected]From: Ping-Ke Shih <[email protected]>
In older design, the TX power is grouped into rate section (smaller array size), but new design groups them into rate (larger array size). Thus, we extend the size for both cases, and add compile time assertion.
--- drivers/net/wireless/realtek/rtlwifi/base.c | 2 ++ drivers/net/wireless/realtek/rtlwifi/wifi.h | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-)
drivers/net/wireless/realtek/rtlwifi/base.c +2 -0
@@ -2646,6 +2646,8 @@ EXPORT_SYMBOL_GPL(rtl_global_var);static int __init rtl_core_module_init (void ) { +BUILD_BUG_ON (TX_PWR_BY_RATE_NUM_RATE <TX_PWR_BY_RATE_NUM_SECTION ); +if (rtl_rate_control_register ())pr_err ("rtl: Unable to register rtl_rc, use default RC !!\n" );
drivers/net/wireless/realtek/rtlwifi/wifi.h +2 -1
@@ -173,6 +173,7 @@ enum rtl8192c_h2c_cmd {#define TX_PWR_BY_RATE_NUM_BAND 2#define TX_PWR_BY_RATE_NUM_RF 4#define TX_PWR_BY_RATE_NUM_SECTION 12 +#define TX_PWR_BY_RATE_NUM_RATE 84/* >= TX_PWR_BY_RATE_NUM_SECTION */ #define MAX_BASE_NUM_IN_PHY_REG_PG_24G 6#define MAX_BASE_NUM_IN_PHY_REG_PG_5G 5
@@ -1285,7 +1286,7 @@ struct rtl_phy {u32 tx_power_by_rate_offset[TX_PWR_BY_RATE_NUM_BAND ] [TX_PWR_BY_RATE_NUM_RF ] [TX_PWR_BY_RATE_NUM_RF ] - [TX_PWR_BY_RATE_NUM_SECTION ]; + [TX_PWR_BY_RATE_NUM_RATE ];u8 txpwr_by_rate_base_24g[TX_PWR_BY_RATE_NUM_RF ] [TX_PWR_BY_RATE_NUM_RF ] [MAX_BASE_NUM_IN_PHY_REG_PG_24G ];
Signature · 1 line
2.15.1
[email protected]
maintainerPATCH v2 5/10 rtlwifi: Add rate section and its related definition and comment
In reply to [email protected]From: Ping-Ke Shih <[email protected]>
Add comments to make it to be easier to understand, and add compile time assertions.
--- drivers/net/wireless/realtek/rtlwifi/base.c | 3 +++ drivers/net/wireless/realtek/rtlwifi/wifi.h | 7 ++++--- 2 files changed, 7 insertions(+), 3 deletions(-)
drivers/net/wireless/realtek/rtlwifi/base.c +3 -0
@@ -2647,6 +2647,9 @@ EXPORT_SYMBOL_GPL(rtl_global_var);static int __init rtl_core_module_init (void ) {BUILD_BUG_ON (TX_PWR_BY_RATE_NUM_RATE <TX_PWR_BY_RATE_NUM_SECTION ); +BUILD_BUG_ON (MAX_RATE_SECTION_NUM !=MAX_RATE_SECTION ); +BUILD_BUG_ON (MAX_BASE_NUM_IN_PHY_REG_PG_24G !=MAX_RATE_SECTION ); +BUILD_BUG_ON (MAX_BASE_NUM_IN_PHY_REG_PG_5G != (MAX_RATE_SECTION -1 ));if (rtl_rate_control_register ())pr_err ("rtl: Unable to register rtl_rc, use default RC !!\n" );
drivers/net/wireless/realtek/rtlwifi/wifi.h +4 -3
@@ -163,7 +163,7 @@ enum rtl8192c_h2c_cmd {#define MAX_TX_COUNT 4#define MAX_REGULATION_NUM 4#define MAX_RF_PATH_NUM 4 -#define MAX_RATE_SECTION_NUM 6 +#define MAX_RATE_SECTION_NUM 6/* = MAX_RATE_SECTION */ #define MAX_2_4G_BANDWIDTH_NUM 4#define MAX_5G_BANDWIDTH_NUM 4#define MAX_RF_PATH 4
@@ -174,8 +174,8 @@ enum rtl8192c_h2c_cmd {#define TX_PWR_BY_RATE_NUM_RF 4#define TX_PWR_BY_RATE_NUM_SECTION 12#define TX_PWR_BY_RATE_NUM_RATE 84/* >= TX_PWR_BY_RATE_NUM_SECTION */ -#define MAX_BASE_NUM_IN_PHY_REG_PG_24G 6 -#define MAX_BASE_NUM_IN_PHY_REG_PG_5G 5 +#define MAX_BASE_NUM_IN_PHY_REG_PG_24G 6/* MAX_RATE_SECTION */ +#define MAX_BASE_NUM_IN_PHY_REG_PG_5G 5/* MAX_RATE_SECTION -1 */ #define BUFDESC_SEG_NUM 1/* 0:2 seg, 1: 4 seg, 2: 8 seg */
@@ -271,6 +271,7 @@ enum rate_section {HT_MCS8_MCS15 ,VHT_1SSMCS0_1SSMCS9 ,VHT_2SSMCS0_2SSMCS9 , + MAX_RATE_SECTION, }; enum intf_type {
Signature · 1 line
2.15.1
[email protected]
maintainerPATCH v2 6/10 rtlwifi: Fix VHT NSS in RC
In reply to [email protected]From: Ping-Ke Shih <[email protected]>
NSS is a argument of highest rate in RC, and it occupies bit 4-7 so use ieee80211_rate_set_vht() to fill the values. Since it got correct rate index, we don't need to check chips to assign NSS in set function anymore.
--- drivers/net/wireless/realtek/rtlwifi/rc.c | 55 ++++++++++++++++++++++++++----- 1 file changed, 46 insertions(+), 9 deletions(-)
drivers/net/wireless/realtek/rtlwifi/rc.c +46 -9
@@ -42,6 +42,23 @@ static u8 _rtl_rc_get_highest_rix(struct rtl_priv *rtlpriv,struct rtl_phy *rtlphy = &(rtlpriv->phy);struct rtl_sta_info *sta_entry =NULL ;u16 wireless_mode =0 ; +u8 nss; +struct ieee80211_tx_rate rate; + +switch (get_rf_type (rtlphy)) { +case RF_4T4R : + nss =4 ; +break ; +case RF_3T3R : + nss =3 ; +break ; +case RF_2T2R : + nss =2 ; +break ; +default : + nss =1 ; +break ; + }/* *this rate is no use for true rate, firmware
@@ -66,28 +83,51 @@ static u8 _rtl_rc_get_highest_rix(struct rtl_priv *rtlpriv, }else if (wireless_mode ==WIRELESS_MODE_G ) {return G_MODE_MAX_RIX ; }else if (wireless_mode ==WIRELESS_MODE_N_24G ) { -if (get_rf_type (rtlphy) !=RF_2T2R ) +if (nss ==1 )return N_MODE_MCS7_RIX ;else return N_MODE_MCS15_RIX ; }else if (wireless_mode ==WIRELESS_MODE_AC_24G ) { -return AC_MODE_MCS9_RIX ; +if (sta->bandwidth ==IEEE80211_STA_RX_BW_20 ) { +ieee80211_rate_set_vht (&rate, +AC_MODE_MCS8_RIX , + nss); + goto out; + }else { +ieee80211_rate_set_vht (&rate, +AC_MODE_MCS9_RIX , + nss); + goto out; + } }return 0 ; }else {if (wireless_mode ==WIRELESS_MODE_A ) {return A_MODE_MAX_RIX ; }else if (wireless_mode ==WIRELESS_MODE_N_5G ) { -if (get_rf_type (rtlphy) !=RF_2T2R ) +if (nss ==1 )return N_MODE_MCS7_RIX ;else return N_MODE_MCS15_RIX ; }else if (wireless_mode ==WIRELESS_MODE_AC_5G ) { -return AC_MODE_MCS9_RIX ; +if (sta->bandwidth ==IEEE80211_STA_RX_BW_20 ) { +ieee80211_rate_set_vht (&rate, +AC_MODE_MCS8_RIX , + nss); + goto out; + }else { +ieee80211_rate_set_vht (&rate, +AC_MODE_MCS9_RIX , + nss); + goto out; + } }return 0 ; } } + +out: +return rate.idx; } static void _rtl_rc_rate_set_series(struct rtl_priv *rtlpriv,
@@ -111,9 +151,6 @@ static void _rtl_rc_rate_set_series(struct rtl_priv *rtlpriv, } rate->count = tries; rate->idx = rix >=0x00 ? rix :0x00 ; -if (rtlpriv->rtlhal.hw_type ==HARDWARE_TYPE_RTL8812AE && - wireless_mode ==WIRELESS_MODE_AC_5G ) - rate->idx +=0x10 ;/*2NSS for 8812AE*/ if (!not_data) {if (txrc->short_preamble)
@@ -126,10 +163,10 @@ static void _rtl_rc_rate_set_series(struct rtl_priv *rtlpriv,if (sta && sta->vht_cap.vht_supported) rate->flags |=IEEE80211_TX_RC_80_MHZ_WIDTH ; }else { -if (mac->bw_40) - rate->flags |=IEEE80211_TX_RC_40_MHZ_WIDTH ;if (mac->bw_80) rate->flags |=IEEE80211_TX_RC_80_MHZ_WIDTH ; +else if (mac->bw_40) + rate->flags |=IEEE80211_TX_RC_40_MHZ_WIDTH ; }if (sgi_20 || sgi_40 || sgi_80)
Signature · 1 line
2.15.1
Re: [PATCH v2 06/10] rtlwifi: Fix VHT NSS in RC
Quoted 10 lines · On 01/28/2018 09:26 PM, [email protected] wrote:
From: Ping-Ke Shih <[email protected]>
NSS is a argument of highest rate in RC, and it occupies bit 4-7 so use
ieee80211_rate_set_vht()to fill the values. Since it got correct rate index, we don't need to check chips to assign NSS in set function anymore.Signed-off-by Ping-Ke Shih <[email protected]>--- drivers/net/wireless/realtek/rtlwifi/rc.c | 55 ++++++++++++++++++++++++++----- 1 file changed, 46 insertions(+), 9 deletions(-)
The switch statement is cleaner.
Quoted 109 lines
drivers/net/wireless/realtek/rtlwifi/rc.c +46
-9@@ -42,6 +42,23 @@ static u8 _rtl_rc_get_highest_rix(struct rtl_priv *rtlpriv,struct rtl_phy *rtlphy = &(rtlpriv->phy);struct rtl_sta_info *sta_entry =NULL ;u16 wireless_mode =0 ; +u8 nss; +struct ieee80211_tx_rate rate; + +switch (get_rf_type (rtlphy)) { +case RF_4T4R : + nss =4 ; +break ; +case RF_3T3R : + nss =3 ; +break ; +case RF_2T2R : + nss =2 ; +break ; +default : + nss =1 ; +break ; + }/* *this rate is no use for true rate, firmware @@ -66,28 +83,51 @@ static u8 _rtl_rc_get_highest_rix(struct rtl_priv *rtlpriv, }else if (wireless_mode ==WIRELESS_MODE_G ) {return G_MODE_MAX_RIX ; }else if (wireless_mode ==WIRELESS_MODE_N_24G ) { -if (get_rf_type (rtlphy) !=RF_2T2R ) +if (nss ==1 )return N_MODE_MCS7_RIX ;else return N_MODE_MCS15_RIX ; }else if (wireless_mode ==WIRELESS_MODE_AC_24G ) { -return AC_MODE_MCS9_RIX ; +if (sta->bandwidth ==IEEE80211_STA_RX_BW_20 ) { +ieee80211_rate_set_vht (&rate, +AC_MODE_MCS8_RIX , + nss); + goto out; + }else { +ieee80211_rate_set_vht (&rate, +AC_MODE_MCS9_RIX , + nss); + goto out; + } }return 0 ; }else {if (wireless_mode ==WIRELESS_MODE_A ) {return A_MODE_MAX_RIX ; }else if (wireless_mode ==WIRELESS_MODE_N_5G ) { -if (get_rf_type (rtlphy) !=RF_2T2R ) +if (nss ==1 )return N_MODE_MCS7_RIX ;else return N_MODE_MCS15_RIX ; }else if (wireless_mode ==WIRELESS_MODE_AC_5G ) { -return AC_MODE_MCS9_RIX ; +if (sta->bandwidth ==IEEE80211_STA_RX_BW_20 ) { +ieee80211_rate_set_vht (&rate, +AC_MODE_MCS8_RIX , + nss); + goto out; + }else { +ieee80211_rate_set_vht (&rate, +AC_MODE_MCS9_RIX , + nss); + goto out; + } }return 0 ; } } + +out: +return rate.idx; } static void _rtl_rc_rate_set_series(struct rtl_priv *rtlpriv,@@ -111,9 +151,6 @@ static void _rtl_rc_rate_set_series(struct rtl_priv *rtlpriv, } rate->count = tries; rate->idx = rix >=0x00 ? rix :0x00 ; -if (rtlpriv->rtlhal.hw_type ==HARDWARE_TYPE_RTL8812AE && - wireless_mode ==WIRELESS_MODE_AC_5G ) - rate->idx +=0x10 ;/*2NSS for 8812AE*/ if (!not_data) {if (txrc->short_preamble)@@ -126,10 +163,10 @@ static void _rtl_rc_rate_set_series(struct rtl_priv *rtlpriv,if (sta && sta->vht_cap.vht_supported) rate->flags |=IEEE80211_TX_RC_80_MHZ_WIDTH ; }else { -if (mac->bw_40) - rate->flags |=IEEE80211_TX_RC_40_MHZ_WIDTH ;if (mac->bw_80) rate->flags |=IEEE80211_TX_RC_80_MHZ_WIDTH ; +else if (mac->bw_40) + rate->flags |=IEEE80211_TX_RC_40_MHZ_WIDTH ; }if (sgi_20 || sgi_40 || sgi_80)
[email protected]
maintainerPATCH v2 7/10 rtlwifi: add definition radio_mask for RF and maximum bandwidth
In reply to [email protected]From: Ping-Ke Shih <[email protected]>
Add rf mask definition (BIT 0, BIT 1, BIT 2, ...) that is different from rf path definition (0, 1, 2, ...), and then combinations of rf path are possible.
--- drivers/net/wireless/realtek/rtlwifi/wifi.h | 8 ++++++++ 1 file changed, 8 insertions(+)
drivers/net/wireless/realtek/rtlwifi/wifi.h +8 -0
@@ -286,6 +286,13 @@ enum radio_path { RF90_PATH_D = 3, }; +enum radio_mask { +RF_MASK_A =BIT (0 ), +RF_MASK_B =BIT (1 ), +RF_MASK_C =BIT (2 ), +RF_MASK_D =BIT (3 ), +}; +enum regulation_txpwr_lmt {TXPWR_LMT_FCC =0 ,TXPWR_LMT_MKK =1 ,
@@ -579,6 +586,7 @@ enum ht_channel_width {HT_CHANNEL_WIDTH_20 =0 ,HT_CHANNEL_WIDTH_20_40 =1 ,HT_CHANNEL_WIDTH_80 =2 , + HT_CHANNEL_WIDTH_MAX, };/* Ref: 802.11i sepc D10.0 7.3.2.25.1
Signature · 1 line
2.15.1
[email protected]
maintainerPATCH v2 8/10 rtlwifi: add efuse ops for other components
In reply to [email protected]From: Ping-Ke Shih <[email protected]>
The new component phydm need to access efuse content, so we prepare ops for reference.
--- drivers/net/wireless/realtek/rtlwifi/efuse.c | 13 +++++++++++++ drivers/net/wireless/realtek/rtlwifi/efuse.h | 2 +- drivers/net/wireless/realtek/rtlwifi/pci.c | 1 + drivers/net/wireless/realtek/rtlwifi/wifi.h | 7 +++++++ 4 files changed, 22 insertions(+), 1 deletion(-)
drivers/net/wireless/realtek/rtlwifi/efuse.c +13 -0
@@ -50,6 +50,11 @@ static const struct efuse_map RTL8712_SDIO_EFUSE_TABLE[] = { {11, 0, 0, 28} }; +static const struct rtl_efuse_ops efuse_ops = { + .efuse_onebyte_read = efuse_one_byte_read, + .efuse_logical_map_read = efuse_shadow_read, +}; +static void efuse_shadow_read_1byte (struct ieee80211_hw *hw,u16 offset,u8 *value); static void efuse_shadow_read_2byte(struct ieee80211_hw *hw, u16 offset,
@@ -1364,3 +1369,11 @@ void rtl_fill_dummy(u8 *pfwbuf, u32 *pfwlen) *pfwlen = fwlen; }EXPORT_SYMBOL_GPL (rtl_fill_dummy); + +void rtl_efuse_ops_init (struct ieee80211_hw *hw) +{ +struct rtl_priv *rtlpriv =rtl_priv (hw); + + rtlpriv->efuse.efuse_ops = &efuse_ops; +} +EXPORT_SYMBOL_GPL (rtl_efuse_ops_init);
drivers/net/wireless/realtek/rtlwifi/efuse.h +1 -1
@@ -116,5 +116,5 @@ void rtl_fill_dummy(u8 *pfwbuf, u32 *pfwlen);void rtl_fw_page_write (struct ieee80211_hw *hw,u32 page,const u8 *buffer,u32 size);void rtl_fw_block_write (struct ieee80211_hw *hw,const u8 *buffer,u32 size); - +void rtl_efuse_ops_init (struct ieee80211_hw *hw);#endif
drivers/net/wireless/realtek/rtlwifi/pci.c +1 -0
@@ -2238,6 +2238,7 @@ int rtl_pci_probe(struct pci_dev *pdev, rtlpriv->cfg = (struct rtl_hal_cfg *)(id->driver_data); rtlpriv->intf_ops = &rtl_pci_ops; rtlpriv->glb_var = &rtl_global_var; +rtl_efuse_ops_init (hw);/* MEM map */ err =pci_request_regions (pdev,KBUILD_MODNAME );
drivers/net/wireless/realtek/rtlwifi/wifi.h +7 -0
@@ -1812,6 +1812,7 @@ struct rtl_dm {#define EFUSE_MAX_LOGICAL_SIZE 512struct rtl_efuse { +const struct rtl_efuse_ops *efuse_ops;bool autoLoad_ok;bool bootfromefuse;u16 max_physical_size;
@@ -1917,6 +1918,12 @@ struct rtl_efuse {u8 channel_plan; }; +struct rtl_efuse_ops { +int (*efuse_onebyte_read)(struct ieee80211_hw *hw,u16 addr,u8 *data); +void (*efuse_logical_map_read)(struct ieee80211_hw *hw,u8 type, +u16 offset,u32 *value); +}; +struct rtl_tx_report {atomic_t sn;u16 last_sent_sn;
Signature · 1 line
2.15.1
[email protected]
maintainerPATCH v2 9/10 rtlwifi: btcoex: add routine to set default port id
In reply to [email protected]From: Ping-Ke Shih <[email protected]>
Tell wifi and BT firmware the default port ID to set multiports' state properly, but only 8822be needs this function currently.
--- .../realtek/rtlwifi/btcoexist/halbtcoutsrc.c | 22 ++++++++++++++++++++++ .../realtek/rtlwifi/btcoexist/halbtcoutsrc.h | 2 ++ drivers/net/wireless/realtek/rtlwifi/wifi.h | 5 +++++ 3 files changed, 29 insertions(+)
drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtcoutsrc.c +22 -0
@@ -1039,6 +1039,28 @@ static void halbtc_fill_h2c_cmd(void *bt_context, u8 element_id, cmd_len, cmd_buf); } +void halbtc_send_wifi_port_id_cmd (void *bt_context) +{ +struct btc_coexist *btcoexist = (struct btc_coexist *)bt_context; +struct rtl_priv *rtlpriv = btcoexist->adapter; +u8 cmd_buf[1 ] = {0 };/* port id [2:0] = 0 */ + + rtlpriv->cfg->ops->fill_h2c_cmd (rtlpriv->mac80211.hw,H2C_BT_PORT_ID , +1 , cmd_buf); +} + +void halbtc_set_default_port_id_cmd (void *bt_context) +{ +struct btc_coexist *btcoexist = (struct btc_coexist *)bt_context; +struct rtl_priv *rtlpriv = btcoexist->adapter; +struct ieee80211_hw *hw = rtlpriv->mac80211.hw; + +if (!rtlpriv->cfg->ops->set_default_port_id_cmd) +return ; + + rtlpriv->cfg->ops->set_default_port_id_cmd (hw); +} +static void halbtc_set_bt_reg (void *btc_context,u8 reg_type,u32 offset,u32 set_val) {
drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtcoutsrc.h +2 -0
@@ -691,6 +691,8 @@ void exhalbtc_lps_leave(struct btc_coexist *btcoexist);void exhalbtc_low_wifi_traffic_notify (struct btc_coexist *btcoexist);void exhalbtc_set_single_ant_path (struct btc_coexist *btcoexist,u8 single_ant_path); +void halbtc_send_wifi_port_id_cmd (void *bt_context); +void halbtc_set_default_port_id_cmd (void *bt_context);/* The following are used by wifi_only case */ enum wifionly_chip_interface {
drivers/net/wireless/realtek/rtlwifi/wifi.h +5 -0
@@ -153,6 +153,10 @@ enum rtl8192c_h2c_cmd { MAX_H2CCMD }; +enum { +H2C_BT_PORT_ID =0x71 , +}; +#define GET_TX_REPORT_SN_V1 (c2h) (c2h[6])#define GET_TX_REPORT_ST_V1 (c2h) (c2h[0] & 0xC0)#define GET_TX_REPORT_RETRY_V1 (c2h) (c2h[2] & 0x3F)
@@ -2256,6 +2260,7 @@ struct rtl_hal_ops {void (*bt_coex_off_before_lps) (struct ieee80211_hw *hw);void (*fill_h2c_cmd) (struct ieee80211_hw *hw,u8 element_id,u32 cmd_len,u8 *p_cmdbuffer); +void (*set_default_port_id_cmd)(struct ieee80211_hw *hw);bool (*get_btc_status) (void );bool (*is_fw_header)(struct rtlwifi_firmware_header *hdr); u32 (*rx_command_packet)(struct ieee80211_hw *hw,
Signature · 1 line
2.15.1
[email protected]
maintainerPATCH v2 10/10 rtlwifi: btcoex: Add 8822be btcoex supported files for wifi only
In reply to [email protected]From: Ping-Ke Shih <[email protected]>
The wifi only btcoex is used to solo card (without BT), and it is also useful to exclude the interference with BT to make debug easier. There are only four ops for wifi only btcoex to initialze antenna and switch the settings while band is changed.
--- .../rtlwifi/btcoexist/halbtc8822bwifionly.c | 55 ++++++++++++++++++++++ .../rtlwifi/btcoexist/halbtc8822bwifionly.h | 25 ++++++++++ 2 files changed, 80 insertions(+) create mode 100644 drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtc8822bwifionly.c create mode 100644 drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtc8822bwifionly.h
drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtc8822bwifionly.c new file +55 -0
@@ -0,0 +1,55 @@ +/****************************************************************************** +* +* Copyright(c) 2016-2017 Realtek Corporation. +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of version 2 of the GNU General Public License as +* published by the Free Software Foundation. +* +* This program is distributed in the hope that it will be useful, but WITHOUT +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +* more details. +* +*****************************************************************************/ +#include "halbt_precomp.h" + +void ex_hal8822b_wifi_only_hw_config (struct wifi_only_cfg *wifionlycfg) +{ +/*BB control*/ +halwifionly_phy_set_bb_reg (wifionlycfg,0x4c ,0x01800000 ,0x2 ); +/*SW control*/ +halwifionly_phy_set_bb_reg (wifionlycfg,0xcb4 ,0xff ,0x77 ); +/*antenna mux switch */ +halwifionly_phy_set_bb_reg (wifionlycfg,0x974 ,0x300 ,0x3 ); + +halwifionly_phy_set_bb_reg (wifionlycfg,0x1990 ,0x300 ,0x0 ); + +halwifionly_phy_set_bb_reg (wifionlycfg,0xcbc ,0x80000 ,0x0 ); +/*switch to WL side controller and gnt_wl gnt_bt debug signal */ +halwifionly_phy_set_bb_reg (wifionlycfg,0x70 ,0xff000000 ,0x0e ); +/*gnt_wl=1 , gnt_bt=0*/ +halwifionly_phy_set_bb_reg (wifionlycfg,0x1704 ,0xffffffff ,0x7700 ); +halwifionly_phy_set_bb_reg (wifionlycfg,0x1700 ,0xffffffff ,0xc00f0038 ); +} + +void ex_hal8822b_wifi_only_scannotify (struct wifi_only_cfg *wifionlycfg, +u8 is_5g) +{ +hal8822b_wifi_only_switch_antenna (wifionlycfg, is_5g); +} + +void ex_hal8822b_wifi_only_switchbandnotify (struct wifi_only_cfg *wifionlycfg, +u8 is_5g) +{ +hal8822b_wifi_only_switch_antenna (wifionlycfg, is_5g); +} + +void hal8822b_wifi_only_switch_antenna (struct wifi_only_cfg *wifionlycfg, +u8 is_5g) +{ +if (is_5g) +halwifionly_phy_set_bb_reg (wifionlycfg,0xcbc ,0x300 ,0x1 ); +else +halwifionly_phy_set_bb_reg (wifionlycfg,0xcbc ,0x300 ,0x2 ); +}
drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtc8822bwifionly.h new file +25 -0
@@ -0,0 +1,25 @@ +/****************************************************************************** +* +* Copyright(c) 2016-2017 Realtek Corporation. +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of version 2 of the GNU General Public License as +* published by the Free Software Foundation. +* +* This program is distributed in the hope that it will be useful, but WITHOUT +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +* more details. +* +*****************************************************************************/ +#ifndef __INC_HAL8822BWIFIONLYHWCFG_H +#define __INC_HAL8822BWIFIONLYHWCFG_H + +void ex_hal8822b_wifi_only_hw_config (struct wifi_only_cfg *wifionlycfg); +void ex_hal8822b_wifi_only_scannotify (struct wifi_only_cfg *wifionlycfg, +u8 is_5g); +void ex_hal8822b_wifi_only_switchbandnotify (struct wifi_only_cfg *wifionlycfg, +u8 is_5g); +void hal8822b_wifi_only_switch_antenna (struct wifi_only_cfg *wifionlycfg, +u8 is_5g); +#endif
Signature · 1 line
2.15.1
Pkshih
maintainerT24gTW9uLCAyMDE4LTAxLTI5IGF0IDExOjI2ICswODAwLCBwa3NoaWhAcmVhbHRlay5jb20gd3Jv dGU6DQo+IEZyb206IFBpbmctS2UgU2hpaCA8cGtzaGloQHJlYWx0ZWsuY29tPg0KPiANCj4gSSBj b250aW51ZSB0byBzdWJtaXQgbW9yZSBtYXRlcmlhbHMgbmVlZGVkIGJ5IDg4MjJiZS4gQSBzcGVj aWFsIHBhdGNoIGlzDQo+ICJQQVRDSCAxMC8xMCIgdGhhdCBhZGQgbmV3IGZpbGVzIHRvIHN1cHBv cnQgODgyMmJlIGJ0Y29leCBpbiBjYXNlIHdpZmkNCj4gb25seS4gSW4gbXkgcGxhbiwgODgyMmJl IGJ0Y29leCBmb3IgY29tYm8gY2FyZCB3aWxsIGJlIHN1bWl0dGVkIGluIG5leHQNCj4gcGF0Y2hz ZXQuDQo+IA0KPiB2MjogQWRkICdBY2tlZC1ieTogTGFycnkgRmluZ2VyJyBpZiB0aGUgY29tbWl0 cyBhcmUgYWNrZWQNCj4gwqDCoMKgwqBVc2UgJ3N3aXRjaC4uLmNhc2UnIHRvIHJlcGxhY2UgdmVy Ym9zZSAnaWYuLi5lbHNlIGlmLi4uZWxzZSBpZi4uLmVsc2UnDQo+IMKgwqDCoMKgVXNlIGV4dGVy biBkZWNsYXJhdGlvbiB0byBxdWlldCBzcGFyc2Ugd2FybmluZ3MNCj4gDQo+IFBpbmctS2UgU2hp aCAoMTApOg0KPiDCoCBydGx3aWZpOiBlbmFibGUgbWFjODAyMTEgZmFzdC10eCBzdXBwb3J0DQo+ IMKgIHJ0bHdpZmk6IEFkZCBTdXBwb3J0IFZIVCB0byBzcGVjX3Zlcg0KPiDCoCBydGx3aWZpOiBV c2UgNiBiaXRzIGFzIHNlcXVlbmNlIG51bWJlciBvZiBUWCByZXBvcnQNCj4gwqAgcnRsd2lmaTog RXh0ZW5kIHR4X3Bvd2VyX2J5X3JhdGVfb2Zmc2V0IHNpemUgZm9yIG5ld2VyIElDDQo+IMKgIHJ0 bHdpZmk6IEFkZCByYXRlIHNlY3Rpb24gYW5kIGl0cyByZWxhdGVkIGRlZmluaXRpb24gYW5kIGNv bW1lbnQNCj4gwqAgcnRsd2lmaTogRml4IFZIVCBOU1MgaW4gUkMNCj4gwqAgcnRsd2lmaTogYWRk IGRlZmluaXRpb24gcmFkaW9fbWFzayBmb3IgUkYgYW5kIG1heGltdW0gYmFuZHdpZHRoDQo+IMKg IHJ0bHdpZmk6IGFkZCBlZnVzZSBvcHMgZm9yIG90aGVyIGNvbXBvbmVudHMNCj4gwqAgcnRsd2lm aTogYnRjb2V4OiBhZGQgcm91dGluZSB0byBzZXQgZGVmYXVsdCBwb3J0IGlkDQo+IMKgIHJ0bHdp Zmk6IGJ0Y29leDogQWRkIDg4MjJiZSBidGNvZXggc3VwcG9ydGVkIGZpbGVzIGZvciB3aWZpIG9u bHkNCj4gDQo+IMKgZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydGx3aWZpL2Jhc2UuY8Kg wqDCoMKgwqDCoMKgwqB8IDM0ICsrKysrKysrKystLS0NCj4gwqAuLi4vcnRsd2lmaS9idGNvZXhp c3QvaGFsYnRjODgyMmJ3aWZpb25seS5jwqDCoMKgwqDCoMKgwqDCoHwgNTUgKysrKysrKysrKysr KysrKysrKysrKw0KPiDCoC4uLi9ydGx3aWZpL2J0Y29leGlzdC9oYWxidGM4ODIyYndpZmlvbmx5 LmjCoMKgwqDCoMKgwqDCoMKgfCAyNSArKysrKysrKysrDQo+IMKgLi4uL3JlYWx0ZWsvcnRsd2lm aS9idGNvZXhpc3QvaGFsYnRjb3V0c3JjLmPCoMKgwqDCoMKgwqDCoHwgMjIgKysrKysrKysrDQo+ IMKgZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydGx3aWZpL2VmdXNlLmPCoMKgwqDCoMKg wqDCoHwgMTMgKysrKysNCj4gwqBkcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0bHdpZmkv ZWZ1c2UuaMKgwqDCoMKgwqDCoMKgfMKgwqAyICstDQo+IMKgZHJpdmVycy9uZXQvd2lyZWxlc3Mv cmVhbHRlay9ydGx3aWZpL3BjaS5jwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqAxICsNCj4gwqBkcml2 ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0bHdpZmkvcmMuY8KgwqDCoMKgwqDCoMKgwqDCoMKg fCA0OSArKysrKysrKysrKysrKystLS0tDQo+IMKgLi4uL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0 bHdpZmkvcnRsODgyMWFlL3N3LmPCoMKgwqDCoHzCoMKgMSArDQo+IMKgZHJpdmVycy9uZXQvd2ly ZWxlc3MvcmVhbHRlay9ydGx3aWZpL3dpZmkuaMKgwqDCoMKgwqDCoMKgwqB8IDM5ICsrKysrKysr KysrKystLQ0KPiDCoDEwIGZpbGVzIGNoYW5nZWQsIDIyMSBpbnNlcnRpb25zKCspLCAyMCBkZWxl dGlvbnMoLSkNCj4gwqBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVh bHRlay9ydGx3aWZpL2J0Y29leGlzdC9oYWxidGM4ODIyYndpZmlvbmx5LmMNCj4gwqBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydGx3aWZpL2J0Y29leGlz dC9oYWxidGM4ODIyYndpZmlvbmx5LmgNCj4gDQoNCkhpIEthbGxlLA0KDQpEbyB5b3UgaGF2ZSBh bnkgY29tbWVudCB3aXRoIHRoaXMgcGF0Y2hzZXQgdGhhdCBpcyBwZW5kaW5nIGZvciAyIHdlZWtz Pw0KDQpUaGFuayB5b3UNClBLDQo=
Quoted 10 lines · Pkshih
Quoted 9 lines · On Mon, 2018-01-29 at 11:26 +0800, [email protected] wrote:
From: Ping-Ke Shih <[email protected]>
=20
I continue to submit more materials needed by 8822be. A special patch is "PATCH 10/10" that add new files to support 8822be btcoex in case wifi only. In my plan, 8822be btcoex for combo card will be sumitted in next patchset.
=20
v2: Add 'Acked-by: Larry Finger' if the commits are acked =C2=A0=C2=A0=C2=A0=C2=A0Use 'switch...case' to replace verbose 'if...els=
e if...else if...else'
Quoted 13 lines
Quoted 13 lines
=C2=A0=C2=A0=C2=A0=C2=A0Use extern declaration to quiet sparse warnings =20
Ping-Ke Shih (10):
=C2=A0 rtlwifi: enable mac80211 fast-tx support
=C2=A0 rtlwifi: Add Support VHT tospec_ver
=C2=A0 rtlwifi: Use 6 bits as sequence number of TX report =C2=A0 rtlwifi: Extendtx_power_by_rate_offsetsize for newer IC =C2=A0 rtlwifi: Add rate section and its related definition and comment =C2=A0 rtlwifi: Fix VHT NSS in RC
=C2=A0 rtlwifi: add definitionradio_maskfor RF and maximum bandwidth =C2=A0 rtlwifi: add efuse ops for other components
=C2=A0 rtlwifi: btcoex: add routine to set default port id =C2=A0 rtlwifi: btcoex: Add 8822be btcoex supported files for wifi only
[...]
Quoted 1 line
Do you have any comment with this patchset that is pending for 2 weeks?
Normally I don't review or apply patches during when the merge window is open, only exception being important fixes going to wireless-drivers tree.
Also read this: https://wireless.wiki.kernel.org/en/developers/documentatio=
n/submittingpatches#checking_state_of_patches_from_patchwork
--=20
Kalle Valo