diff options
Diffstat (limited to 'drivers/net/wireless/rtlwifi/rtl8723ae')
18 files changed, 210 insertions, 987 deletions
diff --git a/drivers/net/wireless/rtlwifi/rtl8723ae/Makefile b/drivers/net/wireless/rtlwifi/rtl8723ae/Makefile index 4ed731f09b1..9c34a85fdb8 100644 --- a/drivers/net/wireless/rtlwifi/rtl8723ae/Makefile +++ b/drivers/net/wireless/rtlwifi/rtl8723ae/Makefile @@ -10,7 +10,6 @@ rtl8723ae-objs :=		\  		led.o		\  		phy.o		\  		pwrseq.o	\ -		pwrseqcmd.o	\  		rf.o		\  		sw.o		\  		table.o		\ diff --git a/drivers/net/wireless/rtlwifi/rtl8723ae/def.h b/drivers/net/wireless/rtlwifi/rtl8723ae/def.h index 8c110356dff..debe261a7ee 100644 --- a/drivers/net/wireless/rtlwifi/rtl8723ae/def.h +++ b/drivers/net/wireless/rtlwifi/rtl8723ae/def.h @@ -46,11 +46,6 @@  #define E_CUT_VERSION			BIT(14)  #define	RF_RL_ID			(BIT(31)|BIT(30)|BIT(29)|BIT(28)) -enum version_8723e { -	VERSION_TEST_UMC_CHIP_8723 = 0x0081, -	VERSION_NORMAL_UMC_CHIP_8723_1T1R_A_CUT = 0x0089, -	VERSION_NORMAL_UMC_CHIP_8723_1T1R_B_CUT = 0x1089, -};  /* MASK */  #define IC_TYPE_MASK			(BIT(0)|BIT(1)|BIT(2)) diff --git a/drivers/net/wireless/rtlwifi/rtl8723ae/dm.c b/drivers/net/wireless/rtlwifi/rtl8723ae/dm.c index a36eee28f9e..25cc83058b0 100644 --- a/drivers/net/wireless/rtlwifi/rtl8723ae/dm.c +++ b/drivers/net/wireless/rtlwifi/rtl8723ae/dm.c @@ -35,6 +35,7 @@  #include "def.h"  #include "phy.h"  #include "dm.h" +#include "../rtl8723com/dm_common.h"  #include "fw.h"  #include "hal_btc.h" @@ -483,16 +484,6 @@ static void rtl8723ae_dm_dig(struct ieee80211_hw *hw)  	rtl8723ae_dm_ctrl_initgain_by_twoport(hw);  } -static void rtl8723ae_dm_init_dynamic_txpower(struct ieee80211_hw *hw) -{ -	struct rtl_priv *rtlpriv = rtl_priv(hw); - -	rtlpriv->dm.dynamic_txpower_enable = false; - -	rtlpriv->dm.last_dtp_lvl = TXHIGHPWRLEVEL_NORMAL; -	rtlpriv->dm.dynamic_txhighpower_lvl = TXHIGHPWRLEVEL_NORMAL; -} -  static void rtl8723ae_dm_dynamic_txpower(struct ieee80211_hw *hw)  {  	struct rtl_priv *rtlpriv = rtl_priv(hw); @@ -585,19 +576,6 @@ void rtl8723ae_dm_write_dig(struct ieee80211_hw *hw)  	}  } -static void rtl8723ae_dm_pwdmonitor(struct ieee80211_hw *hw) -{ -} - -void rtl8723ae_dm_init_edca_turbo(struct ieee80211_hw *hw) -{ -	struct rtl_priv *rtlpriv = rtl_priv(hw); - -	rtlpriv->dm.current_turbo_edca = false; -	rtlpriv->dm.is_any_nonbepkts = false; -	rtlpriv->dm.is_cur_rdlstate = false; -} -  static void rtl8723ae_dm_check_edca_turbo(struct ieee80211_hw *hw)  {  	struct rtl_priv *rtlpriv = rtl_priv(hw); @@ -669,9 +647,8 @@ static void rtl8723ae_dm_check_edca_turbo(struct ieee80211_hw *hw)  	} else {  		if (rtlpriv->dm.current_turbo_edca) {  			u8 tmp = AC0_BE; -			rtlpriv->cfg->ops->set_hw_reg(hw, -						      HW_VAR_AC_PARAM, -						      (u8 *) (&tmp)); +			rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_AC_PARAM, +						      &tmp);  			rtlpriv->dm.current_turbo_edca = false;  		}  	} @@ -778,17 +755,6 @@ static void rtl8723ae_dm_refresh_rate_adaptive_mask(struct ieee80211_hw *hw)  	}  } -static void rtl8723ae_dm_init_dynamic_bpowersaving(struct ieee80211_hw *hw) -{ -	struct rtl_priv *rtlpriv = rtl_priv(hw); - -	rtlpriv->dm_pstable.pre_ccastate = CCA_MAX; -	rtlpriv->dm_pstable.cur_ccasate = CCA_MAX; -	rtlpriv->dm_pstable.pre_rfstate = RF_MAX; -	rtlpriv->dm_pstable.cur_rfstate = RF_MAX; -	rtlpriv->dm_pstable.rssi_val_min = 0; -} -  void rtl8723ae_dm_rf_saving(struct ieee80211_hw *hw, u8 force_in_normal)  {  	struct rtl_priv *rtlpriv = rtl_priv(hw); @@ -905,11 +871,11 @@ void rtl8723ae_dm_init(struct ieee80211_hw *hw)  	rtlpriv->dm.dm_type = DM_TYPE_BYDRIVER;  	rtl8723ae_dm_diginit(hw); -	rtl8723ae_dm_init_dynamic_txpower(hw); -	rtl8723ae_dm_init_edca_turbo(hw); +	rtl8723_dm_init_dynamic_txpower(hw); +	rtl8723_dm_init_edca_turbo(hw);  	rtl8723ae_dm_init_rate_adaptive_mask(hw);  	rtl8723ae_dm_initialize_txpower_tracking(hw); -	rtl8723ae_dm_init_dynamic_bpowersaving(hw); +	rtl8723_dm_init_dynamic_bb_powersaving(hw);  }  void rtl8723ae_dm_watchdog(struct ieee80211_hw *hw) @@ -930,7 +896,6 @@ void rtl8723ae_dm_watchdog(struct ieee80211_hw *hw)  	if ((ppsc->rfpwr_state == ERFON) &&  	    ((!fw_current_inpsmode) && fw_ps_awake) &&  	    (!ppsc->rfchange_inprogress)) { -		rtl8723ae_dm_pwdmonitor(hw);  		rtl8723ae_dm_dig(hw);  		rtl8723ae_dm_false_alarm_counter_statistics(hw);  		rtl8723ae_dm_dynamic_bpowersaving(hw); diff --git a/drivers/net/wireless/rtlwifi/rtl8723ae/dm.h b/drivers/net/wireless/rtlwifi/rtl8723ae/dm.h index a372b020445..d253bb53d03 100644 --- a/drivers/net/wireless/rtlwifi/rtl8723ae/dm.h +++ b/drivers/net/wireless/rtlwifi/rtl8723ae/dm.h @@ -147,7 +147,6 @@ enum dm_dig_connect_e {  void rtl8723ae_dm_init(struct ieee80211_hw *hw);  void rtl8723ae_dm_watchdog(struct ieee80211_hw *hw);  void rtl8723ae_dm_write_dig(struct ieee80211_hw *hw); -void rtl8723ae_dm_init_edca_turbo(struct ieee80211_hw *hw);  void rtl8723ae_dm_init_rate_adaptive_mask(struct ieee80211_hw *hw);  void rtl8723ae_dm_rf_saving(struct ieee80211_hw *hw, u8 bforce_in_normal);  void rtl8723ae_dm_bt_coexist(struct ieee80211_hw *hw); diff --git a/drivers/net/wireless/rtlwifi/rtl8723ae/fw.c b/drivers/net/wireless/rtlwifi/rtl8723ae/fw.c index ba1502b172a..728b7563ad3 100644 --- a/drivers/net/wireless/rtlwifi/rtl8723ae/fw.c +++ b/drivers/net/wireless/rtlwifi/rtl8723ae/fw.c @@ -34,199 +34,7 @@  #include "reg.h"  #include "def.h"  #include "fw.h" - -static void _rtl8723ae_enable_fw_download(struct ieee80211_hw *hw, bool enable) -{ -	struct rtl_priv *rtlpriv = rtl_priv(hw); -	u8 tmp; -	if (enable) { -		tmp = rtl_read_byte(rtlpriv, REG_SYS_FUNC_EN + 1); -		rtl_write_byte(rtlpriv, REG_SYS_FUNC_EN + 1, tmp | 0x04); - -		tmp = rtl_read_byte(rtlpriv, REG_MCUFWDL); -		rtl_write_byte(rtlpriv, REG_MCUFWDL, tmp | 0x01); - -		tmp = rtl_read_byte(rtlpriv, REG_MCUFWDL + 2); -		rtl_write_byte(rtlpriv, REG_MCUFWDL + 2, tmp & 0xf7); -	} else { -		tmp = rtl_read_byte(rtlpriv, REG_MCUFWDL); -		rtl_write_byte(rtlpriv, REG_MCUFWDL, tmp & 0xfe); - -		rtl_write_byte(rtlpriv, REG_MCUFWDL + 1, 0x00); -	} -} - -static void _rtl8723ae_fw_block_write(struct ieee80211_hw *hw, -				      const u8 *buffer, u32 size) -{ -	struct rtl_priv *rtlpriv = rtl_priv(hw); -	u32 blockSize = sizeof(u32); -	u8 *bufferPtr = (u8 *) buffer; -	u32 *pu4BytePtr = (u32 *) buffer; -	u32 i, offset, blockCount, remainSize; - -	blockCount = size / blockSize; -	remainSize = size % blockSize; - -	for (i = 0; i < blockCount; i++) { -		offset = i * blockSize; -		rtl_write_dword(rtlpriv, (FW_8192C_START_ADDRESS + offset), -				*(pu4BytePtr + i)); -	} - -	if (remainSize) { -		offset = blockCount * blockSize; -		bufferPtr += offset; -		for (i = 0; i < remainSize; i++) { -			rtl_write_byte(rtlpriv, (FW_8192C_START_ADDRESS + -						 offset + i), *(bufferPtr + i)); -		} -	} -} - -static void _rtl8723ae_fw_page_write(struct ieee80211_hw *hw, -				     u32 page, const u8 *buffer, u32 size) -{ -	struct rtl_priv *rtlpriv = rtl_priv(hw); -	u8 value8; -	u8 u8page = (u8) (page & 0x07); - -	value8 = (rtl_read_byte(rtlpriv, REG_MCUFWDL + 2) & 0xF8) | u8page; - -	rtl_write_byte(rtlpriv, (REG_MCUFWDL + 2), value8); -	_rtl8723ae_fw_block_write(hw, buffer, size); -} - -static void _rtl8723ae_write_fw(struct ieee80211_hw *hw, -				enum version_8723e version, u8 *buffer, -				u32 size) -{ -	struct rtl_priv *rtlpriv = rtl_priv(hw); -	u8 *bufferPtr = (u8 *) buffer; -	u32 page_nums, remain_size; -	u32 page, offset; - -	RT_TRACE(rtlpriv, COMP_FW, DBG_TRACE, "FW size is %d bytes,\n", size); - -	page_nums = size / FW_8192C_PAGE_SIZE; -	remain_size = size % FW_8192C_PAGE_SIZE; - -	if (page_nums > 6) { -		RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, -			 "Page numbers should not be greater then 6\n"); -	} - -	for (page = 0; page < page_nums; page++) { -		offset = page * FW_8192C_PAGE_SIZE; -		_rtl8723ae_fw_page_write(hw, page, (bufferPtr + offset), -					 FW_8192C_PAGE_SIZE); -	} - -	if (remain_size) { -		offset = page_nums * FW_8192C_PAGE_SIZE; -		page = page_nums; -		_rtl8723ae_fw_page_write(hw, page, (bufferPtr + offset), -					 remain_size); -	} - -	RT_TRACE(rtlpriv, COMP_FW, DBG_TRACE, "FW write done.\n"); -} - -static int _rtl8723ae_fw_free_to_go(struct ieee80211_hw *hw) -{ -	struct rtl_priv *rtlpriv = rtl_priv(hw); -	int err = -EIO; -	u32 counter = 0; -	u32 value32; - -	do { -		value32 = rtl_read_dword(rtlpriv, REG_MCUFWDL); -	} while ((counter++ < FW_8192C_POLLING_TIMEOUT_COUNT) && -		 (!(value32 & FWDL_ChkSum_rpt))); - -	if (counter >= FW_8192C_POLLING_TIMEOUT_COUNT) { -		RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, -			 "chksum report faill ! REG_MCUFWDL:0x%08x .\n", -			 value32); -		goto exit; -	} - -	RT_TRACE(rtlpriv, COMP_FW, DBG_TRACE, -		 "Checksum report OK ! REG_MCUFWDL:0x%08x .\n", value32); - -	value32 = rtl_read_dword(rtlpriv, REG_MCUFWDL); -	value32 |= MCUFWDL_RDY; -	value32 &= ~WINTINI_RDY; -	rtl_write_dword(rtlpriv, REG_MCUFWDL, value32); - -	counter = 0; - -	do { -		value32 = rtl_read_dword(rtlpriv, REG_MCUFWDL); -		if (value32 & WINTINI_RDY) { -			RT_TRACE(rtlpriv, COMP_FW, DBG_TRACE, -				 "Polling FW ready success!! REG_MCUFWDL:0x%08x .\n", -				 value32); -			err = 0; -			goto exit; -		} - -		mdelay(FW_8192C_POLLING_DELAY); - -	} while (counter++ < FW_8192C_POLLING_TIMEOUT_COUNT); - -	RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, -		 "Polling FW ready fail!! REG_MCUFWDL:0x%08x .\n", value32); - -exit: -	return err; -} - -int rtl8723ae_download_fw(struct ieee80211_hw *hw) -{ -	struct rtl_priv *rtlpriv = rtl_priv(hw); -	struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw)); -	struct rtl8723ae_firmware_header *pfwheader; -	u8 *pfwdata; -	u32 fwsize; -	int err; -	enum version_8723e version = rtlhal->version; - -	if (!rtlhal->pfirmware) -		return 1; - -	pfwheader = (struct rtl8723ae_firmware_header *)rtlhal->pfirmware; -	pfwdata = (u8 *) rtlhal->pfirmware; -	fwsize = rtlhal->fwsize; - -	if (IS_FW_HEADER_EXIST(pfwheader)) { -		RT_TRACE(rtlpriv, COMP_FW, DBG_DMESG, -			 "Firmware Version(%d), Signature(%#x),Size(%d)\n", -			 pfwheader->version, pfwheader->signature, -			 (int)sizeof(struct rtl8723ae_firmware_header)); - -		pfwdata = pfwdata + sizeof(struct rtl8723ae_firmware_header); -		fwsize = fwsize - sizeof(struct rtl8723ae_firmware_header); -	} - -	if (rtl_read_byte(rtlpriv, REG_MCUFWDL)&BIT(7)) { -		rtl8723ae_firmware_selfreset(hw); -		rtl_write_byte(rtlpriv, REG_MCUFWDL, 0x00); -	} -	_rtl8723ae_enable_fw_download(hw, true); -	_rtl8723ae_write_fw(hw, version, pfwdata, fwsize); -	_rtl8723ae_enable_fw_download(hw, false); - -	err = _rtl8723ae_fw_free_to_go(hw); -	if (err) { -		RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, -			 "Firmware is not ready to run!\n"); -	} else { -		RT_TRACE(rtlpriv, COMP_FW, DBG_TRACE, -			 "Firmware is ready to run!\n"); -	} -	return 0; -} +#include "../rtl8723com/fw_common.h"  static bool rtl8723ae_check_fw_read_last_h2c(struct ieee80211_hw *hw, u8 boxnum)  { @@ -463,50 +271,6 @@ void rtl8723ae_fill_h2c_cmd(struct ieee80211_hw *hw,  	return;  } -void rtl8723ae_firmware_selfreset(struct ieee80211_hw *hw) -{ -	u8 u1tmp; -	u8 delay = 100; -	struct rtl_priv *rtlpriv = rtl_priv(hw); - -	rtl_write_byte(rtlpriv, REG_HMETFR + 3, 0x20); -	u1tmp = rtl_read_byte(rtlpriv, REG_SYS_FUNC_EN + 1); - -	while (u1tmp & BIT(2)) { -		delay--; -		if (delay == 0) -			break; -		udelay(50); -		u1tmp = rtl_read_byte(rtlpriv, REG_SYS_FUNC_EN + 1); -	} -	if (delay == 0) { -		u1tmp = rtl_read_byte(rtlpriv, REG_SYS_FUNC_EN + 1); -		rtl_write_byte(rtlpriv, REG_SYS_FUNC_EN + 1, u1tmp&(~BIT(2))); -	} -} - -void rtl8723ae_set_fw_pwrmode_cmd(struct ieee80211_hw *hw, u8 mode) -{ -	struct rtl_priv *rtlpriv = rtl_priv(hw); -	u8 u1_h2c_set_pwrmode[3] = { 0 }; -	struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw)); - -	RT_TRACE(rtlpriv, COMP_POWER, DBG_LOUD, "FW LPS mode = %d\n", mode); - -	SET_H2CCMD_PWRMODE_PARM_MODE(u1_h2c_set_pwrmode, mode); -	SET_H2CCMD_PWRMODE_PARM_SMART_PS(u1_h2c_set_pwrmode, -					 (rtlpriv->mac80211.p2p) ? -					 ppsc->smart_ps : 1); -	SET_H2CCMD_PWRMODE_PARM_BCN_PASS_TIME(u1_h2c_set_pwrmode, -					      ppsc->reg_max_lps_awakeintvl); - -	RT_PRINT_DATA(rtlpriv, COMP_CMD, DBG_DMESG, -		      "rtl8723ae_set_fw_rsvdpagepkt(): u1_h2c_set_pwrmode\n", -		      u1_h2c_set_pwrmode, 3); -	rtl8723ae_fill_h2c_cmd(hw, H2C_SETPWRMODE, 3, u1_h2c_set_pwrmode); - -} -  static bool _rtl8723ae_cmd_send_packet(struct ieee80211_hw *hw,  				       struct sk_buff *skb)  { @@ -812,7 +576,6 @@ void rtl8723ae_set_p2p_ps_offload_cmd(struct ieee80211_hw *hw, u8 p2p_ps_state)  			rtl_write_byte(rtlpriv, REG_DUAL_TSF_RST, BIT(4));  			p2p_ps_offload->offload_en = 1; -  			if (P2P_ROLE_GO == rtlpriv->mac80211.p2p) {  				p2p_ps_offload->role = 1;  				p2p_ps_offload->allstasleep = 0; @@ -836,3 +599,24 @@ void rtl8723ae_set_p2p_ps_offload_cmd(struct ieee80211_hw *hw, u8 p2p_ps_state)  	}  	rtl8723ae_fill_h2c_cmd(hw, H2C_P2P_PS_OFFLOAD, 1, (u8 *)p2p_ps_offload);  } + +void rtl8723ae_set_fw_pwrmode_cmd(struct ieee80211_hw *hw, u8 mode) +{ +	struct rtl_priv *rtlpriv = rtl_priv(hw); +	u8 u1_h2c_set_pwrmode[3] = { 0 }; +	struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw)); + +	RT_TRACE(rtlpriv, COMP_POWER, DBG_LOUD, "FW LPS mode = %d\n", mode); + +	SET_H2CCMD_PWRMODE_PARM_MODE(u1_h2c_set_pwrmode, mode); +	SET_H2CCMD_PWRMODE_PARM_SMART_PS_23A(u1_h2c_set_pwrmode, +					     (rtlpriv->mac80211.p2p) ? +					     ppsc->smart_ps : 1); +	SET_H2CCMD_PWRMODE_PARM_BCN_PASS_TIME(u1_h2c_set_pwrmode, +					      ppsc->reg_max_lps_awakeintvl); + +	RT_PRINT_DATA(rtlpriv, COMP_CMD, DBG_DMESG, +		      "rtl8723ae_set_fw_rsvdpagepkt(): u1_h2c_set_pwrmode\n", +		      u1_h2c_set_pwrmode, 3); +	rtl8723ae_fill_h2c_cmd(hw, H2C_SETPWRMODE, 3, u1_h2c_set_pwrmode); +} diff --git a/drivers/net/wireless/rtlwifi/rtl8723ae/fw.h b/drivers/net/wireless/rtlwifi/rtl8723ae/fw.h index ed3b795e698..d355b85dd9f 100644 --- a/drivers/net/wireless/rtlwifi/rtl8723ae/fw.h +++ b/drivers/net/wireless/rtlwifi/rtl8723ae/fw.h @@ -34,7 +34,7 @@  #define FW_8192C_END_ADDRESS			0x3FFF  #define FW_8192C_PAGE_SIZE			4096  #define FW_8192C_POLLING_DELAY			5 -#define FW_8192C_POLLING_TIMEOUT_COUNT		1000 +#define FW_8192C_POLLING_TIMEOUT_COUNT		6000  #define BEACON_PG				0  #define PSPOLL_PG				2 @@ -65,21 +65,9 @@ struct rtl8723ae_firmware_header {  	u32 rsvd5;  }; -enum rtl8192c_h2c_cmd { -	H2C_AP_OFFLOAD = 0, -	H2C_SETPWRMODE = 1, -	H2C_JOINBSSRPT = 2, -	H2C_RSVDPAGE = 3, -	H2C_RSSI_REPORT = 4, -	H2C_P2P_PS_CTW_CMD = 5, -	H2C_P2P_PS_OFFLOAD = 6, -	H2C_RA_MASK = 7, -	MAX_H2CCMD -}; -  #define SET_H2CCMD_PWRMODE_PARM_MODE(__ph2ccmd, __val)			\  	SET_BITS_TO_LE_1BYTE(__ph2ccmd, 0, 8, __val) -#define SET_H2CCMD_PWRMODE_PARM_SMART_PS(__ph2ccmd, __val)		\ +#define SET_H2CCMD_PWRMODE_PARM_SMART_PS_23A(__ph2ccmd, __val)		\  	SET_BITS_TO_LE_1BYTE((__ph2ccmd)+1, 0, 8, __val)  #define SET_H2CCMD_PWRMODE_PARM_BCN_PASS_TIME(__ph2ccmd, __val)	\  	SET_BITS_TO_LE_1BYTE((__ph2ccmd)+2, 0, 8, __val) @@ -92,10 +80,8 @@ enum rtl8192c_h2c_cmd {  #define SET_H2CCMD_RSVDPAGE_LOC_NULL_DATA(__ph2ccmd, __val)		\  	SET_BITS_TO_LE_1BYTE((__ph2ccmd)+2, 0, 8, __val) -int rtl8723ae_download_fw(struct ieee80211_hw *hw);  void rtl8723ae_fill_h2c_cmd(struct ieee80211_hw *hw, u8 element_id,  			    u32 cmd_len, u8 *p_cmdbuffer); -void rtl8723ae_firmware_selfreset(struct ieee80211_hw *hw);  void rtl8723ae_set_fw_pwrmode_cmd(struct ieee80211_hw *hw, u8 mode);  void rtl8723ae_set_fw_rsvdpagepkt(struct ieee80211_hw *hw, bool b_dl_finished);  void rtl8723ae_set_fw_joinbss_report_cmd(struct ieee80211_hw *hw, u8 mstatus); diff --git a/drivers/net/wireless/rtlwifi/rtl8723ae/hal_bt_coexist.c b/drivers/net/wireless/rtlwifi/rtl8723ae/hal_bt_coexist.c index 3d092e4b0b7..5b4a714f3c8 100644 --- a/drivers/net/wireless/rtlwifi/rtl8723ae/hal_bt_coexist.c +++ b/drivers/net/wireless/rtlwifi/rtl8723ae/hal_bt_coexist.c @@ -31,6 +31,7 @@  #include "../pci.h"  #include "dm.h"  #include "fw.h" +#include "../rtl8723com/fw_common.h"  #include "phy.h"  #include "reg.h"  #include "hal_btc.h" diff --git a/drivers/net/wireless/rtlwifi/rtl8723ae/hal_btc.c b/drivers/net/wireless/rtlwifi/rtl8723ae/hal_btc.c index 68c28340f79..5d534df8d90 100644 --- a/drivers/net/wireless/rtlwifi/rtl8723ae/hal_btc.c +++ b/drivers/net/wireless/rtlwifi/rtl8723ae/hal_btc.c @@ -30,7 +30,9 @@  #include "hal_btc.h"  #include "../pci.h"  #include "phy.h" +#include "../rtl8723com/phy_common.h"  #include "fw.h" +#include "../rtl8723com/fw_common.h"  #include "reg.h"  #include "def.h" @@ -391,13 +393,13 @@ static void rtl8723ae_dm_bt_set_sw_full_time_dac_swing(struct ieee80211_hw *hw,  	if (sw_dac_swing_on) {  		RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_TRACE,  			 "[BTCoex], SwDacSwing = 0x%x\n", sw_dac_swing_lvl); -		rtl8723ae_phy_set_bb_reg(hw, 0x880, 0xff000000, -					 sw_dac_swing_lvl); +		rtl8723_phy_set_bb_reg(hw, 0x880, 0xff000000, +				       sw_dac_swing_lvl);  		rtlpcipriv->bt_coexist.sw_coexist_all_off = false;  	} else {  		RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_TRACE,  			 "[BTCoex], SwDacSwing Off!\n"); -		rtl8723ae_phy_set_bb_reg(hw, 0x880, 0xff000000, 0xc0); +		rtl8723_phy_set_bb_reg(hw, 0x880, 0xff000000, 0xc0);  	}  } diff --git a/drivers/net/wireless/rtlwifi/rtl8723ae/hw.c b/drivers/net/wireless/rtlwifi/rtl8723ae/hw.c index c333dfd116b..87f69166a7e 100644 --- a/drivers/net/wireless/rtlwifi/rtl8723ae/hw.c +++ b/drivers/net/wireless/rtlwifi/rtl8723ae/hw.c @@ -38,10 +38,11 @@  #include "def.h"  #include "phy.h"  #include "dm.h" +#include "../rtl8723com/dm_common.h"  #include "fw.h" +#include "../rtl8723com/fw_common.h"  #include "led.h"  #include "hw.h" -#include "pwrseqcmd.h"  #include "pwrseq.h"  #include "btc.h" @@ -206,14 +207,13 @@ void rtl8723ae_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val)  		rtl_write_byte(rtlpriv, REG_SLOT, val[0]);  		for (e_aci = 0; e_aci < AC_MAX; e_aci++) { -			rtlpriv->cfg->ops->set_hw_reg(hw, -						      HW_VAR_AC_PARAM, -						      (u8 *) (&e_aci)); +			rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_AC_PARAM, +						      &e_aci);  		}  		break; }  	case HW_VAR_ACK_PREAMBLE:{  		u8 reg_tmp; -		u8 short_preamble = (bool) (*(u8 *) val); +		u8 short_preamble = (bool)*val;  		reg_tmp = (mac->cur_40_prime_sc) << 5;  		if (short_preamble)  			reg_tmp |= 0x80; @@ -224,7 +224,7 @@ void rtl8723ae_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val)  		u8 min_spacing_to_set;  		u8 sec_min_space; -		min_spacing_to_set = *((u8 *) val); +		min_spacing_to_set = *val;  		if (min_spacing_to_set <= 7) {  			sec_min_space = 0; @@ -248,7 +248,7 @@ void rtl8723ae_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val)  	case HW_VAR_SHORTGI_DENSITY:{  		u8 density_to_set; -		density_to_set = *((u8 *) val); +		density_to_set = *val;  		mac->min_space_cfg |= (density_to_set << 3);  		RT_TRACE(rtlpriv, COMP_MLME, DBG_LOUD, @@ -272,7 +272,7 @@ void rtl8723ae_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val)  		else  			p_regtoset = regtoset_normal; -		factor_toset = *((u8 *) val); +		factor_toset = *val;  		if (factor_toset <= 3) {  			factor_toset = (1 << (factor_toset + 2));  			if (factor_toset > 0xf) @@ -303,16 +303,15 @@ void rtl8723ae_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val)  		}  		break; }  	case HW_VAR_AC_PARAM:{ -		u8 e_aci = *((u8 *) val); -		rtl8723ae_dm_init_edca_turbo(hw); +		u8 e_aci = *val; +		rtl8723_dm_init_edca_turbo(hw); -		if (rtlpci->acm_method != eAcmWay2_SW) -			rtlpriv->cfg->ops->set_hw_reg(hw, -						      HW_VAR_ACM_CTRL, -						      (u8 *) (&e_aci)); +		if (rtlpci->acm_method != EACMWAY2_SW) +			rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_ACM_CTRL, +						      &e_aci);  		break; }  	case HW_VAR_ACM_CTRL:{ -		u8 e_aci = *((u8 *) val); +		u8 e_aci = *val;  		union aci_aifsn *p_aci_aifsn =  		    (union aci_aifsn *)(&(mac->ac[0].aifs));  		u8 acm = p_aci_aifsn->f.acm; @@ -365,7 +364,7 @@ void rtl8723ae_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val)  		rtlpci->receive_config = ((u32 *) (val))[0];  		break;  	case HW_VAR_RETRY_LIMIT:{ -		u8 retry_limit = ((u8 *) (val))[0]; +		u8 retry_limit = *val;  		rtl_write_word(rtlpriv, REG_RL,  			       retry_limit << RETRY_LIMIT_SHORT_SHIFT | @@ -378,13 +377,13 @@ void rtl8723ae_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val)  		rtlefuse->efuse_usedbytes = *((u16 *) val);  		break;  	case HW_VAR_EFUSE_USAGE: -		rtlefuse->efuse_usedpercentage = *((u8 *) val); +		rtlefuse->efuse_usedpercentage = *val;  		break;  	case HW_VAR_IO_CMD:  		rtl8723ae_phy_set_io_cmd(hw, (*(enum io_type *)val));  		break;  	case HW_VAR_WPA_CONFIG: -		rtl_write_byte(rtlpriv, REG_SECCFG, *((u8 *) val)); +		rtl_write_byte(rtlpriv, REG_SECCFG, *val);  		break;  	case HW_VAR_SET_RPWM:{  		u8 rpwm_val; @@ -393,27 +392,25 @@ void rtl8723ae_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val)  		udelay(1);  		if (rpwm_val & BIT(7)) { -			rtl_write_byte(rtlpriv, REG_PCIE_HRPWM, -				       (*(u8 *) val)); +			rtl_write_byte(rtlpriv, REG_PCIE_HRPWM, *val);  		} else { -			rtl_write_byte(rtlpriv, REG_PCIE_HRPWM, -				       ((*(u8 *) val) | BIT(7))); +			rtl_write_byte(rtlpriv, REG_PCIE_HRPWM, *val | BIT(7));  		}  		break; }  	case HW_VAR_H2C_FW_PWRMODE:{ -		u8 psmode = (*(u8 *) val); +		u8 psmode = *val;  		if (psmode != FW_PS_ACTIVE_MODE)  			rtl8723ae_dm_rf_saving(hw, true); -		rtl8723ae_set_fw_pwrmode_cmd(hw, (*(u8 *) val)); +		rtl8723ae_set_fw_pwrmode_cmd(hw, *val);  		break; }  	case HW_VAR_FW_PSMODE_STATUS:  		ppsc->fw_current_inpsmode = *((bool *) val);  		break;  	case HW_VAR_H2C_FW_JOINBSSRPT:{ -		u8 mstatus = (*(u8 *) val); +		u8 mstatus = *val;  		u8 tmp_regcr, tmp_reg422;  		bool recover = false; @@ -446,11 +443,11 @@ void rtl8723ae_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val)  			rtl_write_byte(rtlpriv, REG_CR + 1,  				       (tmp_regcr & ~(BIT(0))));  		} -		rtl8723ae_set_fw_joinbss_report_cmd(hw, (*(u8 *) val)); +		rtl8723ae_set_fw_joinbss_report_cmd(hw, *val);  		break; }  	case HW_VAR_H2C_FW_P2P_PS_OFFLOAD: -		rtl8723ae_set_p2p_ps_offload_cmd(hw, (*(u8 *)val)); +		rtl8723ae_set_p2p_ps_offload_cmd(hw, *val);  		break;  	case HW_VAR_AID:{  		u16 u2btmp; @@ -460,7 +457,7 @@ void rtl8723ae_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val)  				mac->assoc_id));  		break; }  	case HW_VAR_CORRECT_TSF:{ -		u8 btype_ibss = ((u8 *) (val))[0]; +		u8 btype_ibss = *val;  		if (btype_ibss == true)  			_rtl8723ae_stop_tx_beacon(hw); @@ -490,20 +487,18 @@ void rtl8723ae_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val)  					(u8 *)(&fw_current_inps));  			rtlpriv->cfg->ops->set_hw_reg(hw,  					HW_VAR_H2C_FW_PWRMODE, -					(u8 *)(&ppsc->fwctrl_psmode)); +					&ppsc->fwctrl_psmode); -			rtlpriv->cfg->ops->set_hw_reg(hw, -					HW_VAR_SET_RPWM, -					(u8 *)(&rpwm_val)); +			rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_SET_RPWM, +						      &rpwm_val);  		} else {  			rpwm_val = 0x0C;	/* RF on */  			fw_pwrmode = FW_PS_ACTIVE_MODE;  			fw_current_inps = false;  			rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_SET_RPWM, -					(u8 *)(&rpwm_val)); -			rtlpriv->cfg->ops->set_hw_reg(hw, -					HW_VAR_H2C_FW_PWRMODE, -					(u8 *)(&fw_pwrmode)); +						      &rpwm_val); +			rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_H2C_FW_PWRMODE, +						      &fw_pwrmode);  			rtlpriv->cfg->ops->set_hw_reg(hw,  					HW_VAR_FW_PSMODE_STATUS, @@ -880,23 +875,33 @@ int rtl8723ae_hw_init(struct ieee80211_hw *hw)  	bool rtstatus = true;  	int err;  	u8 tmp_u1b; +	unsigned long flags;  	rtlpriv->rtlhal.being_init_adapter = true; +	/* As this function can take a very long time (up to 350 ms) +	 * and can be called with irqs disabled, reenable the irqs +	 * to let the other devices continue being serviced. +	 * +	 * It is safe doing so since our own interrupts will only be enabled +	 * in a subsequent step. +	 */ +	local_save_flags(flags); +	local_irq_enable(); +  	rtlpriv->intf_ops->disable_aspm(hw);  	rtstatus = _rtl8712e_init_mac(hw);  	if (rtstatus != true) {  		RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, "Init MAC failed\n");  		err = 1; -		return err; +		goto exit;  	} -	err = rtl8723ae_download_fw(hw); +	err = rtl8723_download_fw(hw, false);  	if (err) {  		RT_TRACE(rtlpriv, COMP_ERR, DBG_WARNING,  			 "Failed to download FW. Init HW without FW now..\n");  		err = 1; -		rtlhal->fw_ready = false; -		return err; +		goto exit;  	} else {  		rtlhal->fw_ready = true;  	} @@ -971,6 +976,8 @@ int rtl8723ae_hw_init(struct ieee80211_hw *hw)  		RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE, "under 1.5V\n");  	}  	rtl8723ae_dm_init(hw); +exit: +	local_irq_restore(flags);  	rtlpriv->rtlhal.being_init_adapter = false;  	return err;  } @@ -1112,12 +1119,13 @@ static int _rtl8723ae_set_media_status(struct ieee80211_hw *hw,  void rtl8723ae_set_check_bssid(struct ieee80211_hw *hw, bool check_bssid)  {  	struct rtl_priv *rtlpriv = rtl_priv(hw); -	struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw)); -	u32 reg_rcr = rtlpci->receive_config; +	u32 reg_rcr;  	if (rtlpriv->psc.rfpwr_state != ERFON)  		return; +	rtlpriv->cfg->ops->get_hw_reg(hw, HW_VAR_RCR, (u8 *)(®_rcr)); +  	if (check_bssid == true) {  		reg_rcr |= (RCR_CBSSID_DATA | RCR_CBSSID_BCN);  		rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_RCR, @@ -1153,7 +1161,7 @@ void rtl8723ae_set_qos(struct ieee80211_hw *hw, int aci)  {  	struct rtl_priv *rtlpriv = rtl_priv(hw); -	rtl8723ae_dm_init_edca_turbo(hw); +	rtl8723_dm_init_edca_turbo(hw);  	switch (aci) {  	case AC1_BK:  		rtl_write_dword(rtlpriv, REG_EDCA_BK_PARAM, 0xa44f); @@ -1614,10 +1622,10 @@ static void _rtl8723ae_read_adapter_info(struct ieee80211_hw *hw,  	rtl8723ae_read_bt_coexist_info_from_hwpg(hw,  			rtlefuse->autoload_failflag, hwinfo); -	rtlefuse->eeprom_channelplan = *(u8 *)&hwinfo[EEPROM_CHANNELPLAN]; +	rtlefuse->eeprom_channelplan = hwinfo[EEPROM_CHANNELPLAN];  	rtlefuse->eeprom_version = *(u16 *)&hwinfo[EEPROM_VERSION];  	rtlefuse->txpwr_fromeprom = true; -	rtlefuse->eeprom_oemid = *(u8 *)&hwinfo[EEPROM_CUSTOMER_ID]; +	rtlefuse->eeprom_oemid = hwinfo[EEPROM_CUSTOMER_ID];  	RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,  		 "EEPROM Customer ID: 0x%2x\n", rtlefuse->eeprom_oemid); @@ -1655,7 +1663,7 @@ static void _rtl8723ae_read_adapter_info(struct ieee80211_hw *hw,  				    CHK_SVID_SMID(0x10EC, 0x9185))  					rtlhal->oem_id = RT_CID_TOSHIBA;  				else if (rtlefuse->eeprom_svid == 0x1025) -					rtlhal->oem_id = RT_CID_819x_Acer; +					rtlhal->oem_id = RT_CID_819X_ACER;  				else if (CHK_SVID_SMID(0x10EC, 0x6191) ||  					 CHK_SVID_SMID(0x10EC, 0x6192) ||  					 CHK_SVID_SMID(0x10EC, 0x6193) || @@ -1665,7 +1673,7 @@ static void _rtl8723ae_read_adapter_info(struct ieee80211_hw *hw,  					 CHK_SVID_SMID(0x10EC, 0x8191) ||  					 CHK_SVID_SMID(0x10EC, 0x8192) ||  					 CHK_SVID_SMID(0x10EC, 0x8193)) -					rtlhal->oem_id = RT_CID_819x_SAMSUNG; +					rtlhal->oem_id = RT_CID_819X_SAMSUNG;  				else if (CHK_SVID_SMID(0x10EC, 0x8195) ||  					 CHK_SVID_SMID(0x10EC, 0x9195) ||  					 CHK_SVID_SMID(0x10EC, 0x7194) || @@ -1673,24 +1681,24 @@ static void _rtl8723ae_read_adapter_info(struct ieee80211_hw *hw,  					 CHK_SVID_SMID(0x10EC, 0x8201) ||  					 CHK_SVID_SMID(0x10EC, 0x8202) ||  					 CHK_SVID_SMID(0x10EC, 0x9200)) -					rtlhal->oem_id = RT_CID_819x_Lenovo; +					rtlhal->oem_id = RT_CID_819X_LENOVO;  				else if (CHK_SVID_SMID(0x10EC, 0x8197) ||  					 CHK_SVID_SMID(0x10EC, 0x9196)) -					rtlhal->oem_id = RT_CID_819x_CLEVO; +					rtlhal->oem_id = RT_CID_819X_CLEVO;  				else if (CHK_SVID_SMID(0x1028, 0x8194) ||  					 CHK_SVID_SMID(0x1028, 0x8198) ||  					 CHK_SVID_SMID(0x1028, 0x9197) ||  					 CHK_SVID_SMID(0x1028, 0x9198)) -					rtlhal->oem_id = RT_CID_819x_DELL; +					rtlhal->oem_id = RT_CID_819X_DELL;  				else if (CHK_SVID_SMID(0x103C, 0x1629)) -					rtlhal->oem_id = RT_CID_819x_HP; +					rtlhal->oem_id = RT_CID_819X_HP;  				else if (CHK_SVID_SMID(0x1A32, 0x2315)) -					rtlhal->oem_id = RT_CID_819x_QMI; +					rtlhal->oem_id = RT_CID_819X_QMI;  				else if (CHK_SVID_SMID(0x10EC, 0x8203)) -					rtlhal->oem_id = RT_CID_819x_PRONETS; +					rtlhal->oem_id = RT_CID_819X_PRONETS;  				else if (CHK_SVID_SMID(0x1043, 0x84B5))  					rtlhal->oem_id = -						 RT_CID_819x_Edimax_ASUS; +						 RT_CID_819X_EDIMAX_ASUS;  				else  					rtlhal->oem_id = RT_CID_DEFAULT;  			} else if (rtlefuse->eeprom_did == 0x8178) { @@ -1712,12 +1720,12 @@ static void _rtl8723ae_read_adapter_info(struct ieee80211_hw *hw,  				    CHK_SVID_SMID(0x10EC, 0x9185))  					rtlhal->oem_id = RT_CID_TOSHIBA;  				else if (rtlefuse->eeprom_svid == 0x1025) -					rtlhal->oem_id = RT_CID_819x_Acer; +					rtlhal->oem_id = RT_CID_819X_ACER;  				else if (CHK_SVID_SMID(0x10EC, 0x8186)) -					rtlhal->oem_id = RT_CID_819x_PRONETS; +					rtlhal->oem_id = RT_CID_819X_PRONETS;  				else if (CHK_SVID_SMID(0x1043, 0x8486))  					rtlhal->oem_id = -						     RT_CID_819x_Edimax_ASUS; +						     RT_CID_819X_EDIMAX_ASUS;  				else  					rtlhal->oem_id = RT_CID_DEFAULT;  			} else { @@ -1731,7 +1739,7 @@ static void _rtl8723ae_read_adapter_info(struct ieee80211_hw *hw,  			rtlhal->oem_id = RT_CID_CCX;  			break;  		case EEPROM_CID_QMI: -			rtlhal->oem_id = RT_CID_819x_QMI; +			rtlhal->oem_id = RT_CID_819X_QMI;  			break;  		case EEPROM_CID_WHQL:  				break; @@ -2037,8 +2045,7 @@ void rtl8723ae_update_channel_access_setting(struct ieee80211_hw *hw)  	struct rtl_mac *mac = rtl_mac(rtl_priv(hw));  	u16 sifs_timer; -	rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_SLOT_TIME, -				      (u8 *)&mac->slot_time); +	rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_SLOT_TIME, &mac->slot_time);  	if (!mac->ht_enable)  		sifs_timer = 0x0a0a;  	else @@ -2376,24 +2383,3 @@ void rtl8723ae_suspend(struct ieee80211_hw *hw)  void rtl8723ae_resume(struct ieee80211_hw *hw)  {  } - -/* Turn on AAP (RCR:bit 0) for promicuous mode. */ -void rtl8723ae_allow_all_destaddr(struct ieee80211_hw *hw, -	bool allow_all_da, bool write_into_reg) -{ -	struct rtl_priv *rtlpriv = rtl_priv(hw); -	struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw)); - -	if (allow_all_da) /* Set BIT0 */ -		rtlpci->receive_config |= RCR_AAP; -	else /* Clear BIT0 */ -		rtlpci->receive_config &= ~RCR_AAP; - -	if (write_into_reg) -		rtl_write_dword(rtlpriv, REG_RCR, rtlpci->receive_config); - - -	RT_TRACE(rtlpriv, COMP_TURBO | COMP_INIT, DBG_LOUD, -		 "receive_config=0x%08X, write_into_reg=%d\n", -		 rtlpci->receive_config, write_into_reg); -} diff --git a/drivers/net/wireless/rtlwifi/rtl8723ae/hw.h b/drivers/net/wireless/rtlwifi/rtl8723ae/hw.h index 6fa24f79b1d..d3bc39fb27a 100644 --- a/drivers/net/wireless/rtlwifi/rtl8723ae/hw.h +++ b/drivers/net/wireless/rtlwifi/rtl8723ae/hw.h @@ -67,7 +67,5 @@ void rtl8723ae_bt_reg_init(struct ieee80211_hw *hw);  void rtl8723ae_bt_hw_init(struct ieee80211_hw *hw);  void rtl8723ae_suspend(struct ieee80211_hw *hw);  void rtl8723ae_resume(struct ieee80211_hw *hw); -void rtl8723ae_allow_all_destaddr(struct ieee80211_hw *hw, -				  bool allow_all_da, bool write_into_reg);  #endif diff --git a/drivers/net/wireless/rtlwifi/rtl8723ae/phy.c b/drivers/net/wireless/rtlwifi/rtl8723ae/phy.c index eafbb18dd48..3ea78afdec7 100644 --- a/drivers/net/wireless/rtlwifi/rtl8723ae/phy.c +++ b/drivers/net/wireless/rtlwifi/rtl8723ae/phy.c @@ -30,12 +30,14 @@  #include "../wifi.h"  #include "../pci.h"  #include "../ps.h" +#include "../core.h"  #include "reg.h"  #include "def.h"  #include "phy.h"  #include "rf.h"  #include "dm.h"  #include "table.h" +#include "../rtl8723com/phy_common.h"  /* static forward definitions */  static u32 _phy_fw_rf_serial_read(struct ieee80211_hw *hw, @@ -43,72 +45,17 @@ static u32 _phy_fw_rf_serial_read(struct ieee80211_hw *hw,  static void _phy_fw_rf_serial_write(struct ieee80211_hw *hw,  				    enum radio_path rfpath,  				    u32 offset, u32 data); -static u32 _phy_rf_serial_read(struct ieee80211_hw *hw, -			       enum radio_path rfpath, u32 offset); -static void _phy_rf_serial_write(struct ieee80211_hw *hw, -				 enum radio_path rfpath, u32 offset, u32 data); -static u32 _phy_calculate_bit_shift(u32 bitmask);  static bool _phy_bb8192c_config_parafile(struct ieee80211_hw *hw);  static bool _phy_cfg_mac_w_header(struct ieee80211_hw *hw);  static bool _phy_cfg_bb_w_header(struct ieee80211_hw *hw, u8 configtype);  static bool _phy_cfg_bb_w_pgheader(struct ieee80211_hw *hw, u8 configtype); -static void _phy_init_bb_rf_reg_def(struct ieee80211_hw *hw); -static bool _phy_set_sw_chnl_cmdarray(struct swchnlcmd *cmdtable, -				      u32 cmdtableidx, u32 cmdtablesz, -				      enum swchnlcmd_id cmdid, -				      u32 para1, u32 para2, -				      u32 msdelay);  static bool _phy_sw_chnl_step_by_step(struct ieee80211_hw *hw, u8 channel,  				      u8 *stage, u8 *step, u32 *delay);  static u8 _phy_dbm_to_txpwr_Idx(struct ieee80211_hw *hw,  				enum wireless_mode wirelessmode,  				long power_indbm); -static long _phy_txpwr_idx_to_dbm(struct ieee80211_hw *hw, -				  enum wireless_mode wirelessmode, u8 txpwridx);  static void rtl8723ae_phy_set_io(struct ieee80211_hw *hw); -u32 rtl8723ae_phy_query_bb_reg(struct ieee80211_hw *hw, u32 regaddr, -			       u32 bitmask) -{ -	struct rtl_priv *rtlpriv = rtl_priv(hw); -	u32 returnvalue, originalvalue, bitshift; - -	RT_TRACE(rtlpriv, COMP_RF, DBG_TRACE, -		 "regaddr(%#x), bitmask(%#x)\n", regaddr, bitmask); -	originalvalue = rtl_read_dword(rtlpriv, regaddr); -	bitshift = _phy_calculate_bit_shift(bitmask); -	returnvalue = (originalvalue & bitmask) >> bitshift; - -	RT_TRACE(rtlpriv, COMP_RF, DBG_TRACE, -		 "BBR MASK=0x%x Addr[0x%x]=0x%x\n", bitmask, regaddr, -		 originalvalue); - -	return returnvalue; -} - -void rtl8723ae_phy_set_bb_reg(struct ieee80211_hw *hw, -			      u32 regaddr, u32 bitmask, u32 data) -{ -	struct rtl_priv *rtlpriv = rtl_priv(hw); -	u32 originalvalue, bitshift; - -	RT_TRACE(rtlpriv, COMP_RF, DBG_TRACE, -		 "regaddr(%#x), bitmask(%#x), data(%#x)\n", regaddr, -		 bitmask, data); - -	if (bitmask != MASKDWORD) { -		originalvalue = rtl_read_dword(rtlpriv, regaddr); -		bitshift = _phy_calculate_bit_shift(bitmask); -		data = ((originalvalue & (~bitmask)) | (data << bitshift)); -	} - -	rtl_write_dword(rtlpriv, regaddr, data); - -	RT_TRACE(rtlpriv, COMP_RF, DBG_TRACE, -		 "regaddr(%#x), bitmask(%#x), data(%#x)\n", -		 regaddr, bitmask, data); -} -  u32 rtl8723ae_phy_query_rf_reg(struct ieee80211_hw *hw,  			       enum radio_path rfpath, u32 regaddr, u32 bitmask)  { @@ -124,11 +71,11 @@ u32 rtl8723ae_phy_query_rf_reg(struct ieee80211_hw *hw,  	spin_lock_irqsave(&rtlpriv->locks.rf_lock, flags);  	if (rtlphy->rf_mode != RF_OP_BY_FW) -		original_value = _phy_rf_serial_read(hw, rfpath, regaddr); +		original_value = rtl8723_phy_rf_serial_read(hw, rfpath, regaddr);  	else  		original_value = _phy_fw_rf_serial_read(hw, rfpath, regaddr); -	bitshift = _phy_calculate_bit_shift(bitmask); +	bitshift = rtl8723_phy_calculate_bit_shift(bitmask);  	readback_value = (original_value & bitmask) >> bitshift;  	spin_unlock_irqrestore(&rtlpriv->locks.rf_lock, flags); @@ -157,19 +104,19 @@ void rtl8723ae_phy_set_rf_reg(struct ieee80211_hw *hw,  	if (rtlphy->rf_mode != RF_OP_BY_FW) {  		if (bitmask != RFREG_OFFSET_MASK) { -			original_value = _phy_rf_serial_read(hw, rfpath, -							     regaddr); -			bitshift = _phy_calculate_bit_shift(bitmask); +			original_value = rtl8723_phy_rf_serial_read(hw, rfpath, +								    regaddr); +			bitshift = rtl8723_phy_calculate_bit_shift(bitmask);  			data = ((original_value & (~bitmask)) |  			       (data << bitshift));  		} -		_phy_rf_serial_write(hw, rfpath, regaddr, data); +		rtl8723_phy_rf_serial_write(hw, rfpath, regaddr, data);  	} else {  		if (bitmask != RFREG_OFFSET_MASK) {  			original_value = _phy_fw_rf_serial_read(hw, rfpath,  								regaddr); -			bitshift = _phy_calculate_bit_shift(bitmask); +			bitshift = rtl8723_phy_calculate_bit_shift(bitmask);  			data = ((original_value & (~bitmask)) |  			       (data << bitshift));  		} @@ -197,87 +144,6 @@ static void _phy_fw_rf_serial_write(struct ieee80211_hw *hw,  	RT_ASSERT(false, "deprecated!\n");  } -static u32 _phy_rf_serial_read(struct ieee80211_hw *hw, -			       enum radio_path rfpath, u32 offset) -{ -	struct rtl_priv *rtlpriv = rtl_priv(hw); -	struct rtl_phy *rtlphy = &(rtlpriv->phy); -	struct bb_reg_def *pphyreg = &rtlphy->phyreg_def[rfpath]; -	u32 newoffset; -	u32 tmplong, tmplong2; -	u8 rfpi_enable = 0; -	u32 retvalue; - -	offset &= 0x3f; -	newoffset = offset; -	if (RT_CANNOT_IO(hw)) { -		RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, "return all one\n"); -		return 0xFFFFFFFF; -	} -	tmplong = rtl_get_bbreg(hw, RFPGA0_XA_HSSIPARAMETER2, MASKDWORD); -	if (rfpath == RF90_PATH_A) -		tmplong2 = tmplong; -	else -		tmplong2 = rtl_get_bbreg(hw, pphyreg->rfhssi_para2, MASKDWORD); -	tmplong2 = (tmplong2 & (~BLSSIREADADDRESS)) | -	    (newoffset << 23) | BLSSIREADEDGE; -	rtl_set_bbreg(hw, RFPGA0_XA_HSSIPARAMETER2, MASKDWORD, -		      tmplong & (~BLSSIREADEDGE)); -	mdelay(1); -	rtl_set_bbreg(hw, pphyreg->rfhssi_para2, MASKDWORD, tmplong2); -	mdelay(1); -	rtl_set_bbreg(hw, RFPGA0_XA_HSSIPARAMETER2, MASKDWORD, -		      tmplong | BLSSIREADEDGE); -	mdelay(1); -	if (rfpath == RF90_PATH_A) -		rfpi_enable = (u8) rtl_get_bbreg(hw, RFPGA0_XA_HSSIPARAMETER1, -						 BIT(8)); -	else if (rfpath == RF90_PATH_B) -		rfpi_enable = (u8) rtl_get_bbreg(hw, RFPGA0_XB_HSSIPARAMETER1, -						 BIT(8)); -	if (rfpi_enable) -		retvalue = rtl_get_bbreg(hw, pphyreg->rf_rbpi, -					 BLSSIREADBACKDATA); -	else -		retvalue = rtl_get_bbreg(hw, pphyreg->rf_rb, -					 BLSSIREADBACKDATA); -	RT_TRACE(rtlpriv, COMP_RF, DBG_TRACE, "RFR-%d Addr[0x%x]=0x%x\n", -		 rfpath, pphyreg->rf_rb, retvalue); -	return retvalue; -} - -static void _phy_rf_serial_write(struct ieee80211_hw *hw, -				 enum radio_path rfpath, u32 offset, u32 data) -{ -	u32 data_and_addr; -	u32 newoffset; -	struct rtl_priv *rtlpriv = rtl_priv(hw); -	struct rtl_phy *rtlphy = &(rtlpriv->phy); -	struct bb_reg_def *pphyreg = &rtlphy->phyreg_def[rfpath]; - -	if (RT_CANNOT_IO(hw)) { -		RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, "stop\n"); -		return; -	} -	offset &= 0x3f; -	newoffset = offset; -	data_and_addr = ((newoffset << 20) | (data & 0x000fffff)) & 0x0fffffff; -	rtl_set_bbreg(hw, pphyreg->rf3wire_offset, MASKDWORD, data_and_addr); -	RT_TRACE(rtlpriv, COMP_RF, DBG_TRACE, "RFW-%d Addr[0x%x]=0x%x\n", -		 rfpath, pphyreg->rf3wire_offset, data_and_addr); -} - -static u32 _phy_calculate_bit_shift(u32 bitmask) -{ -	u32 i; - -	for (i = 0; i <= 31; i++) { -		if (((bitmask >> i) & 0x1) == 1) -			break; -	} -	return i; -} -  static void _rtl8723ae_phy_bb_config_1t(struct ieee80211_hw *hw)  {  	rtl_set_bbreg(hw, RFPGA0_TXINFO, 0x3, 0x2); @@ -307,7 +173,7 @@ bool rtl8723ae_phy_bb_config(struct ieee80211_hw *hw)  	u8 tmpu1b;  	u8 reg_hwparafile = 1; -	_phy_init_bb_rf_reg_def(hw); +	rtl8723_phy_init_bb_rf_reg_def(hw);  	/* 1. 0x28[1] = 1 */  	tmpu1b = rtl_read_byte(rtlpriv, REG_AFE_PLL_CTRL); @@ -412,18 +278,7 @@ static bool _phy_cfg_bb_w_header(struct ieee80211_hw *hw, u8 configtype)  	phy_regarray_table = RTL8723EPHY_REG_1TARRAY;  	if (configtype == BASEBAND_CONFIG_PHY_REG) {  		for (i = 0; i < phy_reg_arraylen; i = i + 2) { -			if (phy_regarray_table[i] == 0xfe) -				mdelay(50); -			else if (phy_regarray_table[i] == 0xfd) -				mdelay(5); -			else if (phy_regarray_table[i] == 0xfc) -				mdelay(1); -			else if (phy_regarray_table[i] == 0xfb) -				udelay(50); -			else if (phy_regarray_table[i] == 0xfa) -				udelay(5); -			else if (phy_regarray_table[i] == 0xf9) -				udelay(1); +			rtl_addr_delay(phy_regarray_table[i]);  			rtl_set_bbreg(hw, phy_regarray_table[i], MASKDWORD,  				      phy_regarray_table[i + 1]);  			udelay(1); @@ -585,18 +440,7 @@ static bool _phy_cfg_bb_w_pgheader(struct ieee80211_hw *hw, u8 configtype)  	if (configtype == BASEBAND_CONFIG_PHY_REG) {  		for (i = 0; i < phy_regarray_pg_len; i = i + 3) { -			if (phy_regarray_table_pg[i] == 0xfe) -				mdelay(50); -			else if (phy_regarray_table_pg[i] == 0xfd) -				mdelay(5); -			else if (phy_regarray_table_pg[i] == 0xfc) -				mdelay(1); -			else if (phy_regarray_table_pg[i] == 0xfb) -				udelay(50); -			else if (phy_regarray_table_pg[i] == 0xfa) -				udelay(5); -			else if (phy_regarray_table_pg[i] == 0xf9) -				udelay(1); +			rtl_addr_delay(phy_regarray_table_pg[i]);  			_st_pwrIdx_dfrate_off(hw, phy_regarray_table_pg[i],  					      phy_regarray_table_pg[i + 1], @@ -623,24 +467,9 @@ bool rtl8723ae_phy_config_rf_with_headerfile(struct ieee80211_hw *hw,  	switch (rfpath) {  	case RF90_PATH_A:  		for (i = 0; i < radioa_arraylen; i = i + 2) { -			if (radioa_array_table[i] == 0xfe) -				mdelay(50); -			else if (radioa_array_table[i] == 0xfd) -				mdelay(5); -			else if (radioa_array_table[i] == 0xfc) -				mdelay(1); -			else if (radioa_array_table[i] == 0xfb) -				udelay(50); -			else if (radioa_array_table[i] == 0xfa) -				udelay(5); -			else if (radioa_array_table[i] == 0xf9) -				udelay(1); -			else { -				rtl_set_rfreg(hw, rfpath, radioa_array_table[i], -					      RFREG_OFFSET_MASK, -					      radioa_array_table[i + 1]); -				udelay(1); -			} +			rtl_rfreg_delay(hw, rfpath, radioa_array_table[i], +					RFREG_OFFSET_MASK, +					radioa_array_table[i + 1]);  		}  		break;  	case RF90_PATH_B: @@ -690,92 +519,6 @@ void rtl8723ae_phy_get_hw_reg_originalvalue(struct ieee80211_hw *hw)  		 ROFDM0_RXDETECTOR3, rtlphy->framesync);  } -static void _phy_init_bb_rf_reg_def(struct ieee80211_hw *hw) -{ -	struct rtl_priv *rtlpriv = rtl_priv(hw); -	struct rtl_phy *rtlphy = &(rtlpriv->phy); - -	rtlphy->phyreg_def[RF90_PATH_A].rfintfs = RFPGA0_XAB_RFINTERFACESW; -	rtlphy->phyreg_def[RF90_PATH_B].rfintfs = RFPGA0_XAB_RFINTERFACESW; -	rtlphy->phyreg_def[RF90_PATH_C].rfintfs = RFPGA0_XCD_RFINTERFACESW; -	rtlphy->phyreg_def[RF90_PATH_D].rfintfs = RFPGA0_XCD_RFINTERFACESW; - -	rtlphy->phyreg_def[RF90_PATH_A].rfintfi = RFPGA0_XAB_RFINTERFACERB; -	rtlphy->phyreg_def[RF90_PATH_B].rfintfi = RFPGA0_XAB_RFINTERFACERB; -	rtlphy->phyreg_def[RF90_PATH_C].rfintfi = RFPGA0_XCD_RFINTERFACERB; -	rtlphy->phyreg_def[RF90_PATH_D].rfintfi = RFPGA0_XCD_RFINTERFACERB; - -	rtlphy->phyreg_def[RF90_PATH_A].rfintfo = RFPGA0_XA_RFINTERFACEOE; -	rtlphy->phyreg_def[RF90_PATH_B].rfintfo = RFPGA0_XB_RFINTERFACEOE; - -	rtlphy->phyreg_def[RF90_PATH_A].rfintfe = RFPGA0_XA_RFINTERFACEOE; -	rtlphy->phyreg_def[RF90_PATH_B].rfintfe = RFPGA0_XB_RFINTERFACEOE; - -	rtlphy->phyreg_def[RF90_PATH_A].rf3wire_offset = -			    RFPGA0_XA_LSSIPARAMETER; -	rtlphy->phyreg_def[RF90_PATH_B].rf3wire_offset = -			    RFPGA0_XB_LSSIPARAMETER; - -	rtlphy->phyreg_def[RF90_PATH_A].rflssi_select = rFPGA0_XAB_RFPARAMETER; -	rtlphy->phyreg_def[RF90_PATH_B].rflssi_select = rFPGA0_XAB_RFPARAMETER; -	rtlphy->phyreg_def[RF90_PATH_C].rflssi_select = rFPGA0_XCD_RFPARAMETER; -	rtlphy->phyreg_def[RF90_PATH_D].rflssi_select = rFPGA0_XCD_RFPARAMETER; - -	rtlphy->phyreg_def[RF90_PATH_A].rftxgain_stage = RFPGA0_TXGAINSTAGE; -	rtlphy->phyreg_def[RF90_PATH_B].rftxgain_stage = RFPGA0_TXGAINSTAGE; -	rtlphy->phyreg_def[RF90_PATH_C].rftxgain_stage = RFPGA0_TXGAINSTAGE; -	rtlphy->phyreg_def[RF90_PATH_D].rftxgain_stage = RFPGA0_TXGAINSTAGE; - -	rtlphy->phyreg_def[RF90_PATH_A].rfhssi_para1 = RFPGA0_XA_HSSIPARAMETER1; -	rtlphy->phyreg_def[RF90_PATH_B].rfhssi_para1 = RFPGA0_XB_HSSIPARAMETER1; - -	rtlphy->phyreg_def[RF90_PATH_A].rfhssi_para2 = RFPGA0_XA_HSSIPARAMETER2; -	rtlphy->phyreg_def[RF90_PATH_B].rfhssi_para2 = RFPGA0_XB_HSSIPARAMETER2; - -	rtlphy->phyreg_def[RF90_PATH_A].rfsw_ctrl = RFPGA0_XAB_SWITCHCONTROL; -	rtlphy->phyreg_def[RF90_PATH_B].rfsw_ctrl = RFPGA0_XAB_SWITCHCONTROL; -	rtlphy->phyreg_def[RF90_PATH_C].rfsw_ctrl = RFPGA0_XCD_SWITCHCONTROL; -	rtlphy->phyreg_def[RF90_PATH_D].rfsw_ctrl = RFPGA0_XCD_SWITCHCONTROL; - -	rtlphy->phyreg_def[RF90_PATH_A].rfagc_control1 = ROFDM0_XAAGCCORE1; -	rtlphy->phyreg_def[RF90_PATH_B].rfagc_control1 = ROFDM0_XBAGCCORE1; -	rtlphy->phyreg_def[RF90_PATH_C].rfagc_control1 = ROFDM0_XCAGCCORE1; -	rtlphy->phyreg_def[RF90_PATH_D].rfagc_control1 = ROFDM0_XDAGCCORE1; - -	rtlphy->phyreg_def[RF90_PATH_A].rfagc_control2 = ROFDM0_XAAGCCORE2; -	rtlphy->phyreg_def[RF90_PATH_B].rfagc_control2 = ROFDM0_XBAGCCORE2; -	rtlphy->phyreg_def[RF90_PATH_C].rfagc_control2 = ROFDM0_XCAGCCORE2; -	rtlphy->phyreg_def[RF90_PATH_D].rfagc_control2 = ROFDM0_XDAGCCORE2; - -	rtlphy->phyreg_def[RF90_PATH_A].rfrxiq_imbal = ROFDM0_XARXIQIMBALANCE; -	rtlphy->phyreg_def[RF90_PATH_B].rfrxiq_imbal = ROFDM0_XBRXIQIMBALANCE; -	rtlphy->phyreg_def[RF90_PATH_C].rfrxiq_imbal = ROFDM0_XCRXIQIMBANLANCE; -	rtlphy->phyreg_def[RF90_PATH_D].rfrxiq_imbal = ROFDM0_XDRXIQIMBALANCE; - -	rtlphy->phyreg_def[RF90_PATH_A].rfrx_afe = ROFDM0_XARXAFE; -	rtlphy->phyreg_def[RF90_PATH_B].rfrx_afe = ROFDM0_XBRXAFE; -	rtlphy->phyreg_def[RF90_PATH_C].rfrx_afe = ROFDM0_XCRXAFE; -	rtlphy->phyreg_def[RF90_PATH_D].rfrx_afe = ROFDM0_XDRXAFE; - -	rtlphy->phyreg_def[RF90_PATH_A].rftxiq_imbal = ROFDM0_XATXIQIMBALANCE; -	rtlphy->phyreg_def[RF90_PATH_B].rftxiq_imbal = ROFDM0_XBTXIQIMBALANCE; -	rtlphy->phyreg_def[RF90_PATH_C].rftxiq_imbal = ROFDM0_XCTXIQIMBALANCE; -	rtlphy->phyreg_def[RF90_PATH_D].rftxiq_imbal = ROFDM0_XDTXIQIMBALANCE; - -	rtlphy->phyreg_def[RF90_PATH_A].rftx_afe = ROFDM0_XATXAFE; -	rtlphy->phyreg_def[RF90_PATH_B].rftx_afe = ROFDM0_XBTXAFE; -	rtlphy->phyreg_def[RF90_PATH_C].rftx_afe = ROFDM0_XCTXAFE; -	rtlphy->phyreg_def[RF90_PATH_D].rftx_afe = ROFDM0_XDTXAFE; - -	rtlphy->phyreg_def[RF90_PATH_A].rf_rb = RFPGA0_XA_LSSIREADBACK; -	rtlphy->phyreg_def[RF90_PATH_B].rf_rb = RFPGA0_XB_LSSIREADBACK; -	rtlphy->phyreg_def[RF90_PATH_C].rf_rb = RFPGA0_XC_LSSIREADBACK; -	rtlphy->phyreg_def[RF90_PATH_D].rf_rb = RFPGA0_XD_LSSIREADBACK; - -	rtlphy->phyreg_def[RF90_PATH_A].rf_rbpi = TRANSCEIVEA_HSPI_READBACK; -	rtlphy->phyreg_def[RF90_PATH_B].rf_rbpi = TRANSCEIVEB_HSPI_READBACK; -} -  void rtl8723ae_phy_get_txpower_level(struct ieee80211_hw *hw, long *powerlevel)  {  	struct rtl_priv *rtlpriv = rtl_priv(hw); @@ -785,17 +528,17 @@ void rtl8723ae_phy_get_txpower_level(struct ieee80211_hw *hw, long *powerlevel)  	long txpwr_dbm;  	txpwr_level = rtlphy->cur_cck_txpwridx; -	txpwr_dbm = _phy_txpwr_idx_to_dbm(hw, WIRELESS_MODE_B, txpwr_level); +	txpwr_dbm = rtl8723_phy_txpwr_idx_to_dbm(hw, WIRELESS_MODE_B, txpwr_level);  	txpwr_level = rtlphy->cur_ofdm24g_txpwridx +  	    rtlefuse->legacy_ht_txpowerdiff; -	if (_phy_txpwr_idx_to_dbm(hw, WIRELESS_MODE_G, txpwr_level) > txpwr_dbm) -		txpwr_dbm = _phy_txpwr_idx_to_dbm(hw, WIRELESS_MODE_G, +	if (rtl8723_phy_txpwr_idx_to_dbm(hw, WIRELESS_MODE_G, txpwr_level) > txpwr_dbm) +		txpwr_dbm = rtl8723_phy_txpwr_idx_to_dbm(hw, WIRELESS_MODE_G,  						  txpwr_level);  	txpwr_level = rtlphy->cur_ofdm24g_txpwridx; -	if (_phy_txpwr_idx_to_dbm(hw, WIRELESS_MODE_N_24G, txpwr_level) > +	if (rtl8723_phy_txpwr_idx_to_dbm(hw, WIRELESS_MODE_N_24G, txpwr_level) >  	    txpwr_dbm) -		txpwr_dbm = _phy_txpwr_idx_to_dbm(hw, WIRELESS_MODE_N_24G, -						  txpwr_level); +		txpwr_dbm = rtl8723_phy_txpwr_idx_to_dbm(hw, WIRELESS_MODE_N_24G, +							 txpwr_level);  	*powerlevel = txpwr_dbm;  } @@ -912,57 +655,6 @@ static u8 _phy_dbm_to_txpwr_Idx(struct ieee80211_hw *hw,  	return txpwridx;  } -static long _phy_txpwr_idx_to_dbm(struct ieee80211_hw *hw, -				  enum wireless_mode wirelessmode, u8 txpwridx) -{ -	long offset; -	long pwrout_dbm; - -	switch (wirelessmode) { -	case WIRELESS_MODE_B: -		offset = -7; -		break; -	case WIRELESS_MODE_G: -	case WIRELESS_MODE_N_24G: -		offset = -8; -		break; -	default: -		offset = -8; -		break; -	} -	pwrout_dbm = txpwridx / 2 + offset; -	return pwrout_dbm; -} - -void rtl8723ae_phy_scan_operation_backup(struct ieee80211_hw *hw, u8 operation) -{ -	struct rtl_priv *rtlpriv = rtl_priv(hw); -	struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw)); -	enum io_type iotype; - -	if (!is_hal_stop(rtlhal)) { -		switch (operation) { -		case SCAN_OPT_BACKUP: -			iotype = IO_CMD_PAUSE_DM_BY_SCAN; -			rtlpriv->cfg->ops->set_hw_reg(hw, -						      HW_VAR_IO_CMD, -						      (u8 *)&iotype); - -			break; -		case SCAN_OPT_RESTORE: -			iotype = IO_CMD_RESUME_DM_BY_SCAN; -			rtlpriv->cfg->ops->set_hw_reg(hw, -						      HW_VAR_IO_CMD, -						      (u8 *)&iotype); -			break; -		default: -			RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, -				 "Unknown Scan Backup operation.\n"); -			break; -		} -	} -} -  void rtl8723ae_phy_set_bw_mode_callback(struct ieee80211_hw *hw)  {  	struct rtl_priv *rtlpriv = rtl_priv(hw); @@ -1146,26 +838,26 @@ static bool _phy_sw_chnl_step_by_step(struct ieee80211_hw *hw, u8 channel,  	u8 num_total_rfpath = rtlphy->num_total_rfpath;  	precommoncmdcnt = 0; -	_phy_set_sw_chnl_cmdarray(precommoncmd, precommoncmdcnt++, -				  MAX_PRECMD_CNT, CMDID_SET_TXPOWEROWER_LEVEL, -				  0, 0, 0); -	_phy_set_sw_chnl_cmdarray(precommoncmd, precommoncmdcnt++, -				  MAX_PRECMD_CNT, CMDID_END, 0, 0, 0); +	rtl8723_phy_set_sw_chnl_cmdarray(precommoncmd, precommoncmdcnt++, +					 MAX_PRECMD_CNT, CMDID_SET_TXPOWEROWER_LEVEL, +					 0, 0, 0); +	rtl8723_phy_set_sw_chnl_cmdarray(precommoncmd, precommoncmdcnt++, +					 MAX_PRECMD_CNT, CMDID_END, 0, 0, 0);  	postcommoncmdcnt = 0; -	_phy_set_sw_chnl_cmdarray(postcommoncmd, postcommoncmdcnt++, -				  MAX_POSTCMD_CNT, CMDID_END, 0, 0, 0); +	rtl8723_phy_set_sw_chnl_cmdarray(postcommoncmd, postcommoncmdcnt++, +					 MAX_POSTCMD_CNT, CMDID_END, 0, 0, 0);  	rfdependcmdcnt = 0;  	RT_ASSERT((channel >= 1 && channel <= 14),  		  "illegal channel for Zebra: %d\n", channel); -	_phy_set_sw_chnl_cmdarray(rfdependcmd, rfdependcmdcnt++, -				  MAX_RFDEPENDCMD_CNT, CMDID_RF_WRITEREG, +	rtl8723_phy_set_sw_chnl_cmdarray(rfdependcmd, rfdependcmdcnt++, +					 MAX_RFDEPENDCMD_CNT, CMDID_RF_WRITEREG,  				  RF_CHNLBW, channel, 10); -	_phy_set_sw_chnl_cmdarray(rfdependcmd, rfdependcmdcnt++, -				  MAX_RFDEPENDCMD_CNT, CMDID_END, 0, 0, 0); +	rtl8723_phy_set_sw_chnl_cmdarray(rfdependcmd, rfdependcmdcnt++, +					 MAX_RFDEPENDCMD_CNT, CMDID_END, 0, 0, 0);  	do {  		switch (*stage) { @@ -1233,29 +925,6 @@ static bool _phy_sw_chnl_step_by_step(struct ieee80211_hw *hw, u8 channel,  	return false;  } -static bool _phy_set_sw_chnl_cmdarray(struct swchnlcmd *cmdtable, -				      u32 cmdtableidx, u32 cmdtablesz, -				      enum swchnlcmd_id cmdid, u32 para1, -				      u32 para2, u32 msdelay) -{ -	struct swchnlcmd *pcmd; - -	if (cmdtable == NULL) { -		RT_ASSERT(false, "cmdtable cannot be NULL.\n"); -		return false; -	} - -	if (cmdtableidx >= cmdtablesz) -		return false; - -	pcmd = cmdtable + cmdtableidx; -	pcmd->cmdid = cmdid; -	pcmd->para1 = para1; -	pcmd->para2 = para2; -	pcmd->msdelay = msdelay; -	return true; -} -  static u8 _rtl8723ae_phy_path_a_iqk(struct ieee80211_hw *hw, bool config_pathb)  {  	u32 reg_eac, reg_e94, reg_e9c, reg_ea4; @@ -1326,136 +995,6 @@ static u8 _rtl8723ae_phy_path_b_iqk(struct ieee80211_hw *hw)  	return result;  } -static void phy_path_a_fill_iqk_matrix(struct ieee80211_hw *hw, bool iqk_ok, -				       long result[][8], u8 final_candidate, -				       bool btxonly) -{ -	u32 oldval_0, x, tx0_a, reg; -	long y, tx0_c; - -	if (final_candidate == 0xFF) { -		return; -	} else if (iqk_ok) { -		oldval_0 = (rtl_get_bbreg(hw, ROFDM0_XATXIQIMBALANCE, -					  MASKDWORD) >> 22) & 0x3FF; -		x = result[final_candidate][0]; -		if ((x & 0x00000200) != 0) -			x = x | 0xFFFFFC00; -		tx0_a = (x * oldval_0) >> 8; -		rtl_set_bbreg(hw, ROFDM0_XATXIQIMBALANCE, 0x3FF, tx0_a); -		rtl_set_bbreg(hw, ROFDM0_ECCATHRESHOLD, BIT(31), -			      ((x * oldval_0 >> 7) & 0x1)); -		y = result[final_candidate][1]; -		if ((y & 0x00000200) != 0) -			y = y | 0xFFFFFC00; -		tx0_c = (y * oldval_0) >> 8; -		rtl_set_bbreg(hw, ROFDM0_XCTXAFE, 0xF0000000, -			      ((tx0_c & 0x3C0) >> 6)); -		rtl_set_bbreg(hw, ROFDM0_XATXIQIMBALANCE, 0x003F0000, -			      (tx0_c & 0x3F)); -		rtl_set_bbreg(hw, ROFDM0_ECCATHRESHOLD, BIT(29), -			      ((y * oldval_0 >> 7) & 0x1)); -		if (btxonly) -			return; -		reg = result[final_candidate][2]; -		rtl_set_bbreg(hw, ROFDM0_XARXIQIMBALANCE, 0x3FF, reg); -		reg = result[final_candidate][3] & 0x3F; -		rtl_set_bbreg(hw, ROFDM0_XARXIQIMBALANCE, 0xFC00, reg); -		reg = (result[final_candidate][3] >> 6) & 0xF; -		rtl_set_bbreg(hw, 0xca0, 0xF0000000, reg); -	} -} - -static void phy_save_adda_regs(struct ieee80211_hw *hw, -					       u32 *addareg, u32 *addabackup, -					       u32 registernum) -{ -	u32 i; - -	for (i = 0; i < registernum; i++) -		addabackup[i] = rtl_get_bbreg(hw, addareg[i], MASKDWORD); -} - -static void phy_save_mac_regs(struct ieee80211_hw *hw, u32 *macreg, -			      u32 *macbackup) -{ -	struct rtl_priv *rtlpriv = rtl_priv(hw); -	u32 i; - -	for (i = 0; i < (IQK_MAC_REG_NUM - 1); i++) -		macbackup[i] = rtl_read_byte(rtlpriv, macreg[i]); -	macbackup[i] = rtl_read_dword(rtlpriv, macreg[i]); -} - -static void phy_reload_adda_regs(struct ieee80211_hw *hw, u32 *addareg, -				 u32 *addabackup, u32 regiesternum) -{ -	u32 i; - -	for (i = 0; i < regiesternum; i++) -		rtl_set_bbreg(hw, addareg[i], MASKDWORD, addabackup[i]); -} - -static void phy_reload_mac_regs(struct ieee80211_hw *hw, u32 *macreg, -				u32 *macbackup) -{ -	struct rtl_priv *rtlpriv = rtl_priv(hw); -	u32 i; - -	for (i = 0; i < (IQK_MAC_REG_NUM - 1); i++) -		rtl_write_byte(rtlpriv, macreg[i], (u8) macbackup[i]); -	rtl_write_dword(rtlpriv, macreg[i], macbackup[i]); -} - -static void _rtl8723ae_phy_path_adda_on(struct ieee80211_hw *hw, -					u32 *addareg, bool is_patha_on, -					bool is2t) -{ -	u32 pathOn; -	u32 i; - -	pathOn = is_patha_on ? 0x04db25a4 : 0x0b1b25a4; -	if (false == is2t) { -		pathOn = 0x0bdb25a0; -		rtl_set_bbreg(hw, addareg[0], MASKDWORD, 0x0b1b25a0); -	} else { -		rtl_set_bbreg(hw, addareg[0], MASKDWORD, pathOn); -	} - -	for (i = 1; i < IQK_ADDA_REG_NUM; i++) -		rtl_set_bbreg(hw, addareg[i], MASKDWORD, pathOn); -} - -static void _rtl8723ae_phy_mac_setting_calibration(struct ieee80211_hw *hw, -						   u32 *macreg, u32 *macbackup) -{ -	struct rtl_priv *rtlpriv = rtl_priv(hw); -	u32 i = 0; - -	rtl_write_byte(rtlpriv, macreg[i], 0x3F); - -	for (i = 1; i < (IQK_MAC_REG_NUM - 1); i++) -		rtl_write_byte(rtlpriv, macreg[i], -			       (u8) (macbackup[i] & (~BIT(3)))); -	rtl_write_byte(rtlpriv, macreg[i], (u8) (macbackup[i] & (~BIT(5)))); -} - -static void _rtl8723ae_phy_path_a_standby(struct ieee80211_hw *hw) -{ -	rtl_set_bbreg(hw, 0xe28, MASKDWORD, 0x0); -	rtl_set_bbreg(hw, 0x840, MASKDWORD, 0x00010000); -	rtl_set_bbreg(hw, 0xe28, MASKDWORD, 0x80800000); -} - -static void _rtl8723ae_phy_pi_mode_switch(struct ieee80211_hw *hw, bool pi_mode) -{ -	u32 mode; - -	mode = pi_mode ? 0x01000100 : 0x01000000; -	rtl_set_bbreg(hw, 0x820, MASKDWORD, mode); -	rtl_set_bbreg(hw, 0x828, MASKDWORD, mode); -} -  static bool phy_simularity_comp(struct ieee80211_hw *hw, long result[][8],  				u8 c1, u8 c2)  { @@ -1527,10 +1066,12 @@ static void _rtl8723ae_phy_iq_calibrate(struct ieee80211_hw *hw,  	const u32 retrycount = 2;  	if (t == 0) { -		phy_save_adda_regs(hw, adda_reg, rtlphy->adda_backup, 16); -		phy_save_mac_regs(hw, iqk_mac_reg, rtlphy->iqk_mac_backup); +		rtl8723_save_adda_registers(hw, adda_reg, rtlphy->adda_backup, +					    16); +		rtl8723_phy_save_mac_registers(hw, iqk_mac_reg, +					       rtlphy->iqk_mac_backup);  	} -	_rtl8723ae_phy_path_adda_on(hw, adda_reg, true, is2t); +	rtl8723_phy_path_adda_on(hw, adda_reg, true, is2t);  	if (t == 0) {  		rtlphy->rfpi_enable = (u8) rtl_get_bbreg(hw,  						 RFPGA0_XA_HSSIPARAMETER1, @@ -1538,7 +1079,7 @@ static void _rtl8723ae_phy_iq_calibrate(struct ieee80211_hw *hw,  	}  	if (!rtlphy->rfpi_enable) -		_rtl8723ae_phy_pi_mode_switch(hw, true); +		rtl8723_phy_pi_mode_switch(hw, true);  	if (t == 0) {  		rtlphy->reg_c04 = rtl_get_bbreg(hw, 0xc04, MASKDWORD);  		rtlphy->reg_c08 = rtl_get_bbreg(hw, 0xc08, MASKDWORD); @@ -1551,7 +1092,7 @@ static void _rtl8723ae_phy_iq_calibrate(struct ieee80211_hw *hw,  		rtl_set_bbreg(hw, 0x840, MASKDWORD, 0x00010000);  		rtl_set_bbreg(hw, 0x844, MASKDWORD, 0x00010000);  	} -	_rtl8723ae_phy_mac_setting_calibration(hw, iqk_mac_reg, +	rtl8723_phy_mac_setting_calibration(hw, iqk_mac_reg,  					    rtlphy->iqk_mac_backup);  	rtl_set_bbreg(hw, 0xb68, MASKDWORD, 0x00080000);  	if (is2t) @@ -1581,8 +1122,8 @@ static void _rtl8723ae_phy_iq_calibrate(struct ieee80211_hw *hw,  	}  	if (is2t) { -		_rtl8723ae_phy_path_a_standby(hw); -		_rtl8723ae_phy_path_adda_on(hw, adda_reg, false, is2t); +		rtl8723_phy_path_a_standby(hw); +		rtl8723_phy_path_adda_on(hw, adda_reg, false, is2t);  		for (i = 0; i < retrycount; i++) {  			pathb_ok = _rtl8723ae_phy_path_b_iqk(hw);  			if (pathb_ok == 0x03) { @@ -1617,9 +1158,11 @@ static void _rtl8723ae_phy_iq_calibrate(struct ieee80211_hw *hw,  		rtl_set_bbreg(hw, 0x844, MASKDWORD, 0x00032ed3);  	if (t != 0) {  		if (!rtlphy->rfpi_enable) -			_rtl8723ae_phy_pi_mode_switch(hw, false); -		phy_reload_adda_regs(hw, adda_reg, rtlphy->adda_backup, 16); -		phy_reload_mac_regs(hw, iqk_mac_reg, rtlphy->iqk_mac_backup); +			rtl8723_phy_pi_mode_switch(hw, false); +		rtl8723_phy_reload_adda_registers(hw, adda_reg, +						  rtlphy->adda_backup, 16); +		rtl8723_phy_reload_mac_registers(hw, iqk_mac_reg, +						 rtlphy->iqk_mac_backup);  	}  } @@ -1720,7 +1263,8 @@ void rtl8723ae_phy_iq_calibrate(struct ieee80211_hw *hw, bool recovery)  	};  	if (recovery) { -		phy_reload_adda_regs(hw, iqk_bb_reg, rtlphy->iqk_bb_backup, 10); +		rtl8723_phy_reload_adda_registers(hw, iqk_bb_reg, +						  rtlphy->iqk_bb_backup, 10);  		return;  	}  	if (start_conttx || singletone) @@ -1785,9 +1329,10 @@ void rtl8723ae_phy_iq_calibrate(struct ieee80211_hw *hw, bool recovery)  		rtlphy->reg_e9c = rtlphy->reg_ebc = 0x0;  	}  	if (reg_e94 != 0) /*&&(reg_ea4 != 0) */ -		phy_path_a_fill_iqk_matrix(hw, patha_ok, result, -					   final_candidate, (reg_ea4 == 0)); -	phy_save_adda_regs(hw, iqk_bb_reg, rtlphy->iqk_bb_backup, 10); +		rtl8723_phy_path_a_fill_iqk_matrix(hw, patha_ok, result, +						   final_candidate, +						   (reg_ea4 == 0)); +	rtl8723_save_adda_registers(hw, iqk_bb_reg, rtlphy->iqk_bb_backup, 10);  }  void rtl8723ae_phy_lc_calibrate(struct ieee80211_hw *hw) diff --git a/drivers/net/wireless/rtlwifi/rtl8723ae/phy.h b/drivers/net/wireless/rtlwifi/rtl8723ae/phy.h index e7a59eba351..cd43139ed33 100644 --- a/drivers/net/wireless/rtlwifi/rtl8723ae/phy.h +++ b/drivers/net/wireless/rtlwifi/rtl8723ae/phy.h @@ -76,23 +76,6 @@  #define RTL92C_MAX_PATH_NUM			2 -enum swchnlcmd_id { -	CMDID_END, -	CMDID_SET_TXPOWEROWER_LEVEL, -	CMDID_BBREGWRITE10, -	CMDID_WRITEPORT_ULONG, -	CMDID_WRITEPORT_USHORT, -	CMDID_WRITEPORT_UCHAR, -	CMDID_RF_WRITEREG, -}; - -struct swchnlcmd { -	enum swchnlcmd_id cmdid; -	u32 para1; -	u32 para2; -	u32 msdelay; -}; -  enum hw90_block_e {  	HW90_BLOCK_MAC = 0,  	HW90_BLOCK_PHY0 = 1, @@ -183,42 +166,36 @@ struct tx_power_struct {  	u32 mcs_original_offset[4][16];  }; -extern u32 rtl8723ae_phy_query_bb_reg(struct ieee80211_hw *hw, -				      u32 regaddr, u32 bitmask); -extern void rtl8723ae_phy_set_bb_reg(struct ieee80211_hw *hw, -				     u32 regaddr, u32 bitmask, u32 data); -extern u32 rtl8723ae_phy_query_rf_reg(struct ieee80211_hw *hw, -				      enum radio_path rfpath, u32 regaddr, -				      u32 bitmask); -extern void rtl8723ae_phy_set_rf_reg(struct ieee80211_hw *hw, -				     enum radio_path rfpath, u32 regaddr, -				     u32 bitmask, u32 data); -extern bool rtl8723ae_phy_mac_config(struct ieee80211_hw *hw); -extern bool rtl8723ae_phy_bb_config(struct ieee80211_hw *hw); -extern bool rtl8723ae_phy_rf_config(struct ieee80211_hw *hw); -extern bool rtl92c_phy_config_rf_with_feaderfile(struct ieee80211_hw *hw, -						 enum radio_path rfpath); -extern void rtl8723ae_phy_get_hw_reg_originalvalue(struct ieee80211_hw *hw); -extern void rtl8723ae_phy_get_txpower_level(struct ieee80211_hw *hw, -					    long *powerlevel); -extern void rtl8723ae_phy_set_txpower_level(struct ieee80211_hw *hw, -					    u8 channel); -extern bool rtl8723ae_phy_update_txpower_dbm(struct ieee80211_hw *hw, -					     long power_indbm); -extern void rtl8723ae_phy_scan_operation_backup(struct ieee80211_hw *hw, -						u8 operation); -extern void rtl8723ae_phy_set_bw_mode_callback(struct ieee80211_hw *hw); -extern void rtl8723ae_phy_set_bw_mode(struct ieee80211_hw *hw, -				      enum nl80211_channel_type ch_type); -extern void rtl8723ae_phy_sw_chnl_callback(struct ieee80211_hw *hw); -extern u8 rtl8723ae_phy_sw_chnl(struct ieee80211_hw *hw); -extern void rtl8723ae_phy_iq_calibrate(struct ieee80211_hw *hw, bool recovery); +u32 rtl8723ae_phy_query_rf_reg(struct ieee80211_hw *hw, +			       enum radio_path rfpath, u32 regaddr, +			       u32 bitmask); +void rtl8723ae_phy_set_rf_reg(struct ieee80211_hw *hw, +			      enum radio_path rfpath, u32 regaddr, +			      u32 bitmask, u32 data); +bool rtl8723ae_phy_mac_config(struct ieee80211_hw *hw); +bool rtl8723ae_phy_bb_config(struct ieee80211_hw *hw); +bool rtl8723ae_phy_rf_config(struct ieee80211_hw *hw); +bool rtl92c_phy_config_rf_with_feaderfile(struct ieee80211_hw *hw, +					  enum radio_path rfpath); +void rtl8723ae_phy_get_hw_reg_originalvalue(struct ieee80211_hw *hw); +void rtl8723ae_phy_get_txpower_level(struct ieee80211_hw *hw, +				     long *powerlevel); +void rtl8723ae_phy_set_txpower_level(struct ieee80211_hw *hw, +				     u8 channel); +bool rtl8723ae_phy_update_txpower_dbm(struct ieee80211_hw *hw, +				      long power_indbm); +void rtl8723ae_phy_set_bw_mode_callback(struct ieee80211_hw *hw); +void rtl8723ae_phy_set_bw_mode(struct ieee80211_hw *hw, +			       enum nl80211_channel_type ch_type); +void rtl8723ae_phy_sw_chnl_callback(struct ieee80211_hw *hw); +u8 rtl8723ae_phy_sw_chnl(struct ieee80211_hw *hw); +void rtl8723ae_phy_iq_calibrate(struct ieee80211_hw *hw, bool recovery);  void rtl8723ae_phy_lc_calibrate(struct ieee80211_hw *hw);  void rtl8723ae_phy_set_rfpath_switch(struct ieee80211_hw *hw, bool bmain);  bool rtl8723ae_phy_config_rf_with_headerfile(struct ieee80211_hw *hw,  					     enum radio_path rfpath);  bool rtl8723ae_phy_set_io_cmd(struct ieee80211_hw *hw, enum io_type iotype); -extern bool rtl8723ae_phy_set_rf_power_state(struct ieee80211_hw *hw, -					     enum rf_pwrstate rfpwr_state); +bool rtl8723ae_phy_set_rf_power_state(struct ieee80211_hw *hw, +				      enum rf_pwrstate rfpwr_state);  #endif diff --git a/drivers/net/wireless/rtlwifi/rtl8723ae/pwrseq.h b/drivers/net/wireless/rtlwifi/rtl8723ae/pwrseq.h index 7a46f9fdf55..a418acb4d0c 100644 --- a/drivers/net/wireless/rtlwifi/rtl8723ae/pwrseq.h +++ b/drivers/net/wireless/rtlwifi/rtl8723ae/pwrseq.h @@ -30,7 +30,6 @@  #ifndef __RTL8723E_PWRSEQ_H__  #define __RTL8723E_PWRSEQ_H__ -#include "pwrseqcmd.h"  /*  	Check document WM-20110607-Paul-RTL8723A_Power_Architecture-R02.vsd  	There are 6 HW Power States: diff --git a/drivers/net/wireless/rtlwifi/rtl8723ae/reg.h b/drivers/net/wireless/rtlwifi/rtl8723ae/reg.h index 199da366c6d..64376b38708 100644 --- a/drivers/net/wireless/rtlwifi/rtl8723ae/reg.h +++ b/drivers/net/wireless/rtlwifi/rtl8723ae/reg.h @@ -2059,22 +2059,6 @@  #define	BWORD1					0xc  #define	BWORD					0xf -#define	MASKBYTE0				0xff -#define	MASKBYTE1				0xff00 -#define	MASKBYTE2				0xff0000 -#define	MASKBYTE3				0xff000000 -#define	MASKHWORD				0xffff0000 -#define	MASKLWORD				0x0000ffff -#define	MASKDWORD				0xffffffff -#define	MASK12BITS				0xfff -#define	MASKH4BITS				0xf0000000 -#define MASKOFDM_D				0xffc00000 -#define	MASKCCK					0x3f3f3f3f - -#define	MASK4BITS				0x0f -#define	MASK20BITS				0xfffff -#define RFREG_OFFSET_MASK			0xfffff -  #define	BENABLE					0x1  #define	BDISABLE				0x0 diff --git a/drivers/net/wireless/rtlwifi/rtl8723ae/rf.h b/drivers/net/wireless/rtlwifi/rtl8723ae/rf.h index d0f9dd79abe..57f1933ee66 100644 --- a/drivers/net/wireless/rtlwifi/rtl8723ae/rf.h +++ b/drivers/net/wireless/rtlwifi/rtl8723ae/rf.h @@ -32,12 +32,11 @@  #define RF6052_MAX_TX_PWR		0x3F -extern void rtl8723ae_phy_rf6052_set_bandwidth(struct ieee80211_hw *hw, -					    u8 bandwidth); -extern void rtl8723ae_phy_rf6052_set_cck_txpower(struct ieee80211_hw *hw, -					      u8 *ppowerlevel); -extern void rtl8723ae_phy_rf6052_set_ofdm_txpower(struct ieee80211_hw *hw, -					       u8 *ppowerlevel, u8 channel); -extern bool rtl8723ae_phy_rf6052_config(struct ieee80211_hw *hw); +void rtl8723ae_phy_rf6052_set_bandwidth(struct ieee80211_hw *hw, u8 bandwidth); +void rtl8723ae_phy_rf6052_set_cck_txpower(struct ieee80211_hw *hw, +					  u8 *ppowerlevel); +void rtl8723ae_phy_rf6052_set_ofdm_txpower(struct ieee80211_hw *hw, +					   u8 *ppowerlevel, u8 channel); +bool rtl8723ae_phy_rf6052_config(struct ieee80211_hw *hw);  #endif diff --git a/drivers/net/wireless/rtlwifi/rtl8723ae/sw.c b/drivers/net/wireless/rtlwifi/rtl8723ae/sw.c index d9ee2efffe5..73cba1eec8c 100644 --- a/drivers/net/wireless/rtlwifi/rtl8723ae/sw.c +++ b/drivers/net/wireless/rtlwifi/rtl8723ae/sw.c @@ -33,11 +33,15 @@  #include "../core.h"  #include "../pci.h" +#include "../base.h"  #include "reg.h"  #include "def.h"  #include "phy.h" +#include "../rtl8723com/phy_common.h"  #include "dm.h"  #include "hw.h" +#include "fw.h" +#include "../rtl8723com/fw_common.h"  #include "sw.h"  #include "trx.h"  #include "led.h" @@ -192,6 +196,11 @@ void rtl8723ae_deinit_sw_vars(struct ieee80211_hw *hw)  	}  } +static bool is_fw_header(struct rtl92c_firmware_header *hdr) +{ +	return (hdr->signature & 0xfff0) == 0x2300; +} +  static struct rtl_hal_ops rtl8723ae_hal_ops = {  	.init_sw_vars = rtl8723ae_init_sw_vars,  	.deinit_sw_vars = rtl8723ae_deinit_sw_vars, @@ -220,7 +229,7 @@ static struct rtl_hal_ops rtl8723ae_hal_ops = {  	.set_bw_mode = rtl8723ae_phy_set_bw_mode,  	.switch_channel = rtl8723ae_phy_sw_chnl,  	.dm_watchdog = rtl8723ae_dm_watchdog, -	.scan_operation_backup = rtl8723ae_phy_scan_operation_backup, +	.scan_operation_backup = rtl_phy_scan_operation_backup,  	.set_rf_power_state = rtl8723ae_phy_set_rf_power_state,  	.led_control = rtl8723ae_led_control,  	.set_desc = rtl8723ae_set_desc, @@ -229,14 +238,14 @@ static struct rtl_hal_ops rtl8723ae_hal_ops = {  	.enable_hw_sec = rtl8723ae_enable_hw_security_config,  	.set_key = rtl8723ae_set_key,  	.init_sw_leds = rtl8723ae_init_sw_leds, -	.allow_all_destaddr = rtl8723ae_allow_all_destaddr, -	.get_bbreg = rtl8723ae_phy_query_bb_reg, -	.set_bbreg = rtl8723ae_phy_set_bb_reg, +	.get_bbreg = rtl8723_phy_query_bb_reg, +	.set_bbreg = rtl8723_phy_set_bb_reg,  	.get_rfreg = rtl8723ae_phy_query_rf_reg,  	.set_rfreg = rtl8723ae_phy_set_rf_reg,  	.c2h_command_handle = rtl_8723e_c2h_command_handle,  	.bt_wifi_media_status_notify = rtl_8723e_bt_wifi_media_status_notify,  	.bt_coex_off_before_lps = rtl8723ae_bt_coex_off_before_lps, +	.is_fw_header = is_fw_header,  };  static struct rtl_mod_params rtl8723ae_mod_params = { diff --git a/drivers/net/wireless/rtlwifi/rtl8723ae/trx.c b/drivers/net/wireless/rtlwifi/rtl8723ae/trx.c index bcd82a1020a..10b7577b6ae 100644 --- a/drivers/net/wireless/rtlwifi/rtl8723ae/trx.c +++ b/drivers/net/wireless/rtlwifi/rtl8723ae/trx.c @@ -334,7 +334,7 @@ bool rtl8723ae_rx_query_desc(struct ieee80211_hw *hw,  			/* during testing, hdr could be NULL here */  			return false;  		} -		if ((ieee80211_is_robust_mgmt_frame(hdr)) && +		if ((_ieee80211_is_robust_mgmt_frame(hdr)) &&  			(ieee80211_has_protected(hdr->frame_control)))  			rx_status->flag &= ~RX_FLAG_DECRYPTED;  		else @@ -359,14 +359,13 @@ bool rtl8723ae_rx_query_desc(struct ieee80211_hw *hw,  	/*rx_status->qual = status->signal; */  	rx_status->signal = status->recvsignalpower + 10; -	/*rx_status->noise = -status->noise; */  	return true;  }  void rtl8723ae_tx_fill_desc(struct ieee80211_hw *hw,  			    struct ieee80211_hdr *hdr, u8 *pdesc_tx, -			    struct ieee80211_tx_info *info, +			    u8 *pbd_desc_tx, struct ieee80211_tx_info *info,  			    struct ieee80211_sta *sta,  			    struct sk_buff *skb, u8 hw_queue,  			    struct rtl_tcb_desc *ptcdesc) @@ -376,7 +375,7 @@ void rtl8723ae_tx_fill_desc(struct ieee80211_hw *hw,  	struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));  	struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw));  	bool defaultadapter = true; -	u8 *pdesc = (u8 *) pdesc_tx; +	u8 *pdesc = pdesc_tx;  	u16 seq_number;  	__le16 fc = hdr->frame_control;  	u8 fw_qsel = _rtl8723ae_map_hwqueue_to_fwqueue(skb, hw_queue); @@ -578,7 +577,7 @@ void rtl8723ae_tx_fill_cmddesc(struct ieee80211_hw *hw,  	SET_TX_DESC_OWN(pdesc, 1); -	SET_TX_DESC_PKT_SIZE((u8 *) pdesc, (u16) (skb->len)); +	SET_TX_DESC_PKT_SIZE(pdesc, (u16) (skb->len));  	SET_TX_DESC_FIRST_SEG(pdesc, 1);  	SET_TX_DESC_LAST_SEG(pdesc, 1); @@ -598,7 +597,8 @@ void rtl8723ae_tx_fill_cmddesc(struct ieee80211_hw *hw,  		      pdesc, TX_DESC_SIZE);  } -void rtl8723ae_set_desc(u8 *pdesc, bool istx, u8 desc_name, u8 *val) +void rtl8723ae_set_desc(struct ieee80211_hw *hw, u8 *pdesc, bool istx, +			u8 desc_name, u8 *val)  {  	if (istx == true) {  		switch (desc_name) { diff --git a/drivers/net/wireless/rtlwifi/rtl8723ae/trx.h b/drivers/net/wireless/rtlwifi/rtl8723ae/trx.h index ad05b54bc0f..4380b7d3a91 100644 --- a/drivers/net/wireless/rtlwifi/rtl8723ae/trx.h +++ b/drivers/net/wireless/rtlwifi/rtl8723ae/trx.h @@ -521,12 +521,6 @@ do {							\  		memset(__pdesc, 0, _size);		\  } while (0) -#define RTL8723E_RX_HAL_IS_CCK_RATE(rxmcs)		\ -	((rxmcs) == DESC92_RATE1M ||			\ -	 (rxmcs) == DESC92_RATE2M ||			\ -	 (rxmcs) == DESC92_RATE5_5M ||			\ -	 (rxmcs) == DESC92_RATE11M) -  struct rx_fwinfo_8723e {  	u8 gain_trsw[4];  	u8 pwdb_all; @@ -706,8 +700,8 @@ struct rx_desc_8723e {  } __packed;  void rtl8723ae_tx_fill_desc(struct ieee80211_hw *hw, -			    struct ieee80211_hdr *hdr, u8 *pdesc_tx, -			    struct ieee80211_tx_info *info, +			    struct ieee80211_hdr *hdr, u8 *pdesc, +			    u8 *pbd_desc_tx, struct ieee80211_tx_info *info,  			    struct ieee80211_sta *sta,  			    struct sk_buff *skb, u8 hw_queue,  			    struct rtl_tcb_desc *ptcb_desc); @@ -715,7 +709,8 @@ bool rtl8723ae_rx_query_desc(struct ieee80211_hw *hw,  			     struct rtl_stats *status,  			     struct ieee80211_rx_status *rx_status,  			     u8 *pdesc, struct sk_buff *skb); -void rtl8723ae_set_desc(u8 *pdesc, bool istx, u8 desc_name, u8 *val); +void rtl8723ae_set_desc(struct ieee80211_hw *hw, u8 *pdesc, bool istx, +			u8 desc_name, u8 *val);  u32 rtl8723ae_get_desc(u8 *pdesc, bool istx, u8 desc_name);  void rtl8723ae_tx_polling(struct ieee80211_hw *hw, u8 hw_queue);  void rtl8723ae_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc,  | 
