aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLarry Finger <Larry.Finger@lwfinger.net>2014-09-22 10:39:25 -0400
committerJohn W. Linville <linville@tuxdriver.com>2014-09-26 17:22:28 -0400
commitc151aed6aa146e9587590051aba9da68b9370f9b (patch)
tree9f3c4df809c3335114a5384c82ccfc12fa8a7a52
parentf3a97e93814aeac3f13e857a0071726acc9bd626 (diff)
rtlwifi: rtl8188ee: Update driver to match Realtek release of 06282014
Not only does this patch update the driver to match the latest Realtek release, it is an important step in getting the internal code source at Realtek to match the code in the kernel. The primary reason for this is to make it easier for Realtek to maintain the kernel source without requiring an intermediate like me. In this process of merging the two source repositories, there are a lot of changes in both, and this commit is rather large. Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net> Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8188ee/def.h66
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8188ee/dm.c881
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8188ee/dm.h23
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8188ee/fw.c231
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8188ee/fw.h29
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8188ee/hw.c1258
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8188ee/led.c49
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8188ee/led.h4
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8188ee/phy.c2123
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8188ee/phy.h50
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8188ee/pwrseq.c50
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8188ee/pwrseq.h359
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8188ee/pwrseqcmd.c115
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8188ee/pwrseqcmd.h49
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8188ee/reg.h2936
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8188ee/rf.c282
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8188ee/rf.h7
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8188ee/sw.c41
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8188ee/sw.h6
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8188ee/table.c6
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8188ee/table.h12
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8188ee/trx.c444
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8188ee/trx.h83
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8723be/trx.c2
-rw-r--r--drivers/net/wireless/rtlwifi/wifi.h5
25 files changed, 4863 insertions, 4248 deletions
diff --git a/drivers/net/wireless/rtlwifi/rtl8188ee/def.h b/drivers/net/wireless/rtlwifi/rtl8188ee/def.h
index c764fff9ebe6..d9ea9d0c79a5 100644
--- a/drivers/net/wireless/rtlwifi/rtl8188ee/def.h
+++ b/drivers/net/wireless/rtlwifi/rtl8188ee/def.h
@@ -11,10 +11,6 @@
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details. 12 * more details.
13 * 13 *
14 * You should have received a copy of the GNU General Public License along with
15 * this program; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
17 *
18 * The full GNU General Public License is included in this distribution in the 14 * The full GNU General Public License is included in this distribution in the
19 * file called LICENSE. 15 * file called LICENSE.
20 * 16 *
@@ -111,7 +107,6 @@
111 107
112#define CHIP_BONDING_IDENTIFIER(_value) (((_value)>>22)&0x3) 108#define CHIP_BONDING_IDENTIFIER(_value) (((_value)>>22)&0x3)
113 109
114
115/* [15:12] IC version(CUT): A-cut=0, B-cut=1, C-cut=2, D-cut=3 110/* [15:12] IC version(CUT): A-cut=0, B-cut=1, C-cut=2, D-cut=3
116 * [7] Manufacturer: TSMC=0, UMC=1 111 * [7] Manufacturer: TSMC=0, UMC=1
117 * [6:4] RF type: 1T1R=0, 1T2R=1, 2T2R=2 112 * [6:4] RF type: 1T1R=0, 1T2R=1, 2T2R=2
@@ -130,7 +125,6 @@
130#define D_CUT_VERSION ((BIT(12)|BIT(13))) 125#define D_CUT_VERSION ((BIT(12)|BIT(13)))
131#define E_CUT_VERSION BIT(14) 126#define E_CUT_VERSION BIT(14)
132 127
133
134/* MASK */ 128/* MASK */
135#define IC_TYPE_MASK (BIT(0)|BIT(1)|BIT(2)) 129#define IC_TYPE_MASK (BIT(0)|BIT(1)|BIT(2))
136#define CHIP_TYPE_MASK BIT(3) 130#define CHIP_TYPE_MASK BIT(3)
@@ -147,7 +141,6 @@
147#define GET_CVID_ROM_VERSION(version) ((version) & ROM_VERSION_MASK) 141#define GET_CVID_ROM_VERSION(version) ((version) & ROM_VERSION_MASK)
148#define GET_CVID_CUT_VERSION(version) ((version) & CUT_VERSION_MASK) 142#define GET_CVID_CUT_VERSION(version) ((version) & CUT_VERSION_MASK)
149 143
150
151#define IS_81XXC(version) \ 144#define IS_81XXC(version) \
152 ((GET_CVID_IC_TYPE(version) == 0) ? true : false) 145 ((GET_CVID_IC_TYPE(version) == 0) ? true : false)
153#define IS_8723_SERIES(version) \ 146#define IS_8723_SERIES(version) \
@@ -174,7 +167,7 @@
174#define IS_81xxC_VENDOR_UMC_A_CUT(version) \ 167#define IS_81xxC_VENDOR_UMC_A_CUT(version) \
175 (IS_81XXC(version) ? ((IS_CHIP_VENDOR_UMC(version)) ? \ 168 (IS_81XXC(version) ? ((IS_CHIP_VENDOR_UMC(version)) ? \
176 ((GET_CVID_CUT_VERSION(version)) ? false : true) : false) : false) 169 ((GET_CVID_CUT_VERSION(version)) ? false : true) : false) : false)
177#define IS_81xxC_VENDOR_UMC_B_CUT(version) \ 170#define IS_81XXC_VENDOR_UMC_B_CUT(version) \
178 (IS_81XXC(version) ? (IS_CHIP_VENDOR_UMC(version) ? \ 171 (IS_81XXC(version) ? (IS_CHIP_VENDOR_UMC(version) ? \
179 ((GET_CVID_CUT_VERSION(version) == B_CUT_VERSION) ? true \ 172 ((GET_CVID_CUT_VERSION(version) == B_CUT_VERSION) ? true \
180 : false) : false) : false) 173 : false) : false) : false)
@@ -225,44 +218,37 @@ enum power_polocy_config {
225}; 218};
226 219
227enum interface_select_pci { 220enum interface_select_pci {
228 INTF_SEL1_MINICARD, 221 INTF_SEL1_MINICARD = 0,
229 INTF_SEL0_PCIE, 222 INTF_SEL0_PCIE = 1,
230 INTF_SEL2_RSV, 223 INTF_SEL2_RSV = 2,
231 INTF_SEL3_RSV, 224 INTF_SEL3_RSV = 3,
232}; 225};
233 226
234enum hal_fw_c2h_cmd_id { 227enum hal_fw_c2h_cmd_id {
235 HAL_FW_C2H_CMD_Read_MACREG, 228 HAL_FW_C2H_CMD_READ_MACREG = 0,
236 HAL_FW_C2H_CMD_Read_BBREG, 229 HAL_FW_C2H_CMD_READ_BBREG = 1,
237 HAL_FW_C2H_CMD_Read_RFREG, 230 HAL_FW_C2H_CMD_READ_RFREG = 2,
238 HAL_FW_C2H_CMD_Read_EEPROM, 231 HAL_FW_C2H_CMD_READ_EEPROM = 3,
239 HAL_FW_C2H_CMD_Read_EFUSE, 232 HAL_FW_C2H_CMD_READ_EFUSE = 4,
240 HAL_FW_C2H_CMD_Read_CAM, 233 HAL_FW_C2H_CMD_READ_CAM = 5,
241 HAL_FW_C2H_CMD_Get_BasicRate, 234 HAL_FW_C2H_CMD_GET_BASICRATE = 6,
242 HAL_FW_C2H_CMD_Get_DataRate, 235 HAL_FW_C2H_CMD_GET_DATARATE = 7,
243 HAL_FW_C2H_CMD_Survey, 236 HAL_FW_C2H_CMD_SURVEY = 8,
244 HAL_FW_C2H_CMD_SurveyDone, 237 HAL_FW_C2H_CMD_SURVEYDONE = 9,
245 HAL_FW_C2H_CMD_JoinBss, 238 HAL_FW_C2H_CMD_JOINBSS = 10,
246 HAL_FW_C2H_CMD_AddSTA, 239 HAL_FW_C2H_CMD_ADDSTA = 11,
247 HAL_FW_C2H_CMD_DelSTA, 240 HAL_FW_C2H_CMD_DELSTA = 12,
248 HAL_FW_C2H_CMD_AtimDone, 241 HAL_FW_C2H_CMD_ATIMDONE = 13,
249 HAL_FW_C2H_CMD_TX_Report, 242 HAL_FW_C2H_CMD_TX_REPORT = 14,
250 HAL_FW_C2H_CMD_CCX_Report, 243 HAL_FW_C2H_CMD_CCX_REPORT = 15,
251 HAL_FW_C2H_CMD_DTM_Report, 244 HAL_FW_C2H_CMD_DTM_REPORT = 16,
252 HAL_FW_C2H_CMD_TX_Rate_Statistics, 245 HAL_FW_C2H_CMD_TX_RATE_STATISTICS = 17,
253 HAL_FW_C2H_CMD_C2HLBK, 246 HAL_FW_C2H_CMD_C2HLBK = 18,
254 HAL_FW_C2H_CMD_C2HDBG, 247 HAL_FW_C2H_CMD_C2HDBG = 19,
255 HAL_FW_C2H_CMD_C2HFEEDBACK, 248 HAL_FW_C2H_CMD_C2HFEEDBACK = 20,
256 HAL_FW_C2H_CMD_MAX 249 HAL_FW_C2H_CMD_MAX
257}; 250};
258 251
259enum wake_on_wlan_mode {
260 ewowlandisable,
261 ewakeonmagicpacketonly,
262 ewakeonpatternmatchonly,
263 ewakeonbothtypepacket
264};
265
266enum rtl_desc_qsel { 252enum rtl_desc_qsel {
267 QSLT_BK = 0x2, 253 QSLT_BK = 0x2,
268 QSLT_BE = 0x0, 254 QSLT_BE = 0x0,
diff --git a/drivers/net/wireless/rtlwifi/rtl8188ee/dm.c b/drivers/net/wireless/rtlwifi/rtl8188ee/dm.c
index f8daa61cf1c3..2aa34d9055f0 100644
--- a/drivers/net/wireless/rtlwifi/rtl8188ee/dm.c
+++ b/drivers/net/wireless/rtlwifi/rtl8188ee/dm.c
@@ -11,10 +11,6 @@
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details. 12 * more details.
13 * 13 *
14 * You should have received a copy of the GNU General Public License along with
15 * this program; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
17 *
18 * The full GNU General Public License is included in this distribution in the 14 * The full GNU General Public License is included in this distribution in the
19 * file called LICENSE. 15 * file called LICENSE.
20 * 16 *
@@ -188,21 +184,24 @@ static void rtl88e_set_iqk_matrix(struct ieee80211_hw *hw,
188 switch (rfpath) { 184 switch (rfpath) {
189 case RF90_PATH_A: 185 case RF90_PATH_A:
190 value32 = (ele_d << 22)|((ele_c & 0x3F)<<16) | ele_a; 186 value32 = (ele_d << 22)|((ele_c & 0x3F)<<16) | ele_a;
191 rtl_set_bbreg(hw, ROFDM0_XATXIQIMBAL, MASKDWORD, 187 rtl_set_bbreg(hw, ROFDM0_XATXIQIMBALANCE,
192 value32); 188 MASKDWORD, value32);
193 value32 = (ele_c & 0x000003C0) >> 6; 189 value32 = (ele_c & 0x000003C0) >> 6;
194 rtl_set_bbreg(hw, ROFDM0_XCTXAFE, MASKH4BITS, value32); 190 rtl_set_bbreg(hw, ROFDM0_XCTXAFE, MASKH4BITS,
191 value32);
195 value32 = ((iqk_result_x * ele_d) >> 7) & 0x01; 192 value32 = ((iqk_result_x * ele_d) >> 7) & 0x01;
196 rtl_set_bbreg(hw, ROFDM0_ECCATHRES, BIT(24), value32); 193 rtl_set_bbreg(hw, ROFDM0_ECCATHRESHOLD, BIT(24),
194 value32);
197 break; 195 break;
198 case RF90_PATH_B: 196 case RF90_PATH_B:
199 value32 = (ele_d << 22)|((ele_c & 0x3F)<<16) | ele_a; 197 value32 = (ele_d << 22)|((ele_c & 0x3F)<<16) | ele_a;
200 rtl_set_bbreg(hw, ROFDM0_XBTXIQIMBAL, 198 rtl_set_bbreg(hw, ROFDM0_XBTXIQIMBALANCE, MASKDWORD,
201 MASKDWORD, value32); 199 value32);
202 value32 = (ele_c & 0x000003C0) >> 6; 200 value32 = (ele_c & 0x000003C0) >> 6;
203 rtl_set_bbreg(hw, ROFDM0_XDTXAFE, MASKH4BITS, value32); 201 rtl_set_bbreg(hw, ROFDM0_XDTXAFE, MASKH4BITS, value32);
204 value32 = ((iqk_result_x * ele_d) >> 7) & 0x01; 202 value32 = ((iqk_result_x * ele_d) >> 7) & 0x01;
205 rtl_set_bbreg(hw, ROFDM0_ECCATHRES, BIT(28), value32); 203 rtl_set_bbreg(hw, ROFDM0_ECCATHRESHOLD, BIT(28),
204 value32);
206 break; 205 break;
207 default: 206 default:
208 break; 207 break;
@@ -210,16 +209,20 @@ static void rtl88e_set_iqk_matrix(struct ieee80211_hw *hw,
210 } else { 209 } else {
211 switch (rfpath) { 210 switch (rfpath) {
212 case RF90_PATH_A: 211 case RF90_PATH_A:
213 rtl_set_bbreg(hw, ROFDM0_XATXIQIMBAL, MASKDWORD, 212 rtl_set_bbreg(hw, ROFDM0_XATXIQIMBALANCE,
214 ofdmswing_table[ofdm_index]); 213 MASKDWORD, ofdmswing_table[ofdm_index]);
215 rtl_set_bbreg(hw, ROFDM0_XCTXAFE, MASKH4BITS, 0x00); 214 rtl_set_bbreg(hw, ROFDM0_XCTXAFE,
216 rtl_set_bbreg(hw, ROFDM0_ECCATHRES, BIT(24), 0x00); 215 MASKH4BITS, 0x00);
216 rtl_set_bbreg(hw, ROFDM0_ECCATHRESHOLD,
217 BIT(24), 0x00);
217 break; 218 break;
218 case RF90_PATH_B: 219 case RF90_PATH_B:
219 rtl_set_bbreg(hw, ROFDM0_XBTXIQIMBAL, MASKDWORD, 220 rtl_set_bbreg(hw, ROFDM0_XBTXIQIMBALANCE,
220 ofdmswing_table[ofdm_index]); 221 MASKDWORD, ofdmswing_table[ofdm_index]);
221 rtl_set_bbreg(hw, ROFDM0_XDTXAFE, MASKH4BITS, 0x00); 222 rtl_set_bbreg(hw, ROFDM0_XDTXAFE,
222 rtl_set_bbreg(hw, ROFDM0_ECCATHRES, BIT(28), 0x00); 223 MASKH4BITS, 0x00);
224 rtl_set_bbreg(hw, ROFDM0_ECCATHRESHOLD,
225 BIT(28), 0x00);
223 break; 226 break;
224 default: 227 default:
225 break; 228 break;
@@ -244,7 +247,7 @@ void rtl88e_dm_txpower_track_adjust(struct ieee80211_hw *hw,
244 pwr_val = ofdm_base - ofdm_val; 247 pwr_val = ofdm_base - ofdm_val;
245 } else { 248 } else {
246 *pdirection = 2; 249 *pdirection = 2;
247 pwr_val = ofdm_val - ofdm_base; 250 pwr_val = ofdm_base - ofdm_val;
248 } 251 }
249 } else if (type == 1) { 252 } else if (type == 1) {
250 if (cck_val <= cck_base) { 253 if (cck_val <= cck_base) {
@@ -263,46 +266,75 @@ void rtl88e_dm_txpower_track_adjust(struct ieee80211_hw *hw,
263 (pwr_val << 24); 266 (pwr_val << 24);
264} 267}
265 268
266 269static void dm_tx_pwr_track_set_pwr(struct ieee80211_hw *hw,
267static void rtl88e_chk_tx_track(struct ieee80211_hw *hw, 270 enum pwr_track_control_method method,
268 enum pwr_track_control_method method, 271 u8 rfpath, u8 channel_mapped_index)
269 u8 rfpath, u8 index)
270{ 272{
271 struct rtl_priv *rtlpriv = rtl_priv(hw); 273 struct rtl_priv *rtlpriv = rtl_priv(hw);
272 struct rtl_phy *rtlphy = &(rtlpriv->phy); 274 struct rtl_phy *rtlphy = &rtlpriv->phy;
273 struct rtl_dm *rtldm = rtl_dm(rtl_priv(hw)); 275 struct rtl_dm *rtldm = rtl_dm(rtl_priv(hw));
274 int jj = rtldm->swing_idx_cck;
275 int i;
276 276
277 if (method == TXAGC) { 277 if (method == TXAGC) {
278 if (rtldm->swing_flag_ofdm == true || 278 if (rtldm->swing_flag_ofdm ||
279 rtldm->swing_flag_cck == true) { 279 rtldm->swing_flag_cck) {
280 u8 chan = rtlphy->current_channel; 280 rtl88e_phy_set_txpower_level(hw,
281 rtl88e_phy_set_txpower_level(hw, chan); 281 rtlphy->current_channel);
282 rtldm->swing_flag_ofdm = false; 282 rtldm->swing_flag_ofdm = false;
283 rtldm->swing_flag_cck = false; 283 rtldm->swing_flag_cck = false;
284 } 284 }
285 } else if (method == BBSWING) { 285 } else if (method == BBSWING) {
286 if (!rtldm->cck_inch14) { 286 if (!rtldm->cck_inch14) {
287 for (i = 0; i < 8; i++) 287 rtl_write_byte(rtlpriv, 0xa22,
288 rtl_write_byte(rtlpriv, 0xa22 + i, 288 cck_tbl_ch1_13[rtldm->swing_idx_cck][0]);
289 cck_tbl_ch1_13[jj][i]); 289 rtl_write_byte(rtlpriv, 0xa23,
290 cck_tbl_ch1_13[rtldm->swing_idx_cck][1]);
291 rtl_write_byte(rtlpriv, 0xa24,
292 cck_tbl_ch1_13[rtldm->swing_idx_cck][2]);
293 rtl_write_byte(rtlpriv, 0xa25,
294 cck_tbl_ch1_13[rtldm->swing_idx_cck][3]);
295 rtl_write_byte(rtlpriv, 0xa26,
296 cck_tbl_ch1_13[rtldm->swing_idx_cck][4]);
297 rtl_write_byte(rtlpriv, 0xa27,
298 cck_tbl_ch1_13[rtldm->swing_idx_cck][5]);
299 rtl_write_byte(rtlpriv, 0xa28,
300 cck_tbl_ch1_13[rtldm->swing_idx_cck][6]);
301 rtl_write_byte(rtlpriv, 0xa29,
302 cck_tbl_ch1_13[rtldm->swing_idx_cck][7]);
290 } else { 303 } else {
291 for (i = 0; i < 8; i++) 304 rtl_write_byte(rtlpriv, 0xa22,
292 rtl_write_byte(rtlpriv, 0xa22 + i, 305 cck_tbl_ch14[rtldm->swing_idx_cck][0]);
293 cck_tbl_ch14[jj][i]); 306 rtl_write_byte(rtlpriv, 0xa23,
307 cck_tbl_ch14[rtldm->swing_idx_cck][1]);
308 rtl_write_byte(rtlpriv, 0xa24,
309 cck_tbl_ch14[rtldm->swing_idx_cck][2]);
310 rtl_write_byte(rtlpriv, 0xa25,
311 cck_tbl_ch14[rtldm->swing_idx_cck][3]);
312 rtl_write_byte(rtlpriv, 0xa26,
313 cck_tbl_ch14[rtldm->swing_idx_cck][4]);
314 rtl_write_byte(rtlpriv, 0xa27,
315 cck_tbl_ch14[rtldm->swing_idx_cck][5]);
316 rtl_write_byte(rtlpriv, 0xa28,
317 cck_tbl_ch14[rtldm->swing_idx_cck][6]);
318 rtl_write_byte(rtlpriv, 0xa29,
319 cck_tbl_ch14[rtldm->swing_idx_cck][7]);
294 } 320 }
295 321
296 if (rfpath == RF90_PATH_A) { 322 if (rfpath == RF90_PATH_A) {
297 long x = rtlphy->iqk_matrix[index].value[0][0]; 323 rtl88e_set_iqk_matrix(hw, rtldm->swing_idx_ofdm[rfpath],
298 long y = rtlphy->iqk_matrix[index].value[0][1]; 324 rfpath, rtlphy->iqk_matrix
299 u8 indx = rtldm->swing_idx_ofdm[rfpath]; 325 [channel_mapped_index].
300 rtl88e_set_iqk_matrix(hw, indx, rfpath, x, y); 326 value[0][0],
327 rtlphy->iqk_matrix
328 [channel_mapped_index].
329 value[0][1]);
301 } else if (rfpath == RF90_PATH_B) { 330 } else if (rfpath == RF90_PATH_B) {
302 u8 indx = rtldm->swing_idx_ofdm[rfpath]; 331 rtl88e_set_iqk_matrix(hw, rtldm->swing_idx_ofdm[rfpath],
303 long x = rtlphy->iqk_matrix[indx].value[0][4]; 332 rfpath, rtlphy->iqk_matrix
304 long y = rtlphy->iqk_matrix[indx].value[0][5]; 333 [channel_mapped_index].
305 rtl88e_set_iqk_matrix(hw, indx, rfpath, x, y); 334 value[0][4],
335 rtlphy->iqk_matrix
336 [channel_mapped_index].
337 value[0][5]);
306 } 338 }
307 } else { 339 } else {
308 return; 340 return;
@@ -317,7 +349,7 @@ static void rtl88e_dm_diginit(struct ieee80211_hw *hw)
317 dm_dig->dig_enable_flag = true; 349 dm_dig->dig_enable_flag = true;
318 dm_dig->cur_igvalue = rtl_get_bbreg(hw, ROFDM0_XAAGCCORE1, 0x7f); 350 dm_dig->cur_igvalue = rtl_get_bbreg(hw, ROFDM0_XAAGCCORE1, 0x7f);
319 dm_dig->pre_igvalue = 0; 351 dm_dig->pre_igvalue = 0;
320 dm_dig->cursta_cstate = DIG_STA_DISCONNECT; 352 dm_dig->cur_sta_cstate = DIG_STA_DISCONNECT;
321 dm_dig->presta_cstate = DIG_STA_DISCONNECT; 353 dm_dig->presta_cstate = DIG_STA_DISCONNECT;
322 dm_dig->curmultista_cstate = DIG_MULTISTA_DISCONNECT; 354 dm_dig->curmultista_cstate = DIG_MULTISTA_DISCONNECT;
323 dm_dig->rssi_lowthresh = DM_DIG_THRESH_LOW; 355 dm_dig->rssi_lowthresh = DM_DIG_THRESH_LOW;
@@ -348,22 +380,23 @@ static u8 rtl88e_dm_initial_gain_min_pwdb(struct ieee80211_hw *hw)
348 long rssi_val_min = 0; 380 long rssi_val_min = 0;
349 381
350 if ((dm_dig->curmultista_cstate == DIG_MULTISTA_CONNECT) && 382 if ((dm_dig->curmultista_cstate == DIG_MULTISTA_CONNECT) &&
351 (dm_dig->cursta_cstate == DIG_STA_CONNECT)) { 383 (dm_dig->cur_sta_cstate == DIG_STA_CONNECT)) {
352 if (rtlpriv->dm.entry_min_undec_sm_pwdb != 0) 384 if (rtlpriv->dm.entry_min_undec_sm_pwdb != 0)
353 rssi_val_min = 385 rssi_val_min =
354 (rtlpriv->dm.entry_min_undec_sm_pwdb > 386 (rtlpriv->dm.entry_min_undec_sm_pwdb >
355 rtlpriv->dm.undec_sm_pwdb) ? 387 rtlpriv->dm.undec_sm_pwdb) ?
356 rtlpriv->dm.undec_sm_pwdb : 388 rtlpriv->dm.undec_sm_pwdb :
357 rtlpriv->dm.entry_min_undec_sm_pwdb; 389 rtlpriv->dm.entry_min_undec_sm_pwdb;
358 else 390 else
359 rssi_val_min = rtlpriv->dm.undec_sm_pwdb; 391 rssi_val_min = rtlpriv->dm.undec_sm_pwdb;
360 } else if (dm_dig->cursta_cstate == DIG_STA_CONNECT || 392 } else if (dm_dig->cur_sta_cstate == DIG_STA_CONNECT ||
361 dm_dig->cursta_cstate == DIG_STA_BEFORE_CONNECT) { 393 dm_dig->cur_sta_cstate == DIG_STA_BEFORE_CONNECT) {
362 rssi_val_min = rtlpriv->dm.undec_sm_pwdb; 394 rssi_val_min = rtlpriv->dm.undec_sm_pwdb;
363 } else if (dm_dig->curmultista_cstate == 395 } else if (dm_dig->curmultista_cstate ==
364 DIG_MULTISTA_CONNECT) { 396 DIG_MULTISTA_CONNECT) {
365 rssi_val_min = rtlpriv->dm.entry_min_undec_sm_pwdb; 397 rssi_val_min = rtlpriv->dm.entry_min_undec_sm_pwdb;
366 } 398 }
399
367 return (u8)rssi_val_min; 400 return (u8)rssi_val_min;
368} 401}
369 402
@@ -371,57 +404,58 @@ static void rtl88e_dm_false_alarm_counter_statistics(struct ieee80211_hw *hw)
371{ 404{
372 u32 ret_value; 405 u32 ret_value;
373 struct rtl_priv *rtlpriv = rtl_priv(hw); 406 struct rtl_priv *rtlpriv = rtl_priv(hw);
374 struct false_alarm_statistics *alm_cnt = &(rtlpriv->falsealm_cnt); 407 struct false_alarm_statistics *falsealm_cnt = &rtlpriv->falsealm_cnt;
375 408
376 rtl_set_bbreg(hw, ROFDM0_LSTF, BIT(31), 1); 409 rtl_set_bbreg(hw, ROFDM0_LSTF, BIT(31), 1);
377 rtl_set_bbreg(hw, ROFDM1_LSTF, BIT(31), 1); 410 rtl_set_bbreg(hw, ROFDM1_LSTF, BIT(31), 1);
378 411
379 ret_value = rtl_get_bbreg(hw, ROFDM0_FRAMESYNC, MASKDWORD); 412 ret_value = rtl_get_bbreg(hw, ROFDM0_FRAMESYNC, MASKDWORD);
380 alm_cnt->cnt_fast_fsync_fail = (ret_value&0xffff); 413 falsealm_cnt->cnt_fast_fsync_fail = (ret_value&0xffff);
381 alm_cnt->cnt_sb_search_fail = ((ret_value&0xffff0000)>>16); 414 falsealm_cnt->cnt_sb_search_fail = ((ret_value&0xffff0000)>>16);
382 415
383 ret_value = rtl_get_bbreg(hw, ROFDM_PHYCOUNTER1, MASKDWORD); 416 ret_value = rtl_get_bbreg(hw, ROFDM_PHYCOUNTER1, MASKDWORD);
384 alm_cnt->cnt_ofdm_cca = (ret_value&0xffff); 417 falsealm_cnt->cnt_ofdm_cca = (ret_value&0xffff);
385 alm_cnt->cnt_parity_fail = ((ret_value & 0xffff0000) >> 16); 418 falsealm_cnt->cnt_parity_fail = ((ret_value & 0xffff0000) >> 16);
386 419
387 ret_value = rtl_get_bbreg(hw, ROFDM_PHYCOUNTER2, MASKDWORD); 420 ret_value = rtl_get_bbreg(hw, ROFDM_PHYCOUNTER2, MASKDWORD);
388 alm_cnt->cnt_rate_illegal = (ret_value & 0xffff); 421 falsealm_cnt->cnt_rate_illegal = (ret_value & 0xffff);
389 alm_cnt->cnt_crc8_fail = ((ret_value & 0xffff0000) >> 16); 422 falsealm_cnt->cnt_crc8_fail = ((ret_value & 0xffff0000) >> 16);
390 423
391 ret_value = rtl_get_bbreg(hw, ROFDM_PHYCOUNTER3, MASKDWORD); 424 ret_value = rtl_get_bbreg(hw, ROFDM_PHYCOUNTER3, MASKDWORD);
392 alm_cnt->cnt_mcs_fail = (ret_value & 0xffff); 425 falsealm_cnt->cnt_mcs_fail = (ret_value & 0xffff);
393 alm_cnt->cnt_ofdm_fail = alm_cnt->cnt_parity_fail + 426 falsealm_cnt->cnt_ofdm_fail = falsealm_cnt->cnt_parity_fail +
394 alm_cnt->cnt_rate_illegal + 427 falsealm_cnt->cnt_rate_illegal +
395 alm_cnt->cnt_crc8_fail + 428 falsealm_cnt->cnt_crc8_fail +
396 alm_cnt->cnt_mcs_fail + 429 falsealm_cnt->cnt_mcs_fail +
397 alm_cnt->cnt_fast_fsync_fail + 430 falsealm_cnt->cnt_fast_fsync_fail +
398 alm_cnt->cnt_sb_search_fail; 431 falsealm_cnt->cnt_sb_search_fail;
399 432
400 ret_value = rtl_get_bbreg(hw, REG_SC_CNT, MASKDWORD); 433 ret_value = rtl_get_bbreg(hw, REG_SC_CNT, MASKDWORD);
401 alm_cnt->cnt_bw_lsc = (ret_value & 0xffff); 434 falsealm_cnt->cnt_bw_lsc = (ret_value & 0xffff);
402 alm_cnt->cnt_bw_usc = ((ret_value & 0xffff0000) >> 16); 435 falsealm_cnt->cnt_bw_usc = ((ret_value & 0xffff0000) >> 16);
403 436
404 rtl_set_bbreg(hw, RCCK0_FALSEALARMREPORT, BIT(12), 1); 437 rtl_set_bbreg(hw, RCCK0_FALSEALARMREPORT, BIT(12), 1);
405 rtl_set_bbreg(hw, RCCK0_FALSEALARMREPORT, BIT(14), 1); 438 rtl_set_bbreg(hw, RCCK0_FALSEALARMREPORT, BIT(14), 1);
406 439
407 ret_value = rtl_get_bbreg(hw, RCCK0_FACOUNTERLOWER, MASKBYTE0); 440 ret_value = rtl_get_bbreg(hw, RCCK0_FACOUNTERLOWER, MASKBYTE0);
408 alm_cnt->cnt_cck_fail = ret_value; 441 falsealm_cnt->cnt_cck_fail = ret_value;
409 442
410 ret_value = rtl_get_bbreg(hw, RCCK0_FACOUNTERUPPER, MASKBYTE3); 443 ret_value = rtl_get_bbreg(hw, RCCK0_FACOUNTERUPPER, MASKBYTE3);
411 alm_cnt->cnt_cck_fail += (ret_value & 0xff) << 8; 444 falsealm_cnt->cnt_cck_fail += (ret_value & 0xff) << 8;
412 445
413 ret_value = rtl_get_bbreg(hw, RCCK0_CCA_CNT, MASKDWORD); 446 ret_value = rtl_get_bbreg(hw, RCCK0_CCA_CNT, MASKDWORD);
414 alm_cnt->cnt_cck_cca = ((ret_value & 0xff) << 8) | 447 falsealm_cnt->cnt_cck_cca = ((ret_value & 0xff) << 8) |
415 ((ret_value&0xFF00)>>8); 448 ((ret_value&0xFF00)>>8);
416 449
417 alm_cnt->cnt_all = alm_cnt->cnt_fast_fsync_fail + 450 falsealm_cnt->cnt_all = (falsealm_cnt->cnt_fast_fsync_fail +
418 alm_cnt->cnt_sb_search_fail + 451 falsealm_cnt->cnt_sb_search_fail +
419 alm_cnt->cnt_parity_fail + 452 falsealm_cnt->cnt_parity_fail +
420 alm_cnt->cnt_rate_illegal + 453 falsealm_cnt->cnt_rate_illegal +
421 alm_cnt->cnt_crc8_fail + 454 falsealm_cnt->cnt_crc8_fail +
422 alm_cnt->cnt_mcs_fail + 455 falsealm_cnt->cnt_mcs_fail +
423 alm_cnt->cnt_cck_fail; 456 falsealm_cnt->cnt_cck_fail);
424 alm_cnt->cnt_cca_all = alm_cnt->cnt_ofdm_cca + alm_cnt->cnt_cck_cca; 457 falsealm_cnt->cnt_cca_all = falsealm_cnt->cnt_ofdm_cca +
458 falsealm_cnt->cnt_cck_cca;
425 459
426 rtl_set_bbreg(hw, ROFDM0_TRSWISOLATION, BIT(31), 1); 460 rtl_set_bbreg(hw, ROFDM0_TRSWISOLATION, BIT(31), 1);
427 rtl_set_bbreg(hw, ROFDM0_TRSWISOLATION, BIT(31), 0); 461 rtl_set_bbreg(hw, ROFDM0_TRSWISOLATION, BIT(31), 0);
@@ -435,16 +469,15 @@ static void rtl88e_dm_false_alarm_counter_statistics(struct ieee80211_hw *hw)
435 rtl_set_bbreg(hw, RCCK0_FALSEALARMREPORT, BIT(15)|BIT(14), 2); 469 rtl_set_bbreg(hw, RCCK0_FALSEALARMREPORT, BIT(15)|BIT(14), 2);
436 470
437 RT_TRACE(rtlpriv, COMP_DIG, DBG_TRACE, 471 RT_TRACE(rtlpriv, COMP_DIG, DBG_TRACE,
438 "cnt_parity_fail = %d, cnt_rate_illegal = %d, " 472 "cnt_parity_fail = %d, cnt_rate_illegal = %d, cnt_crc8_fail = %d, cnt_mcs_fail = %d\n",
439 "cnt_crc8_fail = %d, cnt_mcs_fail = %d\n", 473 falsealm_cnt->cnt_parity_fail,
440 alm_cnt->cnt_parity_fail, 474 falsealm_cnt->cnt_rate_illegal,
441 alm_cnt->cnt_rate_illegal, 475 falsealm_cnt->cnt_crc8_fail, falsealm_cnt->cnt_mcs_fail);
442 alm_cnt->cnt_crc8_fail, alm_cnt->cnt_mcs_fail);
443 476
444 RT_TRACE(rtlpriv, COMP_DIG, DBG_TRACE, 477 RT_TRACE(rtlpriv, COMP_DIG, DBG_TRACE,
445 "cnt_ofdm_fail = %x, cnt_cck_fail = %x, cnt_all = %x\n", 478 "cnt_ofdm_fail = %x, cnt_cck_fail = %x, cnt_all = %x\n",
446 alm_cnt->cnt_ofdm_fail, 479 falsealm_cnt->cnt_ofdm_fail,
447 alm_cnt->cnt_cck_fail, alm_cnt->cnt_all); 480 falsealm_cnt->cnt_cck_fail, falsealm_cnt->cnt_all);
448} 481}
449 482
450static void rtl88e_dm_cck_packet_detection_thresh(struct ieee80211_hw *hw) 483static void rtl88e_dm_cck_packet_detection_thresh(struct ieee80211_hw *hw)
@@ -453,7 +486,7 @@ static void rtl88e_dm_cck_packet_detection_thresh(struct ieee80211_hw *hw)
453 struct dig_t *dm_dig = &rtlpriv->dm_digtable; 486 struct dig_t *dm_dig = &rtlpriv->dm_digtable;
454 u8 cur_cck_cca_thresh; 487 u8 cur_cck_cca_thresh;
455 488
456 if (dm_dig->cursta_cstate == DIG_STA_CONNECT) { 489 if (dm_dig->cur_sta_cstate == DIG_STA_CONNECT) {
457 dm_dig->rssi_val_min = rtl88e_dm_initial_gain_min_pwdb(hw); 490 dm_dig->rssi_val_min = rtl88e_dm_initial_gain_min_pwdb(hw);
458 if (dm_dig->rssi_val_min > 25) { 491 if (dm_dig->rssi_val_min > 25) {
459 cur_cck_cca_thresh = 0xcd; 492 cur_cck_cca_thresh = 0xcd;
@@ -486,10 +519,10 @@ static void rtl88e_dm_cck_packet_detection_thresh(struct ieee80211_hw *hw)
486static void rtl88e_dm_dig(struct ieee80211_hw *hw) 519static void rtl88e_dm_dig(struct ieee80211_hw *hw)
487{ 520{
488 struct rtl_priv *rtlpriv = rtl_priv(hw); 521 struct rtl_priv *rtlpriv = rtl_priv(hw);
489 struct dig_t *dm_dig = &rtlpriv->dm_digtable;
490 struct rtl_mac *mac = rtl_mac(rtl_priv(hw)); 522 struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
491 struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw)); 523 struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw));
492 u8 dig_min, dig_maxofmin; 524 struct dig_t *dm_dig = &rtlpriv->dm_digtable;
525 u8 dig_dynamic_min, dig_maxofmin;
493 bool bfirstconnect; 526 bool bfirstconnect;
494 u8 dm_dig_max, dm_dig_min; 527 u8 dm_dig_max, dm_dig_min;
495 u8 current_igi = dm_dig->cur_igvalue; 528 u8 current_igi = dm_dig->cur_igvalue;
@@ -502,19 +535,19 @@ static void rtl88e_dm_dig(struct ieee80211_hw *hw)
502 return; 535 return;
503 536
504 if (mac->link_state >= MAC80211_LINKED) 537 if (mac->link_state >= MAC80211_LINKED)
505 dm_dig->cursta_cstate = DIG_STA_CONNECT; 538 dm_dig->cur_sta_cstate = DIG_STA_CONNECT;
506 else 539 else
507 dm_dig->cursta_cstate = DIG_STA_DISCONNECT; 540 dm_dig->cur_sta_cstate = DIG_STA_DISCONNECT;
508 if (rtlpriv->mac80211.opmode == NL80211_IFTYPE_AP || 541 if (rtlpriv->mac80211.opmode == NL80211_IFTYPE_AP ||
509 rtlpriv->mac80211.opmode == NL80211_IFTYPE_ADHOC) 542 rtlpriv->mac80211.opmode == NL80211_IFTYPE_ADHOC)
510 dm_dig->cursta_cstate = DIG_STA_DISCONNECT; 543 dm_dig->cur_sta_cstate = DIG_STA_DISCONNECT;
511 544
512 dm_dig_max = DM_DIG_MAX; 545 dm_dig_max = DM_DIG_MAX;
513 dm_dig_min = DM_DIG_MIN; 546 dm_dig_min = DM_DIG_MIN;
514 dig_maxofmin = DM_DIG_MAX_AP; 547 dig_maxofmin = DM_DIG_MAX_AP;
515 dig_min = dm_dig->dig_min_0; 548 dig_dynamic_min = dm_dig->dig_min_0;
516 bfirstconnect = ((mac->link_state >= MAC80211_LINKED) ? true : false) && 549 bfirstconnect = ((mac->link_state >= MAC80211_LINKED) ? true : false) &&
517 (dm_dig->media_connect_0 == false); 550 !dm_dig->media_connect_0;
518 551
519 dm_dig->rssi_val_min = 552 dm_dig->rssi_val_min =
520 rtl88e_dm_initial_gain_min_pwdb(hw); 553 rtl88e_dm_initial_gain_min_pwdb(hw);
@@ -528,18 +561,18 @@ static void rtl88e_dm_dig(struct ieee80211_hw *hw)
528 dm_dig->rx_gain_max = dm_dig->rssi_val_min + 20; 561 dm_dig->rx_gain_max = dm_dig->rssi_val_min + 20;
529 562
530 if (rtlefuse->antenna_div_type == CG_TRX_HW_ANTDIV) { 563 if (rtlefuse->antenna_div_type == CG_TRX_HW_ANTDIV) {
531 dig_min = dm_dig->antdiv_rssi_max; 564 dig_dynamic_min = dm_dig->antdiv_rssi_max;
532 } else { 565 } else {
533 if (dm_dig->rssi_val_min < dm_dig_min) 566 if (dm_dig->rssi_val_min < dm_dig_min)
534 dig_min = dm_dig_min; 567 dig_dynamic_min = dm_dig_min;
535 else if (dm_dig->rssi_val_min < dig_maxofmin) 568 else if (dm_dig->rssi_val_min < dig_maxofmin)
536 dig_min = dig_maxofmin; 569 dig_dynamic_min = dig_maxofmin;
537 else 570 else
538 dig_min = dm_dig->rssi_val_min; 571 dig_dynamic_min = dm_dig->rssi_val_min;
539 } 572 }
540 } else { 573 } else {
541 dm_dig->rx_gain_max = dm_dig_max; 574 dm_dig->rx_gain_max = dm_dig_max;
542 dig_min = dm_dig_min; 575 dig_dynamic_min = dm_dig_min;
543 RT_TRACE(rtlpriv, COMP_DIG, DBG_LOUD, "no link\n"); 576 RT_TRACE(rtlpriv, COMP_DIG, DBG_LOUD, "no link\n");
544 } 577 }
545 578
@@ -551,10 +584,13 @@ static void rtl88e_dm_dig(struct ieee80211_hw *hw)
551 } 584 }
552 585
553 if (dm_dig->large_fa_hit >= 3) { 586 if (dm_dig->large_fa_hit >= 3) {
554 if ((dm_dig->forbidden_igi + 1) > dm_dig->rx_gain_max) 587 if ((dm_dig->forbidden_igi + 1) >
555 dm_dig->rx_gain_min = dm_dig->rx_gain_max; 588 dm_dig->rx_gain_max)
589 dm_dig->rx_gain_min =
590 dm_dig->rx_gain_max;
556 else 591 else
557 dm_dig->rx_gain_min = dm_dig->forbidden_igi + 1; 592 dm_dig->rx_gain_min =
593 dm_dig->forbidden_igi + 1;
558 dm_dig->recover_cnt = 3600; 594 dm_dig->recover_cnt = 3600;
559 } 595 }
560 } else { 596 } else {
@@ -562,13 +598,14 @@ static void rtl88e_dm_dig(struct ieee80211_hw *hw)
562 dm_dig->recover_cnt--; 598 dm_dig->recover_cnt--;
563 } else { 599 } else {
564 if (dm_dig->large_fa_hit == 0) { 600 if (dm_dig->large_fa_hit == 0) {
565 if ((dm_dig->forbidden_igi - 1) < dig_min) { 601 if ((dm_dig->forbidden_igi - 1) <
566 dm_dig->forbidden_igi = dig_min; 602 dig_dynamic_min) {
567 dm_dig->rx_gain_min = dig_min; 603 dm_dig->forbidden_igi = dig_dynamic_min;
604 dm_dig->rx_gain_min = dig_dynamic_min;
568 } else { 605 } else {
569 dm_dig->forbidden_igi--; 606 dm_dig->forbidden_igi--;
570 dm_dig->rx_gain_min = 607 dm_dig->rx_gain_min =
571 dm_dig->forbidden_igi + 1; 608 dm_dig->forbidden_igi + 1;
572 } 609 }
573 } else if (dm_dig->large_fa_hit == 3) { 610 } else if (dm_dig->large_fa_hit == 3) {
574 dm_dig->large_fa_hit = 0; 611 dm_dig->large_fa_hit = 0;
@@ -576,7 +613,7 @@ static void rtl88e_dm_dig(struct ieee80211_hw *hw)
576 } 613 }
577 } 614 }
578 615
579 if (dm_dig->cursta_cstate == DIG_STA_CONNECT) { 616 if (dm_dig->cur_sta_cstate == DIG_STA_CONNECT) {
580 if (bfirstconnect) { 617 if (bfirstconnect) {
581 current_igi = dm_dig->rssi_val_min; 618 current_igi = dm_dig->rssi_val_min;
582 } else { 619 } else {
@@ -606,9 +643,9 @@ static void rtl88e_dm_dig(struct ieee80211_hw *hw)
606 643
607 dm_dig->cur_igvalue = current_igi; 644 dm_dig->cur_igvalue = current_igi;
608 rtl88e_dm_write_dig(hw); 645 rtl88e_dm_write_dig(hw);
609 dm_dig->media_connect_0 = ((mac->link_state >= MAC80211_LINKED) ? 646 dm_dig->media_connect_0 =
610 true : false); 647 ((mac->link_state >= MAC80211_LINKED) ? true : false);
611 dm_dig->dig_min_0 = dig_min; 648 dm_dig->dig_min_0 = dig_dynamic_min;
612 649
613 rtl88e_dm_cck_packet_detection_thresh(hw); 650 rtl88e_dm_cck_packet_detection_thresh(hw);
614} 651}
@@ -626,7 +663,7 @@ static void rtl88e_dm_init_dynamic_txpower(struct ieee80211_hw *hw)
626static void rtl92c_dm_dynamic_txpower(struct ieee80211_hw *hw) 663static void rtl92c_dm_dynamic_txpower(struct ieee80211_hw *hw)
627{ 664{
628 struct rtl_priv *rtlpriv = rtl_priv(hw); 665 struct rtl_priv *rtlpriv = rtl_priv(hw);
629 struct rtl_phy *rtlphy = &(rtlpriv->phy); 666 struct rtl_phy *rtlphy = &rtlpriv->phy;
630 struct rtl_mac *mac = rtl_mac(rtl_priv(hw)); 667 struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
631 long undec_sm_pwdb; 668 long undec_sm_pwdb;
632 669
@@ -641,7 +678,7 @@ static void rtl92c_dm_dynamic_txpower(struct ieee80211_hw *hw)
641 if ((mac->link_state < MAC80211_LINKED) && 678 if ((mac->link_state < MAC80211_LINKED) &&
642 (rtlpriv->dm.entry_min_undec_sm_pwdb == 0)) { 679 (rtlpriv->dm.entry_min_undec_sm_pwdb == 0)) {
643 RT_TRACE(rtlpriv, COMP_POWER, DBG_TRACE, 680 RT_TRACE(rtlpriv, COMP_POWER, DBG_TRACE,
644 "Not connected\n"); 681 "Not connected to any\n");
645 682
646 rtlpriv->dm.dynamic_txhighpower_lvl = TXHIGHPWRLEVEL_NORMAL; 683 rtlpriv->dm.dynamic_txhighpower_lvl = TXHIGHPWRLEVEL_NORMAL;
647 684
@@ -664,10 +701,12 @@ static void rtl92c_dm_dynamic_txpower(struct ieee80211_hw *hw)
664 undec_sm_pwdb); 701 undec_sm_pwdb);
665 } 702 }
666 } else { 703 } else {
667 undec_sm_pwdb = rtlpriv->dm.entry_min_undec_sm_pwdb; 704 undec_sm_pwdb =
705 rtlpriv->dm.entry_min_undec_sm_pwdb;
668 706
669 RT_TRACE(rtlpriv, COMP_POWER, DBG_LOUD, 707 RT_TRACE(rtlpriv, COMP_POWER, DBG_LOUD,
670 "AP Ext Port PWDB = 0x%lx\n", undec_sm_pwdb); 708 "AP Ext Port PWDB = 0x%lx\n",
709 undec_sm_pwdb);
671 } 710 }
672 711
673 if (undec_sm_pwdb >= TX_POWER_NEAR_FIELD_THRESH_LVL2) { 712 if (undec_sm_pwdb >= TX_POWER_NEAR_FIELD_THRESH_LVL2) {
@@ -676,17 +715,20 @@ static void rtl92c_dm_dynamic_txpower(struct ieee80211_hw *hw)
676 "TXHIGHPWRLEVEL_LEVEL1 (TxPwr = 0x0)\n"); 715 "TXHIGHPWRLEVEL_LEVEL1 (TxPwr = 0x0)\n");
677 } else if ((undec_sm_pwdb < 716 } else if ((undec_sm_pwdb <
678 (TX_POWER_NEAR_FIELD_THRESH_LVL2 - 3)) && 717 (TX_POWER_NEAR_FIELD_THRESH_LVL2 - 3)) &&
679 (undec_sm_pwdb >= TX_POWER_NEAR_FIELD_THRESH_LVL1)) { 718 (undec_sm_pwdb >=
719 TX_POWER_NEAR_FIELD_THRESH_LVL1)) {
680 rtlpriv->dm.dynamic_txhighpower_lvl = TXHIGHPWRLEVEL_LEVEL1; 720 rtlpriv->dm.dynamic_txhighpower_lvl = TXHIGHPWRLEVEL_LEVEL1;
681 RT_TRACE(rtlpriv, COMP_POWER, DBG_LOUD, 721 RT_TRACE(rtlpriv, COMP_POWER, DBG_LOUD,
682 "TXHIGHPWRLEVEL_LEVEL1 (TxPwr = 0x10)\n"); 722 "TXHIGHPWRLEVEL_LEVEL1 (TxPwr = 0x10)\n");
683 } else if (undec_sm_pwdb < (TX_POWER_NEAR_FIELD_THRESH_LVL1 - 5)) { 723 } else if (undec_sm_pwdb <
724 (TX_POWER_NEAR_FIELD_THRESH_LVL1 - 5)) {
684 rtlpriv->dm.dynamic_txhighpower_lvl = TXHIGHPWRLEVEL_NORMAL; 725 rtlpriv->dm.dynamic_txhighpower_lvl = TXHIGHPWRLEVEL_NORMAL;
685 RT_TRACE(rtlpriv, COMP_POWER, DBG_LOUD, 726 RT_TRACE(rtlpriv, COMP_POWER, DBG_LOUD,
686 "TXHIGHPWRLEVEL_NORMAL\n"); 727 "TXHIGHPWRLEVEL_NORMAL\n");
687 } 728 }
688 729
689 if ((rtlpriv->dm.dynamic_txhighpower_lvl != rtlpriv->dm.last_dtp_lvl)) { 730 if ((rtlpriv->dm.dynamic_txhighpower_lvl !=
731 rtlpriv->dm.last_dtp_lvl)) {
690 RT_TRACE(rtlpriv, COMP_POWER, DBG_LOUD, 732 RT_TRACE(rtlpriv, COMP_POWER, DBG_LOUD,
691 "PHY_SetTxPowerLevel8192S() Channel = %d\n", 733 "PHY_SetTxPowerLevel8192S() Channel = %d\n",
692 rtlphy->current_channel); 734 rtlphy->current_channel);
@@ -702,10 +744,9 @@ void rtl88e_dm_write_dig(struct ieee80211_hw *hw)
702 struct dig_t *dm_dig = &rtlpriv->dm_digtable; 744 struct dig_t *dm_dig = &rtlpriv->dm_digtable;
703 745
704 RT_TRACE(rtlpriv, COMP_DIG, DBG_LOUD, 746 RT_TRACE(rtlpriv, COMP_DIG, DBG_LOUD,
705 "cur_igvalue = 0x%x, " 747 "cur_igvalue = 0x%x, pre_igvalue = 0x%x, backoff_val = %d\n",
706 "pre_igvalue = 0x%x, back_val = %d\n", 748 dm_dig->cur_igvalue, dm_dig->pre_igvalue,
707 dm_dig->cur_igvalue, dm_dig->pre_igvalue, 749 dm_dig->back_val);
708 dm_dig->back_val);
709 750
710 if (dm_dig->cur_igvalue > 0x3f) 751 if (dm_dig->cur_igvalue > 0x3f)
711 dm_dig->cur_igvalue = 0x3f; 752 dm_dig->cur_igvalue = 0x3f;
@@ -722,17 +763,19 @@ static void rtl88e_dm_pwdb_monitor(struct ieee80211_hw *hw)
722 struct rtl_priv *rtlpriv = rtl_priv(hw); 763 struct rtl_priv *rtlpriv = rtl_priv(hw);
723 struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw)); 764 struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
724 struct rtl_sta_info *drv_priv; 765 struct rtl_sta_info *drv_priv;
725 static u64 last_txok; 766 static u64 last_record_txok_cnt;
726 static u64 last_rx; 767 static u64 last_record_rxok_cnt;
727 long tmp_entry_max_pwdb = 0, tmp_entry_min_pwdb = 0xff; 768 long tmp_entry_max_pwdb = 0, tmp_entry_min_pwdb = 0xff;
728 769
729 if (rtlhal->oem_id == RT_CID_819X_HP) { 770 if (rtlhal->oem_id == RT_CID_819X_HP) {
730 u64 cur_txok_cnt = 0; 771 u64 cur_txok_cnt = 0;
731 u64 cur_rxok_cnt = 0; 772 u64 cur_rxok_cnt = 0;
732 cur_txok_cnt = rtlpriv->stats.txbytesunicast - last_txok; 773 cur_txok_cnt = rtlpriv->stats.txbytesunicast -
733 cur_rxok_cnt = rtlpriv->stats.rxbytesunicast - last_rx; 774 last_record_txok_cnt;
734 last_txok = cur_txok_cnt; 775 cur_rxok_cnt = rtlpriv->stats.rxbytesunicast -
735 last_rx = cur_rxok_cnt; 776 last_record_rxok_cnt;
777 last_record_txok_cnt = cur_txok_cnt;
778 last_record_rxok_cnt = cur_rxok_cnt;
736 779
737 if (cur_rxok_cnt > (cur_txok_cnt * 6)) 780 if (cur_rxok_cnt > (cur_txok_cnt * 6))
738 rtl_write_dword(rtlpriv, REG_ARFR0, 0x8f015); 781 rtl_write_dword(rtlpriv, REG_ARFR0, 0x8f015);
@@ -743,9 +786,11 @@ static void rtl88e_dm_pwdb_monitor(struct ieee80211_hw *hw)
743 /* AP & ADHOC & MESH */ 786 /* AP & ADHOC & MESH */
744 spin_lock_bh(&rtlpriv->locks.entry_list_lock); 787 spin_lock_bh(&rtlpriv->locks.entry_list_lock);
745 list_for_each_entry(drv_priv, &rtlpriv->entry_list, list) { 788 list_for_each_entry(drv_priv, &rtlpriv->entry_list, list) {
746 if (drv_priv->rssi_stat.undec_sm_pwdb < tmp_entry_min_pwdb) 789 if (drv_priv->rssi_stat.undec_sm_pwdb <
790 tmp_entry_min_pwdb)
747 tmp_entry_min_pwdb = drv_priv->rssi_stat.undec_sm_pwdb; 791 tmp_entry_min_pwdb = drv_priv->rssi_stat.undec_sm_pwdb;
748 if (drv_priv->rssi_stat.undec_sm_pwdb > tmp_entry_max_pwdb) 792 if (drv_priv->rssi_stat.undec_sm_pwdb >
793 tmp_entry_max_pwdb)
749 tmp_entry_max_pwdb = drv_priv->rssi_stat.undec_sm_pwdb; 794 tmp_entry_max_pwdb = drv_priv->rssi_stat.undec_sm_pwdb;
750 } 795 }
751 spin_unlock_bh(&rtlpriv->locks.entry_list_lock); 796 spin_unlock_bh(&rtlpriv->locks.entry_list_lock);
@@ -762,13 +807,19 @@ static void rtl88e_dm_pwdb_monitor(struct ieee80211_hw *hw)
762 if (tmp_entry_min_pwdb != 0xff) { 807 if (tmp_entry_min_pwdb != 0xff) {
763 rtlpriv->dm.entry_min_undec_sm_pwdb = tmp_entry_min_pwdb; 808 rtlpriv->dm.entry_min_undec_sm_pwdb = tmp_entry_min_pwdb;
764 RTPRINT(rtlpriv, FDM, DM_PWDB, "EntryMinPWDB = 0x%lx(%ld)\n", 809 RTPRINT(rtlpriv, FDM, DM_PWDB, "EntryMinPWDB = 0x%lx(%ld)\n",
765 tmp_entry_min_pwdb, tmp_entry_min_pwdb); 810 tmp_entry_min_pwdb, tmp_entry_min_pwdb);
766 } else { 811 } else {
767 rtlpriv->dm.entry_min_undec_sm_pwdb = 0; 812 rtlpriv->dm.entry_min_undec_sm_pwdb = 0;
768 } 813 }
769 /* Indicate Rx signal strength to FW. */ 814 /* Indicate Rx signal strength to FW. */
770 if (!rtlpriv->dm.useramask) 815 if (rtlpriv->dm.useramask) {
816 u8 h2c_parameter[3] = { 0 };
817
818 h2c_parameter[2] = (u8)(rtlpriv->dm.undec_sm_pwdb & 0xFF);
819 h2c_parameter[0] = 0x20;
820 } else {
771 rtl_write_byte(rtlpriv, 0x4fe, rtlpriv->dm.undec_sm_pwdb); 821 rtl_write_byte(rtlpriv, 0x4fe, rtlpriv->dm.undec_sm_pwdb);
822 }
772} 823}
773 824
774void rtl88e_dm_init_edca_turbo(struct ieee80211_hw *hw) 825void rtl88e_dm_init_edca_turbo(struct ieee80211_hw *hw)
@@ -783,7 +834,6 @@ void rtl88e_dm_init_edca_turbo(struct ieee80211_hw *hw)
783static void rtl88e_dm_check_edca_turbo(struct ieee80211_hw *hw) 834static void rtl88e_dm_check_edca_turbo(struct ieee80211_hw *hw)
784{ 835{
785 struct rtl_priv *rtlpriv = rtl_priv(hw); 836 struct rtl_priv *rtlpriv = rtl_priv(hw);
786 struct rtl_pci_priv *rtlpcipriv = rtl_pcipriv(hw);
787 struct rtl_mac *mac = rtl_mac(rtl_priv(hw)); 837 struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
788 static u64 last_txok_cnt; 838 static u64 last_txok_cnt;
789 static u64 last_rxok_cnt; 839 static u64 last_rxok_cnt;
@@ -793,40 +843,33 @@ static void rtl88e_dm_check_edca_turbo(struct ieee80211_hw *hw)
793 u64 cur_rxok_cnt = 0; 843 u64 cur_rxok_cnt = 0;
794 u32 edca_be_ul = 0x5ea42b; 844 u32 edca_be_ul = 0x5ea42b;
795 u32 edca_be_dl = 0x5ea42b; 845 u32 edca_be_dl = 0x5ea42b;
796 bool change_edca = false; 846 bool bt_change_edca = false;
797 847
798 if ((last_bt_edca_ul != rtlpcipriv->bt_coexist.bt_edca_ul) || 848 if ((last_bt_edca_ul != rtlpriv->btcoexist.bt_edca_ul) ||
799 (last_bt_edca_dl != rtlpcipriv->bt_coexist.bt_edca_dl)) { 849 (last_bt_edca_dl != rtlpriv->btcoexist.bt_edca_dl)) {
800 rtlpriv->dm.current_turbo_edca = false; 850 rtlpriv->dm.current_turbo_edca = false;
801 last_bt_edca_ul = rtlpcipriv->bt_coexist.bt_edca_ul; 851 last_bt_edca_ul = rtlpriv->btcoexist.bt_edca_ul;
802 last_bt_edca_dl = rtlpcipriv->bt_coexist.bt_edca_dl; 852 last_bt_edca_dl = rtlpriv->btcoexist.bt_edca_dl;
803 } 853 }
804 854
805 if (rtlpcipriv->bt_coexist.bt_edca_ul != 0) { 855 if (rtlpriv->btcoexist.bt_edca_ul != 0) {
806 edca_be_ul = rtlpcipriv->bt_coexist.bt_edca_ul; 856 edca_be_ul = rtlpriv->btcoexist.bt_edca_ul;
807 change_edca = true; 857 bt_change_edca = true;
808 } 858 }
809 859
810 if (rtlpcipriv->bt_coexist.bt_edca_dl != 0) { 860 if (rtlpriv->btcoexist.bt_edca_dl != 0) {
811 edca_be_ul = rtlpcipriv->bt_coexist.bt_edca_dl; 861 edca_be_ul = rtlpriv->btcoexist.bt_edca_dl;
812 change_edca = true; 862 bt_change_edca = true;
813 } 863 }
814 864
815 if (mac->link_state != MAC80211_LINKED) { 865 if (mac->link_state != MAC80211_LINKED) {
816 rtlpriv->dm.current_turbo_edca = false; 866 rtlpriv->dm.current_turbo_edca = false;
817 return; 867 return;
818 } 868 }
869 if ((bt_change_edca) ||
870 ((!rtlpriv->dm.is_any_nonbepkts) &&
871 (!rtlpriv->dm.disable_framebursting))) {
819 872
820 if ((!mac->ht_enable) && (!rtlpcipriv->bt_coexist.bt_coexistence)) {
821 if (!(edca_be_ul & 0xffff0000))
822 edca_be_ul |= 0x005e0000;
823
824 if (!(edca_be_dl & 0xffff0000))
825 edca_be_dl |= 0x005e0000;
826 }
827
828 if ((change_edca) || ((!rtlpriv->dm.is_any_nonbepkts) &&
829 (!rtlpriv->dm.disable_framebursting))) {
830 cur_txok_cnt = rtlpriv->stats.txbytesunicast - last_txok_cnt; 873 cur_txok_cnt = rtlpriv->stats.txbytesunicast - last_txok_cnt;
831 cur_rxok_cnt = rtlpriv->stats.rxbytesunicast - last_rxok_cnt; 874 cur_rxok_cnt = rtlpriv->stats.rxbytesunicast - last_rxok_cnt;
832 875
@@ -851,7 +894,9 @@ static void rtl88e_dm_check_edca_turbo(struct ieee80211_hw *hw)
851 } else { 894 } else {
852 if (rtlpriv->dm.current_turbo_edca) { 895 if (rtlpriv->dm.current_turbo_edca) {
853 u8 tmp = AC0_BE; 896 u8 tmp = AC0_BE;
854 rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_AC_PARAM, 897
898 rtlpriv->cfg->ops->set_hw_reg(hw,
899 HW_VAR_AC_PARAM,
855 &tmp); 900 &tmp);
856 rtlpriv->dm.current_turbo_edca = false; 901 rtlpriv->dm.current_turbo_edca = false;
857 } 902 }
@@ -862,29 +907,29 @@ static void rtl88e_dm_check_edca_turbo(struct ieee80211_hw *hw)
862 last_rxok_cnt = rtlpriv->stats.rxbytesunicast; 907 last_rxok_cnt = rtlpriv->stats.rxbytesunicast;
863} 908}
864 909
865static void rtl88e_dm_txpower_tracking_callback_thermalmeter(struct ieee80211_hw 910static void dm_txpower_track_cb_therm(struct ieee80211_hw *hw)
866 *hw)
867{ 911{
868 struct rtl_priv *rtlpriv = rtl_priv(hw); 912 struct rtl_priv *rtlpriv = rtl_priv(hw);
869 struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw)); 913 struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw));
870 struct rtl_dm *rtldm = rtl_dm(rtl_priv(hw)); 914 struct rtl_dm *rtldm = rtl_dm(rtl_priv(hw));
871 struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw)); 915 struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
872 u8 thermalvalue = 0, delta, delta_lck, delta_iqk, off; 916 u8 thermalvalue = 0, delta, delta_lck, delta_iqk, offset;
873 u8 th_avg_cnt = 0; 917 u8 thermalvalue_avg_count = 0;
874 u32 thermalvalue_avg = 0; 918 u32 thermalvalue_avg = 0;
875 long ele_d, temp_cck; 919 long ele_d, temp_cck;
876 char ofdm_index[2], cck_index = 0, ofdm_old[2] = {0, 0}, cck_old = 0; 920 char ofdm_index[2], cck_index = 0,
921 ofdm_index_old[2] = {0, 0}, cck_index_old = 0;
877 int i = 0; 922 int i = 0;
878 bool is2t = false; 923 /*bool is2t = false;*/
879 924
880 u8 ofdm_min_index = 6, rf = (is2t) ? 2 : 1; 925 u8 ofdm_min_index = 6, rf = 1;
881 u8 index_for_channel; 926 /*u8 index_for_channel;*/
882 enum _dec_inc {dec, power_inc}; 927 enum _power_dec_inc {power_dec, power_inc};
883 928
884 /* 0.1 the following TWO tables decide the final index of 929 /*0.1 the following TWO tables decide the
885 * OFDM/CCK swing table 930 *final index of OFDM/CCK swing table
886 */ 931 */
887 char del_tbl_idx[2][15] = { 932 char delta_swing_table_idx[2][15] = {
888 {0, 0, 2, 3, 4, 4, 5, 6, 7, 7, 8, 9, 10, 10, 11}, 933 {0, 0, 2, 3, 4, 4, 5, 6, 7, 7, 8, 9, 10, 10, 11},
889 {0, 0, -1, -2, -3, -4, -4, -4, -4, -5, -7, -8, -9, -9, -10} 934 {0, 0, -1, -2, -3, -4, -4, -4, -4, -5, -7, -8, -9, -9, -10}
890 }; 935 };
@@ -896,9 +941,10 @@ static void rtl88e_dm_txpower_tracking_callback_thermalmeter(struct ieee80211_hw
896 /*Initilization (7 steps in total) */ 941 /*Initilization (7 steps in total) */
897 rtlpriv->dm.txpower_trackinginit = true; 942 rtlpriv->dm.txpower_trackinginit = true;
898 RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, 943 RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
899 "rtl88e_dm_txpower_tracking_callback_thermalmeter\n"); 944 "dm_txpower_track_cb_therm\n");
900 945
901 thermalvalue = (u8) rtl_get_rfreg(hw, RF90_PATH_A, RF_T_METER, 0xfc00); 946 thermalvalue = (u8)rtl_get_rfreg(hw, RF90_PATH_A, RF_T_METER,
947 0xfc00);
902 if (!thermalvalue) 948 if (!thermalvalue)
903 return; 949 return;
904 RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, 950 RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
@@ -907,55 +953,44 @@ static void rtl88e_dm_txpower_tracking_callback_thermalmeter(struct ieee80211_hw
907 rtlefuse->eeprom_thermalmeter); 953 rtlefuse->eeprom_thermalmeter);
908 954
909 /*1. Query OFDM Default Setting: Path A*/ 955 /*1. Query OFDM Default Setting: Path A*/
910 ele_d = rtl_get_bbreg(hw, ROFDM0_XATXIQIMBAL, MASKDWORD) & MASKOFDM_D; 956 ele_d = rtl_get_bbreg(hw, ROFDM0_XATXIQIMBALANCE, MASKDWORD) &
957 MASKOFDM_D;
911 for (i = 0; i < OFDM_TABLE_LENGTH; i++) { 958 for (i = 0; i < OFDM_TABLE_LENGTH; i++) {
912 if (ele_d == (ofdmswing_table[i] & MASKOFDM_D)) { 959 if (ele_d == (ofdmswing_table[i] & MASKOFDM_D)) {
913 ofdm_old[0] = (u8) i; 960 ofdm_index_old[0] = (u8)i;
914 rtldm->swing_idx_ofdm_base[0] = (u8)i; 961 rtldm->swing_idx_ofdm_base[RF90_PATH_A] = (u8)i;
915 RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, 962 RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
916 "Initial pathA ele_d reg0x%x = 0x%lx, ofdm_index = 0x%x\n", 963 "Initial pathA ele_d reg0x%x = 0x%lx, ofdm_index = 0x%x\n",
917 ROFDM0_XATXIQIMBAL, 964 ROFDM0_XATXIQIMBALANCE,
918 ele_d, ofdm_old[0]); 965 ele_d, ofdm_index_old[0]);
919 break; 966 break;
920 } 967 }
921 } 968 }
922 969
923 if (is2t) {
924 ele_d = rtl_get_bbreg(hw, ROFDM0_XBTXIQIMBAL,
925 MASKDWORD) & MASKOFDM_D;
926 for (i = 0; i < OFDM_TABLE_LENGTH; i++) {
927 if (ele_d == (ofdmswing_table[i] & MASKOFDM_D)) {
928 ofdm_old[1] = (u8)i;
929
930 RT_TRACE(rtlpriv, COMP_POWER_TRACKING,
931 DBG_LOUD,
932 "Initial pathB ele_d reg0x%x = 0x%lx, ofdm_index = 0x%x\n",
933 ROFDM0_XBTXIQIMBAL, ele_d,
934 ofdm_old[1]);
935 break;
936 }
937 }
938 }
939 /*2.Query CCK default setting From 0xa24*/ 970 /*2.Query CCK default setting From 0xa24*/
940 temp_cck = rtl_get_bbreg(hw, RCCK0_TXFILTER2, MASKDWORD) & MASKCCK; 971 temp_cck = rtl_get_bbreg(hw, RCCK0_TXFILTER2, MASKDWORD) & MASKCCK;
941 for (i = 0; i < CCK_TABLE_LENGTH; i++) { 972 for (i = 0; i < CCK_TABLE_LENGTH; i++) {
942 if (rtlpriv->dm.cck_inch14) { 973 if (rtlpriv->dm.cck_inch14) {
943 if (memcmp(&temp_cck, &cck_tbl_ch14[i][2], 4) == 0) { 974 if (memcmp(&temp_cck, &cck_tbl_ch14[i][2], 4) == 0) {
944 cck_old = (u8)i; 975 cck_index_old = (u8)i;
945 rtldm->swing_idx_cck_base = (u8)i; 976 rtldm->swing_idx_cck_base = (u8)i;
946 RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, 977 RT_TRACE(rtlpriv, COMP_POWER_TRACKING,
978 DBG_LOUD,
947 "Initial reg0x%x = 0x%lx, cck_index = 0x%x, ch 14 %d\n", 979 "Initial reg0x%x = 0x%lx, cck_index = 0x%x, ch 14 %d\n",
948 RCCK0_TXFILTER2, temp_cck, cck_old, 980 RCCK0_TXFILTER2, temp_cck,
981 cck_index_old,
949 rtlpriv->dm.cck_inch14); 982 rtlpriv->dm.cck_inch14);
950 break; 983 break;
951 } 984 }
952 } else { 985 } else {
953 if (memcmp(&temp_cck, &cck_tbl_ch1_13[i][2], 4) == 0) { 986 if (memcmp(&temp_cck, &cck_tbl_ch1_13[i][2], 4) == 0) {
954 cck_old = (u8)i; 987 cck_index_old = (u8)i;
955 rtldm->swing_idx_cck_base = (u8)i; 988 rtldm->swing_idx_cck_base = (u8)i;
956 RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, 989 RT_TRACE(rtlpriv, COMP_POWER_TRACKING,
990 DBG_LOUD,
957 "Initial reg0x%x = 0x%lx, cck_index = 0x%x, ch14 %d\n", 991 "Initial reg0x%x = 0x%lx, cck_index = 0x%x, ch14 %d\n",
958 RCCK0_TXFILTER2, temp_cck, cck_old, 992 RCCK0_TXFILTER2, temp_cck,
993 cck_index_old,
959 rtlpriv->dm.cck_inch14); 994 rtlpriv->dm.cck_inch14);
960 break; 995 break;
961 } 996 }
@@ -968,8 +1003,8 @@ static void rtl88e_dm_txpower_tracking_callback_thermalmeter(struct ieee80211_hw
968 rtlpriv->dm.thermalvalue_lck = thermalvalue; 1003 rtlpriv->dm.thermalvalue_lck = thermalvalue;
969 rtlpriv->dm.thermalvalue_iqk = thermalvalue; 1004 rtlpriv->dm.thermalvalue_iqk = thermalvalue;
970 for (i = 0; i < rf; i++) 1005 for (i = 0; i < rf; i++)
971 rtlpriv->dm.ofdm_index[i] = ofdm_old[i]; 1006 rtlpriv->dm.ofdm_index[i] = ofdm_index_old[i];
972 rtlpriv->dm.cck_index = cck_old; 1007 rtlpriv->dm.cck_index = cck_index_old;
973 } 1008 }
974 1009
975 /*4 Calculate average thermal meter*/ 1010 /*4 Calculate average thermal meter*/
@@ -981,12 +1016,12 @@ static void rtl88e_dm_txpower_tracking_callback_thermalmeter(struct ieee80211_hw
981 for (i = 0; i < AVG_THERMAL_NUM_88E; i++) { 1016 for (i = 0; i < AVG_THERMAL_NUM_88E; i++) {
982 if (rtldm->thermalvalue_avg[i]) { 1017 if (rtldm->thermalvalue_avg[i]) {
983 thermalvalue_avg += rtldm->thermalvalue_avg[i]; 1018 thermalvalue_avg += rtldm->thermalvalue_avg[i];
984 th_avg_cnt++; 1019 thermalvalue_avg_count++;
985 } 1020 }
986 } 1021 }
987 1022
988 if (th_avg_cnt) 1023 if (thermalvalue_avg_count)
989 thermalvalue = (u8)(thermalvalue_avg / th_avg_cnt); 1024 thermalvalue = (u8)(thermalvalue_avg / thermalvalue_avg_count);
990 1025
991 /* 5 Calculate delta, delta_LCK, delta_IQK.*/ 1026 /* 5 Calculate delta, delta_LCK, delta_IQK.*/
992 if (rtlhal->reloadtxpowerindex) { 1027 if (rtlhal->reloadtxpowerindex) {
@@ -997,24 +1032,22 @@ static void rtl88e_dm_txpower_tracking_callback_thermalmeter(struct ieee80211_hw
997 rtlpriv->dm.done_txpower = false; 1032 rtlpriv->dm.done_txpower = false;
998 } else if (rtlpriv->dm.done_txpower) { 1033 } else if (rtlpriv->dm.done_txpower) {
999 delta = (thermalvalue > rtlpriv->dm.thermalvalue) ? 1034 delta = (thermalvalue > rtlpriv->dm.thermalvalue) ?
1000 (thermalvalue - rtlpriv->dm.thermalvalue) : 1035 (thermalvalue - rtlpriv->dm.thermalvalue) :
1001 (rtlpriv->dm.thermalvalue - thermalvalue); 1036 (rtlpriv->dm.thermalvalue - thermalvalue);
1002 } else { 1037 } else {
1003 delta = (thermalvalue > rtlefuse->eeprom_thermalmeter) ? 1038 delta = (thermalvalue > rtlefuse->eeprom_thermalmeter) ?
1004 (thermalvalue - rtlefuse->eeprom_thermalmeter) : 1039 (thermalvalue - rtlefuse->eeprom_thermalmeter) :
1005 (rtlefuse->eeprom_thermalmeter - thermalvalue); 1040 (rtlefuse->eeprom_thermalmeter - thermalvalue);
1006 } 1041 }
1007 delta_lck = (thermalvalue > rtlpriv->dm.thermalvalue_lck) ? 1042 delta_lck = (thermalvalue > rtlpriv->dm.thermalvalue_lck) ?
1008 (thermalvalue - rtlpriv->dm.thermalvalue_lck) : 1043 (thermalvalue - rtlpriv->dm.thermalvalue_lck) :
1009 (rtlpriv->dm.thermalvalue_lck - thermalvalue); 1044 (rtlpriv->dm.thermalvalue_lck - thermalvalue);
1010 delta_iqk = (thermalvalue > rtlpriv->dm.thermalvalue_iqk) ? 1045 delta_iqk = (thermalvalue > rtlpriv->dm.thermalvalue_iqk) ?
1011 (thermalvalue - rtlpriv->dm.thermalvalue_iqk) : 1046 (thermalvalue - rtlpriv->dm.thermalvalue_iqk) :
1012 (rtlpriv->dm.thermalvalue_iqk - thermalvalue); 1047 (rtlpriv->dm.thermalvalue_iqk - thermalvalue);
1013 1048
1014 RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, 1049 RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
1015 "Readback Thermal Meter = 0x%x pre thermal meter 0x%x " 1050 "Readback Thermal Meter = 0x%x pre thermal meter 0x%x eeprom_thermalmeter 0x%x delta 0x%x delta_lck 0x%x delta_iqk 0x%x\n",
1016 "eeprom_thermalmeter 0x%x delta 0x%x "
1017 "delta_lck 0x%x delta_iqk 0x%x\n",
1018 thermalvalue, rtlpriv->dm.thermalvalue, 1051 thermalvalue, rtlpriv->dm.thermalvalue,
1019 rtlefuse->eeprom_thermalmeter, delta, delta_lck, 1052 rtlefuse->eeprom_thermalmeter, delta, delta_lck,
1020 delta_iqk); 1053 delta_iqk);
@@ -1024,28 +1057,35 @@ static void rtl88e_dm_txpower_tracking_callback_thermalmeter(struct ieee80211_hw
1024 rtl88e_phy_lc_calibrate(hw); 1057 rtl88e_phy_lc_calibrate(hw);
1025 } 1058 }
1026 1059
1027 /* 7 If necessary, move the index of swing table to adjust Tx power. */ 1060 /* 7 If necessary, move the index of
1061 * swing table to adjust Tx power.
1062 */
1028 if (delta > 0 && rtlpriv->dm.txpower_track_control) { 1063 if (delta > 0 && rtlpriv->dm.txpower_track_control) {
1029 delta = (thermalvalue > rtlefuse->eeprom_thermalmeter) ? 1064 delta = (thermalvalue > rtlefuse->eeprom_thermalmeter) ?
1030 (thermalvalue - rtlefuse->eeprom_thermalmeter) : 1065 (thermalvalue - rtlefuse->eeprom_thermalmeter) :
1031 (rtlefuse->eeprom_thermalmeter - thermalvalue); 1066 (rtlefuse->eeprom_thermalmeter - thermalvalue);
1032 1067
1033 /* 7.1 Get the final CCK_index and OFDM_index for each 1068 /* 7.1 Get the final CCK_index and OFDM_index for each
1034 * swing table. 1069 * swing table.
1035 */ 1070 */
1036 if (thermalvalue > rtlefuse->eeprom_thermalmeter) { 1071 if (thermalvalue > rtlefuse->eeprom_thermalmeter) {
1037 CAL_SWING_OFF(off, power_inc, IDX_MAP, delta); 1072 CAL_SWING_OFF(offset, power_inc, INDEX_MAPPING_NUM,
1073 delta);
1038 for (i = 0; i < rf; i++) 1074 for (i = 0; i < rf; i++)
1039 ofdm_index[i] = rtldm->ofdm_index[i] + 1075 ofdm_index[i] =
1040 del_tbl_idx[power_inc][off]; 1076 rtldm->ofdm_index[i] +
1077 delta_swing_table_idx[power_inc][offset];
1041 cck_index = rtldm->cck_index + 1078 cck_index = rtldm->cck_index +
1042 del_tbl_idx[power_inc][off]; 1079 delta_swing_table_idx[power_inc][offset];
1043 } else { 1080 } else {
1044 CAL_SWING_OFF(off, dec, IDX_MAP, delta); 1081 CAL_SWING_OFF(offset, power_dec, INDEX_MAPPING_NUM,
1082 delta);
1045 for (i = 0; i < rf; i++) 1083 for (i = 0; i < rf; i++)
1046 ofdm_index[i] = rtldm->ofdm_index[i] + 1084 ofdm_index[i] =
1047 del_tbl_idx[dec][off]; 1085 rtldm->ofdm_index[i] +
1048 cck_index = rtldm->cck_index + del_tbl_idx[dec][off]; 1086 delta_swing_table_idx[power_dec][offset];
1087 cck_index = rtldm->cck_index +
1088 delta_swing_table_idx[power_dec][offset];
1049 } 1089 }
1050 1090
1051 /* 7.2 Handle boundary conditions of index.*/ 1091 /* 7.2 Handle boundary conditions of index.*/
@@ -1056,8 +1096,8 @@ static void rtl88e_dm_txpower_tracking_callback_thermalmeter(struct ieee80211_hw
1056 ofdm_index[i] = ofdm_min_index; 1096 ofdm_index[i] = ofdm_min_index;
1057 } 1097 }
1058 1098
1059 if (cck_index > CCK_TABLE_SIZE - 1) 1099 if (cck_index > CCK_TABLE_SIZE-1)
1060 cck_index = CCK_TABLE_SIZE - 1; 1100 cck_index = CCK_TABLE_SIZE-1;
1061 else if (cck_index < 0) 1101 else if (cck_index < 0)
1062 cck_index = 0; 1102 cck_index = 0;
1063 1103
@@ -1065,10 +1105,7 @@ static void rtl88e_dm_txpower_tracking_callback_thermalmeter(struct ieee80211_hw
1065 if (rtlpriv->dm.txpower_track_control) { 1105 if (rtlpriv->dm.txpower_track_control) {
1066 rtldm->done_txpower = true; 1106 rtldm->done_txpower = true;
1067 rtldm->swing_idx_ofdm[RF90_PATH_A] = 1107 rtldm->swing_idx_ofdm[RF90_PATH_A] =
1068 (u8)ofdm_index[RF90_PATH_A]; 1108 (u8)ofdm_index[RF90_PATH_A];
1069 if (is2t)
1070 rtldm->swing_idx_ofdm[RF90_PATH_B] =
1071 (u8)ofdm_index[RF90_PATH_B];
1072 rtldm->swing_idx_cck = cck_index; 1109 rtldm->swing_idx_cck = cck_index;
1073 if (rtldm->swing_idx_ofdm_cur != 1110 if (rtldm->swing_idx_ofdm_cur !=
1074 rtldm->swing_idx_ofdm[0]) { 1111 rtldm->swing_idx_ofdm[0]) {
@@ -1082,12 +1119,7 @@ static void rtl88e_dm_txpower_tracking_callback_thermalmeter(struct ieee80211_hw
1082 rtldm->swing_flag_cck = true; 1119 rtldm->swing_flag_cck = true;
1083 } 1120 }
1084 1121
1085 rtl88e_chk_tx_track(hw, TXAGC, 0, 0); 1122 dm_tx_pwr_track_set_pwr(hw, TXAGC, 0, 0);
1086
1087 if (is2t)
1088 rtl88e_chk_tx_track(hw, BBSWING,
1089 RF90_PATH_B,
1090 index_for_channel);
1091 } 1123 }
1092 } 1124 }
1093 1125
@@ -1115,7 +1147,7 @@ static void rtl88e_dm_init_txpower_tracking(struct ieee80211_hw *hw)
1115 rtlpriv->dm.swing_idx_ofdm_cur = 12; 1147 rtlpriv->dm.swing_idx_ofdm_cur = 12;
1116 rtlpriv->dm.swing_flag_ofdm = false; 1148 rtlpriv->dm.swing_flag_ofdm = false;
1117 RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, 1149 RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
1118 " rtlpriv->dm.txpower_tracking = %d\n", 1150 "rtlpriv->dm.txpower_tracking = %d\n",
1119 rtlpriv->dm.txpower_tracking); 1151 rtlpriv->dm.txpower_tracking);
1120} 1152}
1121 1153
@@ -1137,7 +1169,7 @@ void rtl88e_dm_check_txpower_tracking(struct ieee80211_hw *hw)
1137 } else { 1169 } else {
1138 RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, 1170 RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
1139 "Schedule TxPowerTracking !!\n"); 1171 "Schedule TxPowerTracking !!\n");
1140 rtl88e_dm_txpower_tracking_callback_thermalmeter(hw); 1172 dm_txpower_track_cb_therm(hw);
1141 tm_trigger = 0; 1173 tm_trigger = 0;
1142 } 1174 }
1143} 1175}
@@ -1145,7 +1177,7 @@ void rtl88e_dm_check_txpower_tracking(struct ieee80211_hw *hw)
1145void rtl88e_dm_init_rate_adaptive_mask(struct ieee80211_hw *hw) 1177void rtl88e_dm_init_rate_adaptive_mask(struct ieee80211_hw *hw)
1146{ 1178{
1147 struct rtl_priv *rtlpriv = rtl_priv(hw); 1179 struct rtl_priv *rtlpriv = rtl_priv(hw);
1148 struct rate_adaptive *p_ra = &(rtlpriv->ra); 1180 struct rate_adaptive *p_ra = &rtlpriv->ra;
1149 1181
1150 p_ra->ratr_state = DM_RATR_STA_INIT; 1182 p_ra->ratr_state = DM_RATR_STA_INIT;
1151 p_ra->pre_ratr_state = DM_RATR_STA_INIT; 1183 p_ra->pre_ratr_state = DM_RATR_STA_INIT;
@@ -1161,9 +1193,9 @@ static void rtl88e_dm_refresh_rate_adaptive_mask(struct ieee80211_hw *hw)
1161 struct rtl_priv *rtlpriv = rtl_priv(hw); 1193 struct rtl_priv *rtlpriv = rtl_priv(hw);
1162 struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw)); 1194 struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
1163 struct rtl_mac *mac = rtl_mac(rtl_priv(hw)); 1195 struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
1164 struct rate_adaptive *p_ra = &(rtlpriv->ra); 1196 struct rate_adaptive *p_ra = &rtlpriv->ra;
1197 u32 low_rssithresh_for_ra, high_rssithresh_for_ra;
1165 struct ieee80211_sta *sta = NULL; 1198 struct ieee80211_sta *sta = NULL;
1166 u32 low_rssi, hi_rssi;
1167 1199
1168 if (is_hal_stop(rtlhal)) { 1200 if (is_hal_stop(rtlhal)) {
1169 RT_TRACE(rtlpriv, COMP_RATE, DBG_LOUD, 1201 RT_TRACE(rtlpriv, COMP_RATE, DBG_LOUD,
@@ -1181,26 +1213,28 @@ static void rtl88e_dm_refresh_rate_adaptive_mask(struct ieee80211_hw *hw)
1181 mac->opmode == NL80211_IFTYPE_STATION) { 1213 mac->opmode == NL80211_IFTYPE_STATION) {
1182 switch (p_ra->pre_ratr_state) { 1214 switch (p_ra->pre_ratr_state) {
1183 case DM_RATR_STA_HIGH: 1215 case DM_RATR_STA_HIGH:
1184 hi_rssi = 50; 1216 high_rssithresh_for_ra = 50;
1185 low_rssi = 20; 1217 low_rssithresh_for_ra = 20;
1186 break; 1218 break;
1187 case DM_RATR_STA_MIDDLE: 1219 case DM_RATR_STA_MIDDLE:
1188 hi_rssi = 55; 1220 high_rssithresh_for_ra = 55;
1189 low_rssi = 20; 1221 low_rssithresh_for_ra = 20;
1190 break; 1222 break;
1191 case DM_RATR_STA_LOW: 1223 case DM_RATR_STA_LOW:
1192 hi_rssi = 50; 1224 high_rssithresh_for_ra = 50;
1193 low_rssi = 25; 1225 low_rssithresh_for_ra = 25;
1194 break; 1226 break;
1195 default: 1227 default:
1196 hi_rssi = 50; 1228 high_rssithresh_for_ra = 50;
1197 low_rssi = 20; 1229 low_rssithresh_for_ra = 20;
1198 break; 1230 break;
1199 } 1231 }
1200 1232
1201 if (rtlpriv->dm.undec_sm_pwdb > (long)hi_rssi) 1233 if (rtlpriv->dm.undec_sm_pwdb >
1234 (long)high_rssithresh_for_ra)
1202 p_ra->ratr_state = DM_RATR_STA_HIGH; 1235 p_ra->ratr_state = DM_RATR_STA_HIGH;
1203 else if (rtlpriv->dm.undec_sm_pwdb > (long)low_rssi) 1236 else if (rtlpriv->dm.undec_sm_pwdb >
1237 (long)low_rssithresh_for_ra)
1204 p_ra->ratr_state = DM_RATR_STA_MIDDLE; 1238 p_ra->ratr_state = DM_RATR_STA_MIDDLE;
1205 else 1239 else
1206 p_ra->ratr_state = DM_RATR_STA_LOW; 1240 p_ra->ratr_state = DM_RATR_STA_LOW;
@@ -1208,7 +1242,7 @@ static void rtl88e_dm_refresh_rate_adaptive_mask(struct ieee80211_hw *hw)
1208 if (p_ra->pre_ratr_state != p_ra->ratr_state) { 1242 if (p_ra->pre_ratr_state != p_ra->ratr_state) {
1209 RT_TRACE(rtlpriv, COMP_RATE, DBG_LOUD, 1243 RT_TRACE(rtlpriv, COMP_RATE, DBG_LOUD,
1210 "RSSI = %ld\n", 1244 "RSSI = %ld\n",
1211 rtlpriv->dm.undec_sm_pwdb); 1245 rtlpriv->dm.undec_sm_pwdb);
1212 RT_TRACE(rtlpriv, COMP_RATE, DBG_LOUD, 1246 RT_TRACE(rtlpriv, COMP_RATE, DBG_LOUD,
1213 "RSSI_LEVEL = %d\n", p_ra->ratr_state); 1247 "RSSI_LEVEL = %d\n", p_ra->ratr_state);
1214 RT_TRACE(rtlpriv, COMP_RATE, DBG_LOUD, 1248 RT_TRACE(rtlpriv, COMP_RATE, DBG_LOUD,
@@ -1219,7 +1253,7 @@ static void rtl88e_dm_refresh_rate_adaptive_mask(struct ieee80211_hw *hw)
1219 sta = rtl_find_sta(hw, mac->bssid); 1253 sta = rtl_find_sta(hw, mac->bssid);
1220 if (sta) 1254 if (sta)
1221 rtlpriv->cfg->ops->update_rate_tbl(hw, sta, 1255 rtlpriv->cfg->ops->update_rate_tbl(hw, sta,
1222 p_ra->ratr_state); 1256 p_ra->ratr_state);
1223 rcu_read_unlock(); 1257 rcu_read_unlock();
1224 1258
1225 p_ra->pre_ratr_state = p_ra->ratr_state; 1259 p_ra->pre_ratr_state = p_ra->ratr_state;
@@ -1239,56 +1273,62 @@ static void rtl92c_dm_init_dynamic_bb_powersaving(struct ieee80211_hw *hw)
1239 dm_pstable->rssi_val_min = 0; 1273 dm_pstable->rssi_val_min = 0;
1240} 1274}
1241 1275
1242static void rtl88e_dm_update_rx_idle_ant(struct ieee80211_hw *hw, u8 ant) 1276static void rtl88e_dm_update_rx_idle_ant(struct ieee80211_hw *hw,
1277 u8 ant)
1243{ 1278{
1244 struct rtl_priv *rtlpriv = rtl_priv(hw); 1279 struct rtl_priv *rtlpriv = rtl_priv(hw);
1245 struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw)); 1280 struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw));
1246 struct rtl_dm *rtldm = rtl_dm(rtl_priv(hw)); 1281 struct rtl_dm *rtldm = rtl_dm(rtl_priv(hw));
1247 struct fast_ant_training *fat_tbl = &(rtldm->fat_table); 1282 struct fast_ant_training *pfat_table = &rtldm->fat_table;
1248 u32 def_ant, opt_ant; 1283 u32 default_ant, optional_ant;
1249 1284
1250 if (fat_tbl->rx_idle_ant != ant) { 1285 if (pfat_table->rx_idle_ant != ant) {
1251 RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, 1286 RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
1252 "need to update rx idle ant\n"); 1287 "need to update rx idle ant\n");
1253 if (ant == MAIN_ANT) { 1288 if (ant == MAIN_ANT) {
1254 def_ant = (fat_tbl->rx_idle_ant == CG_TRX_HW_ANTDIV) ? 1289 default_ant =
1255 MAIN_ANT_CG_TRX : MAIN_ANT_CGCS_RX; 1290 (pfat_table->rx_idle_ant == CG_TRX_HW_ANTDIV) ?
1256 opt_ant = (fat_tbl->rx_idle_ant == CG_TRX_HW_ANTDIV) ? 1291 MAIN_ANT_CG_TRX : MAIN_ANT_CGCS_RX;
1257 AUX_ANT_CG_TRX : AUX_ANT_CGCS_RX; 1292 optional_ant =
1293 (pfat_table->rx_idle_ant == CG_TRX_HW_ANTDIV) ?
1294 AUX_ANT_CG_TRX : AUX_ANT_CGCS_RX;
1258 } else { 1295 } else {
1259 def_ant = (fat_tbl->rx_idle_ant == CG_TRX_HW_ANTDIV) ? 1296 default_ant =
1260 AUX_ANT_CG_TRX : AUX_ANT_CGCS_RX; 1297 (pfat_table->rx_idle_ant == CG_TRX_HW_ANTDIV) ?
1261 opt_ant = (fat_tbl->rx_idle_ant == CG_TRX_HW_ANTDIV) ? 1298 AUX_ANT_CG_TRX : AUX_ANT_CGCS_RX;
1262 MAIN_ANT_CG_TRX : MAIN_ANT_CGCS_RX; 1299 optional_ant =
1300 (pfat_table->rx_idle_ant == CG_TRX_HW_ANTDIV) ?
1301 MAIN_ANT_CG_TRX : MAIN_ANT_CGCS_RX;
1263 } 1302 }
1264 1303
1265 if (rtlefuse->antenna_div_type == CG_TRX_HW_ANTDIV) { 1304 if (rtlefuse->antenna_div_type == CG_TRX_HW_ANTDIV) {
1266 rtl_set_bbreg(hw, DM_REG_RX_ANT_CTRL_11N, BIT(5) | 1305 rtl_set_bbreg(hw, DM_REG_RX_ANT_CTRL_11N,
1267 BIT(4) | BIT(3), def_ant); 1306 BIT(5) | BIT(4) | BIT(3), default_ant);
1268 rtl_set_bbreg(hw, DM_REG_RX_ANT_CTRL_11N, BIT(8) | 1307 rtl_set_bbreg(hw, DM_REG_RX_ANT_CTRL_11N,
1269 BIT(7) | BIT(6), opt_ant); 1308 BIT(8) | BIT(7) | BIT(6), optional_ant);
1270 rtl_set_bbreg(hw, DM_REG_ANTSEL_CTRL_11N, BIT(14) | 1309 rtl_set_bbreg(hw, DM_REG_ANTSEL_CTRL_11N,
1271 BIT(13) | BIT(12), def_ant); 1310 BIT(14) | BIT(13) | BIT(12),
1272 rtl_set_bbreg(hw, DM_REG_RESP_TX_11N, BIT(6) | BIT(7), 1311 default_ant);
1273 def_ant); 1312 rtl_set_bbreg(hw, DM_REG_RESP_TX_11N,
1313 BIT(6) | BIT(7), default_ant);
1274 } else if (rtlefuse->antenna_div_type == CGCS_RX_HW_ANTDIV) { 1314 } else if (rtlefuse->antenna_div_type == CGCS_RX_HW_ANTDIV) {
1275 rtl_set_bbreg(hw, DM_REG_RX_ANT_CTRL_11N, BIT(5) | 1315 rtl_set_bbreg(hw, DM_REG_RX_ANT_CTRL_11N,
1276 BIT(4) | BIT(3), def_ant); 1316 BIT(5) | BIT(4) | BIT(3), default_ant);
1277 rtl_set_bbreg(hw, DM_REG_RX_ANT_CTRL_11N, BIT(8) | 1317 rtl_set_bbreg(hw, DM_REG_RX_ANT_CTRL_11N,
1278 BIT(7) | BIT(6), opt_ant); 1318 BIT(8) | BIT(7) | BIT(6), optional_ant);
1279 } 1319 }
1280 } 1320 }
1281 fat_tbl->rx_idle_ant = ant; 1321 pfat_table->rx_idle_ant = ant;
1282 RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, "RxIdleAnt %s\n", 1322 RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, "RxIdleAnt %s\n",
1283 ((ant == MAIN_ANT) ? ("MAIN_ANT") : ("AUX_ANT"))); 1323 (ant == MAIN_ANT) ? ("MAIN_ANT") : ("AUX_ANT"));
1284} 1324}
1285 1325
1286static void rtl88e_dm_update_tx_ant(struct ieee80211_hw *hw, 1326static void rtl88e_dm_update_tx_ant(struct ieee80211_hw *hw,
1287 u8 ant, u32 mac_id) 1327 u8 ant, u32 mac_id)
1288{ 1328{
1289 struct rtl_priv *rtlpriv = rtl_priv(hw); 1329 struct rtl_priv *rtlpriv = rtl_priv(hw);
1290 struct rtl_dm *rtldm = rtl_dm(rtl_priv(hw)); 1330 struct rtl_dm *rtldm = rtl_dm(rtl_priv(hw));
1291 struct fast_ant_training *fat_tbl = &(rtldm->fat_table); 1331 struct fast_ant_training *pfat_table = &rtldm->fat_table;
1292 u8 target_ant; 1332 u8 target_ant;
1293 1333
1294 if (ant == MAIN_ANT) 1334 if (ant == MAIN_ANT)
@@ -1296,23 +1336,25 @@ static void rtl88e_dm_update_tx_ant(struct ieee80211_hw *hw,
1296 else 1336 else
1297 target_ant = AUX_ANT_CG_TRX; 1337 target_ant = AUX_ANT_CG_TRX;
1298 1338
1299 fat_tbl->antsel_a[mac_id] = target_ant & BIT(0); 1339 pfat_table->antsel_a[mac_id] = target_ant & BIT(0);
1300 fat_tbl->antsel_b[mac_id] = (target_ant & BIT(1)) >> 1; 1340 pfat_table->antsel_b[mac_id] = (target_ant & BIT(1)) >> 1;
1301 fat_tbl->antsel_c[mac_id] = (target_ant & BIT(2)) >> 2; 1341 pfat_table->antsel_c[mac_id] = (target_ant & BIT(2)) >> 2;
1302 RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, "txfrominfo target ant %s\n", 1342 RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, "txfrominfo target ant %s\n",
1303 ((ant == MAIN_ANT) ? ("MAIN_ANT") : ("AUX_ANT"))); 1343 (ant == MAIN_ANT) ? ("MAIN_ANT") : ("AUX_ANT"));
1304 RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, "antsel_tr_mux = 3'b%d%d%d\n", 1344 RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, "antsel_tr_mux = 3'b%d%d%d\n",
1305 fat_tbl->antsel_c[mac_id], 1345 pfat_table->antsel_c[mac_id],
1306 fat_tbl->antsel_b[mac_id], fat_tbl->antsel_a[mac_id]); 1346 pfat_table->antsel_b[mac_id],
1347 pfat_table->antsel_a[mac_id]);
1307} 1348}
1308 1349
1309static void rtl88e_dm_rx_hw_antena_div_init(struct ieee80211_hw *hw) 1350static void rtl88e_dm_rx_hw_antena_div_init(struct ieee80211_hw *hw)
1310{ 1351{
1311 u32 value32; 1352 u32 value32;
1353
1312 /*MAC Setting*/ 1354 /*MAC Setting*/
1313 value32 = rtl_get_bbreg(hw, DM_REG_ANTSEL_PIN_11N, MASKDWORD); 1355 value32 = rtl_get_bbreg(hw, DM_REG_ANTSEL_PIN_11N, MASKDWORD);
1314 rtl_set_bbreg(hw, DM_REG_ANTSEL_PIN_11N, MASKDWORD, value32 | 1356 rtl_set_bbreg(hw, DM_REG_ANTSEL_PIN_11N,
1315 (BIT(23) | BIT(25))); 1357 MASKDWORD, value32 | (BIT(23) | BIT(25)));
1316 /*Pin Setting*/ 1358 /*Pin Setting*/
1317 rtl_set_bbreg(hw, DM_REG_PIN_CTRL_11N, BIT(9) | BIT(8), 0); 1359 rtl_set_bbreg(hw, DM_REG_PIN_CTRL_11N, BIT(9) | BIT(8), 0);
1318 rtl_set_bbreg(hw, DM_REG_RX_ANT_CTRL_11N, BIT(10), 0); 1360 rtl_set_bbreg(hw, DM_REG_RX_ANT_CTRL_11N, BIT(10), 0);
@@ -1333,8 +1375,8 @@ static void rtl88e_dm_trx_hw_antenna_div_init(struct ieee80211_hw *hw)
1333 1375
1334 /*MAC Setting*/ 1376 /*MAC Setting*/
1335 value32 = rtl_get_bbreg(hw, DM_REG_ANTSEL_PIN_11N, MASKDWORD); 1377 value32 = rtl_get_bbreg(hw, DM_REG_ANTSEL_PIN_11N, MASKDWORD);
1336 rtl_set_bbreg(hw, DM_REG_ANTSEL_PIN_11N, MASKDWORD, value32 | 1378 rtl_set_bbreg(hw, DM_REG_ANTSEL_PIN_11N, MASKDWORD,
1337 (BIT(23) | BIT(25))); 1379 value32 | (BIT(23) | BIT(25)));
1338 /*Pin Setting*/ 1380 /*Pin Setting*/
1339 rtl_set_bbreg(hw, DM_REG_PIN_CTRL_11N, BIT(9) | BIT(8), 0); 1381 rtl_set_bbreg(hw, DM_REG_PIN_CTRL_11N, BIT(9) | BIT(8), 0);
1340 rtl_set_bbreg(hw, DM_REG_RX_ANT_CTRL_11N, BIT(10), 0); 1382 rtl_set_bbreg(hw, DM_REG_RX_ANT_CTRL_11N, BIT(10), 0);
@@ -1354,28 +1396,30 @@ static void rtl88e_dm_trx_hw_antenna_div_init(struct ieee80211_hw *hw)
1354static void rtl88e_dm_fast_training_init(struct ieee80211_hw *hw) 1396static void rtl88e_dm_fast_training_init(struct ieee80211_hw *hw)
1355{ 1397{
1356 struct rtl_dm *rtldm = rtl_dm(rtl_priv(hw)); 1398 struct rtl_dm *rtldm = rtl_dm(rtl_priv(hw));
1357 struct fast_ant_training *fat_tbl = &(rtldm->fat_table); 1399 struct fast_ant_training *pfat_table = &rtldm->fat_table;
1358 u32 ant_combo = 2; 1400 u32 ant_combination = 2;
1359 u32 value32, i; 1401 u32 value32, i;
1360 1402
1361 for (i = 0; i < 6; i++) { 1403 for (i = 0; i < 6; i++) {
1362 fat_tbl->bssid[i] = 0; 1404 pfat_table->bssid[i] = 0;
1363 fat_tbl->ant_sum[i] = 0; 1405 pfat_table->ant_sum[i] = 0;
1364 fat_tbl->ant_cnt[i] = 0; 1406 pfat_table->ant_cnt[i] = 0;
1365 fat_tbl->ant_ave[i] = 0; 1407 pfat_table->ant_ave[i] = 0;
1366 } 1408 }
1367 fat_tbl->train_idx = 0; 1409 pfat_table->train_idx = 0;
1368 fat_tbl->fat_state = FAT_NORMAL_STATE; 1410 pfat_table->fat_state = FAT_NORMAL_STATE;
1369 1411
1370 /*MAC Setting*/ 1412 /*MAC Setting*/
1371 value32 = rtl_get_bbreg(hw, DM_REG_ANTSEL_PIN_11N, MASKDWORD); 1413 value32 = rtl_get_bbreg(hw, DM_REG_ANTSEL_PIN_11N, MASKDWORD);
1372 rtl_set_bbreg(hw, DM_REG_ANTSEL_PIN_11N, MASKDWORD, value32 | (BIT(23) | 1414 rtl_set_bbreg(hw, DM_REG_ANTSEL_PIN_11N,
1373 BIT(25))); 1415 MASKDWORD, value32 | (BIT(23) | BIT(25)));
1374 value32 = rtl_get_bbreg(hw, DM_REG_ANT_TRAIN_2, MASKDWORD); 1416 value32 = rtl_get_bbreg(hw, DM_REG_ANT_TRAIN_PARA2_11N, MASKDWORD);
1375 rtl_set_bbreg(hw, DM_REG_ANT_TRAIN_2, MASKDWORD, value32 | (BIT(16) | 1417 rtl_set_bbreg(hw, DM_REG_ANT_TRAIN_PARA2_11N,
1376 BIT(17))); 1418 MASKDWORD, value32 | (BIT(16) | BIT(17)));
1377 rtl_set_bbreg(hw, DM_REG_ANT_TRAIN_2, MASKLWORD, 0); 1419 rtl_set_bbreg(hw, DM_REG_ANT_TRAIN_PARA2_11N,
1378 rtl_set_bbreg(hw, DM_REG_ANT_TRAIN_1, MASKDWORD, 0); 1420 MASKLWORD, 0);
1421 rtl_set_bbreg(hw, DM_REG_ANT_TRAIN_PARA1_11N,
1422 MASKDWORD, 0);
1379 1423
1380 /*Pin Setting*/ 1424 /*Pin Setting*/
1381 rtl_set_bbreg(hw, DM_REG_PIN_CTRL_11N, BIT(9) | BIT(8), 0); 1425 rtl_set_bbreg(hw, DM_REG_PIN_CTRL_11N, BIT(9) | BIT(8), 0);
@@ -1386,26 +1430,17 @@ static void rtl88e_dm_fast_training_init(struct ieee80211_hw *hw)
1386 /*OFDM Setting*/ 1430 /*OFDM Setting*/
1387 rtl_set_bbreg(hw, DM_REG_ANTDIV_PARA1_11N, MASKDWORD, 0x000000a0); 1431 rtl_set_bbreg(hw, DM_REG_ANTDIV_PARA1_11N, MASKDWORD, 0x000000a0);
1388 /*antenna mapping table*/ 1432 /*antenna mapping table*/
1389 if (ant_combo == 2) { 1433 rtl_set_bbreg(hw, DM_REG_ANT_MAPPING1_11N, MASKBYTE0, 1);
1390 rtl_set_bbreg(hw, DM_REG_ANT_MAPPING1_11N, MASKBYTE0, 1); 1434 rtl_set_bbreg(hw, DM_REG_ANT_MAPPING1_11N, MASKBYTE1, 2);
1391 rtl_set_bbreg(hw, DM_REG_ANT_MAPPING1_11N, MASKBYTE1, 2);
1392 } else if (ant_combo == 7) {
1393 rtl_set_bbreg(hw, DM_REG_ANT_MAPPING1_11N, MASKBYTE0, 1);
1394 rtl_set_bbreg(hw, DM_REG_ANT_MAPPING1_11N, MASKBYTE1, 2);
1395 rtl_set_bbreg(hw, DM_REG_ANT_MAPPING1_11N, MASKBYTE2, 2);
1396 rtl_set_bbreg(hw, DM_REG_ANT_MAPPING1_11N, MASKBYTE3, 3);
1397 rtl_set_bbreg(hw, DM_REG_ANT_MAPPING2_11N, MASKBYTE0, 4);
1398 rtl_set_bbreg(hw, DM_REG_ANT_MAPPING2_11N, MASKBYTE1, 5);
1399 rtl_set_bbreg(hw, DM_REG_ANT_MAPPING2_11N, MASKBYTE2, 6);
1400 rtl_set_bbreg(hw, DM_REG_ANT_MAPPING2_11N, MASKBYTE3, 7);
1401 }
1402 1435
1403 /*TX Setting*/ 1436 /*TX Setting*/
1404 rtl_set_bbreg(hw, DM_REG_TX_ANT_CTRL_11N, BIT(21), 1); 1437 rtl_set_bbreg(hw, DM_REG_TX_ANT_CTRL_11N, BIT(21), 1);
1405 rtl_set_bbreg(hw, DM_REG_RX_ANT_CTRL_11N, BIT(5) | BIT(4) | BIT(3), 0); 1438 rtl_set_bbreg(hw, DM_REG_RX_ANT_CTRL_11N,
1406 rtl_set_bbreg(hw, DM_REG_RX_ANT_CTRL_11N, BIT(8) | BIT(7) | BIT(6), 1); 1439 BIT(5) | BIT(4) | BIT(3), 0);
1407 rtl_set_bbreg(hw, DM_REG_RX_ANT_CTRL_11N, BIT(2) | BIT(1) | BIT(0), 1440 rtl_set_bbreg(hw, DM_REG_RX_ANT_CTRL_11N,
1408 (ant_combo - 1)); 1441 BIT(8) | BIT(7) | BIT(6), 1);
1442 rtl_set_bbreg(hw, DM_REG_RX_ANT_CTRL_11N,
1443 BIT(2) | BIT(1) | BIT(0), (ant_combination - 1));
1409 1444
1410 rtl_set_bbreg(hw, DM_REG_IGI_A_11N, BIT(7), 1); 1445 rtl_set_bbreg(hw, DM_REG_IGI_A_11N, BIT(7), 1);
1411} 1446}
@@ -1420,6 +1455,7 @@ static void rtl88e_dm_antenna_div_init(struct ieee80211_hw *hw)
1420 rtl88e_dm_trx_hw_antenna_div_init(hw); 1455 rtl88e_dm_trx_hw_antenna_div_init(hw);
1421 else if (rtlefuse->antenna_div_type == CG_TRX_SMART_ANTDIV) 1456 else if (rtlefuse->antenna_div_type == CG_TRX_SMART_ANTDIV)
1422 rtl88e_dm_fast_training_init(hw); 1457 rtl88e_dm_fast_training_init(hw);
1458
1423} 1459}
1424 1460
1425void rtl88e_dm_set_tx_ant_by_tx_info(struct ieee80211_hw *hw, 1461void rtl88e_dm_set_tx_ant_by_tx_info(struct ieee80211_hw *hw,
@@ -1427,38 +1463,39 @@ void rtl88e_dm_set_tx_ant_by_tx_info(struct ieee80211_hw *hw,
1427{ 1463{
1428 struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw)); 1464 struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw));
1429 struct rtl_dm *rtldm = rtl_dm(rtl_priv(hw)); 1465 struct rtl_dm *rtldm = rtl_dm(rtl_priv(hw));
1430 struct fast_ant_training *fat_tbl = &(rtldm->fat_table); 1466 struct fast_ant_training *pfat_table = &rtldm->fat_table;
1431 1467
1432 if ((rtlefuse->antenna_div_type == CG_TRX_HW_ANTDIV) || 1468 if ((rtlefuse->antenna_div_type == CG_TRX_HW_ANTDIV) ||
1433 (rtlefuse->antenna_div_type == CG_TRX_HW_ANTDIV)) { 1469 (rtlefuse->antenna_div_type == CG_TRX_SMART_ANTDIV)) {
1434 SET_TX_DESC_ANTSEL_A(pdesc, fat_tbl->antsel_a[mac_id]); 1470 SET_TX_DESC_ANTSEL_A(pdesc, pfat_table->antsel_a[mac_id]);
1435 SET_TX_DESC_ANTSEL_B(pdesc, fat_tbl->antsel_b[mac_id]); 1471 SET_TX_DESC_ANTSEL_B(pdesc, pfat_table->antsel_b[mac_id]);
1436 SET_TX_DESC_ANTSEL_C(pdesc, fat_tbl->antsel_c[mac_id]); 1472 SET_TX_DESC_ANTSEL_C(pdesc, pfat_table->antsel_c[mac_id]);
1437 } 1473 }
1438} 1474}
1439 1475
1440void rtl88e_dm_ant_sel_statistics(struct ieee80211_hw *hw, 1476void rtl88e_dm_ant_sel_statistics(struct ieee80211_hw *hw,
1441 u8 antsel_tr_mux, u32 mac_id, u32 rx_pwdb_all) 1477 u8 antsel_tr_mux, u32 mac_id,
1478 u32 rx_pwdb_all)
1442{ 1479{
1443 struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw)); 1480 struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw));
1444 struct rtl_dm *rtldm = rtl_dm(rtl_priv(hw)); 1481 struct rtl_dm *rtldm = rtl_dm(rtl_priv(hw));
1445 struct fast_ant_training *fat_tbl = &(rtldm->fat_table); 1482 struct fast_ant_training *pfat_table = &rtldm->fat_table;
1446 1483
1447 if (rtlefuse->antenna_div_type == CG_TRX_HW_ANTDIV) { 1484 if (rtlefuse->antenna_div_type == CG_TRX_HW_ANTDIV) {
1448 if (antsel_tr_mux == MAIN_ANT_CG_TRX) { 1485 if (antsel_tr_mux == MAIN_ANT_CG_TRX) {
1449 fat_tbl->main_ant_sum[mac_id] += rx_pwdb_all; 1486 pfat_table->main_ant_sum[mac_id] += rx_pwdb_all;
1450 fat_tbl->main_ant_cnt[mac_id]++; 1487 pfat_table->main_ant_cnt[mac_id]++;
1451 } else { 1488 } else {
1452 fat_tbl->aux_ant_sum[mac_id] += rx_pwdb_all; 1489 pfat_table->aux_ant_sum[mac_id] += rx_pwdb_all;
1453 fat_tbl->aux_ant_cnt[mac_id]++; 1490 pfat_table->aux_ant_cnt[mac_id]++;
1454 } 1491 }
1455 } else if (rtlefuse->antenna_div_type == CGCS_RX_HW_ANTDIV) { 1492 } else if (rtlefuse->antenna_div_type == CGCS_RX_HW_ANTDIV) {
1456 if (antsel_tr_mux == MAIN_ANT_CGCS_RX) { 1493 if (antsel_tr_mux == MAIN_ANT_CGCS_RX) {
1457 fat_tbl->main_ant_sum[mac_id] += rx_pwdb_all; 1494 pfat_table->main_ant_sum[mac_id] += rx_pwdb_all;
1458 fat_tbl->main_ant_cnt[mac_id]++; 1495 pfat_table->main_ant_cnt[mac_id]++;
1459 } else { 1496 } else {
1460 fat_tbl->aux_ant_sum[mac_id] += rx_pwdb_all; 1497 pfat_table->aux_ant_sum[mac_id] += rx_pwdb_all;
1461 fat_tbl->aux_ant_cnt[mac_id]++; 1498 pfat_table->aux_ant_cnt[mac_id]++;
1462 } 1499 }
1463 } 1500 }
1464} 1501}
@@ -1466,43 +1503,43 @@ void rtl88e_dm_ant_sel_statistics(struct ieee80211_hw *hw,
1466static void rtl88e_dm_hw_ant_div(struct ieee80211_hw *hw) 1503static void rtl88e_dm_hw_ant_div(struct ieee80211_hw *hw)
1467{ 1504{
1468 struct rtl_priv *rtlpriv = rtl_priv(hw); 1505 struct rtl_priv *rtlpriv = rtl_priv(hw);
1469 struct dig_t *dm_dig = &rtlpriv->dm_digtable;
1470 struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw)); 1506 struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw));
1471 struct rtl_dm *rtldm = rtl_dm(rtl_priv(hw)); 1507 struct rtl_dm *rtldm = rtl_dm(rtl_priv(hw));
1472 struct rtl_sta_info *drv_priv; 1508 struct rtl_sta_info *drv_priv;
1473 struct fast_ant_training *fat_tbl = &(rtldm->fat_table); 1509 struct fast_ant_training *pfat_table = &rtldm->fat_table;
1474 u32 i, min_rssi = 0xff, ant_div_max_rssi = 0, max_rssi = 0; 1510 struct dig_t *dm_dig = &rtlpriv->dm_digtable;
1475 u32 local_min_rssi, local_max_rssi; 1511 u32 i, min_rssi = 0xff, ant_div_max_rssi = 0;
1512 u32 max_rssi = 0, local_min_rssi, local_max_rssi;
1476 u32 main_rssi, aux_rssi; 1513 u32 main_rssi, aux_rssi;
1477 u8 rx_idle_ant = 0, target_ant = 7; 1514 u8 rx_idle_ant = 0, target_ant = 7;
1478 1515
1516 /*for sta its self*/
1479 i = 0; 1517 i = 0;
1480 main_rssi = (fat_tbl->main_ant_cnt[i] != 0) ? 1518 main_rssi = (pfat_table->main_ant_cnt[i] != 0) ?
1481 (fat_tbl->main_ant_sum[i] / 1519 (pfat_table->main_ant_sum[i] / pfat_table->main_ant_cnt[i]) : 0;
1482 fat_tbl->main_ant_cnt[i]) : 0; 1520 aux_rssi = (pfat_table->aux_ant_cnt[i] != 0) ?
1483 aux_rssi = (fat_tbl->aux_ant_cnt[i] != 0) ? 1521 (pfat_table->aux_ant_sum[i] / pfat_table->aux_ant_cnt[i]) : 0;
1484 (fat_tbl->aux_ant_sum[i] / fat_tbl->aux_ant_cnt[i]) : 0;
1485 target_ant = (main_rssi == aux_rssi) ? 1522 target_ant = (main_rssi == aux_rssi) ?
1486 fat_tbl->rx_idle_ant : ((main_rssi >= aux_rssi) ? 1523 pfat_table->rx_idle_ant : ((main_rssi >= aux_rssi) ?
1487 MAIN_ANT : AUX_ANT); 1524 MAIN_ANT : AUX_ANT);
1488 RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, 1525 RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
1489 "main_ant_sum %d main_ant_cnt %d\n", 1526 "main_ant_sum %d main_ant_cnt %d\n",
1490 fat_tbl->main_ant_sum[i], fat_tbl->main_ant_cnt[i]); 1527 pfat_table->main_ant_sum[i],
1528 pfat_table->main_ant_cnt[i]);
1491 RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, 1529 RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
1492 "aux_ant_sum %d aux_ant_cnt %d\n", 1530 "aux_ant_sum %d aux_ant_cnt %d\n",
1493 fat_tbl->aux_ant_sum[i], 1531 pfat_table->aux_ant_sum[i], pfat_table->aux_ant_cnt[i]);
1494 fat_tbl->aux_ant_cnt[i]); 1532 RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, "main_rssi %d aux_rssi%d\n",
1495 RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, 1533 main_rssi, aux_rssi);
1496 "main_rssi %d aux_rssi%d\n", main_rssi, aux_rssi);
1497 local_max_rssi = (main_rssi > aux_rssi) ? main_rssi : aux_rssi; 1534 local_max_rssi = (main_rssi > aux_rssi) ? main_rssi : aux_rssi;
1498 if ((local_max_rssi > ant_div_max_rssi) && (local_max_rssi < 40)) 1535 if ((local_max_rssi > ant_div_max_rssi) && (local_max_rssi < 40))
1499 ant_div_max_rssi = local_max_rssi; 1536 ant_div_max_rssi = local_max_rssi;
1500 if (local_max_rssi > max_rssi) 1537 if (local_max_rssi > max_rssi)
1501 max_rssi = local_max_rssi; 1538 max_rssi = local_max_rssi;
1502 1539
1503 if ((fat_tbl->rx_idle_ant == MAIN_ANT) && (main_rssi == 0)) 1540 if ((pfat_table->rx_idle_ant == MAIN_ANT) && (main_rssi == 0))
1504 main_rssi = aux_rssi; 1541 main_rssi = aux_rssi;
1505 else if ((fat_tbl->rx_idle_ant == AUX_ANT) && (aux_rssi == 0)) 1542 else if ((pfat_table->rx_idle_ant == AUX_ANT) && (aux_rssi == 0))
1506 aux_rssi = main_rssi; 1543 aux_rssi = main_rssi;
1507 1544
1508 local_min_rssi = (main_rssi > aux_rssi) ? aux_rssi : main_rssi; 1545 local_min_rssi = (main_rssi > aux_rssi) ? aux_rssi : main_rssi;
@@ -1518,32 +1555,33 @@ static void rtl88e_dm_hw_ant_div(struct ieee80211_hw *hw)
1518 spin_lock_bh(&rtlpriv->locks.entry_list_lock); 1555 spin_lock_bh(&rtlpriv->locks.entry_list_lock);
1519 list_for_each_entry(drv_priv, &rtlpriv->entry_list, list) { 1556 list_for_each_entry(drv_priv, &rtlpriv->entry_list, list) {
1520 i++; 1557 i++;
1521 main_rssi = (fat_tbl->main_ant_cnt[i] != 0) ? 1558 main_rssi = (pfat_table->main_ant_cnt[i] != 0) ?
1522 (fat_tbl->main_ant_sum[i] / 1559 (pfat_table->main_ant_sum[i] /
1523 fat_tbl->main_ant_cnt[i]) : 0; 1560 pfat_table->main_ant_cnt[i]) : 0;
1524 aux_rssi = (fat_tbl->aux_ant_cnt[i] != 0) ? 1561 aux_rssi = (pfat_table->aux_ant_cnt[i] != 0) ?
1525 (fat_tbl->aux_ant_sum[i] / 1562 (pfat_table->aux_ant_sum[i] /
1526 fat_tbl->aux_ant_cnt[i]) : 0; 1563 pfat_table->aux_ant_cnt[i]) : 0;
1527 target_ant = (main_rssi == aux_rssi) ? 1564 target_ant = (main_rssi == aux_rssi) ?
1528 fat_tbl->rx_idle_ant : ((main_rssi >= 1565 pfat_table->rx_idle_ant : ((main_rssi >=
1529 aux_rssi) ? MAIN_ANT : AUX_ANT); 1566 aux_rssi) ? MAIN_ANT : AUX_ANT);
1530
1531 1567
1532 local_max_rssi = max_t(u32, main_rssi, aux_rssi); 1568 local_max_rssi = (main_rssi > aux_rssi) ?
1569 main_rssi : aux_rssi;
1533 if ((local_max_rssi > ant_div_max_rssi) && 1570 if ((local_max_rssi > ant_div_max_rssi) &&
1534 (local_max_rssi < 40)) 1571 (local_max_rssi < 40))
1535 ant_div_max_rssi = local_max_rssi; 1572 ant_div_max_rssi = local_max_rssi;
1536 if (local_max_rssi > max_rssi) 1573 if (local_max_rssi > max_rssi)
1537 max_rssi = local_max_rssi; 1574 max_rssi = local_max_rssi;
1538 1575
1539 if ((fat_tbl->rx_idle_ant == MAIN_ANT) && !main_rssi) 1576 if ((pfat_table->rx_idle_ant == MAIN_ANT) &&
1577 (main_rssi == 0))
1540 main_rssi = aux_rssi; 1578 main_rssi = aux_rssi;
1541 else if ((fat_tbl->rx_idle_ant == AUX_ANT) && 1579 else if ((pfat_table->rx_idle_ant == AUX_ANT) &&
1542 (aux_rssi == 0)) 1580 (aux_rssi == 0))
1543 aux_rssi = main_rssi; 1581 aux_rssi = main_rssi;
1544 1582
1545 local_min_rssi = (main_rssi > aux_rssi) ? 1583 local_min_rssi = (main_rssi > aux_rssi) ?
1546 aux_rssi : main_rssi; 1584 aux_rssi : main_rssi;
1547 if (local_min_rssi < min_rssi) { 1585 if (local_min_rssi < min_rssi) {
1548 min_rssi = local_min_rssi; 1586 min_rssi = local_min_rssi;
1549 rx_idle_ant = target_ant; 1587 rx_idle_ant = target_ant;
@@ -1555,10 +1593,10 @@ static void rtl88e_dm_hw_ant_div(struct ieee80211_hw *hw)
1555 } 1593 }
1556 1594
1557 for (i = 0; i < ASSOCIATE_ENTRY_NUM; i++) { 1595 for (i = 0; i < ASSOCIATE_ENTRY_NUM; i++) {
1558 fat_tbl->main_ant_sum[i] = 0; 1596 pfat_table->main_ant_sum[i] = 0;
1559 fat_tbl->aux_ant_sum[i] = 0; 1597 pfat_table->aux_ant_sum[i] = 0;
1560 fat_tbl->main_ant_cnt[i] = 0; 1598 pfat_table->main_ant_cnt[i] = 0;
1561 fat_tbl->aux_ant_cnt[i] = 0; 1599 pfat_table->aux_ant_cnt[i] = 0;
1562 } 1600 }
1563 1601
1564 rtl88e_dm_update_rx_idle_ant(hw, rx_idle_ant); 1602 rtl88e_dm_update_rx_idle_ant(hw, rx_idle_ant);
@@ -1573,27 +1611,27 @@ static void rtl88e_set_next_mac_address_target(struct ieee80211_hw *hw)
1573 struct rtl_mac *mac = rtl_mac(rtl_priv(hw)); 1611 struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
1574 struct rtl_dm *rtldm = rtl_dm(rtl_priv(hw)); 1612 struct rtl_dm *rtldm = rtl_dm(rtl_priv(hw));
1575 struct rtl_sta_info *drv_priv; 1613 struct rtl_sta_info *drv_priv;
1576 struct fast_ant_training *fat_tbl = &(rtldm->fat_table); 1614 struct fast_ant_training *pfat_table = &rtldm->fat_table;
1577 u32 value32, i, j = 0; 1615 u32 value32, i, j = 0;
1578 1616
1579 if (mac->link_state >= MAC80211_LINKED) { 1617 if (mac->link_state >= MAC80211_LINKED) {
1580 for (i = 0; i < ASSOCIATE_ENTRY_NUM; i++) { 1618 for (i = 0; i < ASSOCIATE_ENTRY_NUM; i++) {
1581 if ((fat_tbl->train_idx + 1) == ASSOCIATE_ENTRY_NUM) 1619 if ((pfat_table->train_idx + 1) == ASSOCIATE_ENTRY_NUM)
1582 fat_tbl->train_idx = 0; 1620 pfat_table->train_idx = 0;
1583 else 1621 else
1584 fat_tbl->train_idx++; 1622 pfat_table->train_idx++;
1585 1623
1586 if (fat_tbl->train_idx == 0) { 1624 if (pfat_table->train_idx == 0) {
1587 value32 = (mac->mac_addr[5] << 8) | 1625 value32 = (mac->mac_addr[5] << 8) |
1588 mac->mac_addr[4]; 1626 mac->mac_addr[4];
1589 rtl_set_bbreg(hw, DM_REG_ANT_TRAIN_2, 1627 rtl_set_bbreg(hw, DM_REG_ANT_TRAIN_PARA2_11N,
1590 MASKLWORD, value32); 1628 MASKLWORD, value32);
1591 1629
1592 value32 = (mac->mac_addr[3] << 24) | 1630 value32 = (mac->mac_addr[3] << 24) |
1593 (mac->mac_addr[2] << 16) | 1631 (mac->mac_addr[2] << 16) |
1594 (mac->mac_addr[1] << 8) | 1632 (mac->mac_addr[1] << 8) |
1595 mac->mac_addr[0]; 1633 mac->mac_addr[0];
1596 rtl_set_bbreg(hw, DM_REG_ANT_TRAIN_1, 1634 rtl_set_bbreg(hw, DM_REG_ANT_TRAIN_PARA1_11N,
1597 MASKDWORD, value32); 1635 MASKDWORD, value32);
1598 break; 1636 break;
1599 } 1637 }
@@ -1602,28 +1640,29 @@ static void rtl88e_set_next_mac_address_target(struct ieee80211_hw *hw)
1602 NL80211_IFTYPE_STATION) { 1640 NL80211_IFTYPE_STATION) {
1603 spin_lock_bh(&rtlpriv->locks.entry_list_lock); 1641 spin_lock_bh(&rtlpriv->locks.entry_list_lock);
1604 list_for_each_entry(drv_priv, 1642 list_for_each_entry(drv_priv,
1605 &rtlpriv->entry_list, 1643 &rtlpriv->entry_list, list) {
1606 list) {
1607 j++; 1644 j++;
1608 if (j != fat_tbl->train_idx) 1645 if (j != pfat_table->train_idx)
1609 continue; 1646 continue;
1610 1647
1611 value32 = (drv_priv->mac_addr[5] << 8) | 1648 value32 = (drv_priv->mac_addr[5] << 8) |
1612 drv_priv->mac_addr[4]; 1649 drv_priv->mac_addr[4];
1613 rtl_set_bbreg(hw, DM_REG_ANT_TRAIN_2, 1650 rtl_set_bbreg(hw,
1651 DM_REG_ANT_TRAIN_PARA2_11N,
1614 MASKLWORD, value32); 1652 MASKLWORD, value32);
1615 1653
1616 value32 = (drv_priv->mac_addr[3]<<24) | 1654 value32 = (drv_priv->mac_addr[3] << 24) |
1617 (drv_priv->mac_addr[2]<<16) | 1655 (drv_priv->mac_addr[2] << 16) |
1618 (drv_priv->mac_addr[1]<<8) | 1656 (drv_priv->mac_addr[1] << 8) |
1619 drv_priv->mac_addr[0]; 1657 drv_priv->mac_addr[0];
1620 rtl_set_bbreg(hw, DM_REG_ANT_TRAIN_1, 1658 rtl_set_bbreg(hw,
1659 DM_REG_ANT_TRAIN_PARA1_11N,
1621 MASKDWORD, value32); 1660 MASKDWORD, value32);
1622 break; 1661 break;
1623 } 1662 }
1624 spin_unlock_bh(&rtlpriv->locks.entry_list_lock); 1663 spin_unlock_bh(&rtlpriv->locks.entry_list_lock);
1625 /*find entry, break*/ 1664 /*find entry, break*/
1626 if (j == fat_tbl->train_idx) 1665 if (j == pfat_table->train_idx)
1627 break; 1666 break;
1628 } 1667 }
1629 } 1668 }
@@ -1634,23 +1673,24 @@ static void rtl88e_dm_fast_ant_training(struct ieee80211_hw *hw)
1634{ 1673{
1635 struct rtl_priv *rtlpriv = rtl_priv(hw); 1674 struct rtl_priv *rtlpriv = rtl_priv(hw);
1636 struct rtl_dm *rtldm = rtl_dm(rtl_priv(hw)); 1675 struct rtl_dm *rtldm = rtl_dm(rtl_priv(hw));
1637 struct fast_ant_training *fat_tbl = &(rtldm->fat_table); 1676 struct fast_ant_training *pfat_table = &rtldm->fat_table;
1638 u32 i, max_rssi = 0; 1677 u32 i, max_rssi = 0;
1639 u8 target_ant = 2; 1678 u8 target_ant = 2;
1640 bool bpkt_filter_match = false; 1679 bool bpkt_filter_match = false;
1641 1680
1642 if (fat_tbl->fat_state == FAT_TRAINING_STATE) { 1681 if (pfat_table->fat_state == FAT_TRAINING_STATE) {
1643 for (i = 0; i < 7; i++) { 1682 for (i = 0; i < 7; i++) {
1644 if (fat_tbl->ant_cnt[i] == 0) { 1683 if (pfat_table->ant_cnt[i] == 0) {
1645 fat_tbl->ant_ave[i] = 0; 1684 pfat_table->ant_ave[i] = 0;
1646 } else { 1685 } else {
1647 fat_tbl->ant_ave[i] = fat_tbl->ant_sum[i] / 1686 pfat_table->ant_ave[i] =
1648 fat_tbl->ant_cnt[i]; 1687 pfat_table->ant_sum[i] /
1688 pfat_table->ant_cnt[i];
1649 bpkt_filter_match = true; 1689 bpkt_filter_match = true;
1650 } 1690 }
1651 1691
1652 if (fat_tbl->ant_ave[i] > max_rssi) { 1692 if (pfat_table->ant_ave[i] > max_rssi) {
1653 max_rssi = fat_tbl->ant_ave[i]; 1693 max_rssi = pfat_table->ant_ave[i];
1654 target_ant = (u8) i; 1694 target_ant = (u8) i;
1655 } 1695 }
1656 } 1696 }
@@ -1664,32 +1704,33 @@ static void rtl88e_dm_fast_ant_training(struct ieee80211_hw *hw)
1664 BIT(16), 0); 1704 BIT(16), 0);
1665 rtl_set_bbreg(hw, DM_REG_RX_ANT_CTRL_11N, BIT(8) | 1705 rtl_set_bbreg(hw, DM_REG_RX_ANT_CTRL_11N, BIT(8) |
1666 BIT(7) | BIT(6), target_ant); 1706 BIT(7) | BIT(6), target_ant);
1667 rtl_set_bbreg(hw, DM_REG_TX_ANT_CTRL_11N, BIT(21), 1); 1707 rtl_set_bbreg(hw, DM_REG_TX_ANT_CTRL_11N,
1708 BIT(21), 1);
1668 1709
1669 fat_tbl->antsel_a[fat_tbl->train_idx] = 1710 pfat_table->antsel_a[pfat_table->train_idx] =
1670 target_ant & BIT(0); 1711 target_ant & BIT(0);
1671 fat_tbl->antsel_b[fat_tbl->train_idx] = 1712 pfat_table->antsel_b[pfat_table->train_idx] =
1672 (target_ant & BIT(1)) >> 1; 1713 (target_ant & BIT(1)) >> 1;
1673 fat_tbl->antsel_c[fat_tbl->train_idx] = 1714 pfat_table->antsel_c[pfat_table->train_idx] =
1674 (target_ant & BIT(2)) >> 2; 1715 (target_ant & BIT(2)) >> 2;
1675 1716
1676 if (target_ant == 0) 1717 if (target_ant == 0)
1677 rtl_set_bbreg(hw, DM_REG_IGI_A_11N, BIT(7), 0); 1718 rtl_set_bbreg(hw, DM_REG_IGI_A_11N, BIT(7), 0);
1678 } 1719 }
1679 1720
1680 for (i = 0; i < 7; i++) { 1721 for (i = 0; i < 7; i++) {
1681 fat_tbl->ant_sum[i] = 0; 1722 pfat_table->ant_sum[i] = 0;
1682 fat_tbl->ant_cnt[i] = 0; 1723 pfat_table->ant_cnt[i] = 0;
1683 } 1724 }
1684 1725
1685 fat_tbl->fat_state = FAT_NORMAL_STATE; 1726 pfat_table->fat_state = FAT_NORMAL_STATE;
1686 return; 1727 return;
1687 } 1728 }
1688 1729
1689 if (fat_tbl->fat_state == FAT_NORMAL_STATE) { 1730 if (pfat_table->fat_state == FAT_NORMAL_STATE) {
1690 rtl88e_set_next_mac_address_target(hw); 1731 rtl88e_set_next_mac_address_target(hw);
1691 1732
1692 fat_tbl->fat_state = FAT_TRAINING_STATE; 1733 pfat_table->fat_state = FAT_TRAINING_STATE;
1693 rtl_set_bbreg(hw, DM_REG_TXAGC_A_1_MCS32_11N, BIT(16), 1); 1734 rtl_set_bbreg(hw, DM_REG_TXAGC_A_1_MCS32_11N, BIT(16), 1);
1694 rtl_set_bbreg(hw, DM_REG_IGI_A_11N, BIT(7), 1); 1735 rtl_set_bbreg(hw, DM_REG_IGI_A_11N, BIT(7), 1);
1695 1736
@@ -1711,11 +1752,11 @@ static void rtl88e_dm_antenna_diversity(struct ieee80211_hw *hw)
1711 struct rtl_mac *mac = rtl_mac(rtl_priv(hw)); 1752 struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
1712 struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw)); 1753 struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw));
1713 struct rtl_dm *rtldm = rtl_dm(rtl_priv(hw)); 1754 struct rtl_dm *rtldm = rtl_dm(rtl_priv(hw));
1714 struct fast_ant_training *fat_tbl = &(rtldm->fat_table); 1755 struct fast_ant_training *pfat_table = &rtldm->fat_table;
1715 1756
1716 if (mac->link_state < MAC80211_LINKED) { 1757 if (mac->link_state < MAC80211_LINKED) {
1717 RT_TRACE(rtlpriv, COMP_DIG, DBG_LOUD, "No Link\n"); 1758 RT_TRACE(rtlpriv, COMP_DIG, DBG_LOUD, "No Link\n");
1718 if (fat_tbl->becomelinked == true) { 1759 if (pfat_table->becomelinked) {
1719 RT_TRACE(rtlpriv, COMP_DIG, DBG_LOUD, 1760 RT_TRACE(rtlpriv, COMP_DIG, DBG_LOUD,
1720 "need to turn off HW AntDiv\n"); 1761 "need to turn off HW AntDiv\n");
1721 rtl_set_bbreg(hw, DM_REG_IGI_A_11N, BIT(7), 0); 1762 rtl_set_bbreg(hw, DM_REG_IGI_A_11N, BIT(7), 0);
@@ -1724,12 +1765,13 @@ static void rtl88e_dm_antenna_diversity(struct ieee80211_hw *hw)
1724 if (rtlefuse->antenna_div_type == CG_TRX_HW_ANTDIV) 1765 if (rtlefuse->antenna_div_type == CG_TRX_HW_ANTDIV)
1725 rtl_set_bbreg(hw, DM_REG_TX_ANT_CTRL_11N, 1766 rtl_set_bbreg(hw, DM_REG_TX_ANT_CTRL_11N,
1726 BIT(21), 0); 1767 BIT(21), 0);
1727 fat_tbl->becomelinked = 1768 pfat_table->becomelinked =
1728 (mac->link_state == MAC80211_LINKED) ? true : false; 1769 (mac->link_state == MAC80211_LINKED) ?
1770 true : false;
1729 } 1771 }
1730 return; 1772 return;
1731 } else { 1773 } else {
1732 if (fat_tbl->becomelinked == false) { 1774 if (!pfat_table->becomelinked) {
1733 RT_TRACE(rtlpriv, COMP_DIG, DBG_LOUD, 1775 RT_TRACE(rtlpriv, COMP_DIG, DBG_LOUD,
1734 "Need to turn on HW AntDiv\n"); 1776 "Need to turn on HW AntDiv\n");
1735 rtl_set_bbreg(hw, DM_REG_IGI_A_11N, BIT(7), 1); 1777 rtl_set_bbreg(hw, DM_REG_IGI_A_11N, BIT(7), 1);
@@ -1738,8 +1780,9 @@ static void rtl88e_dm_antenna_diversity(struct ieee80211_hw *hw)
1738 if (rtlefuse->antenna_div_type == CG_TRX_HW_ANTDIV) 1780 if (rtlefuse->antenna_div_type == CG_TRX_HW_ANTDIV)
1739 rtl_set_bbreg(hw, DM_REG_TX_ANT_CTRL_11N, 1781 rtl_set_bbreg(hw, DM_REG_TX_ANT_CTRL_11N,
1740 BIT(21), 1); 1782 BIT(21), 1);
1741 fat_tbl->becomelinked = 1783 pfat_table->becomelinked =
1742 (mac->link_state >= MAC80211_LINKED) ? true : false; 1784 (mac->link_state >= MAC80211_LINKED) ?
1785 true : false;
1743 } 1786 }
1744 } 1787 }
1745 1788
diff --git a/drivers/net/wireless/rtlwifi/rtl8188ee/dm.h b/drivers/net/wireless/rtlwifi/rtl8188ee/dm.h
index 0e07f72ea158..64f1f3ea9807 100644
--- a/drivers/net/wireless/rtlwifi/rtl8188ee/dm.h
+++ b/drivers/net/wireless/rtlwifi/rtl8188ee/dm.h
@@ -156,7 +156,6 @@
156#define DM_REG_SLEEP_11N 0xEE0 156#define DM_REG_SLEEP_11N 0xEE0
157#define DM_REG_PMPD_ANAEN_11N 0xEEC 157#define DM_REG_PMPD_ANAEN_11N 0xEEC
158 158
159
160/*MAC REG LIST*/ 159/*MAC REG LIST*/
161#define DM_REG_BB_RST_11N 0x02 160#define DM_REG_BB_RST_11N 0x02
162#define DM_REG_ANTSEL_PIN_11N 0x4C 161#define DM_REG_ANTSEL_PIN_11N 0x4C
@@ -168,8 +167,9 @@
168#define DM_REG_EDCA_BK_11N 0x50C 167#define DM_REG_EDCA_BK_11N 0x50C
169#define DM_REG_TXPAUSE_11N 0x522 168#define DM_REG_TXPAUSE_11N 0x522
170#define DM_REG_RESP_TX_11N 0x6D8 169#define DM_REG_RESP_TX_11N 0x6D8
171#define DM_REG_ANT_TRAIN_1 0x7b0 170#define DM_REG_ANT_TRAIN_PARA1_11N 0x7b0
172#define DM_REG_ANT_TRAIN_2 0x7b4 171#define DM_REG_ANT_TRAIN_PARA2_11N 0x7b4
172
173 173
174/*DIG Related*/ 174/*DIG Related*/
175#define DM_BIT_IGI_11N 0x0000007F 175#define DM_BIT_IGI_11N 0x0000007F
@@ -208,7 +208,7 @@
208#define DM_DIG_BACKOFF_MIN -4 208#define DM_DIG_BACKOFF_MIN -4
209#define DM_DIG_BACKOFF_DEFAULT 10 209#define DM_DIG_BACKOFF_DEFAULT 10
210 210
211#define RXPATHSELECTION_SS_TH_LOW 30 211#define RXPATHSELECTION_SS_TH_W 30
212#define RXPATHSELECTION_DIFF_TH 18 212#define RXPATHSELECTION_DIFF_TH 18
213 213
214#define DM_RATR_STA_INIT 0 214#define DM_RATR_STA_INIT 0
@@ -232,20 +232,22 @@
232 232
233#define TX_POWER_NEAR_FIELD_THRESH_LVL2 74 233#define TX_POWER_NEAR_FIELD_THRESH_LVL2 74
234#define TX_POWER_NEAR_FIELD_THRESH_LVL1 67 234#define TX_POWER_NEAR_FIELD_THRESH_LVL1 67
235#define TXPWRTRACK_MAX_IDX 6 235#define TXPWRTRACK_MAX_IDX 6
236 236
237struct swat_t { 237struct swat_t {
238 u8 failure_cnt; 238 u8 failure_cnt;
239 u8 try_flag; 239 u8 try_flag;
240 u8 stop_trying; 240 u8 stop_trying;
241
241 long pre_rssi; 242 long pre_rssi;
242 long trying_threshold; 243 long trying_threshold;
243 u8 cur_antenna; 244 u8 cur_antenna;
244 u8 pre_antenna; 245 u8 pre_antenna;
246
245}; 247};
246 248
247enum FAT_STATE { 249enum FAT_STATE {
248 FAT_NORMAL_STATE = 0, 250 FAT_NORMAL_STATE = 0,
249 FAT_TRAINING_STATE = 1, 251 FAT_TRAINING_STATE = 1,
250}; 252};
251 253
@@ -310,8 +312,9 @@ enum pwr_track_control_method {
310 312
311void rtl88e_dm_set_tx_ant_by_tx_info(struct ieee80211_hw *hw, 313void rtl88e_dm_set_tx_ant_by_tx_info(struct ieee80211_hw *hw,
312 u8 *pdesc, u32 mac_id); 314 u8 *pdesc, u32 mac_id);
313void rtl88e_dm_ant_sel_statistics(struct ieee80211_hw *hw, u8 antsel_tr_mux, 315void rtl88e_dm_ant_sel_statistics(struct ieee80211_hw *hw,
314 u32 mac_id, u32 rx_pwdb_all); 316 u8 antsel_tr_mux, u32 mac_id,
317 u32 rx_pwdb_all);
315void rtl88e_dm_fast_antenna_training_callback(unsigned long data); 318void rtl88e_dm_fast_antenna_training_callback(unsigned long data);
316void rtl88e_dm_init(struct ieee80211_hw *hw); 319void rtl88e_dm_init(struct ieee80211_hw *hw);
317void rtl88e_dm_watchdog(struct ieee80211_hw *hw); 320void rtl88e_dm_watchdog(struct ieee80211_hw *hw);
@@ -320,7 +323,5 @@ void rtl88e_dm_init_edca_turbo(struct ieee80211_hw *hw);
320void rtl88e_dm_check_txpower_tracking(struct ieee80211_hw *hw); 323void rtl88e_dm_check_txpower_tracking(struct ieee80211_hw *hw);
321void rtl88e_dm_init_rate_adaptive_mask(struct ieee80211_hw *hw); 324void rtl88e_dm_init_rate_adaptive_mask(struct ieee80211_hw *hw);
322void rtl88e_dm_txpower_track_adjust(struct ieee80211_hw *hw, 325void rtl88e_dm_txpower_track_adjust(struct ieee80211_hw *hw,
323 u8 type, u8 *pdirection, 326 u8 type, u8 *pdirection, u32 *poutwrite_val);
324 u32 *poutwrite_val);
325
326#endif 327#endif
diff --git a/drivers/net/wireless/rtlwifi/rtl8188ee/fw.c b/drivers/net/wireless/rtlwifi/rtl8188ee/fw.c
index 4f9376ad4739..eda6617da97f 100644
--- a/drivers/net/wireless/rtlwifi/rtl8188ee/fw.c
+++ b/drivers/net/wireless/rtlwifi/rtl8188ee/fw.c
@@ -11,10 +11,6 @@
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details. 12 * more details.
13 * 13 *
14 * You should have received a copy of the GNU General Public License along with
15 * this program; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
17 *
18 * The full GNU General Public License is included in this distribution in the 14 * The full GNU General Public License is included in this distribution in the
19 * file called LICENSE. 15 * file called LICENSE.
20 * 16 *
@@ -34,8 +30,6 @@
34#include "def.h" 30#include "def.h"
35#include "fw.h" 31#include "fw.h"
36 32
37#include <linux/kmemleak.h>
38
39static void _rtl88e_enable_fw_download(struct ieee80211_hw *hw, bool enable) 33static void _rtl88e_enable_fw_download(struct ieee80211_hw *hw, bool enable)
40{ 34{
41 struct rtl_priv *rtlpriv = rtl_priv(hw); 35 struct rtl_priv *rtlpriv = rtl_priv(hw);
@@ -62,26 +56,26 @@ static void _rtl88e_fw_block_write(struct ieee80211_hw *hw,
62 const u8 *buffer, u32 size) 56 const u8 *buffer, u32 size)
63{ 57{
64 struct rtl_priv *rtlpriv = rtl_priv(hw); 58 struct rtl_priv *rtlpriv = rtl_priv(hw);
65 u32 blk_sz = sizeof(u32); 59 u32 blocksize = sizeof(u32);
66 u8 *buf_ptr = (u8 *)buffer; 60 u8 *bufferptr = (u8 *)buffer;
67 u32 *pu4BytePtr = (u32 *)buffer; 61 u32 *pu4BytePtr = (u32 *)buffer;
68 u32 i, offset, blk_cnt, remain; 62 u32 i, offset, blockcount, remainsize;
69 63
70 blk_cnt = size / blk_sz; 64 blockcount = size / blocksize;
71 remain = size % blk_sz; 65 remainsize = size % blocksize;
72 66
73 for (i = 0; i < blk_cnt; i++) { 67 for (i = 0; i < blockcount; i++) {
74 offset = i * blk_sz; 68 offset = i * blocksize;
75 rtl_write_dword(rtlpriv, (FW_8192C_START_ADDRESS + offset), 69 rtl_write_dword(rtlpriv, (FW_8192C_START_ADDRESS + offset),
76 *(pu4BytePtr + i)); 70 *(pu4BytePtr + i));
77 } 71 }
78 72
79 if (remain) { 73 if (remainsize) {
80 offset = blk_cnt * blk_sz; 74 offset = blockcount * blocksize;
81 buf_ptr += offset; 75 bufferptr += offset;
82 for (i = 0; i < remain; i++) { 76 for (i = 0; i < remainsize; i++) {
83 rtl_write_byte(rtlpriv, (FW_8192C_START_ADDRESS + 77 rtl_write_byte(rtlpriv, (FW_8192C_START_ADDRESS +
84 offset + i), *(buf_ptr + i)); 78 offset + i), *(bufferptr + i));
85 } 79 }
86 } 80 }
87} 81}
@@ -119,32 +113,33 @@ static void _rtl88e_write_fw(struct ieee80211_hw *hw,
119 enum version_8188e version, u8 *buffer, u32 size) 113 enum version_8188e version, u8 *buffer, u32 size)
120{ 114{
121 struct rtl_priv *rtlpriv = rtl_priv(hw); 115 struct rtl_priv *rtlpriv = rtl_priv(hw);
122 u8 *buf_ptr = buffer; 116 u8 *bufferptr = (u8 *)buffer;
123 u32 page_no, remain; 117 u32 pagenums, remainsize;
124 u32 page, offset; 118 u32 page, offset;
125 119
126 RT_TRACE(rtlpriv, COMP_FW, DBG_LOUD, "FW size is %d bytes,\n", size); 120 RT_TRACE(rtlpriv, COMP_FW, DBG_LOUD, "FW size is %d bytes,\n", size);
127 121
128 _rtl88e_fill_dummy(buf_ptr, &size); 122 _rtl88e_fill_dummy(bufferptr, &size);
129 123
130 page_no = size / FW_8192C_PAGE_SIZE; 124 pagenums = size / FW_8192C_PAGE_SIZE;
131 remain = size % FW_8192C_PAGE_SIZE; 125 remainsize = size % FW_8192C_PAGE_SIZE;
132 126
133 if (page_no > 8) { 127 if (pagenums > 8) {
134 RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, 128 RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
135 "Page numbers should not greater then 8\n"); 129 "Page numbers should not greater then 8\n");
136 } 130 }
137 131
138 for (page = 0; page < page_no; page++) { 132 for (page = 0; page < pagenums; page++) {
139 offset = page * FW_8192C_PAGE_SIZE; 133 offset = page * FW_8192C_PAGE_SIZE;
140 _rtl88e_fw_page_write(hw, page, (buf_ptr + offset), 134 _rtl88e_fw_page_write(hw, page, (bufferptr + offset),
141 FW_8192C_PAGE_SIZE); 135 FW_8192C_PAGE_SIZE);
142 } 136 }
143 137
144 if (remain) { 138 if (remainsize) {
145 offset = page_no * FW_8192C_PAGE_SIZE; 139 offset = pagenums * FW_8192C_PAGE_SIZE;
146 page = page_no; 140 page = pagenums;
147 _rtl88e_fw_page_write(hw, page, (buf_ptr + offset), remain); 141 _rtl88e_fw_page_write(hw, page, (bufferptr + offset),
142 remainsize);
148 } 143 }
149} 144}
150 145
@@ -199,7 +194,8 @@ exit:
199 return err; 194 return err;
200} 195}
201 196
202int rtl88e_download_fw(struct ieee80211_hw *hw, bool buse_wake_on_wlan_fw) 197int rtl88e_download_fw(struct ieee80211_hw *hw,
198 bool buse_wake_on_wlan_fw)
203{ 199{
204 struct rtl_priv *rtlpriv = rtl_priv(hw); 200 struct rtl_priv *rtlpriv = rtl_priv(hw);
205 struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw)); 201 struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
@@ -221,8 +217,8 @@ int rtl88e_download_fw(struct ieee80211_hw *hw, bool buse_wake_on_wlan_fw)
221 if (IS_FW_HEADER_EXIST(pfwheader)) { 217 if (IS_FW_HEADER_EXIST(pfwheader)) {
222 RT_TRACE(rtlpriv, COMP_FW, DBG_DMESG, 218 RT_TRACE(rtlpriv, COMP_FW, DBG_DMESG,
223 "Firmware Version(%d), Signature(%#x), Size(%d)\n", 219 "Firmware Version(%d), Signature(%#x), Size(%d)\n",
224 pfwheader->version, pfwheader->signature, 220 pfwheader->version, pfwheader->signature,
225 (int)sizeof(struct rtl92c_firmware_header)); 221 (int)sizeof(struct rtl92c_firmware_header));
226 222
227 pfwdata = pfwdata + sizeof(struct rtl92c_firmware_header); 223 pfwdata = pfwdata + sizeof(struct rtl92c_firmware_header);
228 fwsize = fwsize - sizeof(struct rtl92c_firmware_header); 224 fwsize = fwsize - sizeof(struct rtl92c_firmware_header);
@@ -237,9 +233,14 @@ int rtl88e_download_fw(struct ieee80211_hw *hw, bool buse_wake_on_wlan_fw)
237 _rtl88e_enable_fw_download(hw, false); 233 _rtl88e_enable_fw_download(hw, false);
238 234
239 err = _rtl88e_fw_free_to_go(hw); 235 err = _rtl88e_fw_free_to_go(hw);
236 if (err) {
237 RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
238 "Firmware is not ready to run!\n");
239 } else {
240 RT_TRACE(rtlpriv, COMP_FW, DBG_LOUD,
241 "Firmware is ready to run!\n");
242 }
240 243
241 RT_TRACE(rtlpriv, COMP_FW, DBG_DMESG,
242 "Firmware is%s ready to run!\n", err ? " not" : "");
243 return 0; 244 return 0;
244} 245}
245 246
@@ -266,9 +267,9 @@ static void _rtl88e_fill_h2c_command(struct ieee80211_hw *hw,
266 bool isfw_read = false; 267 bool isfw_read = false;
267 u8 buf_index = 0; 268 u8 buf_index = 0;
268 bool write_sucess = false; 269 bool write_sucess = false;
269 u8 wait_h2c_limit = 100; 270 u8 wait_h2c_limmit = 100;
270 u8 wait_writeh2c_limit = 100; 271 u8 wait_writeh2c_limit = 100;
271 u8 boxc[4], boxext[2]; 272 u8 boxcontent[4], boxextcontent[4];
272 u32 h2c_waitcounter = 0; 273 u32 h2c_waitcounter = 0;
273 unsigned long flag; 274 unsigned long flag;
274 u8 idx; 275 u8 idx;
@@ -331,18 +332,17 @@ static void _rtl88e_fill_h2c_command(struct ieee80211_hw *hw,
331 box_extreg = REG_HMEBOX_EXT_3; 332 box_extreg = REG_HMEBOX_EXT_3;
332 break; 333 break;
333 default: 334 default:
334 RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, 335 RT_TRACE(rtlpriv, COMP_ERR, DBG_LOUD,
335 "switch case not processed\n"); 336 "switch case not process\n");
336 break; 337 break;
337 } 338 }
338
339 isfw_read = _rtl88e_check_fw_read_last_h2c(hw, boxnum); 339 isfw_read = _rtl88e_check_fw_read_last_h2c(hw, boxnum);
340 while (!isfw_read) { 340 while (!isfw_read) {
341 wait_h2c_limit--; 341 wait_h2c_limmit--;
342 if (wait_h2c_limit == 0) { 342 if (wait_h2c_limmit == 0) {
343 RT_TRACE(rtlpriv, COMP_CMD, DBG_LOUD, 343 RT_TRACE(rtlpriv, COMP_CMD, DBG_LOUD,
344 "Waiting too long for FW read " 344 "Waiting too long for FW read clear HMEBox(%d)!\n",
345 "clear HMEBox(%d)!\n", boxnum); 345 boxnum);
346 break; 346 break;
347 } 347 }
348 348
@@ -351,20 +351,20 @@ static void _rtl88e_fill_h2c_command(struct ieee80211_hw *hw,
351 isfw_read = _rtl88e_check_fw_read_last_h2c(hw, boxnum); 351 isfw_read = _rtl88e_check_fw_read_last_h2c(hw, boxnum);
352 u1b_tmp = rtl_read_byte(rtlpriv, 0x130); 352 u1b_tmp = rtl_read_byte(rtlpriv, 0x130);
353 RT_TRACE(rtlpriv, COMP_CMD, DBG_LOUD, 353 RT_TRACE(rtlpriv, COMP_CMD, DBG_LOUD,
354 "Waiting for FW read clear HMEBox(%d)!!! " 354 "Waiting for FW read clear HMEBox(%d)!!! 0x130 = %2x\n",
355 "0x130 = %2x\n", boxnum, u1b_tmp); 355 boxnum, u1b_tmp);
356 } 356 }
357 357
358 if (!isfw_read) { 358 if (!isfw_read) {
359 RT_TRACE(rtlpriv, COMP_CMD, DBG_LOUD, 359 RT_TRACE(rtlpriv, COMP_CMD, DBG_LOUD,
360 "Write H2C register BOX[%d] fail!!!!! " 360 "Write H2C register BOX[%d] fail!!!!! Fw do not read.\n",
361 "Fw do not read.\n", boxnum); 361 boxnum);
362 break; 362 break;
363 } 363 }
364 364
365 memset(boxc, 0, sizeof(boxc)); 365 memset(boxcontent, 0, sizeof(boxcontent));
366 memset(boxext, 0, sizeof(boxext)); 366 memset(boxextcontent, 0, sizeof(boxextcontent));
367 boxc[0] = element_id; 367 boxcontent[0] = element_id;
368 RT_TRACE(rtlpriv, COMP_CMD, DBG_LOUD, 368 RT_TRACE(rtlpriv, COMP_CMD, DBG_LOUD,
369 "Write element_id box_reg(%4x) = %2x\n", 369 "Write element_id box_reg(%4x) = %2x\n",
370 box_reg, element_id); 370 box_reg, element_id);
@@ -373,33 +373,38 @@ static void _rtl88e_fill_h2c_command(struct ieee80211_hw *hw,
373 case 1: 373 case 1:
374 case 2: 374 case 2:
375 case 3: 375 case 3:
376 /*boxc[0] &= ~(BIT(7));*/ 376 /*boxcontent[0] &= ~(BIT(7));*/
377 memcpy((u8 *)(boxc) + 1, cmd_b + buf_index, cmd_len); 377 memcpy((u8 *)(boxcontent) + 1,
378 cmd_b + buf_index, cmd_len);
378 379
379 for (idx = 0; idx < 4; idx++) 380 for (idx = 0; idx < 4; idx++) {
380 rtl_write_byte(rtlpriv, box_reg+idx, boxc[idx]); 381 rtl_write_byte(rtlpriv, box_reg + idx,
382 boxcontent[idx]);
383 }
381 break; 384 break;
382 case 4: 385 case 4:
383 case 5: 386 case 5:
384 case 6: 387 case 6:
385 case 7: 388 case 7:
386 /*boxc[0] |= (BIT(7));*/ 389 /*boxcontent[0] |= (BIT(7));*/
387 memcpy((u8 *)(boxext), cmd_b + buf_index+3, cmd_len-3); 390 memcpy((u8 *)(boxextcontent),
388 memcpy((u8 *)(boxc) + 1, cmd_b + buf_index, 3); 391 cmd_b + buf_index+3, cmd_len-3);
392 memcpy((u8 *)(boxcontent) + 1,
393 cmd_b + buf_index, 3);
389 394
390 for (idx = 0; idx < 2; idx++) { 395 for (idx = 0; idx < 2; idx++) {
391 rtl_write_byte(rtlpriv, box_extreg + idx, 396 rtl_write_byte(rtlpriv, box_extreg + idx,
392 boxext[idx]); 397 boxextcontent[idx]);
393 } 398 }
394 399
395 for (idx = 0; idx < 4; idx++) { 400 for (idx = 0; idx < 4; idx++) {
396 rtl_write_byte(rtlpriv, box_reg + idx, 401 rtl_write_byte(rtlpriv, box_reg + idx,
397 boxc[idx]); 402 boxcontent[idx]);
398 } 403 }
399 break; 404 break;
400 default: 405 default:
401 RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, 406 RT_TRACE(rtlpriv, COMP_ERR, DBG_LOUD,
402 "switch case not processed\n"); 407 "switch case not process\n");
403 break; 408 break;
404 } 409 }
405 410
@@ -411,7 +416,7 @@ static void _rtl88e_fill_h2c_command(struct ieee80211_hw *hw,
411 416
412 RT_TRACE(rtlpriv, COMP_CMD, DBG_LOUD, 417 RT_TRACE(rtlpriv, COMP_CMD, DBG_LOUD,
413 "pHalData->last_hmeboxnum = %d\n", 418 "pHalData->last_hmeboxnum = %d\n",
414 rtlhal->last_hmeboxnum); 419 rtlhal->last_hmeboxnum);
415 } 420 }
416 421
417 spin_lock_irqsave(&rtlpriv->locks.h2c_lock, flag); 422 spin_lock_irqsave(&rtlpriv->locks.h2c_lock, flag);
@@ -422,18 +427,19 @@ static void _rtl88e_fill_h2c_command(struct ieee80211_hw *hw,
422} 427}
423 428
424void rtl88e_fill_h2c_cmd(struct ieee80211_hw *hw, 429void rtl88e_fill_h2c_cmd(struct ieee80211_hw *hw,
425 u8 element_id, u32 cmd_len, u8 *cmd_b) 430 u8 element_id, u32 cmd_len, u8 *cmdbuffer)
426{ 431{
427 struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw)); 432 struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
428 u32 tmp_cmdbuf[2]; 433 u32 tmp_cmdbuf[2];
429 434
430 if (rtlhal->fw_ready == false) { 435 if (!rtlhal->fw_ready) {
431 RT_ASSERT(false, "fail H2C cmd - Fw download fail!!!\n"); 436 RT_ASSERT(false,
437 "return H2C cmd because of Fw download fail!!!\n");
432 return; 438 return;
433 } 439 }
434 440
435 memset(tmp_cmdbuf, 0, 8); 441 memset(tmp_cmdbuf, 0, 8);
436 memcpy(tmp_cmdbuf, cmd_b, cmd_len); 442 memcpy(tmp_cmdbuf, cmdbuffer, cmd_len);
437 _rtl88e_fill_h2c_command(hw, element_id, cmd_len, (u8 *)&tmp_cmdbuf); 443 _rtl88e_fill_h2c_command(hw, element_id, cmd_len, (u8 *)&tmp_cmdbuf);
438 444
439 return; 445 return;
@@ -448,7 +454,8 @@ void rtl88e_firmware_selfreset(struct ieee80211_hw *hw)
448 rtl_write_byte(rtlpriv, REG_SYS_FUNC_EN+1, (u1b_tmp & (~BIT(2)))); 454 rtl_write_byte(rtlpriv, REG_SYS_FUNC_EN+1, (u1b_tmp & (~BIT(2))));
449 rtl_write_byte(rtlpriv, REG_SYS_FUNC_EN+1, (u1b_tmp | BIT(2))); 455 rtl_write_byte(rtlpriv, REG_SYS_FUNC_EN+1, (u1b_tmp | BIT(2)));
450 RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, 456 RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
451 "8051Reset88E(): 8051 reset success.\n"); 457 "8051Reset88E(): 8051 reset success\n");
458
452} 459}
453 460
454void rtl88e_set_fw_pwrmode_cmd(struct ieee80211_hw *hw, u8 mode) 461void rtl88e_set_fw_pwrmode_cmd(struct ieee80211_hw *hw, u8 mode)
@@ -456,28 +463,29 @@ void rtl88e_set_fw_pwrmode_cmd(struct ieee80211_hw *hw, u8 mode)
456 struct rtl_priv *rtlpriv = rtl_priv(hw); 463 struct rtl_priv *rtlpriv = rtl_priv(hw);
457 u8 u1_h2c_set_pwrmode[H2C_88E_PWEMODE_LENGTH] = { 0 }; 464 u8 u1_h2c_set_pwrmode[H2C_88E_PWEMODE_LENGTH] = { 0 };
458 struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw)); 465 struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw));
459 u8 power_state = 0; 466 u8 rlbm, power_state = 0;
460
461 RT_TRACE(rtlpriv, COMP_POWER, DBG_LOUD, "FW LPS mode = %d\n", mode); 467 RT_TRACE(rtlpriv, COMP_POWER, DBG_LOUD, "FW LPS mode = %d\n", mode);
468
462 SET_H2CCMD_PWRMODE_PARM_MODE(u1_h2c_set_pwrmode, ((mode) ? 1 : 0)); 469 SET_H2CCMD_PWRMODE_PARM_MODE(u1_h2c_set_pwrmode, ((mode) ? 1 : 0));
463 SET_H2CCMD_PWRMODE_PARM_RLBM(u1_h2c_set_pwrmode, 0); 470 rlbm = 0;/*YJ, temp, 120316. FW now not support RLBM=2.*/
471 SET_H2CCMD_PWRMODE_PARM_RLBM(u1_h2c_set_pwrmode, rlbm);
464 SET_H2CCMD_PWRMODE_PARM_SMART_PS(u1_h2c_set_pwrmode, 472 SET_H2CCMD_PWRMODE_PARM_SMART_PS(u1_h2c_set_pwrmode,
465 (rtlpriv->mac80211.p2p) ? 473 (rtlpriv->mac80211.p2p) ? ppsc->smart_ps : 1);
466 ppsc->smart_ps : 1);
467 SET_H2CCMD_PWRMODE_PARM_AWAKE_INTERVAL(u1_h2c_set_pwrmode, 474 SET_H2CCMD_PWRMODE_PARM_AWAKE_INTERVAL(u1_h2c_set_pwrmode,
468 ppsc->reg_max_lps_awakeintvl); 475 ppsc->reg_max_lps_awakeintvl);
469 SET_H2CCMD_PWRMODE_PARM_ALL_QUEUE_UAPSD(u1_h2c_set_pwrmode, 0); 476 SET_H2CCMD_PWRMODE_PARM_ALL_QUEUE_UAPSD(u1_h2c_set_pwrmode, 0);
470 if (mode == FW_PS_ACTIVE_MODE) 477 if (mode == FW_PS_ACTIVE_MODE)
471 power_state |= FW_PWR_STATE_ACTIVE; 478 power_state |= FW_PWR_STATE_ACTIVE;
472 else 479 else
473 power_state |= FW_PWR_STATE_RF_OFF; 480 power_state |= FW_PWR_STATE_RF_OFF;
481
474 SET_H2CCMD_PWRMODE_PARM_PWR_STATE(u1_h2c_set_pwrmode, power_state); 482 SET_H2CCMD_PWRMODE_PARM_PWR_STATE(u1_h2c_set_pwrmode, power_state);
475 483
476 RT_PRINT_DATA(rtlpriv, COMP_CMD, DBG_DMESG, 484 RT_PRINT_DATA(rtlpriv, COMP_CMD, DBG_DMESG,
477 "rtl92c_set_fw_pwrmode(): u1_h2c_set_pwrmode\n", 485 "rtl92c_set_fw_pwrmode(): u1_h2c_set_pwrmode\n",
478 u1_h2c_set_pwrmode, H2C_88E_PWEMODE_LENGTH); 486 u1_h2c_set_pwrmode, H2C_88E_PWEMODE_LENGTH);
479 rtl88e_fill_h2c_cmd(hw, H2C_88E_SETPWRMODE, H2C_88E_PWEMODE_LENGTH, 487 rtl88e_fill_h2c_cmd(hw, H2C_88E_SETPWRMODE,
480 u1_h2c_set_pwrmode); 488 H2C_88E_PWEMODE_LENGTH, u1_h2c_set_pwrmode);
481} 489}
482 490
483void rtl88e_set_fw_joinbss_report_cmd(struct ieee80211_hw *hw, u8 mstatus) 491void rtl88e_set_fw_joinbss_report_cmd(struct ieee80211_hw *hw, u8 mstatus)
@@ -499,8 +507,9 @@ void rtl88e_set_fw_ap_off_load_cmd(struct ieee80211_hw *hw,
499 SET_H2CCMD_AP_OFFLOAD_HIDDEN(u1_apoffload_parm, mac->hiddenssid); 507 SET_H2CCMD_AP_OFFLOAD_HIDDEN(u1_apoffload_parm, mac->hiddenssid);
500 SET_H2CCMD_AP_OFFLOAD_DENYANY(u1_apoffload_parm, 0); 508 SET_H2CCMD_AP_OFFLOAD_DENYANY(u1_apoffload_parm, 0);
501 509
502 rtl88e_fill_h2c_cmd(hw, H2C_88E_AP_OFFLOAD, H2C_88E_AP_OFFLOAD_LENGTH, 510 rtl88e_fill_h2c_cmd(hw, H2C_88E_AP_OFFLOAD,
503 u1_apoffload_parm); 511 H2C_88E_AP_OFFLOAD_LENGTH, u1_apoffload_parm);
512
504} 513}
505 514
506static bool _rtl88e_cmd_send_packet(struct ieee80211_hw *hw, 515static bool _rtl88e_cmd_send_packet(struct ieee80211_hw *hw,
@@ -511,6 +520,7 @@ static bool _rtl88e_cmd_send_packet(struct ieee80211_hw *hw,
511 struct rtl8192_tx_ring *ring; 520 struct rtl8192_tx_ring *ring;
512 struct rtl_tx_desc *pdesc; 521 struct rtl_tx_desc *pdesc;
513 struct sk_buff *pskb = NULL; 522 struct sk_buff *pskb = NULL;
523 u8 own;
514 unsigned long flags; 524 unsigned long flags;
515 525
516 ring = &rtlpci->tx_ring[BEACON_QUEUE]; 526 ring = &rtlpci->tx_ring[BEACON_QUEUE];
@@ -522,6 +532,7 @@ static bool _rtl88e_cmd_send_packet(struct ieee80211_hw *hw,
522 spin_lock_irqsave(&rtlpriv->locks.irq_th_lock, flags); 532 spin_lock_irqsave(&rtlpriv->locks.irq_th_lock, flags);
523 533
524 pdesc = &ring->desc[0]; 534 pdesc = &ring->desc[0];
535 own = (u8)rtlpriv->cfg->ops->get_desc((u8 *)pdesc, true, HW_DESC_OWN);
525 536
526 rtlpriv->cfg->ops->fill_tx_cmddesc(hw, (u8 *)pdesc, 1, 1, skb); 537 rtlpriv->cfg->ops->fill_tx_cmddesc(hw, (u8 *)pdesc, 1, 1, skb);
527 538
@@ -656,14 +667,15 @@ void rtl88e_set_fw_rsvdpagepkt(struct ieee80211_hw *hw, bool b_dl_finished)
656 struct rtl_priv *rtlpriv = rtl_priv(hw); 667 struct rtl_priv *rtlpriv = rtl_priv(hw);
657 struct rtl_mac *mac = rtl_mac(rtl_priv(hw)); 668 struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
658 struct sk_buff *skb = NULL; 669 struct sk_buff *skb = NULL;
659
660 u32 totalpacketlen; 670 u32 totalpacketlen;
661 u8 u1RsvdPageLoc[5] = { 0 }; 671 bool rtstatus;
662 672 u8 u1rsvdpageloc[5] = { 0 };
673 bool b_dlok = false;
663 u8 *beacon; 674 u8 *beacon;
664 u8 *pspoll; 675 u8 *p_pspoll;
665 u8 *nullfunc; 676 u8 *nullfunc;
666 u8 *probersp; 677 u8 *p_probersp;
678
667 /*--------------------------------------------------------- 679 /*---------------------------------------------------------
668 * (1) beacon 680 * (1) beacon
669 *--------------------------------------------------------- 681 *---------------------------------------------------------
@@ -676,12 +688,12 @@ void rtl88e_set_fw_rsvdpagepkt(struct ieee80211_hw *hw, bool b_dl_finished)
676 * (2) ps-poll 688 * (2) ps-poll
677 *-------------------------------------------------------- 689 *--------------------------------------------------------
678 */ 690 */
679 pspoll = &reserved_page_packet[PSPOLL_PG * 128]; 691 p_pspoll = &reserved_page_packet[PSPOLL_PG * 128];
680 SET_80211_PS_POLL_AID(pspoll, (mac->assoc_id | 0xc000)); 692 SET_80211_PS_POLL_AID(p_pspoll, (mac->assoc_id | 0xc000));
681 SET_80211_PS_POLL_BSSID(pspoll, mac->bssid); 693 SET_80211_PS_POLL_BSSID(p_pspoll, mac->bssid);
682 SET_80211_PS_POLL_TA(pspoll, mac->mac_addr); 694 SET_80211_PS_POLL_TA(p_pspoll, mac->mac_addr);
683 695
684 SET_H2CCMD_RSVDPAGE_LOC_PSPOLL(u1RsvdPageLoc, PSPOLL_PG); 696 SET_H2CCMD_RSVDPAGE_LOC_PSPOLL(u1rsvdpageloc, PSPOLL_PG);
685 697
686 /*-------------------------------------------------------- 698 /*--------------------------------------------------------
687 * (3) null data 699 * (3) null data
@@ -692,18 +704,18 @@ void rtl88e_set_fw_rsvdpagepkt(struct ieee80211_hw *hw, bool b_dl_finished)
692 SET_80211_HDR_ADDRESS2(nullfunc, mac->mac_addr); 704 SET_80211_HDR_ADDRESS2(nullfunc, mac->mac_addr);
693 SET_80211_HDR_ADDRESS3(nullfunc, mac->bssid); 705 SET_80211_HDR_ADDRESS3(nullfunc, mac->bssid);
694 706
695 SET_H2CCMD_RSVDPAGE_LOC_NULL_DATA(u1RsvdPageLoc, NULL_PG); 707 SET_H2CCMD_RSVDPAGE_LOC_NULL_DATA(u1rsvdpageloc, NULL_PG);
696 708
697 /*--------------------------------------------------------- 709 /*---------------------------------------------------------
698 * (4) probe response 710 * (4) probe response
699 *---------------------------------------------------------- 711 *----------------------------------------------------------
700 */ 712 */
701 probersp = &reserved_page_packet[PROBERSP_PG * 128]; 713 p_probersp = &reserved_page_packet[PROBERSP_PG * 128];
702 SET_80211_HDR_ADDRESS1(probersp, mac->bssid); 714 SET_80211_HDR_ADDRESS1(p_probersp, mac->bssid);
703 SET_80211_HDR_ADDRESS2(probersp, mac->mac_addr); 715 SET_80211_HDR_ADDRESS2(p_probersp, mac->mac_addr);
704 SET_80211_HDR_ADDRESS3(probersp, mac->bssid); 716 SET_80211_HDR_ADDRESS3(p_probersp, mac->bssid);
705 717
706 SET_H2CCMD_RSVDPAGE_LOC_PROBE_RSP(u1RsvdPageLoc, PROBERSP_PG); 718 SET_H2CCMD_RSVDPAGE_LOC_PROBE_RSP(u1rsvdpageloc, PROBERSP_PG);
707 719
708 totalpacketlen = TOTAL_RESERVED_PKT_LEN; 720 totalpacketlen = TOTAL_RESERVED_PKT_LEN;
709 721
@@ -712,33 +724,36 @@ void rtl88e_set_fw_rsvdpagepkt(struct ieee80211_hw *hw, bool b_dl_finished)
712 &reserved_page_packet[0], totalpacketlen); 724 &reserved_page_packet[0], totalpacketlen);
713 RT_PRINT_DATA(rtlpriv, COMP_CMD, DBG_DMESG, 725 RT_PRINT_DATA(rtlpriv, COMP_CMD, DBG_DMESG,
714 "rtl88e_set_fw_rsvdpagepkt(): HW_VAR_SET_TX_CMD: ALL\n", 726 "rtl88e_set_fw_rsvdpagepkt(): HW_VAR_SET_TX_CMD: ALL\n",
715 u1RsvdPageLoc, 3); 727 u1rsvdpageloc, 3);
716 728
717 skb = dev_alloc_skb(totalpacketlen); 729 skb = dev_alloc_skb(totalpacketlen);
718 if (!skb)
719 return;
720 kmemleak_not_leak(skb);
721 memcpy(skb_put(skb, totalpacketlen), 730 memcpy(skb_put(skb, totalpacketlen),
722 &reserved_page_packet, totalpacketlen); 731 &reserved_page_packet, totalpacketlen);
723 732
724 if (_rtl88e_cmd_send_packet(hw, skb)) { 733 rtstatus = _rtl88e_cmd_send_packet(hw, skb);
734
735 if (rtstatus)
736 b_dlok = true;
737
738 if (b_dlok) {
725 RT_TRACE(rtlpriv, COMP_POWER, DBG_LOUD, 739 RT_TRACE(rtlpriv, COMP_POWER, DBG_LOUD,
726 "Set RSVD page location to Fw.\n"); 740 "Set RSVD page location to Fw.\n");
727 RT_PRINT_DATA(rtlpriv, COMP_CMD, DBG_DMESG, 741 RT_PRINT_DATA(rtlpriv, COMP_CMD, DBG_DMESG,
728 "H2C_RSVDPAGE:\n", u1RsvdPageLoc, 3); 742 "H2C_RSVDPAGE:\n", u1rsvdpageloc, 3);
729 rtl88e_fill_h2c_cmd(hw, H2C_88E_RSVDPAGE, 743 rtl88e_fill_h2c_cmd(hw, H2C_88E_RSVDPAGE,
730 sizeof(u1RsvdPageLoc), u1RsvdPageLoc); 744 sizeof(u1rsvdpageloc), u1rsvdpageloc);
731 } else 745 } else
732 RT_TRACE(rtlpriv, COMP_ERR, DBG_WARNING, 746 RT_TRACE(rtlpriv, COMP_ERR, DBG_WARNING,
733 "Set RSVD page location to Fw FAIL!!!!!!.\n"); 747 "Set RSVD page location to Fw FAIL!!!!!!.\n");
734} 748}
735 749
736/*Shoud check FW support p2p or not.*/ 750/*Should check FW support p2p or not.*/
737static void rtl88e_set_p2p_ctw_period_cmd(struct ieee80211_hw *hw, u8 ctwindow) 751static void rtl88e_set_p2p_ctw_period_cmd(struct ieee80211_hw *hw, u8 ctwindow)
738{ 752{
739 u8 u1_ctwindow_period[1] = {ctwindow}; 753 u8 u1_ctwindow_period[1] = { ctwindow};
740 754
741 rtl88e_fill_h2c_cmd(hw, H2C_88E_P2P_PS_CTW_CMD, 1, u1_ctwindow_period); 755 rtl88e_fill_h2c_cmd(hw, H2C_88E_P2P_PS_CTW_CMD, 1, u1_ctwindow_period);
756
742} 757}
743 758
744void rtl88e_set_p2p_ps_offload_cmd(struct ieee80211_hw *hw, u8 p2p_ps_state) 759void rtl88e_set_p2p_ps_offload_cmd(struct ieee80211_hw *hw, u8 p2p_ps_state)
@@ -755,7 +770,7 @@ void rtl88e_set_p2p_ps_offload_cmd(struct ieee80211_hw *hw, u8 p2p_ps_state)
755 switch (p2p_ps_state) { 770 switch (p2p_ps_state) {
756 case P2P_PS_DISABLE: 771 case P2P_PS_DISABLE:
757 RT_TRACE(rtlpriv, COMP_FW, DBG_LOUD, "P2P_PS_DISABLE\n"); 772 RT_TRACE(rtlpriv, COMP_FW, DBG_LOUD, "P2P_PS_DISABLE\n");
758 memset(p2p_ps_offload, 0, sizeof(struct p2p_ps_offload_t)); 773 memset(p2p_ps_offload, 0, 1);
759 break; 774 break;
760 case P2P_PS_ENABLE: 775 case P2P_PS_ENABLE:
761 RT_TRACE(rtlpriv, COMP_FW, DBG_LOUD, "P2P_PS_ENABLE\n"); 776 RT_TRACE(rtlpriv, COMP_FW, DBG_LOUD, "P2P_PS_ENABLE\n");
@@ -765,8 +780,9 @@ void rtl88e_set_p2p_ps_offload_cmd(struct ieee80211_hw *hw, u8 p2p_ps_state)
765 ctwindow = p2pinfo->ctwindow; 780 ctwindow = p2pinfo->ctwindow;
766 rtl88e_set_p2p_ctw_period_cmd(hw, ctwindow); 781 rtl88e_set_p2p_ctw_period_cmd(hw, ctwindow);
767 } 782 }
783
768 /* hw only support 2 set of NoA */ 784 /* hw only support 2 set of NoA */
769 for (i = 0; i < p2pinfo->noa_num; i++) { 785 for (i = 0 ; i < p2pinfo->noa_num; i++) {
770 /* To control the register setting for which NOA*/ 786 /* To control the register setting for which NOA*/
771 rtl_write_byte(rtlpriv, 0x5cf, (i << 4)); 787 rtl_write_byte(rtlpriv, 0x5cf, (i << 4));
772 if (i == 0) 788 if (i == 0)
@@ -785,7 +801,7 @@ void rtl88e_set_p2p_ps_offload_cmd(struct ieee80211_hw *hw, u8 p2p_ps_state)
785 801
786 start_time = p2pinfo->noa_start_time[i]; 802 start_time = p2pinfo->noa_start_time[i];
787 if (p2pinfo->noa_count_type[i] != 1) { 803 if (p2pinfo->noa_count_type[i] != 1) {
788 while (start_time <= (tsf_low + (50 * 1024))) { 804 while (start_time <= (tsf_low+(50*1024))) {
789 start_time += p2pinfo->noa_interval[i]; 805 start_time += p2pinfo->noa_interval[i];
790 if (p2pinfo->noa_count_type[i] != 255) 806 if (p2pinfo->noa_count_type[i] != 255)
791 p2pinfo->noa_count_type[i]--; 807 p2pinfo->noa_count_type[i]--;
@@ -804,7 +820,7 @@ void rtl88e_set_p2p_ps_offload_cmd(struct ieee80211_hw *hw, u8 p2p_ps_state)
804 820
805 if (P2P_ROLE_GO == rtlpriv->mac80211.p2p) { 821 if (P2P_ROLE_GO == rtlpriv->mac80211.p2p) {
806 p2p_ps_offload->role = 1; 822 p2p_ps_offload->role = 1;
807 p2p_ps_offload->allstasleep = 0; 823 p2p_ps_offload->allstasleep = -1;
808 } else { 824 } else {
809 p2p_ps_offload->role = 0; 825 p2p_ps_offload->role = 0;
810 } 826 }
@@ -827,4 +843,5 @@ void rtl88e_set_p2p_ps_offload_cmd(struct ieee80211_hw *hw, u8 p2p_ps_state)
827 843
828 rtl88e_fill_h2c_cmd(hw, H2C_88E_P2P_PS_OFFLOAD, 1, 844 rtl88e_fill_h2c_cmd(hw, H2C_88E_P2P_PS_OFFLOAD, 1,
829 (u8 *)p2p_ps_offload); 845 (u8 *)p2p_ps_offload);
846
830} 847}
diff --git a/drivers/net/wireless/rtlwifi/rtl8188ee/fw.h b/drivers/net/wireless/rtlwifi/rtl8188ee/fw.h
index 854a9875cd5f..05e944e451f4 100644
--- a/drivers/net/wireless/rtlwifi/rtl8188ee/fw.h
+++ b/drivers/net/wireless/rtlwifi/rtl8188ee/fw.h
@@ -55,10 +55,11 @@
55#define H2C_88E_AOAC_RSVDPAGE_LOC_LEN 7 55#define H2C_88E_AOAC_RSVDPAGE_LOC_LEN 7
56 56
57/* Fw PS state for RPWM. 57/* Fw PS state for RPWM.
58 * BIT[2:0] = HW state 58*BIT[2:0] = HW state
59 * BIT[3] = Protocol PS state, 1: register active state, 0: register sleep state 59*BIT[3] = Protocol PS state,
60 * BIT[4] = sub-state 60*1: register active state , 0: register sleep state
61 */ 61*BIT[4] = sub-state
62*/
62#define FW_PS_GO_ON BIT(0) 63#define FW_PS_GO_ON BIT(0)
63#define FW_PS_TX_NULL BIT(1) 64#define FW_PS_TX_NULL BIT(1)
64#define FW_PS_RF_ON BIT(2) 65#define FW_PS_RF_ON BIT(2)
@@ -98,10 +99,13 @@
98#define FW_PS_STATE_S2 (FW_PS_RF_OFF) 99#define FW_PS_STATE_S2 (FW_PS_RF_OFF)
99#define FW_PS_STATE_S3 (FW_PS_ALL_ON) 100#define FW_PS_STATE_S3 (FW_PS_ALL_ON)
100#define FW_PS_STATE_S4 ((FW_PS_ST_ACTIVE) | (FW_PS_ALL_ON)) 101#define FW_PS_STATE_S4 ((FW_PS_ST_ACTIVE) | (FW_PS_ALL_ON))
101 102/* ((FW_PS_RF_ON) | (FW_PS_REGISTER_ACTIVE))*/
102#define FW_PS_STATE_ALL_ON_88E (FW_PS_CLOCK_ON) 103#define FW_PS_STATE_ALL_ON_88E (FW_PS_CLOCK_ON)
104/* (FW_PS_RF_ON)*/
103#define FW_PS_STATE_RF_ON_88E (FW_PS_CLOCK_ON) 105#define FW_PS_STATE_RF_ON_88E (FW_PS_CLOCK_ON)
104#define FW_PS_STATE_RF_OFF_88E (FW_PS_CLOCK_ON) 106/* 0x0*/
107#define FW_PS_STATE_RF_OFF_88E (FW_PS_CLOCK_ON)
108/* (FW_PS_STATE_RF_OFF)*/
105#define FW_PS_STATE_RF_OFF_LOW_PWR_88E (FW_PS_CLOCK_OFF) 109#define FW_PS_STATE_RF_OFF_LOW_PWR_88E (FW_PS_CLOCK_OFF)
106 110
107#define FW_PS_STATE_ALL_ON_92C (FW_PS_STATE_S4) 111#define FW_PS_STATE_ALL_ON_92C (FW_PS_STATE_S4)
@@ -146,7 +150,7 @@ struct rtl92c_firmware_header {
146 u32 rsvd5; 150 u32 rsvd5;
147}; 151};
148 152
149enum rtl8192c_h2c_cmd { 153enum rtl8188e_h2c_cmd {
150 H2C_88E_RSVDPAGE = 0, 154 H2C_88E_RSVDPAGE = 0,
151 H2C_88E_JOINBSSRPT = 1, 155 H2C_88E_JOINBSSRPT = 1,
152 H2C_88E_SCAN = 2, 156 H2C_88E_SCAN = 2,
@@ -175,7 +179,7 @@ enum rtl8192c_h2c_cmd {
175 H2C_88E_AOAC_GLOBAL_INFO = 0x82, 179 H2C_88E_AOAC_GLOBAL_INFO = 0x82,
176 H2C_88E_AOAC_RSVDPAGE = 0x83, 180 H2C_88E_AOAC_RSVDPAGE = 0x83,
177#endif 181#endif
178 /* Not defined in new 88E H2C CMD Format */ 182 /*Not defined in new 88E H2C CMD Format*/
179 H2C_88E_RA_MASK, 183 H2C_88E_RA_MASK,
180 H2C_88E_SELECTIVE_SUSPEND_ROF_CMD, 184 H2C_88E_SELECTIVE_SUSPEND_ROF_CMD,
181 H2C_88E_P2P_PS_MODE, 185 H2C_88E_P2P_PS_MODE,
@@ -289,13 +293,12 @@ enum rtl8192c_h2c_cmd {
289int rtl88e_download_fw(struct ieee80211_hw *hw, 293int rtl88e_download_fw(struct ieee80211_hw *hw,
290 bool buse_wake_on_wlan_fw); 294 bool buse_wake_on_wlan_fw);
291void rtl88e_fill_h2c_cmd(struct ieee80211_hw *hw, u8 element_id, 295void rtl88e_fill_h2c_cmd(struct ieee80211_hw *hw, u8 element_id,
292 u32 cmd_len, u8 *p_cmdbuffer); 296 u32 cmd_len, u8 *cmdbuffer);
293void rtl88e_firmware_selfreset(struct ieee80211_hw *hw); 297void rtl88e_firmware_selfreset(struct ieee80211_hw *hw);
294void rtl88e_set_fw_pwrmode_cmd(struct ieee80211_hw *hw, u8 mode); 298void rtl88e_set_fw_pwrmode_cmd(struct ieee80211_hw *hw, u8 mode);
295void rtl88e_set_fw_joinbss_report_cmd(struct ieee80211_hw *hw, 299void rtl88e_set_fw_joinbss_report_cmd(struct ieee80211_hw *hw, u8 mstatus);
296 u8 mstatus); 300void rtl88e_set_fw_ap_off_load_cmd(struct ieee80211_hw *hw,
297void rtl88e_set_fw_ap_off_load_cmd(struct ieee80211_hw *hw, u8 enable); 301 u8 ap_offload_enable);
298void rtl88e_set_fw_rsvdpagepkt(struct ieee80211_hw *hw, bool b_dl_finished); 302void rtl88e_set_fw_rsvdpagepkt(struct ieee80211_hw *hw, bool b_dl_finished);
299void rtl88e_set_p2p_ps_offload_cmd(struct ieee80211_hw *hw, u8 p2p_ps_state); 303void rtl88e_set_p2p_ps_offload_cmd(struct ieee80211_hw *hw, u8 p2p_ps_state);
300
301#endif 304#endif
diff --git a/drivers/net/wireless/rtlwifi/rtl8188ee/hw.c b/drivers/net/wireless/rtlwifi/rtl8188ee/hw.c
index ba639bb7457c..d4709e11504c 100644
--- a/drivers/net/wireless/rtlwifi/rtl8188ee/hw.c
+++ b/drivers/net/wireless/rtlwifi/rtl8188ee/hw.c
@@ -11,10 +11,6 @@
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details. 12 * more details.
13 * 13 *
14 * You should have received a copy of the GNU General Public License along with
15 * this program; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
17 *
18 * The full GNU General Public License is included in this distribution in the 14 * The full GNU General Public License is included in this distribution in the
19 * file called LICENSE. 15 * file called LICENSE.
20 * 16 *
@@ -114,16 +110,16 @@ static void _rtl88ee_disable_bcn_sub_func(struct ieee80211_hw *hw)
114} 110}
115 111
116static void _rtl88ee_set_fw_clock_on(struct ieee80211_hw *hw, 112static void _rtl88ee_set_fw_clock_on(struct ieee80211_hw *hw,
117 u8 rpwm_val, bool need_turn_off_ckk) 113 u8 rpwm_val, bool b_need_turn_off_ckk)
118{ 114{
119 struct rtl_priv *rtlpriv = rtl_priv(hw); 115 struct rtl_priv *rtlpriv = rtl_priv(hw);
120 struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw)); 116 struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
121 bool support_remote_wake_up; 117 bool b_support_remote_wake_up;
122 u32 count = 0, isr_regaddr, content; 118 u32 count = 0, isr_regaddr, content;
123 bool schedule_timer = need_turn_off_ckk; 119 bool schedule_timer = b_need_turn_off_ckk;
124
125 rtlpriv->cfg->ops->get_hw_reg(hw, HAL_DEF_WOWLAN, 120 rtlpriv->cfg->ops->get_hw_reg(hw, HAL_DEF_WOWLAN,
126 (u8 *)(&support_remote_wake_up)); 121 (u8 *)(&b_support_remote_wake_up));
122
127 if (!rtlhal->fw_ready) 123 if (!rtlhal->fw_ready)
128 return; 124 return;
129 if (!rtlpriv->psc.fw_current_inpsmode) 125 if (!rtlpriv->psc.fw_current_inpsmode)
@@ -134,8 +130,9 @@ static void _rtl88ee_set_fw_clock_on(struct ieee80211_hw *hw,
134 if (rtlhal->fw_clk_change_in_progress) { 130 if (rtlhal->fw_clk_change_in_progress) {
135 while (rtlhal->fw_clk_change_in_progress) { 131 while (rtlhal->fw_clk_change_in_progress) {
136 spin_unlock_bh(&rtlpriv->locks.fw_ps_lock); 132 spin_unlock_bh(&rtlpriv->locks.fw_ps_lock);
133 count++;
137 udelay(100); 134 udelay(100);
138 if (++count > 1000) 135 if (count > 1000)
139 return; 136 return;
140 spin_lock_bh(&rtlpriv->locks.fw_ps_lock); 137 spin_lock_bh(&rtlpriv->locks.fw_ps_lock);
141 } 138 }
@@ -174,6 +171,7 @@ static void _rtl88ee_set_fw_clock_on(struct ieee80211_hw *hw,
174 mod_timer(&rtlpriv->works.fw_clockoff_timer, 171 mod_timer(&rtlpriv->works.fw_clockoff_timer,
175 jiffies + MSECS(10)); 172 jiffies + MSECS(10));
176 } 173 }
174
177 } else { 175 } else {
178 spin_lock_bh(&rtlpriv->locks.fw_ps_lock); 176 spin_lock_bh(&rtlpriv->locks.fw_ps_lock);
179 rtlhal->fw_clk_change_in_progress = false; 177 rtlhal->fw_clk_change_in_progress = false;
@@ -248,11 +246,9 @@ static void _rtl88ee_set_fw_ps_rf_on(struct ieee80211_hw *hw)
248static void _rtl88ee_set_fw_ps_rf_off_low_power(struct ieee80211_hw *hw) 246static void _rtl88ee_set_fw_ps_rf_off_low_power(struct ieee80211_hw *hw)
249{ 247{
250 u8 rpwm_val = 0; 248 u8 rpwm_val = 0;
251
252 rpwm_val |= FW_PS_STATE_RF_OFF_LOW_PWR_88E; 249 rpwm_val |= FW_PS_STATE_RF_OFF_LOW_PWR_88E;
253 _rtl88ee_set_fw_clock_off(hw, rpwm_val); 250 _rtl88ee_set_fw_clock_off(hw, rpwm_val);
254} 251}
255
256void rtl88ee_fw_clk_off_timer_callback(unsigned long data) 252void rtl88ee_fw_clk_off_timer_callback(unsigned long data)
257{ 253{
258 struct ieee80211_hw *hw = (struct ieee80211_hw *)data; 254 struct ieee80211_hw *hw = (struct ieee80211_hw *)data;
@@ -326,23 +322,23 @@ void rtl88ee_get_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val)
326 *((enum rf_pwrstate *)(val)) = ppsc->rfpwr_state; 322 *((enum rf_pwrstate *)(val)) = ppsc->rfpwr_state;
327 break; 323 break;
328 case HW_VAR_FWLPS_RF_ON:{ 324 case HW_VAR_FWLPS_RF_ON:{
329 enum rf_pwrstate rfstate; 325 enum rf_pwrstate rfstate;
330 u32 val_rcr; 326 u32 val_rcr;
331 327
332 rtlpriv->cfg->ops->get_hw_reg(hw, HW_VAR_RF_STATE, 328 rtlpriv->cfg->ops->get_hw_reg(hw,
333 (u8 *)(&rfstate)); 329 HW_VAR_RF_STATE,
334 if (rfstate == ERFOFF) { 330 (u8 *)(&rfstate));
331 if (rfstate == ERFOFF) {
332 *((bool *)(val)) = true;
333 } else {
334 val_rcr = rtl_read_dword(rtlpriv, REG_RCR);
335 val_rcr &= 0x00070000;
336 if (val_rcr)
337 *((bool *)(val)) = false;
338 else
335 *((bool *)(val)) = true; 339 *((bool *)(val)) = true;
336 } else {
337 val_rcr = rtl_read_dword(rtlpriv, REG_RCR);
338 val_rcr &= 0x00070000;
339 if (val_rcr)
340 *((bool *)(val)) = false;
341 else
342 *((bool *)(val)) = true;
343 }
344 break;
345 } 340 }
341 break; }
346 case HW_VAR_FW_PSMODE_STATUS: 342 case HW_VAR_FW_PSMODE_STATUS:
347 *((bool *)(val)) = ppsc->fw_current_inpsmode; 343 *((bool *)(val)) = ppsc->fw_current_inpsmode;
348 break; 344 break;
@@ -374,25 +370,32 @@ void rtl88ee_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val)
374 370
375 switch (variable) { 371 switch (variable) {
376 case HW_VAR_ETHER_ADDR: 372 case HW_VAR_ETHER_ADDR:
377 for (idx = 0; idx < ETH_ALEN; idx++) 373 for (idx = 0; idx < ETH_ALEN; idx++) {
378 rtl_write_byte(rtlpriv, (REG_MACID + idx), val[idx]); 374 rtl_write_byte(rtlpriv, (REG_MACID + idx),
375 val[idx]);
376 }
379 break; 377 break;
380 case HW_VAR_BASIC_RATE:{ 378 case HW_VAR_BASIC_RATE:{
381 u16 rate_cfg = ((u16 *)val)[0]; 379 u16 b_rate_cfg = ((u16 *)val)[0];
382 u8 rate_index = 0; 380 u8 rate_index = 0;
383 rate_cfg = rate_cfg & 0x15f; 381 b_rate_cfg = b_rate_cfg & 0x15f;
384 rate_cfg |= 0x01; 382 b_rate_cfg |= 0x01;
385 rtl_write_byte(rtlpriv, REG_RRSR, rate_cfg & 0xff); 383 rtl_write_byte(rtlpriv, REG_RRSR, b_rate_cfg & 0xff);
386 rtl_write_byte(rtlpriv, REG_RRSR + 1, (rate_cfg >> 8) & 0xff); 384 rtl_write_byte(rtlpriv, REG_RRSR + 1,
387 while (rate_cfg > 0x1) { 385 (b_rate_cfg >> 8) & 0xff);
388 rate_cfg = (rate_cfg >> 1); 386 while (b_rate_cfg > 0x1) {
387 b_rate_cfg = (b_rate_cfg >> 1);
389 rate_index++; 388 rate_index++;
390 } 389 }
391 rtl_write_byte(rtlpriv, REG_INIRTS_RATE_SEL, rate_index); 390 rtl_write_byte(rtlpriv, REG_INIRTS_RATE_SEL,
392 break; } 391 rate_index);
392 break;
393 }
393 case HW_VAR_BSSID: 394 case HW_VAR_BSSID:
394 for (idx = 0; idx < ETH_ALEN; idx++) 395 for (idx = 0; idx < ETH_ALEN; idx++) {
395 rtl_write_byte(rtlpriv, (REG_BSSID + idx), val[idx]); 396 rtl_write_byte(rtlpriv, (REG_BSSID + idx),
397 val[idx]);
398 }
396 break; 399 break;
397 case HW_VAR_SIFS: 400 case HW_VAR_SIFS:
398 rtl_write_byte(rtlpriv, REG_SIFS_CTX + 1, val[0]); 401 rtl_write_byte(rtlpriv, REG_SIFS_CTX + 1, val[0]);
@@ -402,7 +405,8 @@ void rtl88ee_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val)
402 rtl_write_byte(rtlpriv, REG_MAC_SPEC_SIFS + 1, val[0]); 405 rtl_write_byte(rtlpriv, REG_MAC_SPEC_SIFS + 1, val[0]);
403 406
404 if (!mac->ht_enable) 407 if (!mac->ht_enable)
405 rtl_write_word(rtlpriv, REG_RESP_SIFS_OFDM, 0x0e0e); 408 rtl_write_word(rtlpriv, REG_RESP_SIFS_OFDM,
409 0x0e0e);
406 else 410 else
407 rtl_write_word(rtlpriv, REG_RESP_SIFS_OFDM, 411 rtl_write_word(rtlpriv, REG_RESP_SIFS_OFDM,
408 *((u16 *)val)); 412 *((u16 *)val));
@@ -419,17 +423,20 @@ void rtl88ee_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val)
419 rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_AC_PARAM, 423 rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_AC_PARAM,
420 &e_aci); 424 &e_aci);
421 } 425 }
422 break; } 426 break;
427 }
423 case HW_VAR_ACK_PREAMBLE:{ 428 case HW_VAR_ACK_PREAMBLE:{
424 u8 reg_tmp; 429 u8 reg_tmp;
425 u8 short_preamble = (bool)*val; 430 u8 short_preamble = (bool)*val;
426 reg_tmp = rtl_read_byte(rtlpriv, REG_TRXPTCL_CTL+2); 431 reg_tmp = rtl_read_byte(rtlpriv, REG_TRXPTCL_CTL+2);
427 if (short_preamble) { 432 if (short_preamble) {
428 reg_tmp |= 0x02; 433 reg_tmp |= 0x02;
429 rtl_write_byte(rtlpriv, REG_TRXPTCL_CTL + 2, reg_tmp); 434 rtl_write_byte(rtlpriv, REG_TRXPTCL_CTL +
435 2, reg_tmp);
430 } else { 436 } else {
431 reg_tmp |= 0xFD; 437 reg_tmp |= 0xFD;
432 rtl_write_byte(rtlpriv, REG_TRXPTCL_CTL + 2, reg_tmp); 438 rtl_write_byte(rtlpriv, REG_TRXPTCL_CTL +
439 2, reg_tmp);
433 } 440 }
434 break; } 441 break; }
435 case HW_VAR_WPA_CONFIG: 442 case HW_VAR_WPA_CONFIG:
@@ -447,7 +454,8 @@ void rtl88ee_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val)
447 min_spacing_to_set = sec_min_space; 454 min_spacing_to_set = sec_min_space;
448 455
449 mac->min_space_cfg = ((mac->min_space_cfg & 456 mac->min_space_cfg = ((mac->min_space_cfg &
450 0xf8) | min_spacing_to_set); 457 0xf8) |
458 min_spacing_to_set);
451 459
452 *val = min_spacing_to_set; 460 *val = min_spacing_to_set;
453 461
@@ -471,35 +479,44 @@ void rtl88ee_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val)
471 479
472 rtl_write_byte(rtlpriv, REG_AMPDU_MIN_SPACE, 480 rtl_write_byte(rtlpriv, REG_AMPDU_MIN_SPACE,
473 mac->min_space_cfg); 481 mac->min_space_cfg);
474 break; } 482 break;
483 }
475 case HW_VAR_AMPDU_FACTOR:{ 484 case HW_VAR_AMPDU_FACTOR:{
476 u8 regtoset_normal[4] = { 0x41, 0xa8, 0x72, 0xb9 }; 485 u8 regtoset_normal[4] = { 0x41, 0xa8, 0x72, 0xb9 };
477 u8 factor; 486 u8 factor_toset;
478 u8 *reg = NULL; 487 u8 *p_regtoset = NULL;
479 u8 id = 0; 488 u8 index = 0;
489
490 p_regtoset = regtoset_normal;
491
492 factor_toset = *val;
493 if (factor_toset <= 3) {
494 factor_toset = (1 << (factor_toset + 2));
495 if (factor_toset > 0xf)
496 factor_toset = 0xf;
497
498 for (index = 0; index < 4; index++) {
499 if ((p_regtoset[index] & 0xf0) >
500 (factor_toset << 4))
501 p_regtoset[index] =
502 (p_regtoset[index] & 0x0f) |
503 (factor_toset << 4);
504
505 if ((p_regtoset[index] & 0x0f) >
506 factor_toset)
507 p_regtoset[index] =
508 (p_regtoset[index] & 0xf0) |
509 (factor_toset);
510
511 rtl_write_byte(rtlpriv,
512 (REG_AGGLEN_LMT + index),
513 p_regtoset[index]);
480 514
481 reg = regtoset_normal;
482
483 factor = *val;
484 if (factor <= 3) {
485 factor = (1 << (factor + 2));
486 if (factor > 0xf)
487 factor = 0xf;
488
489 for (id = 0; id < 4; id++) {
490 if ((reg[id] & 0xf0) > (factor << 4))
491 reg[id] = (reg[id] & 0x0f) |
492 (factor << 4);
493
494 if ((reg[id] & 0x0f) > factor)
495 reg[id] = (reg[id] & 0xf0) | (factor);
496
497 rtl_write_byte(rtlpriv, (REG_AGGLEN_LMT + id),
498 reg[id]);
499 } 515 }
500 516
501 RT_TRACE(rtlpriv, COMP_MLME, DBG_LOUD, 517 RT_TRACE(rtlpriv, COMP_MLME, DBG_LOUD,
502 "Set HW_VAR_AMPDU_FACTOR: %#x\n", factor); 518 "Set HW_VAR_AMPDU_FACTOR: %#x\n",
519 factor_toset);
503 } 520 }
504 break; } 521 break; }
505 case HW_VAR_AC_PARAM:{ 522 case HW_VAR_AC_PARAM:{
@@ -507,7 +524,8 @@ void rtl88ee_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val)
507 rtl88e_dm_init_edca_turbo(hw); 524 rtl88e_dm_init_edca_turbo(hw);
508 525
509 if (rtlpci->acm_method != EACMWAY2_SW) 526 if (rtlpci->acm_method != EACMWAY2_SW)
510 rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_ACM_CTRL, 527 rtlpriv->cfg->ops->set_hw_reg(hw,
528 HW_VAR_ACM_CTRL,
511 &e_aci); 529 &e_aci);
512 break; } 530 break; }
513 case HW_VAR_ACM_CTRL:{ 531 case HW_VAR_ACM_CTRL:{
@@ -517,7 +535,8 @@ void rtl88ee_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val)
517 u8 acm = p_aci_aifsn->f.acm; 535 u8 acm = p_aci_aifsn->f.acm;
518 u8 acm_ctrl = rtl_read_byte(rtlpriv, REG_ACMHWCTRL); 536 u8 acm_ctrl = rtl_read_byte(rtlpriv, REG_ACMHWCTRL);
519 537
520 acm_ctrl = acm_ctrl | ((rtlpci->acm_method == 2) ? 0x0 : 0x1); 538 acm_ctrl = acm_ctrl |
539 ((rtlpci->acm_method == 2) ? 0x0 : 0x1);
521 540
522 if (acm) { 541 if (acm) {
523 switch (e_aci) { 542 switch (e_aci) {
@@ -610,66 +629,76 @@ void rtl88ee_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val)
610 _rtl88ee_fwlps_enter(hw); 629 _rtl88ee_fwlps_enter(hw);
611 else 630 else
612 _rtl88ee_fwlps_leave(hw); 631 _rtl88ee_fwlps_leave(hw);
632
613 break; } 633 break; }
614 case HW_VAR_H2C_FW_JOINBSSRPT:{ 634 case HW_VAR_H2C_FW_JOINBSSRPT:{
615 u8 mstatus = *val; 635 u8 mstatus = *val;
616 u8 tmp, tmp_reg422, uval; 636 u8 tmp_regcr, tmp_reg422, bcnvalid_reg;
617 u8 count = 0, dlbcn_count = 0; 637 u8 count = 0, dlbcn_count = 0;
618 bool recover = false; 638 bool b_recover = false;
619 639
620 if (mstatus == RT_MEDIA_CONNECT) { 640 if (mstatus == RT_MEDIA_CONNECT) {
621 rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_AID, NULL); 641 rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_AID,
642 NULL);
622 643
623 tmp = rtl_read_byte(rtlpriv, REG_CR + 1); 644 tmp_regcr = rtl_read_byte(rtlpriv, REG_CR + 1);
624 rtl_write_byte(rtlpriv, REG_CR + 1, (tmp | BIT(0))); 645 rtl_write_byte(rtlpriv, REG_CR + 1,
646 (tmp_regcr | BIT(0)));
625 647
626 _rtl88ee_set_bcn_ctrl_reg(hw, 0, BIT(3)); 648 _rtl88ee_set_bcn_ctrl_reg(hw, 0, BIT(3));
627 _rtl88ee_set_bcn_ctrl_reg(hw, BIT(4), 0); 649 _rtl88ee_set_bcn_ctrl_reg(hw, BIT(4), 0);
628 650
629 tmp_reg422 = rtl_read_byte(rtlpriv, 651 tmp_reg422 =
630 REG_FWHW_TXQ_CTRL + 2); 652 rtl_read_byte(rtlpriv,
653 REG_FWHW_TXQ_CTRL + 2);
631 rtl_write_byte(rtlpriv, REG_FWHW_TXQ_CTRL + 2, 654 rtl_write_byte(rtlpriv, REG_FWHW_TXQ_CTRL + 2,
632 tmp_reg422 & (~BIT(6))); 655 tmp_reg422 & (~BIT(6)));
633 if (tmp_reg422 & BIT(6)) 656 if (tmp_reg422 & BIT(6))
634 recover = true; 657 b_recover = true;
635 658
636 do { 659 do {
637 uval = rtl_read_byte(rtlpriv, REG_TDECTRL+2); 660 bcnvalid_reg = rtl_read_byte(rtlpriv,
661 REG_TDECTRL+2);
638 rtl_write_byte(rtlpriv, REG_TDECTRL+2, 662 rtl_write_byte(rtlpriv, REG_TDECTRL+2,
639 (uval | BIT(0))); 663 (bcnvalid_reg | BIT(0)));
640 _rtl88ee_return_beacon_queue_skb(hw); 664 _rtl88ee_return_beacon_queue_skb(hw);
641 665
642 rtl88e_set_fw_rsvdpagepkt(hw, 0); 666 rtl88e_set_fw_rsvdpagepkt(hw, 0);
643 uval = rtl_read_byte(rtlpriv, REG_TDECTRL+2); 667 bcnvalid_reg = rtl_read_byte(rtlpriv,
668 REG_TDECTRL+2);
644 count = 0; 669 count = 0;
645 while (!(uval & BIT(0)) && count < 20) { 670 while (!(bcnvalid_reg & BIT(0)) && count < 20) {
646 count++; 671 count++;
647 udelay(10); 672 udelay(10);
648 uval = rtl_read_byte(rtlpriv, 673 bcnvalid_reg =
649 REG_TDECTRL+2); 674 rtl_read_byte(rtlpriv, REG_TDECTRL+2);
650 } 675 }
651 dlbcn_count++; 676 dlbcn_count++;
652 } while (!(uval & BIT(0)) && dlbcn_count < 5); 677 } while (!(bcnvalid_reg & BIT(0)) && dlbcn_count < 5);
653 678
654 if (uval & BIT(0)) 679 if (bcnvalid_reg & BIT(0))
655 rtl_write_byte(rtlpriv, REG_TDECTRL+2, BIT(0)); 680 rtl_write_byte(rtlpriv, REG_TDECTRL+2, BIT(0));
656 681
657 _rtl88ee_set_bcn_ctrl_reg(hw, BIT(3), 0); 682 _rtl88ee_set_bcn_ctrl_reg(hw, BIT(3), 0);
658 _rtl88ee_set_bcn_ctrl_reg(hw, 0, BIT(4)); 683 _rtl88ee_set_bcn_ctrl_reg(hw, 0, BIT(4));
659 684
660 if (recover) { 685 if (b_recover) {
661 rtl_write_byte(rtlpriv, REG_FWHW_TXQ_CTRL + 2, 686 rtl_write_byte(rtlpriv,
687 REG_FWHW_TXQ_CTRL + 2,
662 tmp_reg422); 688 tmp_reg422);
663 } 689 }
664 rtl_write_byte(rtlpriv, REG_CR + 1, (tmp & ~(BIT(0)))); 690
691 rtl_write_byte(rtlpriv, REG_CR + 1,
692 (tmp_regcr & ~(BIT(0))));
665 } 693 }
666 rtl88e_set_fw_joinbss_report_cmd(hw, *val); 694 rtl88e_set_fw_joinbss_report_cmd(hw, (*(u8 *)val));
667 break; } 695 break; }
668 case HW_VAR_H2C_FW_P2P_PS_OFFLOAD: 696 case HW_VAR_H2C_FW_P2P_PS_OFFLOAD:
669 rtl88e_set_p2p_ps_offload_cmd(hw, *val); 697 rtl88e_set_p2p_ps_offload_cmd(hw, *val);
670 break; 698 break;
671 case HW_VAR_AID:{ 699 case HW_VAR_AID:{
672 u16 u2btmp; 700 u16 u2btmp;
701
673 u2btmp = rtl_read_word(rtlpriv, REG_BCN_PSR_RPT); 702 u2btmp = rtl_read_word(rtlpriv, REG_BCN_PSR_RPT);
674 u2btmp &= 0xC000; 703 u2btmp &= 0xC000;
675 rtl_write_word(rtlpriv, REG_BCN_PSR_RPT, (u2btmp | 704 rtl_write_word(rtlpriv, REG_BCN_PSR_RPT, (u2btmp |
@@ -678,21 +707,29 @@ void rtl88ee_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val)
678 case HW_VAR_CORRECT_TSF:{ 707 case HW_VAR_CORRECT_TSF:{
679 u8 btype_ibss = *val; 708 u8 btype_ibss = *val;
680 709
681 if (btype_ibss == true) 710 if (btype_ibss)
682 _rtl88ee_stop_tx_beacon(hw); 711 _rtl88ee_stop_tx_beacon(hw);
683 712
684 _rtl88ee_set_bcn_ctrl_reg(hw, 0, BIT(3)); 713 _rtl88ee_set_bcn_ctrl_reg(hw, 0, BIT(3));
685 714
686 rtl_write_dword(rtlpriv, REG_TSFTR, 715 rtl_write_dword(rtlpriv, REG_TSFTR,
687 (u32) (mac->tsf & 0xffffffff)); 716 (u32)(mac->tsf & 0xffffffff));
688 rtl_write_dword(rtlpriv, REG_TSFTR + 4, 717 rtl_write_dword(rtlpriv, REG_TSFTR + 4,
689 (u32) ((mac->tsf >> 32) & 0xffffffff)); 718 (u32)((mac->tsf >> 32) & 0xffffffff));
690 719
691 _rtl88ee_set_bcn_ctrl_reg(hw, BIT(3), 0); 720 _rtl88ee_set_bcn_ctrl_reg(hw, BIT(3), 0);
692 721
693 if (btype_ibss == true) 722 if (btype_ibss)
694 _rtl88ee_resume_tx_beacon(hw); 723 _rtl88ee_resume_tx_beacon(hw);
695 break; } 724 break; }
725 case HW_VAR_KEEP_ALIVE: {
726 u8 array[2];
727
728 array[0] = 0xff;
729 array[1] = *((u8 *)val);
730 rtl88e_fill_h2c_cmd(hw, H2C_88E_KEEP_ALIVE_CTRL,
731 2, array);
732 break; }
696 default: 733 default:
697 RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, 734 RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
698 "switch case not process %x\n", variable); 735 "switch case not process %x\n", variable);
@@ -741,7 +778,7 @@ static bool _rtl88ee_llt_table_init(struct ieee80211_hw *hw)
741 rtl_write_byte(rtlpriv, REG_RQPN_NPQ, 0x01); 778 rtl_write_byte(rtlpriv, REG_RQPN_NPQ, 0x01);
742 rtl_write_dword(rtlpriv, REG_RQPN, 0x80730d29); 779 rtl_write_dword(rtlpriv, REG_RQPN, 0x80730d29);
743 780
744 781 /*0x2600 MaxRxBuff=10k-max(TxReportSize(64*8), WOLPattern(16*24)) */
745 rtl_write_dword(rtlpriv, REG_TRXFF_BNDY, (0x25FF0000 | txpktbuf_bndy)); 782 rtl_write_dword(rtlpriv, REG_TRXFF_BNDY, (0x25FF0000 | txpktbuf_bndy));
746 rtl_write_byte(rtlpriv, REG_TDECTRL + 1, txpktbuf_bndy); 783 rtl_write_byte(rtlpriv, REG_TDECTRL + 1, txpktbuf_bndy);
747 784
@@ -798,10 +835,11 @@ static bool _rtl88ee_init_mac(struct ieee80211_hw *hw)
798 struct rtl_priv *rtlpriv = rtl_priv(hw); 835 struct rtl_priv *rtlpriv = rtl_priv(hw);
799 struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw)); 836 struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
800 struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw)); 837 struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
838
801 u8 bytetmp; 839 u8 bytetmp;
802 u16 wordtmp; 840 u16 wordtmp;
803 841
804 /*Disable XTAL OUTPUT for power saving. YJ, add, 111206. */ 842 /*Disable XTAL OUTPUT for power saving. YJ,add,111206. */
805 bytetmp = rtl_read_byte(rtlpriv, REG_XCK_OUT_CTRL) & (~BIT(0)); 843 bytetmp = rtl_read_byte(rtlpriv, REG_XCK_OUT_CTRL) & (~BIT(0));
806 rtl_write_byte(rtlpriv, REG_XCK_OUT_CTRL, bytetmp); 844 rtl_write_byte(rtlpriv, REG_XCK_OUT_CTRL, bytetmp);
807 /*Auto Power Down to CHIP-off State*/ 845 /*Auto Power Down to CHIP-off State*/
@@ -810,9 +848,9 @@ static bool _rtl88ee_init_mac(struct ieee80211_hw *hw)
810 848
811 rtl_write_byte(rtlpriv, REG_RSV_CTRL, 0x00); 849 rtl_write_byte(rtlpriv, REG_RSV_CTRL, 0x00);
812 /* HW Power on sequence */ 850 /* HW Power on sequence */
813 if (!rtl88_hal_pwrseqcmdparsing(rtlpriv, PWR_CUT_ALL_MSK, 851 if (!rtl_hal_pwrseqcmdparsing(rtlpriv, PWR_CUT_ALL_MSK,
814 PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK, 852 PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,
815 RTL8188E_NIC_ENABLE_FLOW)) { 853 RTL8188E_NIC_ENABLE_FLOW)) {
816 RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, 854 RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
817 "init MAC Fail as rtl_hal_pwrseqcmdparsing\n"); 855 "init MAC Fail as rtl_hal_pwrseqcmdparsing\n");
818 return false; 856 return false;
@@ -854,8 +892,6 @@ static bool _rtl88ee_init_mac(struct ieee80211_hw *hw)
854 return false; 892 return false;
855 } 893 }
856 } 894 }
857
858
859 rtl_write_dword(rtlpriv, REG_HISR, 0xffffffff); 895 rtl_write_dword(rtlpriv, REG_HISR, 0xffffffff);
860 rtl_write_dword(rtlpriv, REG_HISRE, 0xffffffff); 896 rtl_write_dword(rtlpriv, REG_HISRE, 0xffffffff);
861 897
@@ -890,9 +926,8 @@ static bool _rtl88ee_init_mac(struct ieee80211_hw *hw)
890 DMA_BIT_MASK(32)); 926 DMA_BIT_MASK(32));
891 927
892 /* if we want to support 64 bit DMA, we should set it here, 928 /* if we want to support 64 bit DMA, we should set it here,
893 * but at the moment we do not support 64 bit DMA 929 * but now we do not support 64 bit DMA
894 */ 930 */
895
896 rtl_write_dword(rtlpriv, REG_INT_MIG, 0); 931 rtl_write_dword(rtlpriv, REG_INT_MIG, 0);
897 932
898 rtl_write_dword(rtlpriv, REG_MCUTST_1, 0x0); 933 rtl_write_dword(rtlpriv, REG_MCUTST_1, 0x0);
@@ -911,8 +946,12 @@ static bool _rtl88ee_init_mac(struct ieee80211_hw *hw)
911static void _rtl88ee_hw_configure(struct ieee80211_hw *hw) 946static void _rtl88ee_hw_configure(struct ieee80211_hw *hw)
912{ 947{
913 struct rtl_priv *rtlpriv = rtl_priv(hw); 948 struct rtl_priv *rtlpriv = rtl_priv(hw);
914 u32 reg_prsr; 949 u8 reg_bw_opmode;
950 u32 reg_ratr, reg_prsr;
915 951
952 reg_bw_opmode = BW_OPMODE_20MHZ;
953 reg_ratr = RATE_ALL_CCK | RATE_ALL_OFDM_AG |
954 RATE_ALL_OFDM_1SS | RATE_ALL_OFDM_2SS;
916 reg_prsr = RATE_ALL_CCK | RATE_ALL_OFDM_AG; 955 reg_prsr = RATE_ALL_CCK | RATE_ALL_OFDM_AG;
917 956
918 rtl_write_dword(rtlpriv, REG_RRSR, reg_prsr); 957 rtl_write_dword(rtlpriv, REG_RRSR, reg_prsr);
@@ -924,7 +963,7 @@ static void _rtl88ee_enable_aspm_back_door(struct ieee80211_hw *hw)
924 struct rtl_priv *rtlpriv = rtl_priv(hw); 963 struct rtl_priv *rtlpriv = rtl_priv(hw);
925 struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw)); 964 struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw));
926 u8 tmp1byte = 0; 965 u8 tmp1byte = 0;
927 u32 tmp4Byte = 0, count; 966 u32 tmp4byte = 0, count = 0;
928 967
929 rtl_write_word(rtlpriv, 0x354, 0x8104); 968 rtl_write_word(rtlpriv, 0x354, 0x8104);
930 rtl_write_word(rtlpriv, 0x358, 0x24); 969 rtl_write_word(rtlpriv, 0x358, 0x24);
@@ -939,8 +978,8 @@ static void _rtl88ee_enable_aspm_back_door(struct ieee80211_hw *hw)
939 count++; 978 count++;
940 } 979 }
941 if (0 == tmp1byte) { 980 if (0 == tmp1byte) {
942 tmp4Byte = rtl_read_dword(rtlpriv, 0x34c); 981 tmp4byte = rtl_read_dword(rtlpriv, 0x34c);
943 rtl_write_dword(rtlpriv, 0x348, tmp4Byte|BIT(31)); 982 rtl_write_dword(rtlpriv, 0x348, tmp4byte|BIT(31));
944 rtl_write_word(rtlpriv, 0x350, 0xf70c); 983 rtl_write_word(rtlpriv, 0x350, 0xf70c);
945 rtl_write_byte(rtlpriv, 0x352, 0x1); 984 rtl_write_byte(rtlpriv, 0x352, 0x1);
946 } 985 }
@@ -962,12 +1001,14 @@ static void _rtl88ee_enable_aspm_back_door(struct ieee80211_hw *hw)
962 tmp1byte = rtl_read_byte(rtlpriv, 0x352); 1001 tmp1byte = rtl_read_byte(rtlpriv, 0x352);
963 count++; 1002 count++;
964 } 1003 }
1004
965 if (ppsc->support_backdoor || (0 == tmp1byte)) { 1005 if (ppsc->support_backdoor || (0 == tmp1byte)) {
966 tmp4Byte = rtl_read_dword(rtlpriv, 0x34c); 1006 tmp4byte = rtl_read_dword(rtlpriv, 0x34c);
967 rtl_write_dword(rtlpriv, 0x348, tmp4Byte|BIT(11)|BIT(12)); 1007 rtl_write_dword(rtlpriv, 0x348, tmp4byte|BIT(11)|BIT(12));
968 rtl_write_word(rtlpriv, 0x350, 0xf718); 1008 rtl_write_word(rtlpriv, 0x350, 0xf718);
969 rtl_write_byte(rtlpriv, 0x352, 0x1); 1009 rtl_write_byte(rtlpriv, 0x352, 0x1);
970 } 1010 }
1011
971 tmp1byte = rtl_read_byte(rtlpriv, 0x352); 1012 tmp1byte = rtl_read_byte(rtlpriv, 0x352);
972 count = 0; 1013 count = 0;
973 while (tmp1byte && count < 20) { 1014 while (tmp1byte && count < 20) {
@@ -984,14 +1025,15 @@ void rtl88ee_enable_hw_security_config(struct ieee80211_hw *hw)
984 1025
985 RT_TRACE(rtlpriv, COMP_INIT, DBG_DMESG, 1026 RT_TRACE(rtlpriv, COMP_INIT, DBG_DMESG,
986 "PairwiseEncAlgorithm = %d GroupEncAlgorithm = %d\n", 1027 "PairwiseEncAlgorithm = %d GroupEncAlgorithm = %d\n",
987 rtlpriv->sec.pairwise_enc_algorithm, 1028 rtlpriv->sec.pairwise_enc_algorithm,
988 rtlpriv->sec.group_enc_algorithm); 1029 rtlpriv->sec.group_enc_algorithm);
989 1030
990 if (rtlpriv->cfg->mod_params->sw_crypto || rtlpriv->sec.use_sw_sec) { 1031 if (rtlpriv->cfg->mod_params->sw_crypto || rtlpriv->sec.use_sw_sec) {
991 RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG, 1032 RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG,
992 "not open hw encryption\n"); 1033 "not open hw encryption\n");
993 return; 1034 return;
994 } 1035 }
1036
995 sec_reg_value = SCR_TXENCENABLE | SCR_RXDECENABLE; 1037 sec_reg_value = SCR_TXENCENABLE | SCR_RXDECENABLE;
996 1038
997 if (rtlpriv->sec.use_defaultkey) { 1039 if (rtlpriv->sec.use_defaultkey) {
@@ -1005,6 +1047,7 @@ void rtl88ee_enable_hw_security_config(struct ieee80211_hw *hw)
1005 1047
1006 RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG, 1048 RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG,
1007 "The SECR-value %x\n", sec_reg_value); 1049 "The SECR-value %x\n", sec_reg_value);
1050
1008 rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_WPA_CONFIG, &sec_reg_value); 1051 rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_WPA_CONFIG, &sec_reg_value);
1009} 1052}
1010 1053
@@ -1022,7 +1065,6 @@ int rtl88ee_hw_init(struct ieee80211_hw *hw)
1022 u8 tmp_u1b, u1byte; 1065 u8 tmp_u1b, u1byte;
1023 unsigned long flags; 1066 unsigned long flags;
1024 1067
1025 RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, "Rtl8188EE hw init\n");
1026 rtlpriv->rtlhal.being_init_adapter = true; 1068 rtlpriv->rtlhal.being_init_adapter = true;
1027 /* As this function can take a very long time (up to 350 ms) 1069 /* As this function can take a very long time (up to 350 ms)
1028 * and can be called with irqs disabled, reenable the irqs 1070 * and can be called with irqs disabled, reenable the irqs
@@ -1033,6 +1075,7 @@ int rtl88ee_hw_init(struct ieee80211_hw *hw)
1033 */ 1075 */
1034 local_save_flags(flags); 1076 local_save_flags(flags);
1035 local_irq_enable(); 1077 local_irq_enable();
1078 rtlhal->fw_ready = false;
1036 1079
1037 rtlpriv->intf_ops->disable_aspm(hw); 1080 rtlpriv->intf_ops->disable_aspm(hw);
1038 1081
@@ -1058,9 +1101,8 @@ int rtl88ee_hw_init(struct ieee80211_hw *hw)
1058 "Failed to download FW. Init HW without FW now..\n"); 1101 "Failed to download FW. Init HW without FW now..\n");
1059 err = 1; 1102 err = 1;
1060 goto exit; 1103 goto exit;
1061 } else {
1062 rtlhal->fw_ready = true;
1063 } 1104 }
1105 rtlhal->fw_ready = true;
1064 /*fw related variable initialize */ 1106 /*fw related variable initialize */
1065 rtlhal->last_hmeboxnum = 0; 1107 rtlhal->last_hmeboxnum = 0;
1066 rtlhal->fw_ps_state = FW_PS_STATE_ALL_ON_88E; 1108 rtlhal->fw_ps_state = FW_PS_STATE_ALL_ON_88E;
@@ -1069,10 +1111,10 @@ int rtl88ee_hw_init(struct ieee80211_hw *hw)
1069 ppsc->fw_current_inpsmode = false; 1111 ppsc->fw_current_inpsmode = false;
1070 1112
1071 rtl88e_phy_mac_config(hw); 1113 rtl88e_phy_mac_config(hw);
1072 /* because last function modifies RCR, we update 1114 /* because last function modify RCR, so we update
1073 * rcr var here, or TP will be unstable for receive_config 1115 * rcr var here, or TP will unstable for receive_config
1074 * is wrong, RX RCR_ACRC32 will cause TP unstable & Rx 1116 * is wrong, RX RCR_ACRC32 will cause TP unstabel & Rx
1075 * RCR_APP_ICV will cause mac80211 disassoc for cisco 1252 1117 * RCR_APP_ICV will cause mac80211 unassoc for cisco 1252
1076 */ 1118 */
1077 rtlpci->receive_config &= ~(RCR_ACRC32 | RCR_AICV); 1119 rtlpci->receive_config &= ~(RCR_ACRC32 | RCR_AICV);
1078 rtl_write_dword(rtlpriv, REG_RCR, rtlpci->receive_config); 1120 rtl_write_dword(rtlpriv, REG_RCR, rtlpci->receive_config);
@@ -1102,15 +1144,14 @@ int rtl88ee_hw_init(struct ieee80211_hw *hw)
1102 if (ppsc->rfpwr_state == ERFON) { 1144 if (ppsc->rfpwr_state == ERFON) {
1103 if ((rtlefuse->antenna_div_type == CGCS_RX_HW_ANTDIV) || 1145 if ((rtlefuse->antenna_div_type == CGCS_RX_HW_ANTDIV) ||
1104 ((rtlefuse->antenna_div_type == CG_TRX_HW_ANTDIV) && 1146 ((rtlefuse->antenna_div_type == CG_TRX_HW_ANTDIV) &&
1105 (rtlhal->oem_id == RT_CID_819X_HP))) { 1147 (rtlhal->oem_id == RT_CID_819X_HP))) {
1106 rtl88e_phy_set_rfpath_switch(hw, true); 1148 rtl88e_phy_set_rfpath_switch(hw, true);
1107 rtlpriv->dm.fat_table.rx_idle_ant = MAIN_ANT; 1149 rtlpriv->dm.fat_table.rx_idle_ant = MAIN_ANT;
1108 } else { 1150 } else {
1109 rtl88e_phy_set_rfpath_switch(hw, false); 1151 rtl88e_phy_set_rfpath_switch(hw, false);
1110 rtlpriv->dm.fat_table.rx_idle_ant = AUX_ANT; 1152 rtlpriv->dm.fat_table.rx_idle_ant = AUX_ANT;
1111 } 1153 }
1112 RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, 1154 RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, "rx idle ant %s\n",
1113 "rx idle ant %s\n",
1114 (rtlpriv->dm.fat_table.rx_idle_ant == MAIN_ANT) ? 1155 (rtlpriv->dm.fat_table.rx_idle_ant == MAIN_ANT) ?
1115 ("MAIN_ANT") : ("AUX_ANT")); 1156 ("MAIN_ANT") : ("AUX_ANT"));
1116 1157
@@ -1120,6 +1161,7 @@ int rtl88ee_hw_init(struct ieee80211_hw *hw)
1120 rtl88e_phy_iq_calibrate(hw, false); 1161 rtl88e_phy_iq_calibrate(hw, false);
1121 rtlphy->iqk_initialized = true; 1162 rtlphy->iqk_initialized = true;
1122 } 1163 }
1164
1123 rtl88e_dm_check_txpower_tracking(hw); 1165 rtl88e_dm_check_txpower_tracking(hw);
1124 rtl88e_phy_lc_calibrate(hw); 1166 rtl88e_phy_lc_calibrate(hw);
1125 } 1167 }
@@ -1143,8 +1185,6 @@ int rtl88ee_hw_init(struct ieee80211_hw *hw)
1143exit: 1185exit:
1144 local_irq_restore(flags); 1186 local_irq_restore(flags);
1145 rtlpriv->rtlhal.being_init_adapter = false; 1187 rtlpriv->rtlhal.being_init_adapter = false;
1146 RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, "end of Rtl8188EE hw init %x\n",
1147 err);
1148 return err; 1188 return err;
1149} 1189}
1150 1190
@@ -1177,62 +1217,67 @@ static int _rtl88ee_set_media_status(struct ieee80211_hw *hw,
1177 enum nl80211_iftype type) 1217 enum nl80211_iftype type)
1178{ 1218{
1179 struct rtl_priv *rtlpriv = rtl_priv(hw); 1219 struct rtl_priv *rtlpriv = rtl_priv(hw);
1180 u8 bt_msr = rtl_read_byte(rtlpriv, MSR); 1220 u8 bt_msr = rtl_read_byte(rtlpriv, MSR) & 0xfc;
1181 enum led_ctl_mode ledaction = LED_CTL_NO_LINK; 1221 enum led_ctl_mode ledaction = LED_CTL_NO_LINK;
1182 bt_msr &= 0xfc; 1222 u8 mode = MSR_NOLINK;
1183
1184 if (type == NL80211_IFTYPE_UNSPECIFIED ||
1185 type == NL80211_IFTYPE_STATION) {
1186 _rtl88ee_stop_tx_beacon(hw);
1187 _rtl88ee_enable_bcn_sub_func(hw);
1188 } else if (type == NL80211_IFTYPE_ADHOC ||
1189 type == NL80211_IFTYPE_AP ||
1190 type == NL80211_IFTYPE_MESH_POINT) {
1191 _rtl88ee_resume_tx_beacon(hw);
1192 _rtl88ee_disable_bcn_sub_func(hw);
1193 } else {
1194 RT_TRACE(rtlpriv, COMP_ERR, DBG_WARNING,
1195 "Set HW_VAR_MEDIA_STATUS: No such media status(%x).\n",
1196 type);
1197 }
1198 1223
1199 switch (type) { 1224 switch (type) {
1200 case NL80211_IFTYPE_UNSPECIFIED: 1225 case NL80211_IFTYPE_UNSPECIFIED:
1201 bt_msr |= MSR_NOLINK; 1226 mode = MSR_NOLINK;
1202 ledaction = LED_CTL_LINK;
1203 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE, 1227 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
1204 "Set Network type to NO LINK!\n"); 1228 "Set Network type to NO LINK!\n");
1205 break; 1229 break;
1206 case NL80211_IFTYPE_ADHOC: 1230 case NL80211_IFTYPE_ADHOC:
1207 bt_msr |= MSR_ADHOC; 1231 case NL80211_IFTYPE_MESH_POINT:
1232 mode = MSR_ADHOC;
1208 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE, 1233 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
1209 "Set Network type to Ad Hoc!\n"); 1234 "Set Network type to Ad Hoc!\n");
1210 break; 1235 break;
1211 case NL80211_IFTYPE_STATION: 1236 case NL80211_IFTYPE_STATION:
1212 bt_msr |= MSR_INFRA; 1237 mode = MSR_INFRA;
1213 ledaction = LED_CTL_LINK; 1238 ledaction = LED_CTL_LINK;
1214 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE, 1239 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
1215 "Set Network type to STA!\n"); 1240 "Set Network type to STA!\n");
1216 break; 1241 break;
1217 case NL80211_IFTYPE_AP: 1242 case NL80211_IFTYPE_AP:
1218 bt_msr |= MSR_AP; 1243 mode = MSR_AP;
1244 ledaction = LED_CTL_LINK;
1219 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE, 1245 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
1220 "Set Network type to AP!\n"); 1246 "Set Network type to AP!\n");
1221 break; 1247 break;
1222 case NL80211_IFTYPE_MESH_POINT:
1223 bt_msr |= MSR_ADHOC;
1224 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
1225 "Set Network type to Mesh Point!\n");
1226 break;
1227 default: 1248 default:
1228 RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, 1249 RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
1229 "Network type %d not support!\n", type); 1250 "Network type %d not support!\n", type);
1230 return 1; 1251 return 1;
1252 break;
1231 } 1253 }
1232 1254
1233 rtl_write_byte(rtlpriv, (MSR), bt_msr); 1255 /* MSR_INFRA == Link in infrastructure network;
1256 * MSR_ADHOC == Link in ad hoc network;
1257 * Therefore, check link state is necessary.
1258 *
1259 * MSR_AP == AP mode; link state is not cared here.
1260 */
1261 if (mode != MSR_AP && rtlpriv->mac80211.link_state < MAC80211_LINKED) {
1262 mode = MSR_NOLINK;
1263 ledaction = LED_CTL_NO_LINK;
1264 }
1265
1266 if (mode == MSR_NOLINK || mode == MSR_INFRA) {
1267 _rtl88ee_stop_tx_beacon(hw);
1268 _rtl88ee_enable_bcn_sub_func(hw);
1269 } else if (mode == MSR_ADHOC || mode == MSR_AP) {
1270 _rtl88ee_resume_tx_beacon(hw);
1271 _rtl88ee_disable_bcn_sub_func(hw);
1272 } else {
1273 RT_TRACE(rtlpriv, COMP_ERR, DBG_WARNING,
1274 "Set HW_VAR_MEDIA_STATUS: No such media status(%x).\n",
1275 mode);
1276 }
1277
1278 rtl_write_byte(rtlpriv, (MSR), bt_msr | mode);
1234 rtlpriv->cfg->ops->led_control(hw, ledaction); 1279 rtlpriv->cfg->ops->led_control(hw, ledaction);
1235 if ((bt_msr & MSR_MASK) == MSR_AP) 1280 if (mode == MSR_AP)
1236 rtl_write_byte(rtlpriv, REG_BCNTCFG + 1, 0x00); 1281 rtl_write_byte(rtlpriv, REG_BCNTCFG + 1, 0x00);
1237 else 1282 else
1238 rtl_write_byte(rtlpriv, REG_BCNTCFG + 1, 0x66); 1283 rtl_write_byte(rtlpriv, REG_BCNTCFG + 1, 0x66);
@@ -1242,13 +1287,12 @@ static int _rtl88ee_set_media_status(struct ieee80211_hw *hw,
1242void rtl88ee_set_check_bssid(struct ieee80211_hw *hw, bool check_bssid) 1287void rtl88ee_set_check_bssid(struct ieee80211_hw *hw, bool check_bssid)
1243{ 1288{
1244 struct rtl_priv *rtlpriv = rtl_priv(hw); 1289 struct rtl_priv *rtlpriv = rtl_priv(hw);
1245 u32 reg_rcr; 1290 struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
1291 u32 reg_rcr = rtlpci->receive_config;
1246 1292
1247 if (rtlpriv->psc.rfpwr_state != ERFON) 1293 if (rtlpriv->psc.rfpwr_state != ERFON)
1248 return; 1294 return;
1249 1295
1250 rtlpriv->cfg->ops->get_hw_reg(hw, HW_VAR_RCR, (u8 *)(&reg_rcr));
1251
1252 if (check_bssid == true) { 1296 if (check_bssid == true) {
1253 reg_rcr |= (RCR_CBSSID_DATA | RCR_CBSSID_BCN); 1297 reg_rcr |= (RCR_CBSSID_DATA | RCR_CBSSID_BCN);
1254 rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_RCR, 1298 rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_RCR,
@@ -1260,9 +1304,11 @@ void rtl88ee_set_check_bssid(struct ieee80211_hw *hw, bool check_bssid)
1260 rtlpriv->cfg->ops->set_hw_reg(hw, 1304 rtlpriv->cfg->ops->set_hw_reg(hw,
1261 HW_VAR_RCR, (u8 *)(&reg_rcr)); 1305 HW_VAR_RCR, (u8 *)(&reg_rcr));
1262 } 1306 }
1307
1263} 1308}
1264 1309
1265int rtl88ee_set_network_type(struct ieee80211_hw *hw, enum nl80211_iftype type) 1310int rtl88ee_set_network_type(struct ieee80211_hw *hw,
1311 enum nl80211_iftype type)
1266{ 1312{
1267 struct rtl_priv *rtlpriv = rtl_priv(hw); 1313 struct rtl_priv *rtlpriv = rtl_priv(hw);
1268 1314
@@ -1280,7 +1326,9 @@ int rtl88ee_set_network_type(struct ieee80211_hw *hw, enum nl80211_iftype type)
1280 return 0; 1326 return 0;
1281} 1327}
1282 1328
1283/* don't set REG_EDCA_BE_PARAM here because mac80211 will send pkt when scan */ 1329/* don't set REG_EDCA_BE_PARAM here
1330 * because mac80211 will send pkt when scan
1331 */
1284void rtl88ee_set_qos(struct ieee80211_hw *hw, int aci) 1332void rtl88ee_set_qos(struct ieee80211_hw *hw, int aci)
1285{ 1333{
1286 struct rtl_priv *rtlpriv = rtl_priv(hw); 1334 struct rtl_priv *rtlpriv = rtl_priv(hw);
@@ -1303,22 +1351,41 @@ void rtl88ee_set_qos(struct ieee80211_hw *hw, int aci)
1303 } 1351 }
1304} 1352}
1305 1353
1354static void rtl88ee_clear_interrupt(struct ieee80211_hw *hw)
1355{
1356 struct rtl_priv *rtlpriv = rtl_priv(hw);
1357 u32 tmp;
1358
1359 tmp = rtl_read_dword(rtlpriv, REG_HISR);
1360 rtl_write_dword(rtlpriv, REG_HISR, tmp);
1361
1362 tmp = rtl_read_dword(rtlpriv, REG_HISRE);
1363 rtl_write_dword(rtlpriv, REG_HISRE, tmp);
1364
1365 tmp = rtl_read_dword(rtlpriv, REG_HSISR);
1366 rtl_write_dword(rtlpriv, REG_HSISR, tmp);
1367}
1368
1306void rtl88ee_enable_interrupt(struct ieee80211_hw *hw) 1369void rtl88ee_enable_interrupt(struct ieee80211_hw *hw)
1307{ 1370{
1308 struct rtl_priv *rtlpriv = rtl_priv(hw); 1371 struct rtl_priv *rtlpriv = rtl_priv(hw);
1309 struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw)); 1372 struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
1310 1373
1311 rtl_write_dword(rtlpriv, REG_HIMR, rtlpci->irq_mask[0] & 0xFFFFFFFF); 1374 rtl88ee_clear_interrupt(hw);/*clear it here first*/
1312 rtl_write_dword(rtlpriv, REG_HIMRE, rtlpci->irq_mask[1] & 0xFFFFFFFF); 1375 rtl_write_dword(rtlpriv, REG_HIMR,
1376 rtlpci->irq_mask[0] & 0xFFFFFFFF);
1377 rtl_write_dword(rtlpriv, REG_HIMRE,
1378 rtlpci->irq_mask[1] & 0xFFFFFFFF);
1313 rtlpci->irq_enabled = true; 1379 rtlpci->irq_enabled = true;
1314 /* there are some C2H CMDs have been sent before system interrupt 1380 /* there are some C2H CMDs have been sent
1315 * is enabled, e.g., C2H, CPWM. 1381 * before system interrupt is enabled, e.g., C2H, CPWM.
1316 * So we need to clear all C2H events that FW has notified, otherwise 1382 * So we need to clear all C2H events that FW has notified,
1317 * FW won't schedule any commands anymore. 1383 * otherwise FW won't schedule any commands anymore.
1318 */ 1384 */
1319 rtl_write_byte(rtlpriv, REG_C2HEVT_CLEAR, 0); 1385 rtl_write_byte(rtlpriv, REG_C2HEVT_CLEAR, 0);
1320 /*enable system interrupt*/ 1386 /*enable system interrupt*/
1321 rtl_write_dword(rtlpriv, REG_HSIMR, rtlpci->sys_irq_mask & 0xFFFFFFFF); 1387 rtl_write_dword(rtlpriv, REG_HSIMR,
1388 rtlpci->sys_irq_mask & 0xFFFFFFFF);
1322} 1389}
1323 1390
1324void rtl88ee_disable_interrupt(struct ieee80211_hw *hw) 1391void rtl88ee_disable_interrupt(struct ieee80211_hw *hw)
@@ -1329,7 +1396,7 @@ void rtl88ee_disable_interrupt(struct ieee80211_hw *hw)
1329 rtl_write_dword(rtlpriv, REG_HIMR, IMR_DISABLED); 1396 rtl_write_dword(rtlpriv, REG_HIMR, IMR_DISABLED);
1330 rtl_write_dword(rtlpriv, REG_HIMRE, IMR_DISABLED); 1397 rtl_write_dword(rtlpriv, REG_HIMRE, IMR_DISABLED);
1331 rtlpci->irq_enabled = false; 1398 rtlpci->irq_enabled = false;
1332 synchronize_irq(rtlpci->pdev->irq); 1399 /*synchronize_irq(rtlpci->pdev->irq);*/
1333} 1400}
1334 1401
1335static void _rtl88ee_poweroff_adapter(struct ieee80211_hw *hw) 1402static void _rtl88ee_poweroff_adapter(struct ieee80211_hw *hw)
@@ -1353,9 +1420,9 @@ static void _rtl88ee_poweroff_adapter(struct ieee80211_hw *hw)
1353 } 1420 }
1354 rtl_write_byte(rtlpriv, REG_PCIE_CTRL_REG+1, 0xFF); 1421 rtl_write_byte(rtlpriv, REG_PCIE_CTRL_REG+1, 0xFF);
1355 1422
1356 rtl88_hal_pwrseqcmdparsing(rtlpriv, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, 1423 rtl_hal_pwrseqcmdparsing(rtlpriv, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK,
1357 PWR_INTF_PCI_MSK, 1424 PWR_INTF_PCI_MSK,
1358 RTL8188E_NIC_LPS_ENTER_FLOW); 1425 RTL8188E_NIC_LPS_ENTER_FLOW);
1359 1426
1360 rtl_write_byte(rtlpriv, REG_RF_CTRL, 0x00); 1427 rtl_write_byte(rtlpriv, REG_RF_CTRL, 0x00);
1361 1428
@@ -1369,8 +1436,8 @@ static void _rtl88ee_poweroff_adapter(struct ieee80211_hw *hw)
1369 u1b_tmp = rtl_read_byte(rtlpriv, REG_32K_CTRL); 1436 u1b_tmp = rtl_read_byte(rtlpriv, REG_32K_CTRL);
1370 rtl_write_byte(rtlpriv, REG_32K_CTRL, (u1b_tmp & (~BIT(0)))); 1437 rtl_write_byte(rtlpriv, REG_32K_CTRL, (u1b_tmp & (~BIT(0))));
1371 1438
1372 rtl88_hal_pwrseqcmdparsing(rtlpriv, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, 1439 rtl_hal_pwrseqcmdparsing(rtlpriv, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK,
1373 PWR_INTF_PCI_MSK, RTL8188E_NIC_DISABLE_FLOW); 1440 PWR_INTF_PCI_MSK, RTL8188E_NIC_DISABLE_FLOW);
1374 1441
1375 u1b_tmp = rtl_read_byte(rtlpriv, REG_RSV_CTRL+1); 1442 u1b_tmp = rtl_read_byte(rtlpriv, REG_RSV_CTRL+1);
1376 rtl_write_byte(rtlpriv, REG_RSV_CTRL+1, (u1b_tmp & (~BIT(3)))); 1443 rtl_write_byte(rtlpriv, REG_RSV_CTRL+1, (u1b_tmp & (~BIT(3))));
@@ -1427,6 +1494,7 @@ void rtl88ee_interrupt_recognized(struct ieee80211_hw *hw,
1427 1494
1428 *p_intb = rtl_read_dword(rtlpriv, REG_HISRE) & rtlpci->irq_mask[1]; 1495 *p_intb = rtl_read_dword(rtlpriv, REG_HISRE) & rtlpci->irq_mask[1];
1429 rtl_write_dword(rtlpriv, REG_HISRE, *p_intb); 1496 rtl_write_dword(rtlpriv, REG_HISRE, *p_intb);
1497
1430} 1498}
1431 1499
1432void rtl88ee_set_beacon_related_registers(struct ieee80211_hw *hw) 1500void rtl88ee_set_beacon_related_registers(struct ieee80211_hw *hw)
@@ -1472,233 +1540,241 @@ void rtl88ee_update_interrupt_mask(struct ieee80211_hw *hw,
1472 RT_TRACE(rtlpriv, COMP_INTR, DBG_LOUD, 1540 RT_TRACE(rtlpriv, COMP_INTR, DBG_LOUD,
1473 "add_msr:%x, rm_msr:%x\n", add_msr, rm_msr); 1541 "add_msr:%x, rm_msr:%x\n", add_msr, rm_msr);
1474 1542
1475 rtl88ee_disable_interrupt(hw);
1476 if (add_msr) 1543 if (add_msr)
1477 rtlpci->irq_mask[0] |= add_msr; 1544 rtlpci->irq_mask[0] |= add_msr;
1478 if (rm_msr) 1545 if (rm_msr)
1479 rtlpci->irq_mask[0] &= (~rm_msr); 1546 rtlpci->irq_mask[0] &= (~rm_msr);
1547 rtl88ee_disable_interrupt(hw);
1480 rtl88ee_enable_interrupt(hw); 1548 rtl88ee_enable_interrupt(hw);
1481} 1549}
1482 1550
1483static inline u8 get_chnl_group(u8 chnl) 1551static u8 _rtl88e_get_chnl_group(u8 chnl)
1484{ 1552{
1485 u8 group; 1553 u8 group = 0;
1486 1554
1487 group = chnl / 3; 1555 if (chnl < 3)
1488 if (chnl == 14) 1556 group = 0;
1557 else if (chnl < 6)
1558 group = 1;
1559 else if (chnl < 9)
1560 group = 2;
1561 else if (chnl < 12)
1562 group = 3;
1563 else if (chnl < 14)
1564 group = 4;
1565 else if (chnl == 14)
1489 group = 5; 1566 group = 5;
1490 1567
1491 return group; 1568 return group;
1492} 1569}
1493 1570
1494static void set_diff0_2g(struct txpower_info_2g *pwr2g, u8 *hwinfo, u32 path, 1571static void set_24g_base(struct txpower_info_2g *pwrinfo24g, u32 rfpath)
1495 u32 i, u32 eadr)
1496{ 1572{
1497 pwr2g->bw40_diff[path][i] = 0; 1573 int group, txcnt;
1498 if (hwinfo[eadr] == 0xFF) {
1499 pwr2g->bw20_diff[path][i] = 0x02;
1500 } else {
1501 pwr2g->bw20_diff[path][i] = (hwinfo[eadr]&0xf0)>>4;
1502 /*bit sign number to 8 bit sign number*/
1503 if (pwr2g->bw20_diff[path][i] & BIT(3))
1504 pwr2g->bw20_diff[path][i] |= 0xF0;
1505 }
1506 1574
1507 if (hwinfo[eadr] == 0xFF) { 1575 for (group = 0 ; group < MAX_CHNL_GROUP_24G; group++) {
1508 pwr2g->ofdm_diff[path][i] = 0x04; 1576 pwrinfo24g->index_cck_base[rfpath][group] = 0x2D;
1509 } else { 1577 pwrinfo24g->index_bw40_base[rfpath][group] = 0x2D;
1510 pwr2g->ofdm_diff[path][i] = (hwinfo[eadr] & 0x0f);
1511 /*bit sign number to 8 bit sign number*/
1512 if (pwr2g->ofdm_diff[path][i] & BIT(3))
1513 pwr2g->ofdm_diff[path][i] |= 0xF0;
1514 }
1515 pwr2g->cck_diff[path][i] = 0;
1516}
1517
1518static void set_diff0_5g(struct txpower_info_5g *pwr5g, u8 *hwinfo, u32 path,
1519 u32 i, u32 eadr)
1520{
1521 pwr5g->bw40_diff[path][i] = 0;
1522 if (hwinfo[eadr] == 0xFF) {
1523 pwr5g->bw20_diff[path][i] = 0;
1524 } else {
1525 pwr5g->bw20_diff[path][i] = (hwinfo[eadr]&0xf0)>>4;
1526 /*bit sign number to 8 bit sign number*/
1527 if (pwr5g->bw20_diff[path][i] & BIT(3))
1528 pwr5g->bw20_diff[path][i] |= 0xF0;
1529 } 1578 }
1530 1579 for (txcnt = 0; txcnt < MAX_TX_COUNT; txcnt++) {
1531 if (hwinfo[eadr] == 0xFF) { 1580 if (txcnt == 0) {
1532 pwr5g->ofdm_diff[path][i] = 0x04; 1581 pwrinfo24g->bw20_diff[rfpath][0] = 0x02;
1533 } else { 1582 pwrinfo24g->ofdm_diff[rfpath][0] = 0x04;
1534 pwr5g->ofdm_diff[path][i] = (hwinfo[eadr] & 0x0f); 1583 } else {
1535 /*bit sign number to 8 bit sign number*/ 1584 pwrinfo24g->bw20_diff[rfpath][txcnt] = 0xFE;
1536 if (pwr5g->ofdm_diff[path][i] & BIT(3)) 1585 pwrinfo24g->bw40_diff[rfpath][txcnt] = 0xFE;
1537 pwr5g->ofdm_diff[path][i] |= 0xF0; 1586 pwrinfo24g->cck_diff[rfpath][txcnt] = 0xFE;
1538 } 1587 pwrinfo24g->ofdm_diff[rfpath][txcnt] = 0xFE;
1539} 1588 }
1540
1541static void set_diff1_2g(struct txpower_info_2g *pwr2g, u8 *hwinfo, u32 path,
1542 u32 i, u32 eadr)
1543{
1544 if (hwinfo[eadr] == 0xFF) {
1545 pwr2g->bw40_diff[path][i] = 0xFE;
1546 } else {
1547 pwr2g->bw40_diff[path][i] = (hwinfo[eadr]&0xf0)>>4;
1548 if (pwr2g->bw40_diff[path][i] & BIT(3))
1549 pwr2g->bw40_diff[path][i] |= 0xF0;
1550 }
1551
1552 if (hwinfo[eadr] == 0xFF) {
1553 pwr2g->bw20_diff[path][i] = 0xFE;
1554 } else {
1555 pwr2g->bw20_diff[path][i] = (hwinfo[eadr]&0x0f);
1556 if (pwr2g->bw20_diff[path][i] & BIT(3))
1557 pwr2g->bw20_diff[path][i] |= 0xF0;
1558 }
1559}
1560
1561static void set_diff1_5g(struct txpower_info_5g *pwr5g, u8 *hwinfo, u32 path,
1562 u32 i, u32 eadr)
1563{
1564 if (hwinfo[eadr] == 0xFF) {
1565 pwr5g->bw40_diff[path][i] = 0xFE;
1566 } else {
1567 pwr5g->bw40_diff[path][i] = (hwinfo[eadr]&0xf0)>>4;
1568 if (pwr5g->bw40_diff[path][i] & BIT(3))
1569 pwr5g->bw40_diff[path][i] |= 0xF0;
1570 }
1571
1572 if (hwinfo[eadr] == 0xFF) {
1573 pwr5g->bw20_diff[path][i] = 0xFE;
1574 } else {
1575 pwr5g->bw20_diff[path][i] = (hwinfo[eadr] & 0x0f);
1576 if (pwr5g->bw20_diff[path][i] & BIT(3))
1577 pwr5g->bw20_diff[path][i] |= 0xF0;
1578 }
1579}
1580
1581static void set_diff2_2g(struct txpower_info_2g *pwr2g, u8 *hwinfo, u32 path,
1582 u32 i, u32 eadr)
1583{
1584 if (hwinfo[eadr] == 0xFF) {
1585 pwr2g->ofdm_diff[path][i] = 0xFE;
1586 } else {
1587 pwr2g->ofdm_diff[path][i] = (hwinfo[eadr]&0xf0)>>4;
1588 if (pwr2g->ofdm_diff[path][i] & BIT(3))
1589 pwr2g->ofdm_diff[path][i] |= 0xF0;
1590 }
1591
1592 if (hwinfo[eadr] == 0xFF) {
1593 pwr2g->cck_diff[path][i] = 0xFE;
1594 } else {
1595 pwr2g->cck_diff[path][i] = (hwinfo[eadr]&0x0f);
1596 if (pwr2g->cck_diff[path][i] & BIT(3))
1597 pwr2g->cck_diff[path][i] |= 0xF0;
1598 } 1589 }
1599} 1590}
1600 1591
1601static void _rtl8188e_read_power_value_fromprom(struct ieee80211_hw *hw, 1592static void read_power_value_fromprom(struct ieee80211_hw *hw,
1602 struct txpower_info_2g *pwr2g, 1593 struct txpower_info_2g *pwrinfo24g,
1603 struct txpower_info_5g *pwr5g, 1594 struct txpower_info_5g *pwrinfo5g,
1604 bool autoload_fail, 1595 bool autoload_fail, u8 *hwinfo)
1605 u8 *hwinfo)
1606{ 1596{
1607 struct rtl_priv *rtlpriv = rtl_priv(hw); 1597 struct rtl_priv *rtlpriv = rtl_priv(hw);
1608 u32 path, eadr = EEPROM_TX_PWR_INX, i; 1598 u32 rfpath, eeaddr = EEPROM_TX_PWR_INX, group, txcnt = 0;
1609 1599
1610 RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, 1600 RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
1611 "hal_ReadPowerValueFromPROM88E(): PROMContent[0x%x]= 0x%x\n", 1601 "hal_ReadPowerValueFromPROM88E():PROMContent[0x%x]=0x%x\n",
1612 (eadr+1), hwinfo[eadr+1]); 1602 (eeaddr+1), hwinfo[eeaddr+1]);
1613 if (0xFF == hwinfo[eadr+1]) 1603 if (0xFF == hwinfo[eeaddr+1]) /*YJ,add,120316*/
1614 autoload_fail = true; 1604 autoload_fail = true;
1615 1605
1616 if (autoload_fail) { 1606 if (autoload_fail) {
1617 RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, 1607 RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
1618 "auto load fail : Use Default value!\n"); 1608 "auto load fail : Use Default value!\n");
1619 for (path = 0; path < MAX_RF_PATH; path++) { 1609 for (rfpath = 0 ; rfpath < MAX_RF_PATH ; rfpath++) {
1620 /* 2.4G default value */ 1610 /* 2.4G default value */
1621 for (i = 0; i < MAX_CHNL_GROUP_24G; i++) { 1611 set_24g_base(pwrinfo24g, rfpath);
1622 pwr2g->index_cck_base[path][i] = 0x2D;
1623 pwr2g->index_bw40_base[path][i] = 0x2D;
1624 }
1625 for (i = 0; i < MAX_TX_COUNT; i++) {
1626 if (i == 0) {
1627 pwr2g->bw20_diff[path][0] = 0x02;
1628 pwr2g->ofdm_diff[path][0] = 0x04;
1629 } else {
1630 pwr2g->bw20_diff[path][i] = 0xFE;
1631 pwr2g->bw40_diff[path][i] = 0xFE;
1632 pwr2g->cck_diff[path][i] = 0xFE;
1633 pwr2g->ofdm_diff[path][i] = 0xFE;
1634 }
1635 }
1636 } 1612 }
1637 return; 1613 return;
1638 } 1614 }
1639 1615
1640 for (path = 0; path < MAX_RF_PATH; path++) { 1616 for (rfpath = 0 ; rfpath < MAX_RF_PATH ; rfpath++) {
1641 /*2.4G default value*/ 1617 /*2.4G default value*/
1642 for (i = 0; i < MAX_CHNL_GROUP_24G; i++) { 1618 for (group = 0 ; group < MAX_CHNL_GROUP_24G; group++) {
1643 pwr2g->index_cck_base[path][i] = hwinfo[eadr++]; 1619 pwrinfo24g->index_cck_base[rfpath][group] =
1644 if (pwr2g->index_cck_base[path][i] == 0xFF) 1620 hwinfo[eeaddr++];
1645 pwr2g->index_cck_base[path][i] = 0x2D; 1621 if (pwrinfo24g->index_cck_base[rfpath][group] == 0xFF)
1622 pwrinfo24g->index_cck_base[rfpath][group] =
1623 0x2D;
1624 }
1625 for (group = 0 ; group < MAX_CHNL_GROUP_24G-1; group++) {
1626 pwrinfo24g->index_bw40_base[rfpath][group] =
1627 hwinfo[eeaddr++];
1628 if (pwrinfo24g->index_bw40_base[rfpath][group] == 0xFF)
1629 pwrinfo24g->index_bw40_base[rfpath][group] =
1630 0x2D;
1646 } 1631 }
1647 for (i = 0; i < MAX_CHNL_GROUP_24G; i++) { 1632 pwrinfo24g->bw40_diff[rfpath][0] = 0;
1648 pwr2g->index_bw40_base[path][i] = hwinfo[eadr++]; 1633 if (hwinfo[eeaddr] == 0xFF) {
1649 if (pwr2g->index_bw40_base[path][i] == 0xFF) 1634 pwrinfo24g->bw20_diff[rfpath][0] = 0x02;
1650 pwr2g->index_bw40_base[path][i] = 0x2D; 1635 } else {
1636 pwrinfo24g->bw20_diff[rfpath][0] =
1637 (hwinfo[eeaddr]&0xf0)>>4;
1638 /*bit sign number to 8 bit sign number*/
1639 if (pwrinfo24g->bw20_diff[rfpath][0] & BIT(3))
1640 pwrinfo24g->bw20_diff[rfpath][0] |= 0xF0;
1641 }
1642
1643 if (hwinfo[eeaddr] == 0xFF) {
1644 pwrinfo24g->ofdm_diff[rfpath][0] = 0x04;
1645 } else {
1646 pwrinfo24g->ofdm_diff[rfpath][0] =
1647 (hwinfo[eeaddr]&0x0f);
1648 /*bit sign number to 8 bit sign number*/
1649 if (pwrinfo24g->ofdm_diff[rfpath][0] & BIT(3))
1650 pwrinfo24g->ofdm_diff[rfpath][0] |= 0xF0;
1651 } 1651 }
1652 for (i = 0; i < MAX_TX_COUNT; i++) { 1652 pwrinfo24g->cck_diff[rfpath][0] = 0;
1653 if (i == 0) { 1653 eeaddr++;
1654 set_diff0_2g(pwr2g, hwinfo, path, i, eadr); 1654 for (txcnt = 1; txcnt < MAX_TX_COUNT; txcnt++) {
1655 eadr++; 1655 if (hwinfo[eeaddr] == 0xFF) {
1656 pwrinfo24g->bw40_diff[rfpath][txcnt] = 0xFE;
1657 } else {
1658 pwrinfo24g->bw40_diff[rfpath][txcnt] =
1659 (hwinfo[eeaddr]&0xf0)>>4;
1660 if (pwrinfo24g->bw40_diff[rfpath][txcnt] &
1661 BIT(3))
1662 pwrinfo24g->bw40_diff[rfpath][txcnt] |=
1663 0xF0;
1664 }
1665
1666 if (hwinfo[eeaddr] == 0xFF) {
1667 pwrinfo24g->bw20_diff[rfpath][txcnt] =
1668 0xFE;
1656 } else { 1669 } else {
1657 set_diff1_2g(pwr2g, hwinfo, path, i, eadr); 1670 pwrinfo24g->bw20_diff[rfpath][txcnt] =
1658 eadr++; 1671 (hwinfo[eeaddr]&0x0f);
1672 if (pwrinfo24g->bw20_diff[rfpath][txcnt] &
1673 BIT(3))
1674 pwrinfo24g->bw20_diff[rfpath][txcnt] |=
1675 0xF0;
1676 }
1677 eeaddr++;
1659 1678
1660 set_diff2_2g(pwr2g, hwinfo, path, i, eadr); 1679 if (hwinfo[eeaddr] == 0xFF) {
1661 eadr++; 1680 pwrinfo24g->ofdm_diff[rfpath][txcnt] = 0xFE;
1681 } else {
1682 pwrinfo24g->ofdm_diff[rfpath][txcnt] =
1683 (hwinfo[eeaddr]&0xf0)>>4;
1684 if (pwrinfo24g->ofdm_diff[rfpath][txcnt] &
1685 BIT(3))
1686 pwrinfo24g->ofdm_diff[rfpath][txcnt] |=
1687 0xF0;
1662 } 1688 }
1689
1690 if (hwinfo[eeaddr] == 0xFF) {
1691 pwrinfo24g->cck_diff[rfpath][txcnt] = 0xFE;
1692 } else {
1693 pwrinfo24g->cck_diff[rfpath][txcnt] =
1694 (hwinfo[eeaddr]&0x0f);
1695 if (pwrinfo24g->cck_diff[rfpath][txcnt] &
1696 BIT(3))
1697 pwrinfo24g->cck_diff[rfpath][txcnt] |=
1698 0xF0;
1699 }
1700 eeaddr++;
1663 } 1701 }
1664 1702
1665 /*5G default value*/ 1703 /*5G default value*/
1666 for (i = 0; i < MAX_CHNL_GROUP_5G; i++) { 1704 for (group = 0 ; group < MAX_CHNL_GROUP_5G; group++) {
1667 pwr5g->index_bw40_base[path][i] = hwinfo[eadr++]; 1705 pwrinfo5g->index_bw40_base[rfpath][group] =
1668 if (pwr5g->index_bw40_base[path][i] == 0xFF) 1706 hwinfo[eeaddr++];
1669 pwr5g->index_bw40_base[path][i] = 0xFE; 1707 if (pwrinfo5g->index_bw40_base[rfpath][group] == 0xFF)
1708 pwrinfo5g->index_bw40_base[rfpath][group] =
1709 0xFE;
1670 } 1710 }
1671 1711
1672 for (i = 0; i < MAX_TX_COUNT; i++) { 1712 pwrinfo5g->bw40_diff[rfpath][0] = 0;
1673 if (i == 0) { 1713
1674 set_diff0_5g(pwr5g, hwinfo, path, i, eadr); 1714 if (hwinfo[eeaddr] == 0xFF) {
1675 eadr++; 1715 pwrinfo5g->bw20_diff[rfpath][0] = 0;
1716 } else {
1717 pwrinfo5g->bw20_diff[rfpath][0] =
1718 (hwinfo[eeaddr]&0xf0)>>4;
1719 if (pwrinfo5g->bw20_diff[rfpath][0] & BIT(3))
1720 pwrinfo5g->bw20_diff[rfpath][0] |= 0xF0;
1721 }
1722
1723 if (hwinfo[eeaddr] == 0xFF) {
1724 pwrinfo5g->ofdm_diff[rfpath][0] = 0x04;
1725 } else {
1726 pwrinfo5g->ofdm_diff[rfpath][0] = (hwinfo[eeaddr]&0x0f);
1727 if (pwrinfo5g->ofdm_diff[rfpath][0] & BIT(3))
1728 pwrinfo5g->ofdm_diff[rfpath][0] |= 0xF0;
1729 }
1730 eeaddr++;
1731 for (txcnt = 1; txcnt < MAX_TX_COUNT; txcnt++) {
1732 if (hwinfo[eeaddr] == 0xFF) {
1733 pwrinfo5g->bw40_diff[rfpath][txcnt] = 0xFE;
1734 } else {
1735 pwrinfo5g->bw40_diff[rfpath][txcnt] =
1736 (hwinfo[eeaddr]&0xf0)>>4;
1737 if (pwrinfo5g->bw40_diff[rfpath][txcnt] &
1738 BIT(3))
1739 pwrinfo5g->bw40_diff[rfpath][txcnt] |=
1740 0xF0;
1741 }
1742
1743 if (hwinfo[eeaddr] == 0xFF) {
1744 pwrinfo5g->bw20_diff[rfpath][txcnt] = 0xFE;
1676 } else { 1745 } else {
1677 set_diff1_5g(pwr5g, hwinfo, path, i, eadr); 1746 pwrinfo5g->bw20_diff[rfpath][txcnt] =
1678 eadr++; 1747 (hwinfo[eeaddr]&0x0f);
1748 if (pwrinfo5g->bw20_diff[rfpath][txcnt] &
1749 BIT(3))
1750 pwrinfo5g->bw20_diff[rfpath][txcnt] |=
1751 0xF0;
1679 } 1752 }
1753 eeaddr++;
1680 } 1754 }
1681 1755
1682 if (hwinfo[eadr] == 0xFF) { 1756 if (hwinfo[eeaddr] == 0xFF) {
1683 pwr5g->ofdm_diff[path][1] = 0xFE; 1757 pwrinfo5g->ofdm_diff[rfpath][1] = 0xFE;
1684 pwr5g->ofdm_diff[path][2] = 0xFE; 1758 pwrinfo5g->ofdm_diff[rfpath][2] = 0xFE;
1685 } else { 1759 } else {
1686 pwr5g->ofdm_diff[path][1] = (hwinfo[eadr] & 0xf0) >> 4; 1760 pwrinfo5g->ofdm_diff[rfpath][1] =
1687 pwr5g->ofdm_diff[path][2] = (hwinfo[eadr] & 0x0f); 1761 (hwinfo[eeaddr]&0xf0)>>4;
1762 pwrinfo5g->ofdm_diff[rfpath][2] =
1763 (hwinfo[eeaddr]&0x0f);
1688 } 1764 }
1689 eadr++; 1765 eeaddr++;
1690 1766
1691 if (hwinfo[eadr] == 0xFF) 1767 if (hwinfo[eeaddr] == 0xFF)
1692 pwr5g->ofdm_diff[path][3] = 0xFE; 1768 pwrinfo5g->ofdm_diff[rfpath][3] = 0xFE;
1693 else 1769 else
1694 pwr5g->ofdm_diff[path][3] = (hwinfo[eadr]&0x0f); 1770 pwrinfo5g->ofdm_diff[rfpath][3] = (hwinfo[eeaddr]&0x0f);
1695 eadr++; 1771 eeaddr++;
1696 1772
1697 for (i = 1; i < MAX_TX_COUNT; i++) { 1773 for (txcnt = 1; txcnt < MAX_TX_COUNT; txcnt++) {
1698 if (pwr5g->ofdm_diff[path][i] == 0xFF) 1774 if (pwrinfo5g->ofdm_diff[rfpath][txcnt] == 0xFF)
1699 pwr5g->ofdm_diff[path][i] = 0xFE; 1775 pwrinfo5g->ofdm_diff[rfpath][txcnt] = 0xFE;
1700 else if (pwr5g->ofdm_diff[path][i] & BIT(3)) 1776 else if (pwrinfo5g->ofdm_diff[rfpath][txcnt] & BIT(3))
1701 pwr5g->ofdm_diff[path][i] |= 0xF0; 1777 pwrinfo5g->ofdm_diff[rfpath][txcnt] |= 0xF0;
1702 } 1778 }
1703 } 1779 }
1704} 1780}
@@ -1713,41 +1789,36 @@ static void _rtl88ee_read_txpower_info_from_hwpg(struct ieee80211_hw *hw,
1713 struct txpower_info_5g pwrinfo5g; 1789 struct txpower_info_5g pwrinfo5g;
1714 u8 rf_path, index; 1790 u8 rf_path, index;
1715 u8 i; 1791 u8 i;
1716 int jj = EEPROM_RF_BOARD_OPTION_88E;
1717 int kk = EEPROM_THERMAL_METER_88E;
1718 1792
1719 _rtl8188e_read_power_value_fromprom(hw, &pwrinfo24g, &pwrinfo5g, 1793 read_power_value_fromprom(hw, &pwrinfo24g,
1720 autoload_fail, hwinfo); 1794 &pwrinfo5g, autoload_fail, hwinfo);
1721 1795
1722 for (rf_path = 0; rf_path < 2; rf_path++) { 1796 for (rf_path = 0; rf_path < 2; rf_path++) {
1723 for (i = 0; i < 14; i++) { 1797 for (i = 0; i < 14; i++) {
1724 index = get_chnl_group(i+1); 1798 index = _rtl88e_get_chnl_group(i+1);
1725 1799
1726 rtlefuse->txpwrlevel_cck[rf_path][i] = 1800 rtlefuse->txpwrlevel_cck[rf_path][i] =
1727 pwrinfo24g.index_cck_base[rf_path][index]; 1801 pwrinfo24g.index_cck_base[rf_path][index];
1728 if (i == 13) 1802 rtlefuse->txpwrlevel_ht40_1s[rf_path][i] =
1729 rtlefuse->txpwrlevel_ht40_1s[rf_path][i] = 1803 pwrinfo24g.index_bw40_base[rf_path][index];
1730 pwrinfo24g.index_bw40_base[rf_path][4];
1731 else
1732 rtlefuse->txpwrlevel_ht40_1s[rf_path][i] =
1733 pwrinfo24g.index_bw40_base[rf_path][index];
1734 rtlefuse->txpwr_ht20diff[rf_path][i] = 1804 rtlefuse->txpwr_ht20diff[rf_path][i] =
1735 pwrinfo24g.bw20_diff[rf_path][0]; 1805 pwrinfo24g.bw20_diff[rf_path][0];
1736 rtlefuse->txpwr_legacyhtdiff[rf_path][i] = 1806 rtlefuse->txpwr_legacyhtdiff[rf_path][i] =
1737 pwrinfo24g.ofdm_diff[rf_path][0]; 1807 pwrinfo24g.ofdm_diff[rf_path][0];
1738 } 1808 }
1739 1809
1740 for (i = 0; i < 14; i++) { 1810 for (i = 0; i < 14; i++) {
1741 RTPRINT(rtlpriv, FINIT, INIT_TXPOWER, 1811 RTPRINT(rtlpriv, FINIT, INIT_TXPOWER,
1742 "RF(%d)-Ch(%d) [CCK / HT40_1S ] = " 1812 "RF(%d)-Ch(%d) [CCK / HT40_1S ] = [0x%x / 0x%x ]\n",
1743 "[0x%x / 0x%x ]\n", rf_path, i, 1813 rf_path, i,
1744 rtlefuse->txpwrlevel_cck[rf_path][i], 1814 rtlefuse->txpwrlevel_cck[rf_path][i],
1745 rtlefuse->txpwrlevel_ht40_1s[rf_path][i]); 1815 rtlefuse->txpwrlevel_ht40_1s[rf_path][i]);
1746 } 1816 }
1747 } 1817 }
1748 1818
1749 if (!autoload_fail) 1819 if (!autoload_fail)
1750 rtlefuse->eeprom_thermalmeter = hwinfo[kk]; 1820 rtlefuse->eeprom_thermalmeter =
1821 hwinfo[EEPROM_THERMAL_METER_88E];
1751 else 1822 else
1752 rtlefuse->eeprom_thermalmeter = EEPROM_DEFAULT_THERMALMETER; 1823 rtlefuse->eeprom_thermalmeter = EEPROM_DEFAULT_THERMALMETER;
1753 1824
@@ -1761,8 +1832,9 @@ static void _rtl88ee_read_txpower_info_from_hwpg(struct ieee80211_hw *hw,
1761 "thermalmeter = 0x%x\n", rtlefuse->eeprom_thermalmeter); 1832 "thermalmeter = 0x%x\n", rtlefuse->eeprom_thermalmeter);
1762 1833
1763 if (!autoload_fail) { 1834 if (!autoload_fail) {
1764 rtlefuse->eeprom_regulatory = hwinfo[jj] & 0x07;/*bit0~2*/ 1835 rtlefuse->eeprom_regulatory =
1765 if (hwinfo[jj] == 0xFF) 1836 hwinfo[EEPROM_RF_BOARD_OPTION_88E] & 0x07;/*bit0~2*/
1837 if (hwinfo[EEPROM_RF_BOARD_OPTION_88E] == 0xFF)
1766 rtlefuse->eeprom_regulatory = 0; 1838 rtlefuse->eeprom_regulatory = 0;
1767 } else { 1839 } else {
1768 rtlefuse->eeprom_regulatory = 0; 1840 rtlefuse->eeprom_regulatory = 0;
@@ -1776,12 +1848,9 @@ static void _rtl88ee_read_adapter_info(struct ieee80211_hw *hw)
1776 struct rtl_priv *rtlpriv = rtl_priv(hw); 1848 struct rtl_priv *rtlpriv = rtl_priv(hw);
1777 struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw)); 1849 struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw));
1778 struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw)); 1850 struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
1779 struct rtl_pci_priv *rppriv = rtl_pcipriv(hw);
1780 u16 i, usvalue; 1851 u16 i, usvalue;
1781 u8 hwinfo[HWSET_MAX_SIZE]; 1852 u8 hwinfo[HWSET_MAX_SIZE];
1782 u16 eeprom_id; 1853 u16 eeprom_id;
1783 int jj = EEPROM_RF_BOARD_OPTION_88E;
1784 int kk = EEPROM_RF_FEATURE_OPTION_88E;
1785 1854
1786 if (rtlefuse->epromtype == EEPROM_BOOT_EFUSE) { 1855 if (rtlefuse->epromtype == EEPROM_BOOT_EFUSE) {
1787 rtl_efuse_shadow_map_update(hw); 1856 rtl_efuse_shadow_map_update(hw);
@@ -1791,9 +1860,14 @@ static void _rtl88ee_read_adapter_info(struct ieee80211_hw *hw)
1791 } else if (rtlefuse->epromtype == EEPROM_93C46) { 1860 } else if (rtlefuse->epromtype == EEPROM_93C46) {
1792 RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, 1861 RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
1793 "RTL819X Not boot from eeprom, check it !!"); 1862 "RTL819X Not boot from eeprom, check it !!");
1863 return;
1864 } else {
1865 RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
1866 "boot from neither eeprom nor efuse, check it !!");
1867 return;
1794 } 1868 }
1795 1869
1796 RT_PRINT_DATA(rtlpriv, COMP_INIT, DBG_DMESG, ("MAP\n"), 1870 RT_PRINT_DATA(rtlpriv, COMP_INIT, DBG_DMESG, "MAP\n",
1797 hwinfo, HWSET_MAX_SIZE); 1871 hwinfo, HWSET_MAX_SIZE);
1798 1872
1799 eeprom_id = *((u16 *)&hwinfo[0]); 1873 eeprom_id = *((u16 *)&hwinfo[0]);
@@ -1826,7 +1900,7 @@ static void _rtl88ee_read_adapter_info(struct ieee80211_hw *hw)
1826 /*customer ID*/ 1900 /*customer ID*/
1827 rtlefuse->eeprom_oemid = hwinfo[EEPROM_CUSTOMER_ID]; 1901 rtlefuse->eeprom_oemid = hwinfo[EEPROM_CUSTOMER_ID];
1828 if (rtlefuse->eeprom_oemid == 0xFF) 1902 if (rtlefuse->eeprom_oemid == 0xFF)
1829 rtlefuse->eeprom_oemid = 0; 1903 rtlefuse->eeprom_oemid = 0;
1830 1904
1831 RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, 1905 RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
1832 "EEPROM Customer ID: 0x%2x\n", rtlefuse->eeprom_oemid); 1906 "EEPROM Customer ID: 0x%2x\n", rtlefuse->eeprom_oemid);
@@ -1845,34 +1919,40 @@ static void _rtl88ee_read_adapter_info(struct ieee80211_hw *hw)
1845 /* set channel paln to world wide 13 */ 1919 /* set channel paln to world wide 13 */
1846 rtlefuse->channel_plan = COUNTRY_CODE_WORLD_WIDE_13; 1920 rtlefuse->channel_plan = COUNTRY_CODE_WORLD_WIDE_13;
1847 /*tx power*/ 1921 /*tx power*/
1848 _rtl88ee_read_txpower_info_from_hwpg(hw, rtlefuse->autoload_failflag, 1922 _rtl88ee_read_txpower_info_from_hwpg(hw,
1923 rtlefuse->autoload_failflag,
1849 hwinfo); 1924 hwinfo);
1850 rtlefuse->txpwr_fromeprom = true; 1925 rtlefuse->txpwr_fromeprom = true;
1851 1926
1852 rtl8188ee_read_bt_coexist_info_from_hwpg(hw, 1927 rtl8188ee_read_bt_coexist_info_from_hwpg(hw,
1853 rtlefuse->autoload_failflag, 1928 rtlefuse->autoload_failflag,
1854 hwinfo); 1929 hwinfo);
1930
1855 /*board type*/ 1931 /*board type*/
1856 rtlefuse->board_type = (hwinfo[jj] & 0xE0) >> 5; 1932 rtlefuse->board_type =
1933 ((hwinfo[EEPROM_RF_BOARD_OPTION_88E] & 0xE0) >> 5);
1934 rtlhal->board_type = rtlefuse->board_type;
1857 /*Wake on wlan*/ 1935 /*Wake on wlan*/
1858 rtlefuse->wowlan_enable = ((hwinfo[kk] & 0x40) >> 6); 1936 rtlefuse->wowlan_enable =
1937 ((hwinfo[EEPROM_RF_FEATURE_OPTION_88E] & 0x40) >> 6);
1859 /*parse xtal*/ 1938 /*parse xtal*/
1860 rtlefuse->crystalcap = hwinfo[EEPROM_XTAL_88E]; 1939 rtlefuse->crystalcap = hwinfo[EEPROM_XTAL_88E];
1861 if (hwinfo[EEPROM_XTAL_88E]) 1940 if (hwinfo[EEPROM_XTAL_88E])
1862 rtlefuse->crystalcap = 0x20; 1941 rtlefuse->crystalcap = 0x20;
1863 /*antenna diversity*/ 1942 /*antenna diversity*/
1864 rtlefuse->antenna_div_cfg = (hwinfo[jj] & 0x18) >> 3; 1943 rtlefuse->antenna_div_cfg =
1865 if (hwinfo[jj] == 0xFF) 1944 (hwinfo[EEPROM_RF_BOARD_OPTION_88E] & 0x18) >> 3;
1945 if (hwinfo[EEPROM_RF_BOARD_OPTION_88E] == 0xFF)
1866 rtlefuse->antenna_div_cfg = 0; 1946 rtlefuse->antenna_div_cfg = 0;
1867 if (rppriv->bt_coexist.eeprom_bt_coexist != 0 && 1947 if (rtlpriv->btcoexist.eeprom_bt_coexist != 0 &&
1868 rppriv->bt_coexist.eeprom_bt_ant_num == ANT_X1) 1948 rtlpriv->btcoexist.eeprom_bt_ant_num == ANT_X1)
1869 rtlefuse->antenna_div_cfg = 0; 1949 rtlefuse->antenna_div_cfg = 0;
1870 1950
1871 rtlefuse->antenna_div_type = hwinfo[EEPROM_RF_ANTENNA_OPT_88E]; 1951 rtlefuse->antenna_div_type = hwinfo[EEPROM_RF_ANTENNA_OPT_88E];
1872 if (rtlefuse->antenna_div_type == 0xFF) 1952 if (rtlefuse->antenna_div_type == 0xFF)
1873 rtlefuse->antenna_div_type = 0x01; 1953 rtlefuse->antenna_div_type = 0x01;
1874 if (rtlefuse->antenna_div_type == CG_TRX_HW_ANTDIV || 1954 if (rtlefuse->antenna_div_type == CG_TRX_HW_ANTDIV ||
1875 rtlefuse->antenna_div_type == CGCS_RX_HW_ANTDIV) 1955 rtlefuse->antenna_div_type == CGCS_RX_HW_ANTDIV)
1876 rtlefuse->antenna_div_cfg = 1; 1956 rtlefuse->antenna_div_cfg = 1;
1877 1957
1878 if (rtlhal->oem_id == RT_CID_DEFAULT) { 1958 if (rtlhal->oem_id == RT_CID_DEFAULT) {
@@ -1882,12 +1962,12 @@ static void _rtl88ee_read_adapter_info(struct ieee80211_hw *hw)
1882 if (rtlefuse->eeprom_svid == 0x1025) { 1962 if (rtlefuse->eeprom_svid == 0x1025) {
1883 rtlhal->oem_id = RT_CID_819X_ACER; 1963 rtlhal->oem_id = RT_CID_819X_ACER;
1884 } else if ((rtlefuse->eeprom_svid == 0x10EC && 1964 } else if ((rtlefuse->eeprom_svid == 0x10EC &&
1885 rtlefuse->eeprom_smid == 0x0179) || 1965 rtlefuse->eeprom_smid == 0x0179) ||
1886 (rtlefuse->eeprom_svid == 0x17AA && 1966 (rtlefuse->eeprom_svid == 0x17AA &&
1887 rtlefuse->eeprom_smid == 0x0179)) { 1967 rtlefuse->eeprom_smid == 0x0179)) {
1888 rtlhal->oem_id = RT_CID_819X_LENOVO; 1968 rtlhal->oem_id = RT_CID_819X_LENOVO;
1889 } else if (rtlefuse->eeprom_svid == 0x103c && 1969 } else if (rtlefuse->eeprom_svid == 0x103c &&
1890 rtlefuse->eeprom_smid == 0x197d) { 1970 rtlefuse->eeprom_smid == 0x197d) {
1891 rtlhal->oem_id = RT_CID_819X_HP; 1971 rtlhal->oem_id = RT_CID_819X_HP;
1892 } else { 1972 } else {
1893 rtlhal->oem_id = RT_CID_DEFAULT; 1973 rtlhal->oem_id = RT_CID_DEFAULT;
@@ -1906,6 +1986,7 @@ static void _rtl88ee_read_adapter_info(struct ieee80211_hw *hw)
1906 default: 1986 default:
1907 rtlhal->oem_id = RT_CID_DEFAULT; 1987 rtlhal->oem_id = RT_CID_DEFAULT;
1908 break; 1988 break;
1989
1909 } 1990 }
1910 } 1991 }
1911} 1992}
@@ -1944,14 +2025,13 @@ void rtl88ee_read_eeprom_info(struct ieee80211_hw *hw)
1944 u8 tmp_u1b; 2025 u8 tmp_u1b;
1945 2026
1946 rtlhal->version = _rtl88ee_read_chip_version(hw); 2027 rtlhal->version = _rtl88ee_read_chip_version(hw);
1947 if (get_rf_type(rtlphy) == RF_1T1R) { 2028 if (get_rf_type(rtlphy) == RF_1T1R)
1948 rtlpriv->dm.rfpath_rxenable[0] = true;
1949 } else {
1950 rtlpriv->dm.rfpath_rxenable[0] = true; 2029 rtlpriv->dm.rfpath_rxenable[0] = true;
1951 rtlpriv->dm.rfpath_rxenable[1] = true; 2030 else
1952 } 2031 rtlpriv->dm.rfpath_rxenable[0] =
2032 rtlpriv->dm.rfpath_rxenable[1] = true;
1953 RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, "VersionID = 0x%4x\n", 2033 RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, "VersionID = 0x%4x\n",
1954 rtlhal->version); 2034 rtlhal->version);
1955 tmp_u1b = rtl_read_byte(rtlpriv, REG_9346CR); 2035 tmp_u1b = rtl_read_byte(rtlpriv, REG_9346CR);
1956 if (tmp_u1b & BIT(4)) { 2036 if (tmp_u1b & BIT(4)) {
1957 RT_TRACE(rtlpriv, COMP_INIT, DBG_DMESG, "Boot from EEPROM\n"); 2037 RT_TRACE(rtlpriv, COMP_INIT, DBG_DMESG, "Boot from EEPROM\n");
@@ -1971,24 +2051,25 @@ void rtl88ee_read_eeprom_info(struct ieee80211_hw *hw)
1971} 2051}
1972 2052
1973static void rtl88ee_update_hal_rate_table(struct ieee80211_hw *hw, 2053static void rtl88ee_update_hal_rate_table(struct ieee80211_hw *hw,
1974 struct ieee80211_sta *sta) 2054 struct ieee80211_sta *sta)
1975{ 2055{
1976 struct rtl_priv *rtlpriv = rtl_priv(hw); 2056 struct rtl_priv *rtlpriv = rtl_priv(hw);
1977 struct rtl_pci_priv *rppriv = rtl_pcipriv(hw);
1978 struct rtl_phy *rtlphy = &(rtlpriv->phy); 2057 struct rtl_phy *rtlphy = &(rtlpriv->phy);
1979 struct rtl_mac *mac = rtl_mac(rtl_priv(hw)); 2058 struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
1980 struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw)); 2059 struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
1981 u32 ratr_value; 2060 u32 ratr_value;
1982 u8 ratr_index = 0; 2061 u8 ratr_index = 0;
1983 u8 nmode = mac->ht_enable; 2062 u8 b_nmode = mac->ht_enable;
1984 u8 mimo_ps = IEEE80211_SMPS_OFF; 2063 /*u8 mimo_ps = IEEE80211_SMPS_OFF;*/
1985 u16 shortgi_rate; 2064 u16 shortgi_rate;
1986 u32 tmp_ratr_value; 2065 u32 tmp_ratr_value;
1987 u8 ctx40 = mac->bw_40; 2066 u8 curtxbw_40mhz = mac->bw_40;
1988 u16 cap = sta->ht_cap.cap; 2067 u8 curshortgi_40mhz = (sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_40) ?
1989 u8 short40 = (cap & IEEE80211_HT_CAP_SGI_40) ? 1 : 0; 2068 1 : 0;
1990 u8 short20 = (cap & IEEE80211_HT_CAP_SGI_20) ? 1 : 0; 2069 u8 curshortgi_20mhz = (sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_20) ?
2070 1 : 0;
1991 enum wireless_mode wirelessmode = mac->mode; 2071 enum wireless_mode wirelessmode = mac->mode;
2072 u32 ratr_mask;
1992 2073
1993 if (rtlhal->current_bandtype == BAND_ON_5G) 2074 if (rtlhal->current_bandtype == BAND_ON_5G)
1994 ratr_value = sta->supp_rates[1] << 4; 2075 ratr_value = sta->supp_rates[1] << 4;
@@ -1997,7 +2078,7 @@ static void rtl88ee_update_hal_rate_table(struct ieee80211_hw *hw,
1997 if (mac->opmode == NL80211_IFTYPE_ADHOC) 2078 if (mac->opmode == NL80211_IFTYPE_ADHOC)
1998 ratr_value = 0xfff; 2079 ratr_value = 0xfff;
1999 ratr_value |= (sta->ht_cap.mcs.rx_mask[1] << 20 | 2080 ratr_value |= (sta->ht_cap.mcs.rx_mask[1] << 20 |
2000 sta->ht_cap.mcs.rx_mask[0] << 12); 2081 sta->ht_cap.mcs.rx_mask[0] << 12);
2001 switch (wirelessmode) { 2082 switch (wirelessmode) {
2002 case WIRELESS_MODE_B: 2083 case WIRELESS_MODE_B:
2003 if (ratr_value & 0x0000000c) 2084 if (ratr_value & 0x0000000c)
@@ -2010,20 +2091,14 @@ static void rtl88ee_update_hal_rate_table(struct ieee80211_hw *hw,
2010 break; 2091 break;
2011 case WIRELESS_MODE_N_24G: 2092 case WIRELESS_MODE_N_24G:
2012 case WIRELESS_MODE_N_5G: 2093 case WIRELESS_MODE_N_5G:
2013 nmode = 1; 2094 b_nmode = 1;
2014 if (mimo_ps == IEEE80211_SMPS_STATIC) { 2095 if (get_rf_type(rtlphy) == RF_1T2R ||
2015 ratr_value &= 0x0007F005; 2096 get_rf_type(rtlphy) == RF_1T1R)
2016 } else { 2097 ratr_mask = 0x000ff005;
2017 u32 ratr_mask; 2098 else
2018 2099 ratr_mask = 0x0f0ff005;
2019 if (get_rf_type(rtlphy) == RF_1T2R ||
2020 get_rf_type(rtlphy) == RF_1T1R)
2021 ratr_mask = 0x000ff005;
2022 else
2023 ratr_mask = 0x0f0ff005;
2024 2100
2025 ratr_value &= ratr_mask; 2101 ratr_value &= ratr_mask;
2026 }
2027 break; 2102 break;
2028 default: 2103 default:
2029 if (rtlphy->rf_type == RF_1T2R) 2104 if (rtlphy->rf_type == RF_1T2R)
@@ -2034,18 +2109,19 @@ static void rtl88ee_update_hal_rate_table(struct ieee80211_hw *hw,
2034 break; 2109 break;
2035 } 2110 }
2036 2111
2037 if ((rppriv->bt_coexist.bt_coexistence) && 2112 if ((rtlpriv->btcoexist.bt_coexistence) &&
2038 (rppriv->bt_coexist.bt_coexist_type == BT_CSR_BC4) && 2113 (rtlpriv->btcoexist.bt_coexist_type == BT_CSR_BC4) &&
2039 (rppriv->bt_coexist.bt_cur_state) && 2114 (rtlpriv->btcoexist.bt_cur_state) &&
2040 (rppriv->bt_coexist.bt_ant_isolation) && 2115 (rtlpriv->btcoexist.bt_ant_isolation) &&
2041 ((rppriv->bt_coexist.bt_service == BT_SCO) || 2116 ((rtlpriv->btcoexist.bt_service == BT_SCO) ||
2042 (rppriv->bt_coexist.bt_service == BT_BUSY))) 2117 (rtlpriv->btcoexist.bt_service == BT_BUSY)))
2043 ratr_value &= 0x0fffcfc0; 2118 ratr_value &= 0x0fffcfc0;
2044 else 2119 else
2045 ratr_value &= 0x0FFFFFFF; 2120 ratr_value &= 0x0FFFFFFF;
2046 2121
2047 if (nmode && ((ctx40 && short40) || 2122 if (b_nmode &&
2048 (!ctx40 && short20))) { 2123 ((curtxbw_40mhz && curshortgi_40mhz) ||
2124 (!curtxbw_40mhz && curshortgi_20mhz))) {
2049 ratr_value |= 0x10000000; 2125 ratr_value |= 0x10000000;
2050 tmp_ratr_value = (ratr_value >> 12); 2126 tmp_ratr_value = (ratr_value >> 12);
2051 2127
@@ -2065,7 +2141,7 @@ static void rtl88ee_update_hal_rate_table(struct ieee80211_hw *hw,
2065} 2141}
2066 2142
2067static void rtl88ee_update_hal_rate_mask(struct ieee80211_hw *hw, 2143static void rtl88ee_update_hal_rate_mask(struct ieee80211_hw *hw,
2068 struct ieee80211_sta *sta, u8 rssi) 2144 struct ieee80211_sta *sta, u8 rssi_level)
2069{ 2145{
2070 struct rtl_priv *rtlpriv = rtl_priv(hw); 2146 struct rtl_priv *rtlpriv = rtl_priv(hw);
2071 struct rtl_phy *rtlphy = &(rtlpriv->phy); 2147 struct rtl_phy *rtlphy = &(rtlpriv->phy);
@@ -2074,23 +2150,25 @@ static void rtl88ee_update_hal_rate_mask(struct ieee80211_hw *hw,
2074 struct rtl_sta_info *sta_entry = NULL; 2150 struct rtl_sta_info *sta_entry = NULL;
2075 u32 ratr_bitmap; 2151 u32 ratr_bitmap;
2076 u8 ratr_index; 2152 u8 ratr_index;
2077 u16 cap = sta->ht_cap.cap; 2153 u8 curtxbw_40mhz = (sta->ht_cap.cap & IEEE80211_HT_CAP_SUP_WIDTH_20_40)
2078 u8 ctx40 = (cap & IEEE80211_HT_CAP_SUP_WIDTH_20_40) ? 1 : 0; 2154 ? 1 : 0;
2079 u8 short40 = (cap & IEEE80211_HT_CAP_SGI_40) ? 1 : 0; 2155 u8 curshortgi_40mhz = (sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_40) ?
2080 u8 short20 = (cap & IEEE80211_HT_CAP_SGI_20) ? 1 : 0; 2156 1 : 0;
2157 u8 curshortgi_20mhz = (sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_20) ?
2158 1 : 0;
2081 enum wireless_mode wirelessmode = 0; 2159 enum wireless_mode wirelessmode = 0;
2082 bool shortgi = false; 2160 bool b_shortgi = false;
2083 u8 rate_mask[5]; 2161 u8 rate_mask[5];
2084 u8 macid = 0; 2162 u8 macid = 0;
2085 u8 mimo_ps = IEEE80211_SMPS_OFF; 2163 /*u8 mimo_ps = IEEE80211_SMPS_OFF;*/
2086 2164
2087 sta_entry = (struct rtl_sta_info *)sta->drv_priv; 2165 sta_entry = (struct rtl_sta_info *)sta->drv_priv;
2088 wirelessmode = sta_entry->wireless_mode; 2166 wirelessmode = sta_entry->wireless_mode;
2089 if (mac->opmode == NL80211_IFTYPE_STATION || 2167 if (mac->opmode == NL80211_IFTYPE_STATION ||
2090 mac->opmode == NL80211_IFTYPE_MESH_POINT) 2168 mac->opmode == NL80211_IFTYPE_MESH_POINT)
2091 ctx40 = mac->bw_40; 2169 curtxbw_40mhz = mac->bw_40;
2092 else if (mac->opmode == NL80211_IFTYPE_AP || 2170 else if (mac->opmode == NL80211_IFTYPE_AP ||
2093 mac->opmode == NL80211_IFTYPE_ADHOC) 2171 mac->opmode == NL80211_IFTYPE_ADHOC)
2094 macid = sta->aid + 1; 2172 macid = sta->aid + 1;
2095 2173
2096 if (rtlhal->current_bandtype == BAND_ON_5G) 2174 if (rtlhal->current_bandtype == BAND_ON_5G)
@@ -2112,70 +2190,59 @@ static void rtl88ee_update_hal_rate_mask(struct ieee80211_hw *hw,
2112 case WIRELESS_MODE_G: 2190 case WIRELESS_MODE_G:
2113 ratr_index = RATR_INX_WIRELESS_GB; 2191 ratr_index = RATR_INX_WIRELESS_GB;
2114 2192
2115 if (rssi == 1) 2193 if (rssi_level == 1)
2116 ratr_bitmap &= 0x00000f00; 2194 ratr_bitmap &= 0x00000f00;
2117 else if (rssi == 2) 2195 else if (rssi_level == 2)
2118 ratr_bitmap &= 0x00000ff0; 2196 ratr_bitmap &= 0x00000ff0;
2119 else 2197 else
2120 ratr_bitmap &= 0x00000ff5; 2198 ratr_bitmap &= 0x00000ff5;
2121 break; 2199 break;
2122 case WIRELESS_MODE_A:
2123 ratr_index = RATR_INX_WIRELESS_A;
2124 ratr_bitmap &= 0x00000ff0;
2125 break;
2126 case WIRELESS_MODE_N_24G: 2200 case WIRELESS_MODE_N_24G:
2127 case WIRELESS_MODE_N_5G: 2201 case WIRELESS_MODE_N_5G:
2128 ratr_index = RATR_INX_WIRELESS_NGB; 2202 ratr_index = RATR_INX_WIRELESS_NGB;
2129 2203 if (rtlphy->rf_type == RF_1T2R ||
2130 if (mimo_ps == IEEE80211_SMPS_STATIC) { 2204 rtlphy->rf_type == RF_1T1R) {
2131 if (rssi == 1) 2205 if (curtxbw_40mhz) {
2132 ratr_bitmap &= 0x00070000; 2206 if (rssi_level == 1)
2133 else if (rssi == 2) 2207 ratr_bitmap &= 0x000f0000;
2134 ratr_bitmap &= 0x0007f000; 2208 else if (rssi_level == 2)
2135 else 2209 ratr_bitmap &= 0x000ff000;
2136 ratr_bitmap &= 0x0007f005; 2210 else
2211 ratr_bitmap &= 0x000ff015;
2212 } else {
2213 if (rssi_level == 1)
2214 ratr_bitmap &= 0x000f0000;
2215 else if (rssi_level == 2)
2216 ratr_bitmap &= 0x000ff000;
2217 else
2218 ratr_bitmap &= 0x000ff005;
2219 }
2137 } else { 2220 } else {
2138 if (rtlphy->rf_type == RF_1T2R || 2221 if (curtxbw_40mhz) {
2139 rtlphy->rf_type == RF_1T1R) { 2222 if (rssi_level == 1)
2140 if (ctx40) { 2223 ratr_bitmap &= 0x0f8f0000;
2141 if (rssi == 1) 2224 else if (rssi_level == 2)
2142 ratr_bitmap &= 0x000f0000; 2225 ratr_bitmap &= 0x0f8ff000;
2143 else if (rssi == 2) 2226 else
2144 ratr_bitmap &= 0x000ff000; 2227 ratr_bitmap &= 0x0f8ff015;
2145 else
2146 ratr_bitmap &= 0x000ff015;
2147 } else {
2148 if (rssi == 1)
2149 ratr_bitmap &= 0x000f0000;
2150 else if (rssi == 2)
2151 ratr_bitmap &= 0x000ff000;
2152 else
2153 ratr_bitmap &= 0x000ff005;
2154 }
2155 } else { 2228 } else {
2156 if (ctx40) { 2229 if (rssi_level == 1)
2157 if (rssi == 1) 2230 ratr_bitmap &= 0x0f8f0000;
2158 ratr_bitmap &= 0x0f8f0000; 2231 else if (rssi_level == 2)
2159 else if (rssi == 2) 2232 ratr_bitmap &= 0x0f8ff000;
2160 ratr_bitmap &= 0x0f8ff000; 2233 else
2161 else 2234 ratr_bitmap &= 0x0f8ff005;
2162 ratr_bitmap &= 0x0f8ff015;
2163 } else {
2164 if (rssi == 1)
2165 ratr_bitmap &= 0x0f8f0000;
2166 else if (rssi == 2)
2167 ratr_bitmap &= 0x0f8ff000;
2168 else
2169 ratr_bitmap &= 0x0f8ff005;
2170 }
2171 } 2235 }
2172 } 2236 }
2237 /*}*/
2238
2239 if ((curtxbw_40mhz && curshortgi_40mhz) ||
2240 (!curtxbw_40mhz && curshortgi_20mhz)) {
2173 2241
2174 if ((ctx40 && short40) || (!ctx40 && short20)) {
2175 if (macid == 0) 2242 if (macid == 0)
2176 shortgi = true; 2243 b_shortgi = true;
2177 else if (macid == 1) 2244 else if (macid == 1)
2178 shortgi = false; 2245 b_shortgi = false;
2179 } 2246 }
2180 break; 2247 break;
2181 default: 2248 default:
@@ -2193,22 +2260,24 @@ static void rtl88ee_update_hal_rate_mask(struct ieee80211_hw *hw,
2193 "ratr_bitmap :%x\n", ratr_bitmap); 2260 "ratr_bitmap :%x\n", ratr_bitmap);
2194 *(u32 *)&rate_mask = (ratr_bitmap & 0x0fffffff) | 2261 *(u32 *)&rate_mask = (ratr_bitmap & 0x0fffffff) |
2195 (ratr_index << 28); 2262 (ratr_index << 28);
2196 rate_mask[4] = macid | (shortgi ? 0x20 : 0x00) | 0x80; 2263 rate_mask[4] = macid | (b_shortgi ? 0x20 : 0x00) | 0x80;
2197 RT_TRACE(rtlpriv, COMP_RATR, DBG_DMESG, 2264 RT_TRACE(rtlpriv, COMP_RATR, DBG_DMESG,
2198 "Rate_index:%x, ratr_val:%x, %x:%x:%x:%x:%x\n", 2265 "Rate_index:%x, ratr_val:%x, %x:%x:%x:%x:%x\n",
2199 ratr_index, ratr_bitmap, rate_mask[0], rate_mask[1], 2266 ratr_index, ratr_bitmap,
2200 rate_mask[2], rate_mask[3], rate_mask[4]); 2267 rate_mask[0], rate_mask[1],
2268 rate_mask[2], rate_mask[3],
2269 rate_mask[4]);
2201 rtl88e_fill_h2c_cmd(hw, H2C_88E_RA_MASK, 5, rate_mask); 2270 rtl88e_fill_h2c_cmd(hw, H2C_88E_RA_MASK, 5, rate_mask);
2202 _rtl88ee_set_bcn_ctrl_reg(hw, BIT(3), 0); 2271 _rtl88ee_set_bcn_ctrl_reg(hw, BIT(3), 0);
2203} 2272}
2204 2273
2205void rtl88ee_update_hal_rate_tbl(struct ieee80211_hw *hw, 2274void rtl88ee_update_hal_rate_tbl(struct ieee80211_hw *hw,
2206 struct ieee80211_sta *sta, u8 rssi) 2275 struct ieee80211_sta *sta, u8 rssi_level)
2207{ 2276{
2208 struct rtl_priv *rtlpriv = rtl_priv(hw); 2277 struct rtl_priv *rtlpriv = rtl_priv(hw);
2209 2278
2210 if (rtlpriv->dm.useramask) 2279 if (rtlpriv->dm.useramask)
2211 rtl88ee_update_hal_rate_mask(hw, sta, rssi); 2280 rtl88ee_update_hal_rate_mask(hw, sta, rssi_level);
2212 else 2281 else
2213 rtl88ee_update_hal_rate_table(hw, sta); 2282 rtl88ee_update_hal_rate_table(hw, sta);
2214} 2283}
@@ -2231,9 +2300,9 @@ bool rtl88ee_gpio_radio_on_off_checking(struct ieee80211_hw *hw, u8 *valid)
2231{ 2300{
2232 struct rtl_priv *rtlpriv = rtl_priv(hw); 2301 struct rtl_priv *rtlpriv = rtl_priv(hw);
2233 struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw)); 2302 struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw));
2234 enum rf_pwrstate state_toset; 2303 enum rf_pwrstate e_rfpowerstate_toset, cur_rfstate;
2235 u32 u4tmp; 2304 u32 u4tmp;
2236 bool actuallyset = false; 2305 bool b_actuallyset = false;
2237 2306
2238 if (rtlpriv->rtlhal.being_init_adapter) 2307 if (rtlpriv->rtlhal.being_init_adapter)
2239 return false; 2308 return false;
@@ -2250,27 +2319,29 @@ bool rtl88ee_gpio_radio_on_off_checking(struct ieee80211_hw *hw, u8 *valid)
2250 spin_unlock(&rtlpriv->locks.rf_ps_lock); 2319 spin_unlock(&rtlpriv->locks.rf_ps_lock);
2251 } 2320 }
2252 2321
2253 u4tmp = rtl_read_dword(rtlpriv, REG_GPIO_OUTPUT); 2322 cur_rfstate = ppsc->rfpwr_state;
2254 state_toset = (u4tmp & BIT(31)) ? ERFON : ERFOFF;
2255 2323
2324 u4tmp = rtl_read_dword(rtlpriv, REG_GPIO_OUTPUT);
2325 e_rfpowerstate_toset = (u4tmp & BIT(31)) ? ERFON : ERFOFF;
2256 2326
2257 if ((ppsc->hwradiooff == true) && (state_toset == ERFON)) { 2327 if (ppsc->hwradiooff && (e_rfpowerstate_toset == ERFON)) {
2258 RT_TRACE(rtlpriv, COMP_RF, DBG_DMESG, 2328 RT_TRACE(rtlpriv, COMP_RF, DBG_DMESG,
2259 "GPIOChangeRF - HW Radio ON, RF ON\n"); 2329 "GPIOChangeRF - HW Radio ON, RF ON\n");
2260 2330
2261 state_toset = ERFON; 2331 e_rfpowerstate_toset = ERFON;
2262 ppsc->hwradiooff = false; 2332 ppsc->hwradiooff = false;
2263 actuallyset = true; 2333 b_actuallyset = true;
2264 } else if ((ppsc->hwradiooff == false) && (state_toset == ERFOFF)) { 2334 } else if ((!ppsc->hwradiooff) &&
2335 (e_rfpowerstate_toset == ERFOFF)) {
2265 RT_TRACE(rtlpriv, COMP_RF, DBG_DMESG, 2336 RT_TRACE(rtlpriv, COMP_RF, DBG_DMESG,
2266 "GPIOChangeRF - HW Radio OFF, RF OFF\n"); 2337 "GPIOChangeRF - HW Radio OFF, RF OFF\n");
2267 2338
2268 state_toset = ERFOFF; 2339 e_rfpowerstate_toset = ERFOFF;
2269 ppsc->hwradiooff = true; 2340 ppsc->hwradiooff = true;
2270 actuallyset = true; 2341 b_actuallyset = true;
2271 } 2342 }
2272 2343
2273 if (actuallyset) { 2344 if (b_actuallyset) {
2274 spin_lock(&rtlpriv->locks.rf_ps_lock); 2345 spin_lock(&rtlpriv->locks.rf_ps_lock);
2275 ppsc->rfchange_inprogress = false; 2346 ppsc->rfchange_inprogress = false;
2276 spin_unlock(&rtlpriv->locks.rf_ps_lock); 2347 spin_unlock(&rtlpriv->locks.rf_ps_lock);
@@ -2285,50 +2356,19 @@ bool rtl88ee_gpio_radio_on_off_checking(struct ieee80211_hw *hw, u8 *valid)
2285 2356
2286 *valid = 1; 2357 *valid = 1;
2287 return !ppsc->hwradiooff; 2358 return !ppsc->hwradiooff;
2288}
2289 2359
2290static void add_one_key(struct ieee80211_hw *hw, u8 *macaddr,
2291 struct rtl_mac *mac, u32 key, u32 id,
2292 u8 enc_algo, bool is_pairwise)
2293{
2294 struct rtl_priv *rtlpriv = rtl_priv(hw);
2295 struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw));
2296
2297 RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG, "add one entry\n");
2298 if (is_pairwise) {
2299 RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG, "set Pairwise key\n");
2300
2301 rtl_cam_add_one_entry(hw, macaddr, key, id, enc_algo,
2302 CAM_CONFIG_NO_USEDK,
2303 rtlpriv->sec.key_buf[key]);
2304 } else {
2305 RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG, "set group key\n");
2306
2307 if (mac->opmode == NL80211_IFTYPE_ADHOC) {
2308 rtl_cam_add_one_entry(hw, rtlefuse->dev_addr,
2309 PAIRWISE_KEYIDX,
2310 CAM_PAIRWISE_KEY_POSITION,
2311 enc_algo,
2312 CAM_CONFIG_NO_USEDK,
2313 rtlpriv->sec.key_buf[id]);
2314 }
2315
2316 rtl_cam_add_one_entry(hw, macaddr, key, id, enc_algo,
2317 CAM_CONFIG_NO_USEDK,
2318 rtlpriv->sec.key_buf[id]);
2319 }
2320} 2360}
2321 2361
2322void rtl88ee_set_key(struct ieee80211_hw *hw, u32 key, 2362void rtl88ee_set_key(struct ieee80211_hw *hw, u32 key_index,
2323 u8 *mac_ad, bool is_group, u8 enc_algo, 2363 u8 *p_macaddr, bool is_group, u8 enc_algo,
2324 bool is_wepkey, bool clear_all) 2364 bool is_wepkey, bool clear_all)
2325{ 2365{
2326 struct rtl_priv *rtlpriv = rtl_priv(hw); 2366 struct rtl_priv *rtlpriv = rtl_priv(hw);
2327 struct rtl_mac *mac = rtl_mac(rtl_priv(hw)); 2367 struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
2328 u8 *macaddr = mac_ad; 2368 struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw));
2329 u32 id = 0; 2369 u8 *macaddr = p_macaddr;
2370 u32 entry_id = 0;
2330 bool is_pairwise = false; 2371 bool is_pairwise = false;
2331
2332 static u8 cam_const_addr[4][6] = { 2372 static u8 cam_const_addr[4][6] = {
2333 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 2373 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
2334 {0x00, 0x00, 0x00, 0x00, 0x00, 0x01}, 2374 {0x00, 0x00, 0x00, 0x00, 0x00, 0x01},
@@ -2373,122 +2413,176 @@ void rtl88ee_set_key(struct ieee80211_hw *hw, u32 key,
2373 break; 2413 break;
2374 default: 2414 default:
2375 RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, 2415 RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
2376 "switch case not processed\n"); 2416 "switch case not process\n");
2377 enc_algo = CAM_TKIP; 2417 enc_algo = CAM_TKIP;
2378 break; 2418 break;
2379 } 2419 }
2380 2420
2381 if (is_wepkey || rtlpriv->sec.use_defaultkey) { 2421 if (is_wepkey || rtlpriv->sec.use_defaultkey) {
2382 macaddr = cam_const_addr[key]; 2422 macaddr = cam_const_addr[key_index];
2383 id = key; 2423 entry_id = key_index;
2384 } else { 2424 } else {
2385 if (is_group) { 2425 if (is_group) {
2386 macaddr = cam_const_broad; 2426 macaddr = cam_const_broad;
2387 id = key; 2427 entry_id = key_index;
2388 } else { 2428 } else {
2389 if (mac->opmode == NL80211_IFTYPE_AP || 2429 if (mac->opmode == NL80211_IFTYPE_AP ||
2390 mac->opmode == NL80211_IFTYPE_MESH_POINT) { 2430 mac->opmode == NL80211_IFTYPE_MESH_POINT) {
2391 id = rtl_cam_get_free_entry(hw, mac_ad); 2431 entry_id =
2392 if (id >= TOTAL_CAM_ENTRY) { 2432 rtl_cam_get_free_entry(hw, p_macaddr);
2433 if (entry_id >= TOTAL_CAM_ENTRY) {
2393 RT_TRACE(rtlpriv, COMP_SEC, 2434 RT_TRACE(rtlpriv, COMP_SEC,
2394 DBG_EMERG, 2435 DBG_EMERG,
2395 "Can not find free hw security cam entry\n"); 2436 "Can not find free hw security cam entry\n");
2396 return; 2437 return;
2397 } 2438 }
2398 } else { 2439 } else {
2399 id = CAM_PAIRWISE_KEY_POSITION; 2440 entry_id = CAM_PAIRWISE_KEY_POSITION;
2400 } 2441 }
2401 2442 key_index = PAIRWISE_KEYIDX;
2402 key = PAIRWISE_KEYIDX;
2403 is_pairwise = true; 2443 is_pairwise = true;
2404 } 2444 }
2405 } 2445 }
2406 2446
2407 if (rtlpriv->sec.key_len[key] == 0) { 2447 if (rtlpriv->sec.key_len[key_index] == 0) {
2408 RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG, 2448 RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG,
2409 "delete one entry, id is %d\n", id); 2449 "delete one entry, entry_id is %d\n",
2450 entry_id);
2410 if (mac->opmode == NL80211_IFTYPE_AP || 2451 if (mac->opmode == NL80211_IFTYPE_AP ||
2411 mac->opmode == NL80211_IFTYPE_MESH_POINT) 2452 mac->opmode == NL80211_IFTYPE_MESH_POINT)
2412 rtl_cam_del_entry(hw, mac_ad); 2453 rtl_cam_del_entry(hw, p_macaddr);
2413 rtl_cam_delete_one_entry(hw, mac_ad, id); 2454 rtl_cam_delete_one_entry(hw, p_macaddr, entry_id);
2414 } else { 2455 } else {
2415 add_one_key(hw, macaddr, mac, key, id, enc_algo, 2456 RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG,
2416 is_pairwise); 2457 "add one entry\n");
2458 if (is_pairwise) {
2459 RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG,
2460 "set Pairwise key\n");
2461
2462 rtl_cam_add_one_entry(hw, macaddr, key_index,
2463 entry_id, enc_algo,
2464 CAM_CONFIG_NO_USEDK,
2465 rtlpriv->sec.key_buf[key_index]);
2466 } else {
2467 RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG,
2468 "set group key\n");
2469
2470 if (mac->opmode == NL80211_IFTYPE_ADHOC) {
2471 rtl_cam_add_one_entry(hw,
2472 rtlefuse->dev_addr,
2473 PAIRWISE_KEYIDX,
2474 CAM_PAIRWISE_KEY_POSITION,
2475 enc_algo,
2476 CAM_CONFIG_NO_USEDK,
2477 rtlpriv->sec.key_buf
2478 [entry_id]);
2479 }
2480
2481 rtl_cam_add_one_entry(hw, macaddr, key_index,
2482 entry_id, enc_algo,
2483 CAM_CONFIG_NO_USEDK,
2484 rtlpriv->sec.key_buf[entry_id]);
2485 }
2486
2417 } 2487 }
2418 } 2488 }
2419} 2489}
2420 2490
2421static void rtl8188ee_bt_var_init(struct ieee80211_hw *hw) 2491static void rtl8188ee_bt_var_init(struct ieee80211_hw *hw)
2422{ 2492{
2423 struct rtl_pci_priv *rppriv = rtl_pcipriv(hw); 2493 struct rtl_priv *rtlpriv = rtl_priv(hw);
2424 struct bt_coexist_info coexist = rppriv->bt_coexist;
2425 2494
2426 coexist.bt_coexistence = rppriv->bt_coexist.eeprom_bt_coexist; 2495 rtlpriv->btcoexist.bt_coexistence =
2427 coexist.bt_ant_num = coexist.eeprom_bt_ant_num; 2496 rtlpriv->btcoexist.eeprom_bt_coexist;
2428 coexist.bt_coexist_type = coexist.eeprom_bt_type; 2497 rtlpriv->btcoexist.bt_ant_num = rtlpriv->btcoexist.eeprom_bt_ant_num;
2498 rtlpriv->btcoexist.bt_coexist_type = rtlpriv->btcoexist.eeprom_bt_type;
2429 2499
2430 if (coexist.reg_bt_iso == 2) 2500 if (rtlpriv->btcoexist.reg_bt_iso == 2)
2431 coexist.bt_ant_isolation = coexist.eeprom_bt_ant_isol; 2501 rtlpriv->btcoexist.bt_ant_isolation =
2502 rtlpriv->btcoexist.eeprom_bt_ant_isol;
2432 else 2503 else
2433 coexist.bt_ant_isolation = coexist.reg_bt_iso; 2504 rtlpriv->btcoexist.bt_ant_isolation =
2434 2505 rtlpriv->btcoexist.reg_bt_iso;
2435 coexist.bt_radio_shared_type = coexist.eeprom_bt_radio_shared; 2506
2436 2507 rtlpriv->btcoexist.bt_radio_shared_type =
2437 if (coexist.bt_coexistence) { 2508 rtlpriv->btcoexist.eeprom_bt_radio_shared;
2438 if (coexist.reg_bt_sco == 1) 2509
2439 coexist.bt_service = BT_OTHER_ACTION; 2510 if (rtlpriv->btcoexist.bt_coexistence) {
2440 else if (coexist.reg_bt_sco == 2) 2511 if (rtlpriv->btcoexist.reg_bt_sco == 1)
2441 coexist.bt_service = BT_SCO; 2512 rtlpriv->btcoexist.bt_service = BT_OTHER_ACTION;
2442 else if (coexist.reg_bt_sco == 4) 2513 else if (rtlpriv->btcoexist.reg_bt_sco == 2)
2443 coexist.bt_service = BT_BUSY; 2514 rtlpriv->btcoexist.bt_service = BT_SCO;
2444 else if (coexist.reg_bt_sco == 5) 2515 else if (rtlpriv->btcoexist.reg_bt_sco == 4)
2445 coexist.bt_service = BT_OTHERBUSY; 2516 rtlpriv->btcoexist.bt_service = BT_BUSY;
2517 else if (rtlpriv->btcoexist.reg_bt_sco == 5)
2518 rtlpriv->btcoexist.bt_service = BT_OTHERBUSY;
2446 else 2519 else
2447 coexist.bt_service = BT_IDLE; 2520 rtlpriv->btcoexist.bt_service = BT_IDLE;
2448 2521
2449 coexist.bt_edca_ul = 0; 2522 rtlpriv->btcoexist.bt_edca_ul = 0;
2450 coexist.bt_edca_dl = 0; 2523 rtlpriv->btcoexist.bt_edca_dl = 0;
2451 coexist.bt_rssi_state = 0xff; 2524 rtlpriv->btcoexist.bt_rssi_state = 0xff;
2452 } 2525 }
2453} 2526}
2454 2527
2455void rtl8188ee_read_bt_coexist_info_from_hwpg(struct ieee80211_hw *hw, 2528void rtl8188ee_read_bt_coexist_info_from_hwpg(struct ieee80211_hw *hw,
2456 bool auto_load_fail, u8 *hwinfo) 2529 bool auto_load_fail, u8 *hwinfo)
2457{ 2530{
2531 struct rtl_priv *rtlpriv = rtl_priv(hw);
2532 u8 value;
2533
2534 if (!auto_load_fail) {
2535 rtlpriv->btcoexist.eeprom_bt_coexist =
2536 ((hwinfo[EEPROM_RF_FEATURE_OPTION_88E] & 0xe0) >> 5);
2537 if (hwinfo[EEPROM_RF_FEATURE_OPTION_88E] == 0xFF)
2538 rtlpriv->btcoexist.eeprom_bt_coexist = 0;
2539 value = hwinfo[EEPROM_RF_BT_SETTING_88E];
2540 rtlpriv->btcoexist.eeprom_bt_type = ((value & 0xe) >> 1);
2541 rtlpriv->btcoexist.eeprom_bt_ant_num = (value & 0x1);
2542 rtlpriv->btcoexist.eeprom_bt_ant_isol = ((value & 0x10) >> 4);
2543 rtlpriv->btcoexist.eeprom_bt_radio_shared =
2544 ((value & 0x20) >> 5);
2545 } else {
2546 rtlpriv->btcoexist.eeprom_bt_coexist = 0;
2547 rtlpriv->btcoexist.eeprom_bt_type = BT_2WIRE;
2548 rtlpriv->btcoexist.eeprom_bt_ant_num = ANT_X2;
2549 rtlpriv->btcoexist.eeprom_bt_ant_isol = 0;
2550 rtlpriv->btcoexist.eeprom_bt_radio_shared = BT_RADIO_SHARED;
2551 }
2552
2458 rtl8188ee_bt_var_init(hw); 2553 rtl8188ee_bt_var_init(hw);
2459} 2554}
2460 2555
2461void rtl8188ee_bt_reg_init(struct ieee80211_hw *hw) 2556void rtl8188ee_bt_reg_init(struct ieee80211_hw *hw)
2462{ 2557{
2463 struct rtl_pci_priv *rppriv = rtl_pcipriv(hw); 2558 struct rtl_priv *rtlpriv = rtl_priv(hw);
2464 2559
2465 /* 0:Low, 1:High, 2:From Efuse. */ 2560 /* 0:Low, 1:High, 2:From Efuse. */
2466 rppriv->bt_coexist.reg_bt_iso = 2; 2561 rtlpriv->btcoexist.reg_bt_iso = 2;
2467 /* 0:Idle, 1:None-SCO, 2:SCO, 3:From Counter. */ 2562 /* 0:Idle, 1:None-SCO, 2:SCO, 3:From Counter. */
2468 rppriv->bt_coexist.reg_bt_sco = 3; 2563 rtlpriv->btcoexist.reg_bt_sco = 3;
2469 /* 0:Disable BT control A-MPDU, 1:Enable BT control A-MPDU. */ 2564 /* 0:Disable BT control A-MPDU, 1:Enable BT control A-MPDU. */
2470 rppriv->bt_coexist.reg_bt_sco = 0; 2565 rtlpriv->btcoexist.reg_bt_sco = 0;
2471} 2566}
2472 2567
2473void rtl8188ee_bt_hw_init(struct ieee80211_hw *hw) 2568void rtl8188ee_bt_hw_init(struct ieee80211_hw *hw)
2474{ 2569{
2475 struct rtl_priv *rtlpriv = rtl_priv(hw); 2570 struct rtl_priv *rtlpriv = rtl_priv(hw);
2476 struct rtl_phy *rtlphy = &(rtlpriv->phy); 2571 struct rtl_phy *rtlphy = &rtlpriv->phy;
2477 struct rtl_pci_priv *rppriv = rtl_pcipriv(hw);
2478 struct bt_coexist_info coexist = rppriv->bt_coexist;
2479 u8 u1_tmp; 2572 u8 u1_tmp;
2480 2573
2481 if (coexist.bt_coexistence && 2574 if (rtlpriv->btcoexist.bt_coexistence &&
2482 ((coexist.bt_coexist_type == BT_CSR_BC4) || 2575 ((rtlpriv->btcoexist.bt_coexist_type == BT_CSR_BC4) ||
2483 coexist.bt_coexist_type == BT_CSR_BC8)) { 2576 rtlpriv->btcoexist.bt_coexist_type == BT_CSR_BC8)) {
2484 if (coexist.bt_ant_isolation) 2577 if (rtlpriv->btcoexist.bt_ant_isolation)
2485 rtl_write_byte(rtlpriv, REG_GPIO_MUXCFG, 0xa0); 2578 rtl_write_byte(rtlpriv, REG_GPIO_MUXCFG, 0xa0);
2486 2579
2487 u1_tmp = rtl_read_byte(rtlpriv, 0x4fd) & 2580 u1_tmp = rtl_read_byte(rtlpriv, 0x4fd) &
2488 BIT_OFFSET_LEN_MASK_32(0, 1); 2581 BIT_OFFSET_LEN_MASK_32(0, 1);
2489 u1_tmp = u1_tmp | ((coexist.bt_ant_isolation == 1) ? 2582 u1_tmp = u1_tmp |
2583 ((rtlpriv->btcoexist.bt_ant_isolation == 1) ?
2490 0 : BIT_OFFSET_LEN_MASK_32(1, 1)) | 2584 0 : BIT_OFFSET_LEN_MASK_32(1, 1)) |
2491 ((coexist.bt_service == BT_SCO) ? 2585 ((rtlpriv->btcoexist.bt_service == BT_SCO) ?
2492 0 : BIT_OFFSET_LEN_MASK_32(2, 1)); 2586 0 : BIT_OFFSET_LEN_MASK_32(2, 1));
2493 rtl_write_byte(rtlpriv, 0x4fd, u1_tmp); 2587 rtl_write_byte(rtlpriv, 0x4fd, u1_tmp);
2494 2588
diff --git a/drivers/net/wireless/rtlwifi/rtl8188ee/led.c b/drivers/net/wireless/rtlwifi/rtl8188ee/led.c
index c81a9cb6894c..b504bd092fc4 100644
--- a/drivers/net/wireless/rtlwifi/rtl8188ee/led.c
+++ b/drivers/net/wireless/rtlwifi/rtl8188ee/led.c
@@ -32,8 +32,8 @@
32#include "reg.h" 32#include "reg.h"
33#include "led.h" 33#include "led.h"
34 34
35static void rtl88ee_init_led(struct ieee80211_hw *hw, 35static void _rtl88ee_init_led(struct ieee80211_hw *hw,
36 struct rtl_led *pled, enum rtl_led_pin ledpin) 36 struct rtl_led *pled, enum rtl_led_pin ledpin)
37{ 37{
38 pled->hw = hw; 38 pled->hw = hw;
39 pled->ledpin = ledpin; 39 pled->ledpin = ledpin;
@@ -46,23 +46,23 @@ void rtl88ee_sw_led_on(struct ieee80211_hw *hw, struct rtl_led *pled)
46 struct rtl_priv *rtlpriv = rtl_priv(hw); 46 struct rtl_priv *rtlpriv = rtl_priv(hw);
47 47
48 RT_TRACE(rtlpriv, COMP_LED, DBG_LOUD, 48 RT_TRACE(rtlpriv, COMP_LED, DBG_LOUD,
49 "LedAddr:%X ledpin =%d\n", REG_LEDCFG2, pled->ledpin); 49 "LedAddr:%X ledpin=%d\n", REG_LEDCFG2, pled->ledpin);
50 50
51 switch (pled->ledpin) { 51 switch (pled->ledpin) {
52 case LED_PIN_GPIO0: 52 case LED_PIN_GPIO0:
53 break; 53 break;
54 case LED_PIN_LED0: 54 case LED_PIN_LED0:
55 ledcfg = rtl_read_byte(rtlpriv, REG_LEDCFG2); 55 ledcfg = rtl_read_byte(rtlpriv, REG_LEDCFG2);
56 rtl_write_byte(rtlpriv, REG_LEDCFG2, 56 rtl_write_byte(rtlpriv,
57 (ledcfg & 0xf0) | BIT(5) | BIT(6)); 57 REG_LEDCFG2, (ledcfg & 0xf0) | BIT(5) | BIT(6));
58 break; 58 break;
59 case LED_PIN_LED1: 59 case LED_PIN_LED1:
60 ledcfg = rtl_read_byte(rtlpriv, REG_LEDCFG1); 60 ledcfg = rtl_read_byte(rtlpriv, REG_LEDCFG1);
61 rtl_write_byte(rtlpriv, REG_LEDCFG1, ledcfg & 0x10); 61 rtl_write_byte(rtlpriv, REG_LEDCFG1, ledcfg & 0x10);
62 break; 62 break;
63 default: 63 default:
64 RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, 64 RT_TRACE(rtlpriv, COMP_ERR, DBG_LOUD,
65 "switch case not processed\n"); 65 "switch case not process\n");
66 break; 66 break;
67 } 67 }
68 pled->ledon = true; 68 pled->ledon = true;
@@ -73,10 +73,9 @@ void rtl88ee_sw_led_off(struct ieee80211_hw *hw, struct rtl_led *pled)
73 struct rtl_priv *rtlpriv = rtl_priv(hw); 73 struct rtl_priv *rtlpriv = rtl_priv(hw);
74 struct rtl_pci_priv *pcipriv = rtl_pcipriv(hw); 74 struct rtl_pci_priv *pcipriv = rtl_pcipriv(hw);
75 u8 ledcfg; 75 u8 ledcfg;
76 u8 val;
77 76
78 RT_TRACE(rtlpriv, COMP_LED, DBG_LOUD, 77 RT_TRACE(rtlpriv, COMP_LED, DBG_LOUD,
79 "LedAddr:%X ledpin =%d\n", REG_LEDCFG2, pled->ledpin); 78 "LedAddr:%X ledpin=%d\n", REG_LEDCFG2, pled->ledpin);
80 79
81 switch (pled->ledpin) { 80 switch (pled->ledpin) {
82 case LED_PIN_GPIO0: 81 case LED_PIN_GPIO0:
@@ -84,15 +83,15 @@ void rtl88ee_sw_led_off(struct ieee80211_hw *hw, struct rtl_led *pled)
84 case LED_PIN_LED0: 83 case LED_PIN_LED0:
85 ledcfg = rtl_read_byte(rtlpriv, REG_LEDCFG2); 84 ledcfg = rtl_read_byte(rtlpriv, REG_LEDCFG2);
86 ledcfg &= 0xf0; 85 ledcfg &= 0xf0;
87 val = ledcfg | BIT(3) | BIT(5) | BIT(6); 86 if (pcipriv->ledctl.led_opendrain) {
88 if (pcipriv->ledctl.led_opendrain == true) { 87 rtl_write_byte(rtlpriv, REG_LEDCFG2,
89 rtl_write_byte(rtlpriv, REG_LEDCFG2, val); 88 (ledcfg | BIT(3) | BIT(5) | BIT(6)));
90 ledcfg = rtl_read_byte(rtlpriv, REG_MAC_PINMUX_CFG); 89 ledcfg = rtl_read_byte(rtlpriv, REG_MAC_PINMUX_CFG);
91 val = ledcfg & 0xFE; 90 rtl_write_byte(rtlpriv, REG_MAC_PINMUX_CFG,
92 rtl_write_byte(rtlpriv, REG_MAC_PINMUX_CFG, val); 91 (ledcfg & 0xFE));
93 } else { 92 } else
94 rtl_write_byte(rtlpriv, REG_LEDCFG2, val); 93 rtl_write_byte(rtlpriv, REG_LEDCFG2,
95 } 94 (ledcfg | BIT(3) | BIT(5) | BIT(6)));
96 break; 95 break;
97 case LED_PIN_LED1: 96 case LED_PIN_LED1:
98 ledcfg = rtl_read_byte(rtlpriv, REG_LEDCFG1); 97 ledcfg = rtl_read_byte(rtlpriv, REG_LEDCFG1);
@@ -100,8 +99,8 @@ void rtl88ee_sw_led_off(struct ieee80211_hw *hw, struct rtl_led *pled)
100 rtl_write_byte(rtlpriv, REG_LEDCFG1, (ledcfg | BIT(3))); 99 rtl_write_byte(rtlpriv, REG_LEDCFG1, (ledcfg | BIT(3)));
101 break; 100 break;
102 default: 101 default:
103 RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, 102 RT_TRACE(rtlpriv, COMP_ERR, DBG_LOUD,
104 "switch case not processed\n"); 103 "switch case not process\n");
105 break; 104 break;
106 } 105 }
107 pled->ledon = false; 106 pled->ledon = false;
@@ -110,17 +109,15 @@ void rtl88ee_sw_led_off(struct ieee80211_hw *hw, struct rtl_led *pled)
110void rtl88ee_init_sw_leds(struct ieee80211_hw *hw) 109void rtl88ee_init_sw_leds(struct ieee80211_hw *hw)
111{ 110{
112 struct rtl_pci_priv *pcipriv = rtl_pcipriv(hw); 111 struct rtl_pci_priv *pcipriv = rtl_pcipriv(hw);
113 112 _rtl88ee_init_led(hw, &pcipriv->ledctl.sw_led0, LED_PIN_LED0);
114 rtl88ee_init_led(hw, &(pcipriv->ledctl.sw_led0), LED_PIN_LED0); 113 _rtl88ee_init_led(hw, &pcipriv->ledctl.sw_led1, LED_PIN_LED1);
115 rtl88ee_init_led(hw, &(pcipriv->ledctl.sw_led1), LED_PIN_LED1);
116} 114}
117 115
118static void rtl88ee_sw_led_control(struct ieee80211_hw *hw, 116static void _rtl88ee_sw_led_control(struct ieee80211_hw *hw,
119 enum led_ctl_mode ledaction) 117 enum led_ctl_mode ledaction)
120{ 118{
121 struct rtl_pci_priv *pcipriv = rtl_pcipriv(hw); 119 struct rtl_pci_priv *pcipriv = rtl_pcipriv(hw);
122 struct rtl_led *pLed0 = &(pcipriv->ledctl.sw_led0); 120 struct rtl_led *pLed0 = &(pcipriv->ledctl.sw_led0);
123
124 switch (ledaction) { 121 switch (ledaction) {
125 case LED_CTL_POWER_ON: 122 case LED_CTL_POWER_ON:
126 case LED_CTL_LINK: 123 case LED_CTL_LINK:
@@ -152,6 +149,6 @@ void rtl88ee_led_control(struct ieee80211_hw *hw,
152 return; 149 return;
153 } 150 }
154 RT_TRACE(rtlpriv, COMP_LED, DBG_TRACE, "ledaction %d,\n", 151 RT_TRACE(rtlpriv, COMP_LED, DBG_TRACE, "ledaction %d,\n",
155 ledaction); 152 ledaction);
156 rtl88ee_sw_led_control(hw, ledaction); 153 _rtl88ee_sw_led_control(hw, ledaction);
157} 154}
diff --git a/drivers/net/wireless/rtlwifi/rtl8188ee/led.h b/drivers/net/wireless/rtlwifi/rtl8188ee/led.h
index 4073f6f847b2..4b325b75faaf 100644
--- a/drivers/net/wireless/rtlwifi/rtl8188ee/led.h
+++ b/drivers/net/wireless/rtlwifi/rtl8188ee/led.h
@@ -11,10 +11,6 @@
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details. 12 * more details.
13 * 13 *
14 * You should have received a copy of the GNU General Public License along with
15 * this program; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
17 *
18 * The full GNU General Public License is included in this distribution in the 14 * The full GNU General Public License is included in this distribution in the
19 * file called LICENSE. 15 * file called LICENSE.
20 * 16 *
diff --git a/drivers/net/wireless/rtlwifi/rtl8188ee/phy.c b/drivers/net/wireless/rtlwifi/rtl8188ee/phy.c
index 1cd6c16d597e..2acc67d966d5 100644
--- a/drivers/net/wireless/rtlwifi/rtl8188ee/phy.c
+++ b/drivers/net/wireless/rtlwifi/rtl8188ee/phy.c
@@ -11,10 +11,6 @@
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details. 12 * more details.
13 * 13 *
14 * You should have received a copy of the GNU General Public License along with
15 * this program; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
17 *
18 * The full GNU General Public License is included in this distribution in the 14 * The full GNU General Public License is included in this distribution in the
19 * file called LICENSE. 15 * file called LICENSE.
20 * 16 *
@@ -29,7 +25,6 @@
29 25
30#include "../wifi.h" 26#include "../wifi.h"
31#include "../pci.h" 27#include "../pci.h"
32#include "../core.h"
33#include "../ps.h" 28#include "../ps.h"
34#include "reg.h" 29#include "reg.h"
35#include "def.h" 30#include "def.h"
@@ -38,443 +33,32 @@
38#include "dm.h" 33#include "dm.h"
39#include "table.h" 34#include "table.h"
40 35
41static void set_baseband_phy_config(struct ieee80211_hw *hw); 36static u32 _rtl88e_phy_rf_serial_read(struct ieee80211_hw *hw,
42static void set_baseband_agc_config(struct ieee80211_hw *hw); 37 enum radio_path rfpath, u32 offset);
43static void store_pwrindex_offset(struct ieee80211_hw *hw, 38static void _rtl88e_phy_rf_serial_write(struct ieee80211_hw *hw,
44 u32 regaddr, u32 bitmask, 39 enum radio_path rfpath, u32 offset,
45 u32 data); 40 u32 data);
46static bool check_cond(struct ieee80211_hw *hw, const u32 condition); 41static u32 _rtl88e_phy_calculate_bit_shift(u32 bitmask);
47 42static bool _rtl88e_phy_bb8188e_config_parafile(struct ieee80211_hw *hw);
48static u32 rf_serial_read(struct ieee80211_hw *hw, 43static bool _rtl88e_phy_config_mac_with_headerfile(struct ieee80211_hw *hw);
49 enum radio_path rfpath, u32 offset) 44static bool phy_config_bb_with_headerfile(struct ieee80211_hw *hw,
50{ 45 u8 configtype);
51 struct rtl_priv *rtlpriv = rtl_priv(hw); 46static bool phy_config_bb_with_pghdr(struct ieee80211_hw *hw,
52 struct rtl_phy *rtlphy = &(rtlpriv->phy); 47 u8 configtype);
53 struct bb_reg_def *phreg = &rtlphy->phyreg_def[rfpath]; 48static void _rtl88e_phy_init_bb_rf_register_definition(struct ieee80211_hw *hw);
54 u32 newoffset; 49static bool _rtl88e_phy_set_sw_chnl_cmdarray(struct swchnlcmd *cmdtable,
55 u32 tmplong, tmplong2; 50 u32 cmdtableidx, u32 cmdtablesz,
56 u8 rfpi_enable = 0; 51 enum swchnlcmd_id cmdid, u32 para1,
57 u32 ret; 52 u32 para2, u32 msdelay);
58 int jj = RF90_PATH_A; 53static bool _rtl88e_phy_sw_chnl_step_by_step(struct ieee80211_hw *hw,
59 int kk = RF90_PATH_B; 54 u8 channel, u8 *stage, u8 *step,
60 55 u32 *delay);
61 offset &= 0xff; 56
62 newoffset = offset; 57static long _rtl88e_phy_txpwr_idx_to_dbm(struct ieee80211_hw *hw,
63 if (RT_CANNOT_IO(hw)) { 58 enum wireless_mode wirelessmode,
64 RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, "return all one\n"); 59 u8 txpwridx);
65 return 0xFFFFFFFF; 60static void rtl88ee_phy_set_rf_on(struct ieee80211_hw *hw);
66 } 61static void rtl88e_phy_set_io(struct ieee80211_hw *hw);
67 tmplong = rtl_get_bbreg(hw, RFPGA0_XA_HSSIPARAMETER2, MASKDWORD);
68 if (rfpath == jj)
69 tmplong2 = tmplong;
70 else
71 tmplong2 = rtl_get_bbreg(hw, phreg->rfhssi_para2, MASKDWORD);
72 tmplong2 = (tmplong2 & (~BLSSIREADADDRESS)) |
73 (newoffset << 23) | BLSSIREADEDGE;
74 rtl_set_bbreg(hw, RFPGA0_XA_HSSIPARAMETER2, MASKDWORD,
75 tmplong & (~BLSSIREADEDGE));
76 mdelay(1);
77 rtl_set_bbreg(hw, phreg->rfhssi_para2, MASKDWORD, tmplong2);
78 mdelay(2);
79 if (rfpath == jj)
80 rfpi_enable = (u8) rtl_get_bbreg(hw, RFPGA0_XA_HSSIPARAMETER1,
81 BIT(8));
82 else if (rfpath == kk)
83 rfpi_enable = (u8) rtl_get_bbreg(hw, RFPGA0_XB_HSSIPARAMETER1,
84 BIT(8));
85 if (rfpi_enable)
86 ret = rtl_get_bbreg(hw, phreg->rf_rbpi, BLSSIREADBACKDATA);
87 else
88 ret = rtl_get_bbreg(hw, phreg->rf_rb, BLSSIREADBACKDATA);
89 RT_TRACE(rtlpriv, COMP_RF, DBG_TRACE, "RFR-%d Addr[0x%x]= 0x%x\n",
90 rfpath, phreg->rf_rb, ret);
91 return ret;
92}
93
94static void rf_serial_write(struct ieee80211_hw *hw,
95 enum radio_path rfpath, u32 offset,
96 u32 data)
97{
98 u32 data_and_addr;
99 u32 newoffset;
100 struct rtl_priv *rtlpriv = rtl_priv(hw);
101 struct rtl_phy *rtlphy = &(rtlpriv->phy);
102 struct bb_reg_def *phreg = &rtlphy->phyreg_def[rfpath];
103
104 if (RT_CANNOT_IO(hw)) {
105 RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, "stop\n");
106 return;
107 }
108 offset &= 0xff;
109 newoffset = offset;
110 data_and_addr = ((newoffset << 20) | (data & 0x000fffff)) & 0x0fffffff;
111 rtl_set_bbreg(hw, phreg->rf3wire_offset, MASKDWORD, data_and_addr);
112 RT_TRACE(rtlpriv, COMP_RF, DBG_TRACE, "RFW-%d Addr[0x%x]= 0x%x\n",
113 rfpath, phreg->rf3wire_offset, data_and_addr);
114}
115
116static u32 cal_bit_shift(u32 bitmask)
117{
118 u32 i;
119
120 for (i = 0; i <= 31; i++) {
121 if (((bitmask >> i) & 0x1) == 1)
122 break;
123 }
124 return i;
125}
126
127static bool config_bb_with_header(struct ieee80211_hw *hw,
128 u8 configtype)
129{
130 if (configtype == BASEBAND_CONFIG_PHY_REG)
131 set_baseband_phy_config(hw);
132 else if (configtype == BASEBAND_CONFIG_AGC_TAB)
133 set_baseband_agc_config(hw);
134 return true;
135}
136
137static bool config_bb_with_pgheader(struct ieee80211_hw *hw,
138 u8 configtype)
139{
140 struct rtl_priv *rtlpriv = rtl_priv(hw);
141 int i;
142 u32 *table_pg;
143 u16 tbl_page_len;
144 u32 v1 = 0, v2 = 0;
145
146 tbl_page_len = RTL8188EEPHY_REG_ARRAY_PGLEN;
147 table_pg = RTL8188EEPHY_REG_ARRAY_PG;
148
149 if (configtype == BASEBAND_CONFIG_PHY_REG) {
150 for (i = 0; i < tbl_page_len; i = i + 3) {
151 v1 = table_pg[i];
152 v2 = table_pg[i + 1];
153
154 if (v1 < 0xcdcdcdcd) {
155 rtl_addr_delay(table_pg[i]);
156
157 store_pwrindex_offset(hw, table_pg[i],
158 table_pg[i + 1],
159 table_pg[i + 2]);
160 continue;
161 } else {
162 if (!check_cond(hw, table_pg[i])) {
163 /*don't need the hw_body*/
164 i += 2; /* skip the pair of expression*/
165 v1 = table_pg[i];
166 v2 = table_pg[i + 1];
167 while (v2 != 0xDEAD) {
168 i += 3;
169 v1 = table_pg[i];
170 v2 = table_pg[i + 1];
171 }
172 }
173 }
174 }
175 } else {
176 RT_TRACE(rtlpriv, COMP_SEND, DBG_TRACE,
177 "configtype != BaseBand_Config_PHY_REG\n");
178 }
179 return true;
180}
181
182static bool config_parafile(struct ieee80211_hw *hw)
183{
184 struct rtl_priv *rtlpriv = rtl_priv(hw);
185 struct rtl_phy *rtlphy = &(rtlpriv->phy);
186 struct rtl_efuse *fuse = rtl_efuse(rtl_priv(hw));
187 bool rtstatus;
188
189 rtstatus = config_bb_with_header(hw, BASEBAND_CONFIG_PHY_REG);
190 if (rtstatus != true) {
191 RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, "Write BB Reg Fail!!");
192 return false;
193 }
194
195 if (fuse->autoload_failflag == false) {
196 rtlphy->pwrgroup_cnt = 0;
197 rtstatus = config_bb_with_pgheader(hw, BASEBAND_CONFIG_PHY_REG);
198 }
199 if (rtstatus != true) {
200 RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, "BB_PG Reg Fail!!");
201 return false;
202 }
203 rtstatus = config_bb_with_header(hw, BASEBAND_CONFIG_AGC_TAB);
204 if (rtstatus != true) {
205 RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, "AGC Table Fail\n");
206 return false;
207 }
208 rtlphy->cck_high_power = (bool) (rtl_get_bbreg(hw,
209 RFPGA0_XA_HSSIPARAMETER2, 0x200));
210
211 return true;
212}
213
214static void rtl88e_phy_init_bb_rf_register_definition(struct ieee80211_hw *hw)
215{
216 struct rtl_priv *rtlpriv = rtl_priv(hw);
217 struct rtl_phy *rtlphy = &(rtlpriv->phy);
218 int jj = RF90_PATH_A;
219 int kk = RF90_PATH_B;
220
221 rtlphy->phyreg_def[jj].rfintfs = RFPGA0_XAB_RFINTERFACESW;
222 rtlphy->phyreg_def[kk].rfintfs = RFPGA0_XAB_RFINTERFACESW;
223 rtlphy->phyreg_def[RF90_PATH_C].rfintfs = RFPGA0_XCD_RFINTERFACESW;
224 rtlphy->phyreg_def[RF90_PATH_D].rfintfs = RFPGA0_XCD_RFINTERFACESW;
225
226 rtlphy->phyreg_def[jj].rfintfi = RFPGA0_XAB_RFINTERFACERB;
227 rtlphy->phyreg_def[kk].rfintfi = RFPGA0_XAB_RFINTERFACERB;
228 rtlphy->phyreg_def[RF90_PATH_C].rfintfi = RFPGA0_XCD_RFINTERFACERB;
229 rtlphy->phyreg_def[RF90_PATH_D].rfintfi = RFPGA0_XCD_RFINTERFACERB;
230
231 rtlphy->phyreg_def[jj].rfintfo = RFPGA0_XA_RFINTERFACEOE;
232 rtlphy->phyreg_def[kk].rfintfo = RFPGA0_XB_RFINTERFACEOE;
233
234 rtlphy->phyreg_def[jj].rfintfe = RFPGA0_XA_RFINTERFACEOE;
235 rtlphy->phyreg_def[kk].rfintfe = RFPGA0_XB_RFINTERFACEOE;
236
237 rtlphy->phyreg_def[jj].rf3wire_offset = RFPGA0_XA_LSSIPARAMETER;
238 rtlphy->phyreg_def[kk].rf3wire_offset = RFPGA0_XB_LSSIPARAMETER;
239
240 rtlphy->phyreg_def[jj].rflssi_select = rFPGA0_XAB_RFPARAMETER;
241 rtlphy->phyreg_def[kk].rflssi_select = rFPGA0_XAB_RFPARAMETER;
242 rtlphy->phyreg_def[RF90_PATH_C].rflssi_select = rFPGA0_XCD_RFPARAMETER;
243 rtlphy->phyreg_def[RF90_PATH_D].rflssi_select = rFPGA0_XCD_RFPARAMETER;
244
245 rtlphy->phyreg_def[jj].rftxgain_stage = RFPGA0_TXGAINSTAGE;
246 rtlphy->phyreg_def[kk].rftxgain_stage = RFPGA0_TXGAINSTAGE;
247 rtlphy->phyreg_def[RF90_PATH_C].rftxgain_stage = RFPGA0_TXGAINSTAGE;
248 rtlphy->phyreg_def[RF90_PATH_D].rftxgain_stage = RFPGA0_TXGAINSTAGE;
249
250 rtlphy->phyreg_def[jj].rfhssi_para1 = RFPGA0_XA_HSSIPARAMETER1;
251 rtlphy->phyreg_def[kk].rfhssi_para1 = RFPGA0_XB_HSSIPARAMETER1;
252
253 rtlphy->phyreg_def[jj].rfhssi_para2 = RFPGA0_XA_HSSIPARAMETER2;
254 rtlphy->phyreg_def[kk].rfhssi_para2 = RFPGA0_XB_HSSIPARAMETER2;
255
256 rtlphy->phyreg_def[jj].rfsw_ctrl = RFPGA0_XAB_SWITCHCONTROL;
257 rtlphy->phyreg_def[kk].rfsw_ctrl = RFPGA0_XAB_SWITCHCONTROL;
258 rtlphy->phyreg_def[RF90_PATH_C].rfsw_ctrl = RFPGA0_XCD_SWITCHCONTROL;
259 rtlphy->phyreg_def[RF90_PATH_D].rfsw_ctrl = RFPGA0_XCD_SWITCHCONTROL;
260
261 rtlphy->phyreg_def[jj].rfagc_control1 = ROFDM0_XAAGCCORE1;
262 rtlphy->phyreg_def[kk].rfagc_control1 = ROFDM0_XBAGCCORE1;
263 rtlphy->phyreg_def[RF90_PATH_C].rfagc_control1 = ROFDM0_XCAGCCORE1;
264 rtlphy->phyreg_def[RF90_PATH_D].rfagc_control1 = ROFDM0_XDAGCCORE1;
265
266 rtlphy->phyreg_def[jj].rfagc_control2 = ROFDM0_XAAGCCORE2;
267 rtlphy->phyreg_def[kk].rfagc_control2 = ROFDM0_XBAGCCORE2;
268 rtlphy->phyreg_def[RF90_PATH_C].rfagc_control2 = ROFDM0_XCAGCCORE2;
269 rtlphy->phyreg_def[RF90_PATH_D].rfagc_control2 = ROFDM0_XDAGCCORE2;
270
271 rtlphy->phyreg_def[jj].rfrxiq_imbal = ROFDM0_XARXIQIMBAL;
272 rtlphy->phyreg_def[kk].rfrxiq_imbal = ROFDM0_XBRXIQIMBAL;
273 rtlphy->phyreg_def[RF90_PATH_C].rfrxiq_imbal = ROFDM0_XCRXIQIMBAL;
274 rtlphy->phyreg_def[RF90_PATH_D].rfrxiq_imbal = ROFDM0_XDRXIQIMBAL;
275
276 rtlphy->phyreg_def[jj].rfrx_afe = ROFDM0_XARXAFE;
277 rtlphy->phyreg_def[kk].rfrx_afe = ROFDM0_XBRXAFE;
278 rtlphy->phyreg_def[RF90_PATH_C].rfrx_afe = ROFDM0_XCRXAFE;
279 rtlphy->phyreg_def[RF90_PATH_D].rfrx_afe = ROFDM0_XDRXAFE;
280
281 rtlphy->phyreg_def[jj].rftxiq_imbal = ROFDM0_XATXIQIMBAL;
282 rtlphy->phyreg_def[kk].rftxiq_imbal = ROFDM0_XBTXIQIMBAL;
283 rtlphy->phyreg_def[RF90_PATH_C].rftxiq_imbal = ROFDM0_XCTXIQIMBAL;
284 rtlphy->phyreg_def[RF90_PATH_D].rftxiq_imbal = ROFDM0_XDTXIQIMBAL;
285
286 rtlphy->phyreg_def[jj].rftx_afe = ROFDM0_XATXAFE;
287 rtlphy->phyreg_def[kk].rftx_afe = ROFDM0_XBTXAFE;
288
289 rtlphy->phyreg_def[jj].rf_rb = RFPGA0_XA_LSSIREADBACK;
290 rtlphy->phyreg_def[kk].rf_rb = RFPGA0_XB_LSSIREADBACK;
291
292 rtlphy->phyreg_def[jj].rf_rbpi = TRANSCEIVEA_HSPI_READBACK;
293 rtlphy->phyreg_def[kk].rf_rbpi = TRANSCEIVEB_HSPI_READBACK;
294}
295
296static bool rtl88e_phy_set_sw_chnl_cmdarray(struct swchnlcmd *cmdtable,
297 u32 cmdtableidx, u32 cmdtablesz,
298 enum swchnlcmd_id cmdid,
299 u32 para1, u32 para2, u32 msdelay)
300{
301 struct swchnlcmd *pcmd;
302
303 if (cmdtable == NULL) {
304 RT_ASSERT(false, "cmdtable cannot be NULL.\n");
305 return false;
306 }
307
308 if (cmdtableidx >= cmdtablesz)
309 return false;
310
311 pcmd = cmdtable + cmdtableidx;
312 pcmd->cmdid = cmdid;
313 pcmd->para1 = para1;
314 pcmd->para2 = para2;
315 pcmd->msdelay = msdelay;
316 return true;
317}
318
319static bool chnl_step_by_step(struct ieee80211_hw *hw,
320 u8 channel, u8 *stage, u8 *step,
321 u32 *delay)
322{
323 struct rtl_priv *rtlpriv = rtl_priv(hw);
324 struct rtl_phy *rtlphy = &(rtlpriv->phy);
325 struct swchnlcmd precommoncmd[MAX_PRECMD_CNT];
326 u32 precommoncmdcnt;
327 struct swchnlcmd postcommoncmd[MAX_POSTCMD_CNT];
328 u32 postcommoncmdcnt;
329 struct swchnlcmd rfdependcmd[MAX_RFDEPENDCMD_CNT];
330 u32 rfdependcmdcnt;
331 struct swchnlcmd *currentcmd = NULL;
332 u8 rfpath;
333 u8 num_total_rfpath = rtlphy->num_total_rfpath;
334
335 precommoncmdcnt = 0;
336 rtl88e_phy_set_sw_chnl_cmdarray(precommoncmd, precommoncmdcnt++,
337 MAX_PRECMD_CNT,
338 CMDID_SET_TXPOWEROWER_LEVEL, 0, 0, 0);
339 rtl88e_phy_set_sw_chnl_cmdarray(precommoncmd, precommoncmdcnt++,
340 MAX_PRECMD_CNT, CMDID_END, 0, 0, 0);
341
342 postcommoncmdcnt = 0;
343
344 rtl88e_phy_set_sw_chnl_cmdarray(postcommoncmd, postcommoncmdcnt++,
345 MAX_POSTCMD_CNT, CMDID_END, 0, 0, 0);
346
347 rfdependcmdcnt = 0;
348
349 RT_ASSERT((channel >= 1 && channel <= 14),
350 "illegal channel for Zebra: %d\n", channel);
351
352 rtl88e_phy_set_sw_chnl_cmdarray(rfdependcmd, rfdependcmdcnt++,
353 MAX_RFDEPENDCMD_CNT, CMDID_RF_WRITEREG,
354 RF_CHNLBW, channel, 10);
355
356 rtl88e_phy_set_sw_chnl_cmdarray(rfdependcmd, rfdependcmdcnt++,
357 MAX_RFDEPENDCMD_CNT, CMDID_END, 0, 0,
358 0);
359
360 do {
361 switch (*stage) {
362 case 0:
363 currentcmd = &precommoncmd[*step];
364 break;
365 case 1:
366 currentcmd = &rfdependcmd[*step];
367 break;
368 case 2:
369 currentcmd = &postcommoncmd[*step];
370 break;
371 }
372
373 if (currentcmd->cmdid == CMDID_END) {
374 if ((*stage) == 2) {
375 return true;
376 } else {
377 (*stage)++;
378 (*step) = 0;
379 continue;
380 }
381 }
382
383 switch (currentcmd->cmdid) {
384 case CMDID_SET_TXPOWEROWER_LEVEL:
385 rtl88e_phy_set_txpower_level(hw, channel);
386 break;
387 case CMDID_WRITEPORT_ULONG:
388 rtl_write_dword(rtlpriv, currentcmd->para1,
389 currentcmd->para2);
390 break;
391 case CMDID_WRITEPORT_USHORT:
392 rtl_write_word(rtlpriv, currentcmd->para1,
393 (u16) currentcmd->para2);
394 break;
395 case CMDID_WRITEPORT_UCHAR:
396 rtl_write_byte(rtlpriv, currentcmd->para1,
397 (u8) currentcmd->para2);
398 break;
399 case CMDID_RF_WRITEREG:
400 for (rfpath = 0; rfpath < num_total_rfpath; rfpath++) {
401 rtlphy->rfreg_chnlval[rfpath] =
402 ((rtlphy->rfreg_chnlval[rfpath] &
403 0xfffffc00) | currentcmd->para2);
404
405 rtl_set_rfreg(hw, (enum radio_path)rfpath,
406 currentcmd->para1,
407 RFREG_OFFSET_MASK,
408 rtlphy->rfreg_chnlval[rfpath]);
409 }
410 break;
411 default:
412 RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
413 "switch case not processed\n");
414 break;
415 }
416
417 break;
418 } while (true);
419
420 (*delay) = currentcmd->msdelay;
421 (*step)++;
422 return false;
423}
424
425static long rtl88e_pwr_idx_dbm(struct ieee80211_hw *hw,
426 enum wireless_mode wirelessmode,
427 u8 txpwridx)
428{
429 long offset;
430 long pwrout_dbm;
431
432 switch (wirelessmode) {
433 case WIRELESS_MODE_B:
434 offset = -7;
435 break;
436 case WIRELESS_MODE_G:
437 case WIRELESS_MODE_N_24G:
438 offset = -8;
439 break;
440 default:
441 offset = -8;
442 break;
443 }
444 pwrout_dbm = txpwridx / 2 + offset;
445 return pwrout_dbm;
446}
447
448static void rtl88e_phy_set_io(struct ieee80211_hw *hw)
449{
450 struct rtl_priv *rtlpriv = rtl_priv(hw);
451 struct rtl_phy *rtlphy = &(rtlpriv->phy);
452 struct dig_t *dm_digtable = &rtlpriv->dm_digtable;
453
454 RT_TRACE(rtlpriv, COMP_CMD, DBG_TRACE,
455 "--->Cmd(%#x), set_io_inprogress(%d)\n",
456 rtlphy->current_io_type, rtlphy->set_io_inprogress);
457 switch (rtlphy->current_io_type) {
458 case IO_CMD_RESUME_DM_BY_SCAN:
459 dm_digtable->cur_igvalue = rtlphy->initgain_backup.xaagccore1;
460 /*rtl92c_dm_write_dig(hw);*/
461 rtl88e_phy_set_txpower_level(hw, rtlphy->current_channel);
462 rtl_set_bbreg(hw, RCCK0_CCA, 0xff0000, 0x83);
463 break;
464 case IO_CMD_PAUSE_DM_BY_SCAN:
465 rtlphy->initgain_backup.xaagccore1 = dm_digtable->cur_igvalue;
466 dm_digtable->cur_igvalue = 0x17;
467 rtl_set_bbreg(hw, RCCK0_CCA, 0xff0000, 0x40);
468 break;
469 default:
470 RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
471 "switch case not processed\n");
472 break;
473 }
474 rtlphy->set_io_inprogress = false;
475 RT_TRACE(rtlpriv, COMP_CMD, DBG_TRACE,
476 "(%#x)\n", rtlphy->current_io_type);
477}
478 62
479u32 rtl88e_phy_query_bb_reg(struct ieee80211_hw *hw, u32 regaddr, u32 bitmask) 63u32 rtl88e_phy_query_bb_reg(struct ieee80211_hw *hw, u32 regaddr, u32 bitmask)
480{ 64{
@@ -484,14 +68,15 @@ u32 rtl88e_phy_query_bb_reg(struct ieee80211_hw *hw, u32 regaddr, u32 bitmask)
484 RT_TRACE(rtlpriv, COMP_RF, DBG_TRACE, 68 RT_TRACE(rtlpriv, COMP_RF, DBG_TRACE,
485 "regaddr(%#x), bitmask(%#x)\n", regaddr, bitmask); 69 "regaddr(%#x), bitmask(%#x)\n", regaddr, bitmask);
486 originalvalue = rtl_read_dword(rtlpriv, regaddr); 70 originalvalue = rtl_read_dword(rtlpriv, regaddr);
487 bitshift = cal_bit_shift(bitmask); 71 bitshift = _rtl88e_phy_calculate_bit_shift(bitmask);
488 returnvalue = (originalvalue & bitmask) >> bitshift; 72 returnvalue = (originalvalue & bitmask) >> bitshift;
489 73
490 RT_TRACE(rtlpriv, COMP_RF, DBG_TRACE, 74 RT_TRACE(rtlpriv, COMP_RF, DBG_TRACE,
491 "BBR MASK = 0x%x Addr[0x%x]= 0x%x\n", bitmask, 75 "BBR MASK=0x%x Addr[0x%x]=0x%x\n", bitmask,
492 regaddr, originalvalue); 76 regaddr, originalvalue);
493 77
494 return returnvalue; 78 return returnvalue;
79
495} 80}
496 81
497void rtl88e_phy_set_bb_reg(struct ieee80211_hw *hw, 82void rtl88e_phy_set_bb_reg(struct ieee80211_hw *hw,
@@ -501,12 +86,12 @@ void rtl88e_phy_set_bb_reg(struct ieee80211_hw *hw,
501 u32 originalvalue, bitshift; 86 u32 originalvalue, bitshift;
502 87
503 RT_TRACE(rtlpriv, COMP_RF, DBG_TRACE, 88 RT_TRACE(rtlpriv, COMP_RF, DBG_TRACE,
504 "regaddr(%#x), bitmask(%#x),data(%#x)\n", 89 "regaddr(%#x), bitmask(%#x), data(%#x)\n",
505 regaddr, bitmask, data); 90 regaddr, bitmask, data);
506 91
507 if (bitmask != MASKDWORD) { 92 if (bitmask != MASKDWORD) {
508 originalvalue = rtl_read_dword(rtlpriv, regaddr); 93 originalvalue = rtl_read_dword(rtlpriv, regaddr);
509 bitshift = cal_bit_shift(bitmask); 94 bitshift = _rtl88e_phy_calculate_bit_shift(bitmask);
510 data = ((originalvalue & (~bitmask)) | (data << bitshift)); 95 data = ((originalvalue & (~bitmask)) | (data << bitshift));
511 } 96 }
512 97
@@ -531,8 +116,8 @@ u32 rtl88e_phy_query_rf_reg(struct ieee80211_hw *hw,
531 spin_lock_irqsave(&rtlpriv->locks.rf_lock, flags); 116 spin_lock_irqsave(&rtlpriv->locks.rf_lock, flags);
532 117
533 118
534 original_value = rf_serial_read(hw, rfpath, regaddr); 119 original_value = _rtl88e_phy_rf_serial_read(hw, rfpath, regaddr);
535 bitshift = cal_bit_shift(bitmask); 120 bitshift = _rtl88e_phy_calculate_bit_shift(bitmask);
536 readback_value = (original_value & bitmask) >> bitshift; 121 readback_value = (original_value & bitmask) >> bitshift;
537 122
538 spin_unlock_irqrestore(&rtlpriv->locks.rf_lock, flags); 123 spin_unlock_irqrestore(&rtlpriv->locks.rf_lock, flags);
@@ -540,7 +125,6 @@ u32 rtl88e_phy_query_rf_reg(struct ieee80211_hw *hw,
540 RT_TRACE(rtlpriv, COMP_RF, DBG_TRACE, 125 RT_TRACE(rtlpriv, COMP_RF, DBG_TRACE,
541 "regaddr(%#x), rfpath(%#x), bitmask(%#x), original_value(%#x)\n", 126 "regaddr(%#x), rfpath(%#x), bitmask(%#x), original_value(%#x)\n",
542 regaddr, rfpath, bitmask, original_value); 127 regaddr, rfpath, bitmask, original_value);
543
544 return readback_value; 128 return readback_value;
545} 129}
546 130
@@ -559,13 +143,16 @@ void rtl88e_phy_set_rf_reg(struct ieee80211_hw *hw,
559 spin_lock_irqsave(&rtlpriv->locks.rf_lock, flags); 143 spin_lock_irqsave(&rtlpriv->locks.rf_lock, flags);
560 144
561 if (bitmask != RFREG_OFFSET_MASK) { 145 if (bitmask != RFREG_OFFSET_MASK) {
562 original_value = rf_serial_read(hw, rfpath, regaddr); 146 original_value = _rtl88e_phy_rf_serial_read(hw,
563 bitshift = cal_bit_shift(bitmask); 147 rfpath,
564 data = ((original_value & (~bitmask)) | 148 regaddr);
565 (data << bitshift)); 149 bitshift = _rtl88e_phy_calculate_bit_shift(bitmask);
150 data =
151 ((original_value & (~bitmask)) |
152 (data << bitshift));
566 } 153 }
567 154
568 rf_serial_write(hw, rfpath, regaddr, data); 155 _rtl88e_phy_rf_serial_write(hw, rfpath, regaddr, data);
569 156
570 157
571 spin_unlock_irqrestore(&rtlpriv->locks.rf_lock, flags); 158 spin_unlock_irqrestore(&rtlpriv->locks.rf_lock, flags);
@@ -575,27 +162,91 @@ void rtl88e_phy_set_rf_reg(struct ieee80211_hw *hw,
575 regaddr, bitmask, data, rfpath); 162 regaddr, bitmask, data, rfpath);
576} 163}
577 164
578static bool config_mac_with_header(struct ieee80211_hw *hw) 165static u32 _rtl88e_phy_rf_serial_read(struct ieee80211_hw *hw,
166 enum radio_path rfpath, u32 offset)
579{ 167{
580 struct rtl_priv *rtlpriv = rtl_priv(hw); 168 struct rtl_priv *rtlpriv = rtl_priv(hw);
169 struct rtl_phy *rtlphy = &rtlpriv->phy;
170 struct bb_reg_def *pphyreg = &rtlphy->phyreg_def[rfpath];
171 u32 newoffset;
172 u32 tmplong, tmplong2;
173 u8 rfpi_enable = 0;
174 u32 retvalue;
175
176 offset &= 0xff;
177 newoffset = offset;
178 if (RT_CANNOT_IO(hw)) {
179 RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, "return all one\n");
180 return 0xFFFFFFFF;
181 }
182 tmplong = rtl_get_bbreg(hw, RFPGA0_XA_HSSIPARAMETER2, MASKDWORD);
183 if (rfpath == RF90_PATH_A)
184 tmplong2 = tmplong;
185 else
186 tmplong2 = rtl_get_bbreg(hw, pphyreg->rfhssi_para2, MASKDWORD);
187 tmplong2 = (tmplong2 & (~BLSSIREADADDRESS)) |
188 (newoffset << 23) | BLSSIREADEDGE;
189 rtl_set_bbreg(hw, RFPGA0_XA_HSSIPARAMETER2, MASKDWORD,
190 tmplong & (~BLSSIREADEDGE));
191 mdelay(1);
192 rtl_set_bbreg(hw, pphyreg->rfhssi_para2, MASKDWORD, tmplong2);
193 mdelay(2);
194 if (rfpath == RF90_PATH_A)
195 rfpi_enable = (u8)rtl_get_bbreg(hw, RFPGA0_XA_HSSIPARAMETER1,
196 BIT(8));
197 else if (rfpath == RF90_PATH_B)
198 rfpi_enable = (u8)rtl_get_bbreg(hw, RFPGA0_XB_HSSIPARAMETER1,
199 BIT(8));
200 if (rfpi_enable)
201 retvalue = rtl_get_bbreg(hw, pphyreg->rf_rbpi,
202 BLSSIREADBACKDATA);
203 else
204 retvalue = rtl_get_bbreg(hw, pphyreg->rf_rb,
205 BLSSIREADBACKDATA);
206 RT_TRACE(rtlpriv, COMP_RF, DBG_TRACE,
207 "RFR-%d Addr[0x%x]=0x%x\n",
208 rfpath, pphyreg->rf_rb, retvalue);
209 return retvalue;
210}
211
212static void _rtl88e_phy_rf_serial_write(struct ieee80211_hw *hw,
213 enum radio_path rfpath, u32 offset,
214 u32 data)
215{
216 u32 data_and_addr;
217 u32 newoffset;
218 struct rtl_priv *rtlpriv = rtl_priv(hw);
219 struct rtl_phy *rtlphy = &rtlpriv->phy;
220 struct bb_reg_def *pphyreg = &rtlphy->phyreg_def[rfpath];
221
222 if (RT_CANNOT_IO(hw)) {
223 RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, "stop\n");
224 return;
225 }
226 offset &= 0xff;
227 newoffset = offset;
228 data_and_addr = ((newoffset << 20) | (data & 0x000fffff)) & 0x0fffffff;
229 rtl_set_bbreg(hw, pphyreg->rf3wire_offset, MASKDWORD, data_and_addr);
230 RT_TRACE(rtlpriv, COMP_RF, DBG_TRACE,
231 "RFW-%d Addr[0x%x]=0x%x\n",
232 rfpath, pphyreg->rf3wire_offset, data_and_addr);
233}
234
235static u32 _rtl88e_phy_calculate_bit_shift(u32 bitmask)
236{
581 u32 i; 237 u32 i;
582 u32 arraylength;
583 u32 *ptrarray;
584 238
585 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE, "Read Rtl8188EMACPHY_Array\n"); 239 for (i = 0; i <= 31; i++) {
586 arraylength = RTL8188EEMAC_1T_ARRAYLEN; 240 if (((bitmask >> i) & 0x1) == 1)
587 ptrarray = RTL8188EEMAC_1T_ARRAY; 241 break;
588 RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, 242 }
589 "Img:RTL8188EEMAC_1T_ARRAY LEN %d\n", arraylength); 243 return i;
590 for (i = 0; i < arraylength; i = i + 2)
591 rtl_write_byte(rtlpriv, ptrarray[i], (u8) ptrarray[i + 1]);
592 return true;
593} 244}
594 245
595bool rtl88e_phy_mac_config(struct ieee80211_hw *hw) 246bool rtl88e_phy_mac_config(struct ieee80211_hw *hw)
596{ 247{
597 struct rtl_priv *rtlpriv = rtl_priv(hw); 248 struct rtl_priv *rtlpriv = rtl_priv(hw);
598 bool rtstatus = config_mac_with_header(hw); 249 bool rtstatus = _rtl88e_phy_config_mac_with_headerfile(hw);
599 250
600 rtl_write_byte(rtlpriv, 0x04CA, 0x0B); 251 rtl_write_byte(rtlpriv, 0x04CA, 0x0B);
601 return rtstatus; 252 return rtstatus;
@@ -606,9 +257,9 @@ bool rtl88e_phy_bb_config(struct ieee80211_hw *hw)
606 bool rtstatus = true; 257 bool rtstatus = true;
607 struct rtl_priv *rtlpriv = rtl_priv(hw); 258 struct rtl_priv *rtlpriv = rtl_priv(hw);
608 u16 regval; 259 u16 regval;
609 u8 reg_hwparafile = 1; 260 u8 b_reg_hwparafile = 1;
610 u32 tmp; 261 u32 tmp;
611 rtl88e_phy_init_bb_rf_register_definition(hw); 262 _rtl88e_phy_init_bb_rf_register_definition(hw);
612 regval = rtl_read_word(rtlpriv, REG_SYS_FUNC_EN); 263 regval = rtl_read_word(rtlpriv, REG_SYS_FUNC_EN);
613 rtl_write_word(rtlpriv, REG_SYS_FUNC_EN, 264 rtl_write_word(rtlpriv, REG_SYS_FUNC_EN,
614 regval | BIT(13) | BIT(0) | BIT(1)); 265 regval | BIT(13) | BIT(0) | BIT(1));
@@ -619,8 +270,8 @@ bool rtl88e_phy_bb_config(struct ieee80211_hw *hw)
619 FEN_BB_GLB_RSTN | FEN_BBRSTB); 270 FEN_BB_GLB_RSTN | FEN_BBRSTB);
620 tmp = rtl_read_dword(rtlpriv, 0x4c); 271 tmp = rtl_read_dword(rtlpriv, 0x4c);
621 rtl_write_dword(rtlpriv, 0x4c, tmp | BIT(23)); 272 rtl_write_dword(rtlpriv, 0x4c, tmp | BIT(23));
622 if (reg_hwparafile == 1) 273 if (b_reg_hwparafile == 1)
623 rtstatus = config_parafile(hw); 274 rtstatus = _rtl88e_phy_bb8188e_config_parafile(hw);
624 return rtstatus; 275 return rtstatus;
625} 276}
626 277
@@ -629,12 +280,12 @@ bool rtl88e_phy_rf_config(struct ieee80211_hw *hw)
629 return rtl88e_phy_rf6052_config(hw); 280 return rtl88e_phy_rf6052_config(hw);
630} 281}
631 282
632static bool check_cond(struct ieee80211_hw *hw, 283static bool _rtl88e_check_condition(struct ieee80211_hw *hw,
633 const u32 condition) 284 const u32 condition)
634{ 285{
635 struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw)); 286 struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
636 struct rtl_efuse *fuse = rtl_efuse(rtl_priv(hw)); 287 struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw));
637 u32 _board = fuse->board_type; /*need efuse define*/ 288 u32 _board = rtlefuse->board_type; /*need efuse define*/
638 u32 _interface = rtlhal->interface; 289 u32 _interface = rtlhal->interface;
639 u32 _platform = 0x08;/*SupportPlatform */ 290 u32 _platform = 0x08;/*SupportPlatform */
640 u32 cond = condition; 291 u32 cond = condition;
@@ -658,314 +309,504 @@ static bool check_cond(struct ieee80211_hw *hw,
658 return true; 309 return true;
659} 310}
660 311
661static void _rtl8188e_config_rf_reg(struct ieee80211_hw *hw, 312static void _rtl8188e_config_rf_reg(struct ieee80211_hw *hw, u32 addr,
662 u32 addr, u32 data, enum radio_path rfpath, 313 u32 data, enum radio_path rfpath,
663 u32 regaddr) 314 u32 regaddr)
664{ 315{
665 rtl_rfreg_delay(hw, rfpath, regaddr, 316 if (addr == 0xffe) {
666 RFREG_OFFSET_MASK, 317 mdelay(50);
667 data); 318 } else if (addr == 0xfd) {
319 mdelay(5);
320 } else if (addr == 0xfc) {
321 mdelay(1);
322 } else if (addr == 0xfb) {
323 udelay(50);
324 } else if (addr == 0xfa) {
325 udelay(5);
326 } else if (addr == 0xf9) {
327 udelay(1);
328 } else {
329 rtl_set_rfreg(hw, rfpath, regaddr,
330 RFREG_OFFSET_MASK,
331 data);
332 udelay(1);
333 }
668} 334}
669 335
670static void rtl88_config_s(struct ieee80211_hw *hw, 336static void _rtl8188e_config_rf_radio_a(struct ieee80211_hw *hw,
671 u32 addr, u32 data) 337 u32 addr, u32 data)
672{ 338{
673 u32 content = 0x1000; /*RF Content: radio_a_txt*/ 339 u32 content = 0x1000; /*RF Content: radio_a_txt*/
674 u32 maskforphyset = (u32)(content & 0xE000); 340 u32 maskforphyset = (u32)(content & 0xE000);
675 341
676 _rtl8188e_config_rf_reg(hw, addr, data, RF90_PATH_A, 342 _rtl8188e_config_rf_reg(hw, addr, data, RF90_PATH_A,
677 addr | maskforphyset); 343 addr | maskforphyset);
344}
345
346static void _rtl8188e_config_bb_reg(struct ieee80211_hw *hw,
347 u32 addr, u32 data)
348{
349 if (addr == 0xfe) {
350 mdelay(50);
351 } else if (addr == 0xfd) {
352 mdelay(5);
353 } else if (addr == 0xfc) {
354 mdelay(1);
355 } else if (addr == 0xfb) {
356 udelay(50);
357 } else if (addr == 0xfa) {
358 udelay(5);
359 } else if (addr == 0xf9) {
360 udelay(1);
361 } else {
362 rtl_set_bbreg(hw, addr, MASKDWORD, data);
363 udelay(1);
364 }
678} 365}
679 366
680#define NEXT_PAIR(v1, v2, i) \ 367static bool _rtl88e_phy_bb8188e_config_parafile(struct ieee80211_hw *hw)
368{
369 struct rtl_priv *rtlpriv = rtl_priv(hw);
370 struct rtl_phy *rtlphy = &rtlpriv->phy;
371 struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw));
372 bool rtstatus;
373
374 rtstatus = phy_config_bb_with_headerfile(hw, BASEBAND_CONFIG_PHY_REG);
375 if (!rtstatus) {
376 RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, "Write BB Reg Fail!!");
377 return false;
378 }
379
380 if (!rtlefuse->autoload_failflag) {
381 rtlphy->pwrgroup_cnt = 0;
382 rtstatus =
383 phy_config_bb_with_pghdr(hw, BASEBAND_CONFIG_PHY_REG);
384 }
385 if (!rtstatus) {
386 RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, "BB_PG Reg Fail!!");
387 return false;
388 }
389 rtstatus =
390 phy_config_bb_with_headerfile(hw, BASEBAND_CONFIG_AGC_TAB);
391 if (!rtstatus) {
392 RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, "AGC Table Fail\n");
393 return false;
394 }
395 rtlphy->cck_high_power =
396 (bool)(rtl_get_bbreg(hw, RFPGA0_XA_HSSIPARAMETER2, 0x200));
397
398 return true;
399}
400
401static bool _rtl88e_phy_config_mac_with_headerfile(struct ieee80211_hw *hw)
402{
403 struct rtl_priv *rtlpriv = rtl_priv(hw);
404 u32 i;
405 u32 arraylength;
406 u32 *ptrarray;
407
408 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE, "Read Rtl8188EMACPHY_Array\n");
409 arraylength = RTL8188EEMAC_1T_ARRAYLEN;
410 ptrarray = RTL8188EEMAC_1T_ARRAY;
411 RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
412 "Img:RTL8188EEMAC_1T_ARRAY LEN %d\n", arraylength);
413 for (i = 0; i < arraylength; i = i + 2)
414 rtl_write_byte(rtlpriv, ptrarray[i], (u8)ptrarray[i + 1]);
415 return true;
416}
417
418#define READ_NEXT_PAIR(v1, v2, i) \
681 do { \ 419 do { \
682 i += 2; v1 = array_table[i]; \ 420 i += 2; v1 = array_table[i]; \
683 v2 = array_table[i + 1]; \ 421 v2 = array_table[i+1]; \
684 } while (0) 422 } while (0)
685 423
686static void set_baseband_agc_config(struct ieee80211_hw *hw) 424static void handle_branch1(struct ieee80211_hw *hw, u16 arraylen,
425 u32 *array_table)
687{ 426{
427 u32 v1;
428 u32 v2;
688 int i; 429 int i;
689 u32 *array_table;
690 u16 arraylen;
691 struct rtl_priv *rtlpriv = rtl_priv(hw);
692 u32 v1 = 0, v2 = 0;
693 430
694 arraylen = RTL8188EEAGCTAB_1TARRAYLEN; 431 for (i = 0; i < arraylen; i = i + 2) {
695 array_table = RTL8188EEAGCTAB_1TARRAY; 432 v1 = array_table[i];
433 v2 = array_table[i+1];
434 if (v1 < 0xcdcdcdcd) {
435 _rtl8188e_config_bb_reg(hw, v1, v2);
436 } else { /*This line is the start line of branch.*/
437 /* to protect READ_NEXT_PAIR not overrun */
438 if (i >= arraylen - 2)
439 break;
440
441 if (!_rtl88e_check_condition(hw, array_table[i])) {
442 /*Discard the following (offset, data) pairs*/
443 READ_NEXT_PAIR(v1, v2, i);
444 while (v2 != 0xDEAD &&
445 v2 != 0xCDEF &&
446 v2 != 0xCDCD && i < arraylen - 2)
447 READ_NEXT_PAIR(v1, v2, i);
448 i -= 2; /* prevent from for-loop += 2*/
449 } else { /* Configure matched pairs and skip
450 * to end of if-else.
451 */
452 READ_NEXT_PAIR(v1, v2, i);
453 while (v2 != 0xDEAD &&
454 v2 != 0xCDEF &&
455 v2 != 0xCDCD && i < arraylen - 2)
456 _rtl8188e_config_bb_reg(hw, v1, v2);
457 READ_NEXT_PAIR(v1, v2, i);
458
459 while (v2 != 0xDEAD && i < arraylen - 2)
460 READ_NEXT_PAIR(v1, v2, i);
461 }
462 }
463 }
464}
465
466static void handle_branch2(struct ieee80211_hw *hw, u16 arraylen,
467 u32 *array_table)
468{
469 struct rtl_priv *rtlpriv = rtl_priv(hw);
470 u32 v1;
471 u32 v2;
472 int i;
696 473
697 for (i = 0; i < arraylen; i += 2) { 474 for (i = 0; i < arraylen; i = i + 2) {
698 v1 = array_table[i]; 475 v1 = array_table[i];
699 v2 = array_table[i + 1]; 476 v2 = array_table[i+1];
700 if (v1 < 0xCDCDCDCD) { 477 if (v1 < 0xCDCDCDCD) {
701 rtl_set_bbreg(hw, array_table[i], MASKDWORD, 478 rtl_set_bbreg(hw, array_table[i], MASKDWORD,
702 array_table[i + 1]); 479 array_table[i + 1]);
703 udelay(1); 480 udelay(1);
704 continue; 481 continue;
705 } else {/*This line is the start line of branch.*/ 482 } else { /*This line is the start line of branch.*/
706 if (!check_cond(hw, array_table[i])) { 483 /* to protect READ_NEXT_PAIR not overrun */
484 if (i >= arraylen - 2)
485 break;
486
487 if (!_rtl88e_check_condition(hw, array_table[i])) {
707 /*Discard the following (offset, data) pairs*/ 488 /*Discard the following (offset, data) pairs*/
708 NEXT_PAIR(v1, v2, i); 489 READ_NEXT_PAIR(v1, v2, i);
709 while (v2 != 0xDEAD && v2 != 0xCDEF && 490 while (v2 != 0xDEAD &&
710 v2 != 0xCDCD && i < arraylen - 2) { 491 v2 != 0xCDEF &&
711 NEXT_PAIR(v1, v2, i); 492 v2 != 0xCDCD && i < arraylen - 2)
712 } 493 READ_NEXT_PAIR(v1, v2, i);
713 i -= 2; /* compensate for loop's += 2*/ 494 i -= 2; /* prevent from for-loop += 2*/
714 } else { 495 } else { /* Configure matched pairs and skip
715 /* Configure matched pairs and skip to end */ 496 * to end of if-else.
716 NEXT_PAIR(v1, v2, i); 497 */
717 while (v2 != 0xDEAD && v2 != 0xCDEF && 498 READ_NEXT_PAIR(v1, v2, i);
499 while (v2 != 0xDEAD &&
500 v2 != 0xCDEF &&
718 v2 != 0xCDCD && i < arraylen - 2) { 501 v2 != 0xCDCD && i < arraylen - 2) {
719 rtl_set_bbreg(hw, array_table[i], 502 rtl_set_bbreg(hw, array_table[i],
720 MASKDWORD, 503 MASKDWORD,
721 array_table[i + 1]); 504 array_table[i + 1]);
722 udelay(1); 505 udelay(1);
723 NEXT_PAIR(v1, v2, i); 506 READ_NEXT_PAIR(v1, v2, i);
724 } 507 }
725 508
726 while (v2 != 0xDEAD && i < arraylen - 2) 509 while (v2 != 0xDEAD && i < arraylen - 2)
727 NEXT_PAIR(v1, v2, i); 510 READ_NEXT_PAIR(v1, v2, i);
728 } 511 }
729 } 512 }
730 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE, 513 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
731 "The agctab_array_table[0] is %x Rtl818EEPHY_REGArray[1] is %x\n", 514 "The agctab_array_table[0] is %x Rtl818EEPHY_REGArray[1] is %x\n",
732 array_table[i], 515 array_table[i], array_table[i + 1]);
733 array_table[i + 1]);
734 } 516 }
735} 517}
736 518
737static void set_baseband_phy_config(struct ieee80211_hw *hw) 519static bool phy_config_bb_with_headerfile(struct ieee80211_hw *hw,
520 u8 configtype)
738{ 521{
739 int i;
740 u32 *array_table; 522 u32 *array_table;
741 u16 arraylen; 523 u16 arraylen;
742 u32 v1 = 0, v2 = 0;
743
744 arraylen = RTL8188EEPHY_REG_1TARRAYLEN;
745 array_table = RTL8188EEPHY_REG_1TARRAY;
746
747 for (i = 0; i < arraylen; i += 2) {
748 v1 = array_table[i];
749 v2 = array_table[i + 1];
750 if (v1 < 0xcdcdcdcd) {
751 rtl_bb_delay(hw, v1, v2);
752 } else {/*This line is the start line of branch.*/
753 if (!check_cond(hw, array_table[i])) {
754 /*Discard the following (offset, data) pairs*/
755 NEXT_PAIR(v1, v2, i);
756 while (v2 != 0xDEAD &&
757 v2 != 0xCDEF &&
758 v2 != 0xCDCD && i < arraylen - 2)
759 NEXT_PAIR(v1, v2, i);
760 i -= 2; /* prevent from for-loop += 2*/
761 } else {
762 /* Configure matched pairs and skip to end */
763 NEXT_PAIR(v1, v2, i);
764 while (v2 != 0xDEAD &&
765 v2 != 0xCDEF &&
766 v2 != 0xCDCD && i < arraylen - 2) {
767 rtl_bb_delay(hw, v1, v2);
768 NEXT_PAIR(v1, v2, i);
769 }
770 524
771 while (v2 != 0xDEAD && i < arraylen - 2) 525 if (configtype == BASEBAND_CONFIG_PHY_REG) {
772 NEXT_PAIR(v1, v2, i); 526 arraylen = RTL8188EEPHY_REG_1TARRAYLEN;
773 } 527 array_table = RTL8188EEPHY_REG_1TARRAY;
774 } 528 handle_branch1(hw, arraylen, array_table);
529 } else if (configtype == BASEBAND_CONFIG_AGC_TAB) {
530 arraylen = RTL8188EEAGCTAB_1TARRAYLEN;
531 array_table = RTL8188EEAGCTAB_1TARRAY;
532 handle_branch2(hw, arraylen, array_table);
775 } 533 }
534 return true;
776} 535}
777 536
778static void store_pwrindex_offset(struct ieee80211_hw *hw, 537static void store_pwrindex_rate_offset(struct ieee80211_hw *hw,
779 u32 regaddr, u32 bitmask, 538 u32 regaddr, u32 bitmask,
780 u32 data) 539 u32 data)
781{ 540{
782 struct rtl_priv *rtlpriv = rtl_priv(hw); 541 struct rtl_priv *rtlpriv = rtl_priv(hw);
783 struct rtl_phy *rtlphy = &(rtlpriv->phy); 542 struct rtl_phy *rtlphy = &rtlpriv->phy;
543 int count = rtlphy->pwrgroup_cnt;
784 544
785 if (regaddr == RTXAGC_A_RATE18_06) { 545 if (regaddr == RTXAGC_A_RATE18_06) {
786 rtlphy->mcs_offset[rtlphy->pwrgroup_cnt][0] = data; 546 rtlphy->mcs_txpwrlevel_origoffset[count][0] = data;
787 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE, 547 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
788 "MCSTxPowerLevelOriginalOffset[%d][0] = 0x%x\n", 548 "MCSTxPowerLevelOriginalOffset[%d][0] = 0x%x\n",
789 rtlphy->pwrgroup_cnt, 549 count,
790 rtlphy->mcs_offset[rtlphy->pwrgroup_cnt][0]); 550 rtlphy->mcs_txpwrlevel_origoffset[count][0]);
791 } 551 }
792 if (regaddr == RTXAGC_A_RATE54_24) { 552 if (regaddr == RTXAGC_A_RATE54_24) {
793 rtlphy->mcs_offset[rtlphy->pwrgroup_cnt][1] = data; 553 rtlphy->mcs_txpwrlevel_origoffset[count][1] = data;
794 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE, 554 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
795 "MCSTxPowerLevelOriginalOffset[%d][1] = 0x%x\n", 555 "MCSTxPowerLevelOriginalOffset[%d][1] = 0x%x\n",
796 rtlphy->pwrgroup_cnt, 556 count,
797 rtlphy->mcs_offset[rtlphy->pwrgroup_cnt][1]); 557 rtlphy->mcs_txpwrlevel_origoffset[count][1]);
798 } 558 }
799 if (regaddr == RTXAGC_A_CCK1_MCS32) { 559 if (regaddr == RTXAGC_A_CCK1_MCS32) {
800 rtlphy->mcs_offset[rtlphy->pwrgroup_cnt][6] = data; 560 rtlphy->mcs_txpwrlevel_origoffset[count][6] = data;
801 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE, 561 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
802 "MCSTxPowerLevelOriginalOffset[%d][6] = 0x%x\n", 562 "MCSTxPowerLevelOriginalOffset[%d][6] = 0x%x\n",
803 rtlphy->pwrgroup_cnt, 563 count,
804 rtlphy->mcs_offset[rtlphy->pwrgroup_cnt][6]); 564 rtlphy->mcs_txpwrlevel_origoffset[count][6]);
805 } 565 }
806 if (regaddr == RTXAGC_B_CCK11_A_CCK2_11 && bitmask == 0xffffff00) { 566 if (regaddr == RTXAGC_B_CCK11_A_CCK2_11 && bitmask == 0xffffff00) {
807 rtlphy->mcs_offset[rtlphy->pwrgroup_cnt][7] = data; 567 rtlphy->mcs_txpwrlevel_origoffset[count][7] = data;
808 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE, 568 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
809 "MCSTxPowerLevelOriginalOffset[%d][7] = 0x%x\n", 569 "MCSTxPowerLevelOriginalOffset[%d][7] = 0x%x\n",
810 rtlphy->pwrgroup_cnt, 570 count,
811 rtlphy->mcs_offset[rtlphy->pwrgroup_cnt][7]); 571 rtlphy->mcs_txpwrlevel_origoffset[count][7]);
812 } 572 }
813 if (regaddr == RTXAGC_A_MCS03_MCS00) { 573 if (regaddr == RTXAGC_A_MCS03_MCS00) {
814 rtlphy->mcs_offset[rtlphy->pwrgroup_cnt][2] = data; 574 rtlphy->mcs_txpwrlevel_origoffset[count][2] = data;
815 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE, 575 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
816 "MCSTxPowerLevelOriginalOffset[%d][2] = 0x%x\n", 576 "MCSTxPowerLevelOriginalOffset[%d][2] = 0x%x\n",
817 rtlphy->pwrgroup_cnt, 577 count,
818 rtlphy->mcs_offset[rtlphy->pwrgroup_cnt][2]); 578 rtlphy->mcs_txpwrlevel_origoffset[count][2]);
819 } 579 }
820 if (regaddr == RTXAGC_A_MCS07_MCS04) { 580 if (regaddr == RTXAGC_A_MCS07_MCS04) {
821 rtlphy->mcs_offset[rtlphy->pwrgroup_cnt][3] = data; 581 rtlphy->mcs_txpwrlevel_origoffset[count][3] = data;
822 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE, 582 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
823 "MCSTxPowerLevelOriginalOffset[%d][3] = 0x%x\n", 583 "MCSTxPowerLevelOriginalOffset[%d][3] = 0x%x\n",
824 rtlphy->pwrgroup_cnt, 584 count,
825 rtlphy->mcs_offset[rtlphy->pwrgroup_cnt][3]); 585 rtlphy->mcs_txpwrlevel_origoffset[count][3]);
826 } 586 }
827 if (regaddr == RTXAGC_A_MCS11_MCS08) { 587 if (regaddr == RTXAGC_A_MCS11_MCS08) {
828 rtlphy->mcs_offset[rtlphy->pwrgroup_cnt][4] = data; 588 rtlphy->mcs_txpwrlevel_origoffset[count][4] = data;
829 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE, 589 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
830 "MCSTxPowerLevelOriginalOffset[%d][4] = 0x%x\n", 590 "MCSTxPowerLevelOriginalOffset[%d][4] = 0x%x\n",
831 rtlphy->pwrgroup_cnt, 591 count,
832 rtlphy->mcs_offset[rtlphy->pwrgroup_cnt][4]); 592 rtlphy->mcs_txpwrlevel_origoffset[count][4]);
833 } 593 }
834 if (regaddr == RTXAGC_A_MCS15_MCS12) { 594 if (regaddr == RTXAGC_A_MCS15_MCS12) {
835 rtlphy->mcs_offset[rtlphy->pwrgroup_cnt][5] = data; 595 rtlphy->mcs_txpwrlevel_origoffset[count][5] = data;
836 if (get_rf_type(rtlphy) == RF_1T1R) 596 if (get_rf_type(rtlphy) == RF_1T1R) {
837 rtlphy->pwrgroup_cnt++; 597 count++;
598 rtlphy->pwrgroup_cnt = count;
599 }
838 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE, 600 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
839 "MCSTxPowerLevelOriginalOffset[%d][5] = 0x%x\n", 601 "MCSTxPowerLevelOriginalOffset[%d][5] = 0x%x\n",
840 rtlphy->pwrgroup_cnt, 602 count,
841 rtlphy->mcs_offset[rtlphy->pwrgroup_cnt][5]); 603 rtlphy->mcs_txpwrlevel_origoffset[count][5]);
842 } 604 }
843 if (regaddr == RTXAGC_B_RATE18_06) { 605 if (regaddr == RTXAGC_B_RATE18_06) {
844 rtlphy->mcs_offset[rtlphy->pwrgroup_cnt][8] = data; 606 rtlphy->mcs_txpwrlevel_origoffset[count][8] = data;
845 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE, 607 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
846 "MCSTxPowerLevelOriginalOffset[%d][8] = 0x%x\n", 608 "MCSTxPowerLevelOriginalOffset[%d][8] = 0x%x\n",
847 rtlphy->pwrgroup_cnt, 609 count,
848 rtlphy->mcs_offset[rtlphy->pwrgroup_cnt][8]); 610 rtlphy->mcs_txpwrlevel_origoffset[count][8]);
849 } 611 }
850 if (regaddr == RTXAGC_B_RATE54_24) { 612 if (regaddr == RTXAGC_B_RATE54_24) {
851 rtlphy->mcs_offset[rtlphy->pwrgroup_cnt][9] = data; 613 rtlphy->mcs_txpwrlevel_origoffset[count][9] = data;
852 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE, 614 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
853 "MCSTxPowerLevelOriginalOffset[%d][9] = 0x%x\n", 615 "MCSTxPowerLevelOriginalOffset[%d][9] = 0x%x\n",
854 rtlphy->pwrgroup_cnt, 616 count,
855 rtlphy->mcs_offset[rtlphy->pwrgroup_cnt][9]); 617 rtlphy->mcs_txpwrlevel_origoffset[count][9]);
856 } 618 }
857 if (regaddr == RTXAGC_B_CCK1_55_MCS32) { 619 if (regaddr == RTXAGC_B_CCK1_55_MCS32) {
858 rtlphy->mcs_offset[rtlphy->pwrgroup_cnt][14] = data; 620 rtlphy->mcs_txpwrlevel_origoffset[count][14] = data;
859 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE, 621 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
860 "MCSTxPowerLevelOriginalOffset[%d][14] = 0x%x\n", 622 "MCSTxPowerLevelOriginalOffset[%d][14] = 0x%x\n",
861 rtlphy->pwrgroup_cnt, 623 count,
862 rtlphy->mcs_offset[rtlphy->pwrgroup_cnt][14]); 624 rtlphy->mcs_txpwrlevel_origoffset[count][14]);
863 } 625 }
864 if (regaddr == RTXAGC_B_CCK11_A_CCK2_11 && bitmask == 0x000000ff) { 626 if (regaddr == RTXAGC_B_CCK11_A_CCK2_11 && bitmask == 0x000000ff) {
865 rtlphy->mcs_offset[rtlphy->pwrgroup_cnt][15] = data; 627 rtlphy->mcs_txpwrlevel_origoffset[count][15] = data;
866 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE, 628 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
867 "MCSTxPowerLevelOriginalOffset[%d][15] = 0x%x\n", 629 "MCSTxPowerLevelOriginalOffset[%d][15] = 0x%x\n",
868 rtlphy->pwrgroup_cnt, 630 count,
869 rtlphy->mcs_offset[rtlphy->pwrgroup_cnt][15]); 631 rtlphy->mcs_txpwrlevel_origoffset[count][15]);
870 } 632 }
871 if (regaddr == RTXAGC_B_MCS03_MCS00) { 633 if (regaddr == RTXAGC_B_MCS03_MCS00) {
872 rtlphy->mcs_offset[rtlphy->pwrgroup_cnt][10] = data; 634 rtlphy->mcs_txpwrlevel_origoffset[count][10] = data;
873 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE, 635 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
874 "MCSTxPowerLevelOriginalOffset[%d][10] = 0x%x\n", 636 "MCSTxPowerLevelOriginalOffset[%d][10] = 0x%x\n",
875 rtlphy->pwrgroup_cnt, 637 count,
876 rtlphy->mcs_offset[rtlphy->pwrgroup_cnt][10]); 638 rtlphy->mcs_txpwrlevel_origoffset[count][10]);
877 } 639 }
878 if (regaddr == RTXAGC_B_MCS07_MCS04) { 640 if (regaddr == RTXAGC_B_MCS07_MCS04) {
879 rtlphy->mcs_offset[rtlphy->pwrgroup_cnt][11] = data; 641 rtlphy->mcs_txpwrlevel_origoffset[count][11] = data;
880 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE, 642 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
881 "MCSTxPowerLevelOriginalOffset[%d][11] = 0x%x\n", 643 "MCSTxPowerLevelOriginalOffset[%d][11] = 0x%x\n",
882 rtlphy->pwrgroup_cnt, 644 count,
883 rtlphy->mcs_offset[rtlphy->pwrgroup_cnt][11]); 645 rtlphy->mcs_txpwrlevel_origoffset[count][11]);
884 } 646 }
885 if (regaddr == RTXAGC_B_MCS11_MCS08) { 647 if (regaddr == RTXAGC_B_MCS11_MCS08) {
886 rtlphy->mcs_offset[rtlphy->pwrgroup_cnt][12] = data; 648 rtlphy->mcs_txpwrlevel_origoffset[count][12] = data;
887 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE, 649 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
888 "MCSTxPowerLevelOriginalOffset[%d][12] = 0x%x\n", 650 "MCSTxPowerLevelOriginalOffset[%d][12] = 0x%x\n",
889 rtlphy->pwrgroup_cnt, 651 count,
890 rtlphy->mcs_offset[rtlphy->pwrgroup_cnt][12]); 652 rtlphy->mcs_txpwrlevel_origoffset[count][12]);
891 } 653 }
892 if (regaddr == RTXAGC_B_MCS15_MCS12) { 654 if (regaddr == RTXAGC_B_MCS15_MCS12) {
893 rtlphy->mcs_offset[rtlphy->pwrgroup_cnt][13] = data; 655 rtlphy->mcs_txpwrlevel_origoffset[count][13] = data;
894 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE, 656 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
895 "MCSTxPowerLevelOriginalOffset[%d][13] = 0x%x\n", 657 "MCSTxPowerLevelOriginalOffset[%d][13] = 0x%x\n",
896 rtlphy->pwrgroup_cnt, 658 count,
897 rtlphy->mcs_offset[rtlphy->pwrgroup_cnt][13]); 659 rtlphy->mcs_txpwrlevel_origoffset[count][13]);
898 if (get_rf_type(rtlphy) != RF_1T1R) 660 if (get_rf_type(rtlphy) != RF_1T1R) {
899 rtlphy->pwrgroup_cnt++; 661 count++;
662 rtlphy->pwrgroup_cnt = count;
663 }
900 } 664 }
901} 665}
902 666
903#define READ_NEXT_RF_PAIR(v1, v2, i) \ 667static bool phy_config_bb_with_pghdr(struct ieee80211_hw *hw, u8 configtype)
904 do { \
905 i += 2; v1 = a_table[i]; \
906 v2 = a_table[i + 1]; \
907 } while (0)
908
909bool rtl88e_phy_config_rf_with_headerfile(struct ieee80211_hw *hw,
910 enum radio_path rfpath)
911{ 668{
912 int i;
913 u32 *a_table;
914 u16 a_len;
915 struct rtl_priv *rtlpriv = rtl_priv(hw); 669 struct rtl_priv *rtlpriv = rtl_priv(hw);
916 struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw)); 670 int i;
917 u32 v1 = 0, v2 = 0; 671 u32 *phy_reg_page;
672 u16 phy_reg_page_len;
673 u32 v1 = 0, v2 = 0, v3 = 0;
674
675 phy_reg_page_len = RTL8188EEPHY_REG_ARRAY_PGLEN;
676 phy_reg_page = RTL8188EEPHY_REG_ARRAY_PG;
677
678 if (configtype == BASEBAND_CONFIG_PHY_REG) {
679 for (i = 0; i < phy_reg_page_len; i = i + 3) {
680 v1 = phy_reg_page[i];
681 v2 = phy_reg_page[i+1];
682 v3 = phy_reg_page[i+2];
918 683
919 a_len = RTL8188EE_RADIOA_1TARRAYLEN;
920 a_table = RTL8188EE_RADIOA_1TARRAY;
921 RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
922 "Radio_A:RTL8188EE_RADIOA_1TARRAY %d\n", a_len);
923 RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, "Radio No %x\n", rfpath);
924 switch (rfpath) {
925 case RF90_PATH_A:
926 for (i = 0; i < a_len; i = i + 2) {
927 v1 = a_table[i];
928 v2 = a_table[i + 1];
929 if (v1 < 0xcdcdcdcd) { 684 if (v1 < 0xcdcdcdcd) {
930 rtl88_config_s(hw, v1, v2); 685 if (phy_reg_page[i] == 0xfe)
931 } else {/*This line is the start line of branch.*/ 686 mdelay(50);
932 if (!check_cond(hw, a_table[i])) { 687 else if (phy_reg_page[i] == 0xfd)
933 /* Discard the following (offset, data) 688 mdelay(5);
934 * pairs 689 else if (phy_reg_page[i] == 0xfc)
935 */ 690 mdelay(1);
691 else if (phy_reg_page[i] == 0xfb)
692 udelay(50);
693 else if (phy_reg_page[i] == 0xfa)
694 udelay(5);
695 else if (phy_reg_page[i] == 0xf9)
696 udelay(1);
697
698 store_pwrindex_rate_offset(hw, phy_reg_page[i],
699 phy_reg_page[i + 1],
700 phy_reg_page[i + 2]);
701 continue;
702 } else {
703 if (!_rtl88e_check_condition(hw,
704 phy_reg_page[i])) {
705 /*don't need the hw_body*/
706 i += 2; /* skip the pair of expression*/
707 /* to protect 'i+1' 'i+2' not overrun */
708 if (i >= phy_reg_page_len - 2)
709 break;
710
711 v1 = phy_reg_page[i];
712 v2 = phy_reg_page[i+1];
713 v3 = phy_reg_page[i+2];
714 while (v2 != 0xDEAD &&
715 i < phy_reg_page_len - 5) {
716 i += 3;
717 v1 = phy_reg_page[i];
718 v2 = phy_reg_page[i+1];
719 v3 = phy_reg_page[i+2];
720 }
721 }
722 }
723 }
724 } else {
725 RT_TRACE(rtlpriv, COMP_SEND, DBG_TRACE,
726 "configtype != BaseBand_Config_PHY_REG\n");
727 }
728 return true;
729}
730
731#define READ_NEXT_RF_PAIR(v1, v2, i) \
732do { \
733 i += 2; \
734 v1 = radioa_array_table[i]; \
735 v2 = radioa_array_table[i+1]; \
736} while (0)
737
738static void process_path_a(struct ieee80211_hw *hw,
739 u16 radioa_arraylen,
740 u32 *radioa_array_table)
741{
742 struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
743 u32 v1, v2;
744 int i;
745
746 for (i = 0; i < radioa_arraylen; i = i + 2) {
747 v1 = radioa_array_table[i];
748 v2 = radioa_array_table[i+1];
749 if (v1 < 0xcdcdcdcd) {
750 _rtl8188e_config_rf_radio_a(hw, v1, v2);
751 } else { /*This line is the start line of branch.*/
752 /* to protect READ_NEXT_PAIR not overrun */
753 if (i >= radioa_arraylen - 2)
754 break;
755
756 if (!_rtl88e_check_condition(hw, radioa_array_table[i])) {
757 /*Discard the following (offset, data) pairs*/
758 READ_NEXT_RF_PAIR(v1, v2, i);
759 while (v2 != 0xDEAD &&
760 v2 != 0xCDEF &&
761 v2 != 0xCDCD &&
762 i < radioa_arraylen - 2) {
936 READ_NEXT_RF_PAIR(v1, v2, i); 763 READ_NEXT_RF_PAIR(v1, v2, i);
937 while (v2 != 0xDEAD && v2 != 0xCDEF && 764 }
938 v2 != 0xCDCD && i < a_len - 2) 765 i -= 2; /* prevent from for-loop += 2*/
939 READ_NEXT_RF_PAIR(v1, v2, i); 766 } else { /* Configure matched pairs and
940 i -= 2; /* prevent from for-loop += 2*/ 767 * skip to end of if-else.
941 } else { 768 */
942 /* Configure matched pairs and skip to 769 READ_NEXT_RF_PAIR(v1, v2, i);
943 * end of if-else. 770 while (v2 != 0xDEAD &&
944 */ 771 v2 != 0xCDEF &&
772 v2 != 0xCDCD &&
773 i < radioa_arraylen - 2) {
774 _rtl8188e_config_rf_radio_a(hw, v1, v2);
945 READ_NEXT_RF_PAIR(v1, v2, i); 775 READ_NEXT_RF_PAIR(v1, v2, i);
946 while (v2 != 0xDEAD && v2 != 0xCDEF &&
947 v2 != 0xCDCD && i < a_len - 2) {
948 rtl88_config_s(hw, v1, v2);
949 READ_NEXT_RF_PAIR(v1, v2, i);
950 }
951
952 while (v2 != 0xDEAD && i < a_len - 2)
953 READ_NEXT_RF_PAIR(v1, v2, i);
954 } 776 }
777
778 while (v2 != 0xDEAD &&
779 i < radioa_arraylen - 2)
780 READ_NEXT_RF_PAIR(v1, v2, i);
955 } 781 }
956 } 782 }
783 }
957 784
958 if (rtlhal->oem_id == RT_CID_819X_HP) 785 if (rtlhal->oem_id == RT_CID_819X_HP)
959 rtl88_config_s(hw, 0x52, 0x7E4BD); 786 _rtl8188e_config_rf_radio_a(hw, 0x52, 0x7E4BD);
787}
960 788
961 break; 789bool rtl88e_phy_config_rf_with_headerfile(struct ieee80211_hw *hw,
790 enum radio_path rfpath)
791{
792 struct rtl_priv *rtlpriv = rtl_priv(hw);
793 bool rtstatus = true;
794 u32 *radioa_array_table;
795 u16 radioa_arraylen;
962 796
797 radioa_arraylen = RTL8188EE_RADIOA_1TARRAYLEN;
798 radioa_array_table = RTL8188EE_RADIOA_1TARRAY;
799 RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
800 "Radio_A:RTL8188EE_RADIOA_1TARRAY %d\n", radioa_arraylen);
801 RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, "Radio No %x\n", rfpath);
802 rtstatus = true;
803 switch (rfpath) {
804 case RF90_PATH_A:
805 process_path_a(hw, radioa_arraylen, radioa_array_table);
806 break;
963 case RF90_PATH_B: 807 case RF90_PATH_B:
964 case RF90_PATH_C: 808 case RF90_PATH_C:
965 case RF90_PATH_D: 809 case RF90_PATH_D:
966 default:
967 RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
968 "switch case not processed\n");
969 break; 810 break;
970 } 811 }
971 return true; 812 return true;
@@ -974,26 +815,26 @@ bool rtl88e_phy_config_rf_with_headerfile(struct ieee80211_hw *hw,
974void rtl88e_phy_get_hw_reg_originalvalue(struct ieee80211_hw *hw) 815void rtl88e_phy_get_hw_reg_originalvalue(struct ieee80211_hw *hw)
975{ 816{
976 struct rtl_priv *rtlpriv = rtl_priv(hw); 817 struct rtl_priv *rtlpriv = rtl_priv(hw);
977 struct rtl_phy *rtlphy = &(rtlpriv->phy); 818 struct rtl_phy *rtlphy = &rtlpriv->phy;
978 819
979 rtlphy->default_initialgain[0] = rtl_get_bbreg(hw, ROFDM0_XAAGCCORE1, 820 rtlphy->default_initialgain[0] =
980 MASKBYTE0); 821 (u8)rtl_get_bbreg(hw, ROFDM0_XAAGCCORE1, MASKBYTE0);
981 rtlphy->default_initialgain[1] = rtl_get_bbreg(hw, ROFDM0_XBAGCCORE1, 822 rtlphy->default_initialgain[1] =
982 MASKBYTE0); 823 (u8)rtl_get_bbreg(hw, ROFDM0_XBAGCCORE1, MASKBYTE0);
983 rtlphy->default_initialgain[2] = rtl_get_bbreg(hw, ROFDM0_XCAGCCORE1, 824 rtlphy->default_initialgain[2] =
984 MASKBYTE0); 825 (u8)rtl_get_bbreg(hw, ROFDM0_XCAGCCORE1, MASKBYTE0);
985 rtlphy->default_initialgain[3] = rtl_get_bbreg(hw, ROFDM0_XDAGCCORE1, 826 rtlphy->default_initialgain[3] =
986 MASKBYTE0); 827 (u8)rtl_get_bbreg(hw, ROFDM0_XDAGCCORE1, MASKBYTE0);
987 828
988 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE, 829 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
989 "Default initial gain (c50 = 0x%x, c58 = 0x%x, c60 = 0x%x, c68 = 0x%x\n", 830 "Default initial gain (c50=0x%x, c58=0x%x, c60=0x%x, c68=0x%x\n",
990 rtlphy->default_initialgain[0], 831 rtlphy->default_initialgain[0],
991 rtlphy->default_initialgain[1], 832 rtlphy->default_initialgain[1],
992 rtlphy->default_initialgain[2], 833 rtlphy->default_initialgain[2],
993 rtlphy->default_initialgain[3]); 834 rtlphy->default_initialgain[3]);
994 835
995 rtlphy->framesync = rtl_get_bbreg(hw, ROFDM0_RXDETECTOR3, 836 rtlphy->framesync = (u8)rtl_get_bbreg(hw, ROFDM0_RXDETECTOR3,
996 MASKBYTE0); 837 MASKBYTE0);
997 rtlphy->framesync_c34 = rtl_get_bbreg(hw, ROFDM0_RXDETECTOR2, 838 rtlphy->framesync_c34 = rtl_get_bbreg(hw, ROFDM0_RXDETECTOR2,
998 MASKDWORD); 839 MASKDWORD);
999 840
@@ -1002,106 +843,277 @@ void rtl88e_phy_get_hw_reg_originalvalue(struct ieee80211_hw *hw)
1002 ROFDM0_RXDETECTOR3, rtlphy->framesync); 843 ROFDM0_RXDETECTOR3, rtlphy->framesync);
1003} 844}
1004 845
846static void _rtl88e_phy_init_bb_rf_register_definition(struct ieee80211_hw *hw)
847{
848 struct rtl_priv *rtlpriv = rtl_priv(hw);
849 struct rtl_phy *rtlphy = &rtlpriv->phy;
850
851 rtlphy->phyreg_def[RF90_PATH_A].rfintfs = RFPGA0_XAB_RFINTERFACESW;
852 rtlphy->phyreg_def[RF90_PATH_B].rfintfs = RFPGA0_XAB_RFINTERFACESW;
853 rtlphy->phyreg_def[RF90_PATH_C].rfintfs = RFPGA0_XCD_RFINTERFACESW;
854 rtlphy->phyreg_def[RF90_PATH_D].rfintfs = RFPGA0_XCD_RFINTERFACESW;
855
856 rtlphy->phyreg_def[RF90_PATH_A].rfintfi = RFPGA0_XAB_RFINTERFACERB;
857 rtlphy->phyreg_def[RF90_PATH_B].rfintfi = RFPGA0_XAB_RFINTERFACERB;
858 rtlphy->phyreg_def[RF90_PATH_C].rfintfi = RFPGA0_XCD_RFINTERFACERB;
859 rtlphy->phyreg_def[RF90_PATH_D].rfintfi = RFPGA0_XCD_RFINTERFACERB;
860
861 rtlphy->phyreg_def[RF90_PATH_A].rfintfo = RFPGA0_XA_RFINTERFACEOE;
862 rtlphy->phyreg_def[RF90_PATH_B].rfintfo = RFPGA0_XB_RFINTERFACEOE;
863
864 rtlphy->phyreg_def[RF90_PATH_A].rfintfe = RFPGA0_XA_RFINTERFACEOE;
865 rtlphy->phyreg_def[RF90_PATH_B].rfintfe = RFPGA0_XB_RFINTERFACEOE;
866
867 rtlphy->phyreg_def[RF90_PATH_A].rf3wire_offset =
868 RFPGA0_XA_LSSIPARAMETER;
869 rtlphy->phyreg_def[RF90_PATH_B].rf3wire_offset =
870 RFPGA0_XB_LSSIPARAMETER;
871
872 rtlphy->phyreg_def[RF90_PATH_A].rflssi_select = RFPGA0_XAB_RFPARAMETER;
873 rtlphy->phyreg_def[RF90_PATH_B].rflssi_select = RFPGA0_XAB_RFPARAMETER;
874 rtlphy->phyreg_def[RF90_PATH_C].rflssi_select = RFPGA0_XCD_RFPARAMETER;
875 rtlphy->phyreg_def[RF90_PATH_D].rflssi_select = RFPGA0_XCD_RFPARAMETER;
876
877 rtlphy->phyreg_def[RF90_PATH_A].rftxgain_stage = RFPGA0_TXGAINSTAGE;
878 rtlphy->phyreg_def[RF90_PATH_B].rftxgain_stage = RFPGA0_TXGAINSTAGE;
879 rtlphy->phyreg_def[RF90_PATH_C].rftxgain_stage = RFPGA0_TXGAINSTAGE;
880 rtlphy->phyreg_def[RF90_PATH_D].rftxgain_stage = RFPGA0_TXGAINSTAGE;
881
882 rtlphy->phyreg_def[RF90_PATH_A].rfhssi_para1 = RFPGA0_XA_HSSIPARAMETER1;
883 rtlphy->phyreg_def[RF90_PATH_B].rfhssi_para1 = RFPGA0_XB_HSSIPARAMETER1;
884
885 rtlphy->phyreg_def[RF90_PATH_A].rfhssi_para2 = RFPGA0_XA_HSSIPARAMETER2;
886 rtlphy->phyreg_def[RF90_PATH_B].rfhssi_para2 = RFPGA0_XB_HSSIPARAMETER2;
887
888 rtlphy->phyreg_def[RF90_PATH_A].rfsw_ctrl =
889 RFPGA0_XAB_SWITCHCONTROL;
890 rtlphy->phyreg_def[RF90_PATH_B].rfsw_ctrl =
891 RFPGA0_XAB_SWITCHCONTROL;
892 rtlphy->phyreg_def[RF90_PATH_C].rfsw_ctrl =
893 RFPGA0_XCD_SWITCHCONTROL;
894 rtlphy->phyreg_def[RF90_PATH_D].rfsw_ctrl =
895 RFPGA0_XCD_SWITCHCONTROL;
896
897 rtlphy->phyreg_def[RF90_PATH_A].rfagc_control1 = ROFDM0_XAAGCCORE1;
898 rtlphy->phyreg_def[RF90_PATH_B].rfagc_control1 = ROFDM0_XBAGCCORE1;
899 rtlphy->phyreg_def[RF90_PATH_C].rfagc_control1 = ROFDM0_XCAGCCORE1;
900 rtlphy->phyreg_def[RF90_PATH_D].rfagc_control1 = ROFDM0_XDAGCCORE1;
901
902 rtlphy->phyreg_def[RF90_PATH_A].rfagc_control2 = ROFDM0_XAAGCCORE2;
903 rtlphy->phyreg_def[RF90_PATH_B].rfagc_control2 = ROFDM0_XBAGCCORE2;
904 rtlphy->phyreg_def[RF90_PATH_C].rfagc_control2 = ROFDM0_XCAGCCORE2;
905 rtlphy->phyreg_def[RF90_PATH_D].rfagc_control2 = ROFDM0_XDAGCCORE2;
906
907 rtlphy->phyreg_def[RF90_PATH_A].rfrxiq_imbal = ROFDM0_XARXIQIMBALANCE;
908 rtlphy->phyreg_def[RF90_PATH_B].rfrxiq_imbal = ROFDM0_XBRXIQIMBALANCE;
909 rtlphy->phyreg_def[RF90_PATH_C].rfrxiq_imbal = ROFDM0_XCRXIQIMBANLANCE;
910 rtlphy->phyreg_def[RF90_PATH_D].rfrxiq_imbal = ROFDM0_XDRXIQIMBALANCE;
911
912 rtlphy->phyreg_def[RF90_PATH_A].rfrx_afe = ROFDM0_XARXAFE;
913 rtlphy->phyreg_def[RF90_PATH_B].rfrx_afe = ROFDM0_XBRXAFE;
914 rtlphy->phyreg_def[RF90_PATH_C].rfrx_afe = ROFDM0_XCRXAFE;
915 rtlphy->phyreg_def[RF90_PATH_D].rfrx_afe = ROFDM0_XDRXAFE;
916
917 rtlphy->phyreg_def[RF90_PATH_A].rftxiq_imbal = ROFDM0_XATXIQIMBALANCE;
918 rtlphy->phyreg_def[RF90_PATH_B].rftxiq_imbal = ROFDM0_XBTXIQIMBALANCE;
919 rtlphy->phyreg_def[RF90_PATH_C].rftxiq_imbal = ROFDM0_XCTXIQIMBALANCE;
920 rtlphy->phyreg_def[RF90_PATH_D].rftxiq_imbal = ROFDM0_XDTXIQIMBALANCE;
921
922 rtlphy->phyreg_def[RF90_PATH_A].rftx_afe = ROFDM0_XATXAFE;
923 rtlphy->phyreg_def[RF90_PATH_B].rftx_afe = ROFDM0_XBTXAFE;
924
925 rtlphy->phyreg_def[RF90_PATH_A].rf_rb = RFPGA0_XA_LSSIREADBACK;
926 rtlphy->phyreg_def[RF90_PATH_B].rf_rb = RFPGA0_XB_LSSIREADBACK;
927
928 rtlphy->phyreg_def[RF90_PATH_A].rf_rbpi = TRANSCEIVEA_HSPI_READBACK;
929 rtlphy->phyreg_def[RF90_PATH_B].rf_rbpi = TRANSCEIVEB_HSPI_READBACK;
930}
931
1005void rtl88e_phy_get_txpower_level(struct ieee80211_hw *hw, long *powerlevel) 932void rtl88e_phy_get_txpower_level(struct ieee80211_hw *hw, long *powerlevel)
1006{ 933{
1007 struct rtl_priv *rtlpriv = rtl_priv(hw); 934 struct rtl_priv *rtlpriv = rtl_priv(hw);
1008 struct rtl_phy *rtlphy = &(rtlpriv->phy); 935 struct rtl_phy *rtlphy = &rtlpriv->phy;
1009 u8 level; 936 u8 txpwr_level;
1010 long dbm; 937 long txpwr_dbm;
938
939 txpwr_level = rtlphy->cur_cck_txpwridx;
940 txpwr_dbm = _rtl88e_phy_txpwr_idx_to_dbm(hw,
941 WIRELESS_MODE_B, txpwr_level);
942 txpwr_level = rtlphy->cur_ofdm24g_txpwridx;
943 if (_rtl88e_phy_txpwr_idx_to_dbm(hw,
944 WIRELESS_MODE_G,
945 txpwr_level) > txpwr_dbm)
946 txpwr_dbm =
947 _rtl88e_phy_txpwr_idx_to_dbm(hw, WIRELESS_MODE_G,
948 txpwr_level);
949 txpwr_level = rtlphy->cur_ofdm24g_txpwridx;
950 if (_rtl88e_phy_txpwr_idx_to_dbm(hw,
951 WIRELESS_MODE_N_24G,
952 txpwr_level) > txpwr_dbm)
953 txpwr_dbm =
954 _rtl88e_phy_txpwr_idx_to_dbm(hw, WIRELESS_MODE_N_24G,
955 txpwr_level);
956 *powerlevel = txpwr_dbm;
957}
1011 958
1012 level = rtlphy->cur_cck_txpwridx; 959static void handle_path_a(struct rtl_efuse *rtlefuse, u8 index,
1013 dbm = rtl88e_pwr_idx_dbm(hw, WIRELESS_MODE_B, level); 960 u8 *cckpowerlevel, u8 *ofdmpowerlevel,
1014 level = rtlphy->cur_ofdm24g_txpwridx; 961 u8 *bw20powerlevel, u8 *bw40powerlevel)
1015 if (rtl88e_pwr_idx_dbm(hw, WIRELESS_MODE_G, level) > dbm) 962{
1016 dbm = rtl88e_pwr_idx_dbm(hw, WIRELESS_MODE_G, level); 963 cckpowerlevel[RF90_PATH_A] =
1017 level = rtlphy->cur_ofdm24g_txpwridx; 964 rtlefuse->txpwrlevel_cck[RF90_PATH_A][index];
1018 if (rtl88e_pwr_idx_dbm(hw, WIRELESS_MODE_N_24G, level) > dbm) 965 /*-8~7 */
1019 dbm = rtl88e_pwr_idx_dbm(hw, WIRELESS_MODE_N_24G, level); 966 if (rtlefuse->txpwr_ht20diff[RF90_PATH_A][index] > 0x0f)
1020 *powerlevel = dbm; 967 bw20powerlevel[RF90_PATH_A] =
968 rtlefuse->txpwrlevel_ht40_1s[RF90_PATH_A][index] -
969 (~(rtlefuse->txpwr_ht20diff[RF90_PATH_A][index]) + 1);
970 else
971 bw20powerlevel[RF90_PATH_A] =
972 rtlefuse->txpwrlevel_ht40_1s[RF90_PATH_A][index] +
973 rtlefuse->txpwr_ht20diff[RF90_PATH_A][index];
974 if (rtlefuse->txpwr_legacyhtdiff[RF90_PATH_A][index] > 0xf)
975 ofdmpowerlevel[RF90_PATH_A] =
976 rtlefuse->txpwrlevel_ht40_1s[RF90_PATH_A][index] -
977 (~(rtlefuse->txpwr_legacyhtdiff[RF90_PATH_A][index])+1);
978 else
979 ofdmpowerlevel[RF90_PATH_A] =
980 rtlefuse->txpwrlevel_ht40_1s[RF90_PATH_A][index] +
981 rtlefuse->txpwr_legacyhtdiff[RF90_PATH_A][index];
982 bw40powerlevel[RF90_PATH_A] =
983 rtlefuse->txpwrlevel_ht40_1s[RF90_PATH_A][index];
1021} 984}
1022 985
1023static void _rtl88e_get_txpower_index(struct ieee80211_hw *hw, u8 channel, 986static void _rtl88e_get_txpower_index(struct ieee80211_hw *hw, u8 channel,
1024 u8 *cckpower, u8 *ofdm, u8 *bw20_pwr, 987 u8 *cckpowerlevel, u8 *ofdmpowerlevel,
1025 u8 *bw40_pwr) 988 u8 *bw20powerlevel, u8 *bw40powerlevel)
1026{ 989{
1027 struct rtl_efuse *fuse = rtl_efuse(rtl_priv(hw)); 990 struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw));
1028 u8 i = (channel - 1); 991 u8 index = (channel - 1);
1029 u8 rf_path = 0; 992 u8 rf_path = 0;
1030 int jj = RF90_PATH_A;
1031 int kk = RF90_PATH_B;
1032 993
1033 for (rf_path = 0; rf_path < 2; rf_path++) { 994 for (rf_path = 0; rf_path < 2; rf_path++) {
1034 if (rf_path == jj) { 995 if (rf_path == RF90_PATH_A) {
1035 cckpower[jj] = fuse->txpwrlevel_cck[jj][i]; 996 handle_path_a(rtlefuse, index, cckpowerlevel,
1036 if (fuse->txpwr_ht20diff[jj][i] > 0x0f) /*-8~7 */ 997 ofdmpowerlevel, bw20powerlevel,
1037 bw20_pwr[jj] = fuse->txpwrlevel_ht40_1s[jj][i] - 998 bw40powerlevel);
1038 (~(fuse->txpwr_ht20diff[jj][i]) + 1); 999 } else if (rf_path == RF90_PATH_B) {
1039 else 1000 cckpowerlevel[RF90_PATH_B] =
1040 bw20_pwr[jj] = fuse->txpwrlevel_ht40_1s[jj][i] + 1001 rtlefuse->txpwrlevel_cck[RF90_PATH_B][index];
1041 fuse->txpwr_ht20diff[jj][i]; 1002 bw20powerlevel[RF90_PATH_B] =
1042 if (fuse->txpwr_legacyhtdiff[jj][i] > 0xf) 1003 rtlefuse->txpwrlevel_ht40_1s[RF90_PATH_B][index] +
1043 ofdm[jj] = fuse->txpwrlevel_ht40_1s[jj][i] - 1004 rtlefuse->txpwr_ht20diff[RF90_PATH_B][index];
1044 (~(fuse->txpwr_legacyhtdiff[jj][i])+1); 1005 ofdmpowerlevel[RF90_PATH_B] =
1045 else 1006 rtlefuse->txpwrlevel_ht40_1s[RF90_PATH_B][index] +
1046 ofdm[jj] = fuse->txpwrlevel_ht40_1s[jj][i] + 1007 rtlefuse->txpwr_legacyhtdiff[RF90_PATH_B][index];
1047 fuse->txpwr_legacyhtdiff[jj][i]; 1008 bw40powerlevel[RF90_PATH_B] =
1048 bw40_pwr[jj] = fuse->txpwrlevel_ht40_1s[jj][i]; 1009 rtlefuse->txpwrlevel_ht40_1s[RF90_PATH_B][index];
1049
1050 } else if (rf_path == kk) {
1051 cckpower[kk] = fuse->txpwrlevel_cck[kk][i];
1052 bw20_pwr[kk] = fuse->txpwrlevel_ht40_1s[kk][i] +
1053 fuse->txpwr_ht20diff[kk][i];
1054 ofdm[kk] = fuse->txpwrlevel_ht40_1s[kk][i] +
1055 fuse->txpwr_legacyhtdiff[kk][i];
1056 bw40_pwr[kk] = fuse->txpwrlevel_ht40_1s[kk][i];
1057 } 1010 }
1058 } 1011 }
1012
1059} 1013}
1060 1014
1061static void _rtl88e_ccxpower_index_check(struct ieee80211_hw *hw, 1015static void _rtl88e_ccxpower_index_check(struct ieee80211_hw *hw,
1062 u8 channel, u8 *cckpower, 1016 u8 channel, u8 *cckpowerlevel,
1063 u8 *ofdm, u8 *bw20_pwr, 1017 u8 *ofdmpowerlevel, u8 *bw20powerlevel,
1064 u8 *bw40_pwr) 1018 u8 *bw40powerlevel)
1065{ 1019{
1066 struct rtl_priv *rtlpriv = rtl_priv(hw); 1020 struct rtl_priv *rtlpriv = rtl_priv(hw);
1067 struct rtl_phy *rtlphy = &(rtlpriv->phy); 1021 struct rtl_phy *rtlphy = &rtlpriv->phy;
1022
1023 rtlphy->cur_cck_txpwridx = cckpowerlevel[0];
1024 rtlphy->cur_ofdm24g_txpwridx = ofdmpowerlevel[0];
1025 rtlphy->cur_bw20_txpwridx = bw20powerlevel[0];
1026 rtlphy->cur_bw40_txpwridx = bw40powerlevel[0];
1068 1027
1069 rtlphy->cur_cck_txpwridx = cckpower[0];
1070 rtlphy->cur_ofdm24g_txpwridx = ofdm[0];
1071 rtlphy->cur_bw20_txpwridx = bw20_pwr[0];
1072 rtlphy->cur_bw40_txpwridx = bw40_pwr[0];
1073} 1028}
1074 1029
1075void rtl88e_phy_set_txpower_level(struct ieee80211_hw *hw, u8 channel) 1030void rtl88e_phy_set_txpower_level(struct ieee80211_hw *hw, u8 channel)
1076{ 1031{
1077 struct rtl_efuse *fuse = rtl_efuse(rtl_priv(hw)); 1032 struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw));
1078 u8 cckpower[MAX_TX_COUNT] = {0}, ofdm[MAX_TX_COUNT] = {0}; 1033 u8 cckpowerlevel[MAX_TX_COUNT] = {0};
1079 u8 bw20_pwr[MAX_TX_COUNT] = {0}, bw40_pwr[MAX_TX_COUNT] = {0}; 1034 u8 ofdmpowerlevel[MAX_TX_COUNT] = {0};
1035 u8 bw20powerlevel[MAX_TX_COUNT] = {0};
1036 u8 bw40powerlevel[MAX_TX_COUNT] = {0};
1080 1037
1081 if (fuse->txpwr_fromeprom == false) 1038 if (!rtlefuse->txpwr_fromeprom)
1082 return; 1039 return;
1083 _rtl88e_get_txpower_index(hw, channel, &cckpower[0], &ofdm[0], 1040 _rtl88e_get_txpower_index(hw, channel,
1084 &bw20_pwr[0], &bw40_pwr[0]); 1041 &cckpowerlevel[0], &ofdmpowerlevel[0],
1085 _rtl88e_ccxpower_index_check(hw, channel, &cckpower[0], &ofdm[0], 1042 &bw20powerlevel[0], &bw40powerlevel[0]);
1086 &bw20_pwr[0], &bw40_pwr[0]); 1043 _rtl88e_ccxpower_index_check(hw, channel,
1087 rtl88e_phy_rf6052_set_cck_txpower(hw, &cckpower[0]); 1044 &cckpowerlevel[0], &ofdmpowerlevel[0],
1088 rtl88e_phy_rf6052_set_ofdm_txpower(hw, &ofdm[0], &bw20_pwr[0], 1045 &bw20powerlevel[0], &bw40powerlevel[0]);
1089 &bw40_pwr[0], channel); 1046 rtl88e_phy_rf6052_set_cck_txpower(hw, &cckpowerlevel[0]);
1047 rtl88e_phy_rf6052_set_ofdm_txpower(hw, &ofdmpowerlevel[0],
1048 &bw20powerlevel[0],
1049 &bw40powerlevel[0], channel);
1050}
1051
1052static long _rtl88e_phy_txpwr_idx_to_dbm(struct ieee80211_hw *hw,
1053 enum wireless_mode wirelessmode,
1054 u8 txpwridx)
1055{
1056 long offset;
1057 long pwrout_dbm;
1058
1059 switch (wirelessmode) {
1060 case WIRELESS_MODE_B:
1061 offset = -7;
1062 break;
1063 case WIRELESS_MODE_G:
1064 case WIRELESS_MODE_N_24G:
1065 offset = -8;
1066 break;
1067 default:
1068 offset = -8;
1069 break;
1070 }
1071 pwrout_dbm = txpwridx / 2 + offset;
1072 return pwrout_dbm;
1073}
1074
1075void rtl88e_phy_scan_operation_backup(struct ieee80211_hw *hw, u8 operation)
1076{
1077 struct rtl_priv *rtlpriv = rtl_priv(hw);
1078 struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
1079 enum io_type iotype;
1080
1081 if (!is_hal_stop(rtlhal)) {
1082 switch (operation) {
1083 case SCAN_OPT_BACKUP_BAND0:
1084 iotype = IO_CMD_PAUSE_BAND0_DM_BY_SCAN;
1085 rtlpriv->cfg->ops->set_hw_reg(hw,
1086 HW_VAR_IO_CMD,
1087 (u8 *)&iotype);
1088
1089 break;
1090 case SCAN_OPT_RESTORE:
1091 iotype = IO_CMD_RESUME_DM_BY_SCAN;
1092 rtlpriv->cfg->ops->set_hw_reg(hw,
1093 HW_VAR_IO_CMD,
1094 (u8 *)&iotype);
1095 break;
1096 default:
1097 RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
1098 "Unknown Scan Backup operation.\n");
1099 break;
1100 }
1101 }
1090} 1102}
1091 1103
1092void rtl88e_phy_set_bw_mode_callback(struct ieee80211_hw *hw) 1104void rtl88e_phy_set_bw_mode_callback(struct ieee80211_hw *hw)
1093{ 1105{
1094 struct rtl_priv *rtlpriv = rtl_priv(hw); 1106 struct rtl_priv *rtlpriv = rtl_priv(hw);
1095 struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw)); 1107 struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
1096 struct rtl_phy *rtlphy = &(rtlpriv->phy); 1108 struct rtl_phy *rtlphy = &rtlpriv->phy;
1097 struct rtl_mac *mac = rtl_mac(rtl_priv(hw)); 1109 struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
1098 u8 reg_bw_opmode; 1110 u8 reg_bw_opmode;
1099 u8 reg_prsr_rsc; 1111 u8 reg_prsr_rsc;
1100 1112
1101 RT_TRACE(rtlpriv, COMP_SCAN, DBG_TRACE, 1113 RT_TRACE(rtlpriv, COMP_SCAN, DBG_TRACE,
1102 "Switch to %s bandwidth\n", 1114 "Switch to %s bandwidth\n",
1103 rtlphy->current_chan_bw == HT_CHANNEL_WIDTH_20 ? 1115 rtlphy->current_chan_bw == HT_CHANNEL_WIDTH_20 ?
1104 "20MHz" : "40MHz"); 1116 "20MHz" : "40MHz");
1105 1117
1106 if (is_hal_stop(rtlhal)) { 1118 if (is_hal_stop(rtlhal)) {
1107 rtlphy->set_bwmode_inprogress = false; 1119 rtlphy->set_bwmode_inprogress = false;
@@ -1162,7 +1174,7 @@ void rtl88e_phy_set_bw_mode(struct ieee80211_hw *hw,
1162 enum nl80211_channel_type ch_type) 1174 enum nl80211_channel_type ch_type)
1163{ 1175{
1164 struct rtl_priv *rtlpriv = rtl_priv(hw); 1176 struct rtl_priv *rtlpriv = rtl_priv(hw);
1165 struct rtl_phy *rtlphy = &(rtlpriv->phy); 1177 struct rtl_phy *rtlphy = &rtlpriv->phy;
1166 struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw)); 1178 struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
1167 u8 tmp_bw = rtlphy->current_chan_bw; 1179 u8 tmp_bw = rtlphy->current_chan_bw;
1168 1180
@@ -1173,7 +1185,7 @@ void rtl88e_phy_set_bw_mode(struct ieee80211_hw *hw,
1173 rtl88e_phy_set_bw_mode_callback(hw); 1185 rtl88e_phy_set_bw_mode_callback(hw);
1174 } else { 1186 } else {
1175 RT_TRACE(rtlpriv, COMP_ERR, DBG_WARNING, 1187 RT_TRACE(rtlpriv, COMP_ERR, DBG_WARNING,
1176 "FALSE driver sleep or unload\n"); 1188 "false driver sleep or unload\n");
1177 rtlphy->set_bwmode_inprogress = false; 1189 rtlphy->set_bwmode_inprogress = false;
1178 rtlphy->current_chan_bw = tmp_bw; 1190 rtlphy->current_chan_bw = tmp_bw;
1179 } 1191 }
@@ -1183,7 +1195,7 @@ void rtl88e_phy_sw_chnl_callback(struct ieee80211_hw *hw)
1183{ 1195{
1184 struct rtl_priv *rtlpriv = rtl_priv(hw); 1196 struct rtl_priv *rtlpriv = rtl_priv(hw);
1185 struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw)); 1197 struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
1186 struct rtl_phy *rtlphy = &(rtlpriv->phy); 1198 struct rtl_phy *rtlphy = &rtlpriv->phy;
1187 u32 delay; 1199 u32 delay;
1188 1200
1189 RT_TRACE(rtlpriv, COMP_SCAN, DBG_TRACE, 1201 RT_TRACE(rtlpriv, COMP_SCAN, DBG_TRACE,
@@ -1193,9 +1205,9 @@ void rtl88e_phy_sw_chnl_callback(struct ieee80211_hw *hw)
1193 do { 1205 do {
1194 if (!rtlphy->sw_chnl_inprogress) 1206 if (!rtlphy->sw_chnl_inprogress)
1195 break; 1207 break;
1196 if (!chnl_step_by_step(hw, rtlphy->current_channel, 1208 if (!_rtl88e_phy_sw_chnl_step_by_step
1197 &rtlphy->sw_chnl_stage, 1209 (hw, rtlphy->current_channel, &rtlphy->sw_chnl_stage,
1198 &rtlphy->sw_chnl_step, &delay)) { 1210 &rtlphy->sw_chnl_step, &delay)) {
1199 if (delay > 0) 1211 if (delay > 0)
1200 mdelay(delay); 1212 mdelay(delay);
1201 else 1213 else
@@ -1211,7 +1223,7 @@ void rtl88e_phy_sw_chnl_callback(struct ieee80211_hw *hw)
1211u8 rtl88e_phy_sw_chnl(struct ieee80211_hw *hw) 1223u8 rtl88e_phy_sw_chnl(struct ieee80211_hw *hw)
1212{ 1224{
1213 struct rtl_priv *rtlpriv = rtl_priv(hw); 1225 struct rtl_priv *rtlpriv = rtl_priv(hw);
1214 struct rtl_phy *rtlphy = &(rtlpriv->phy); 1226 struct rtl_phy *rtlphy = &rtlpriv->phy;
1215 struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw)); 1227 struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
1216 1228
1217 if (rtlphy->sw_chnl_inprogress) 1229 if (rtlphy->sw_chnl_inprogress)
@@ -1237,9 +1249,140 @@ u8 rtl88e_phy_sw_chnl(struct ieee80211_hw *hw)
1237 return 1; 1249 return 1;
1238} 1250}
1239 1251
1252static bool _rtl88e_phy_sw_chnl_step_by_step(struct ieee80211_hw *hw,
1253 u8 channel, u8 *stage, u8 *step,
1254 u32 *delay)
1255{
1256 struct rtl_priv *rtlpriv = rtl_priv(hw);
1257 struct rtl_phy *rtlphy = &rtlpriv->phy;
1258 struct swchnlcmd precommoncmd[MAX_PRECMD_CNT];
1259 u32 precommoncmdcnt;
1260 struct swchnlcmd postcommoncmd[MAX_POSTCMD_CNT];
1261 u32 postcommoncmdcnt;
1262 struct swchnlcmd rfdependcmd[MAX_RFDEPENDCMD_CNT];
1263 u32 rfdependcmdcnt;
1264 struct swchnlcmd *currentcmd = NULL;
1265 u8 rfpath;
1266 u8 num_total_rfpath = rtlphy->num_total_rfpath;
1267
1268 precommoncmdcnt = 0;
1269 _rtl88e_phy_set_sw_chnl_cmdarray(precommoncmd, precommoncmdcnt++,
1270 MAX_PRECMD_CNT,
1271 CMDID_SET_TXPOWEROWER_LEVEL, 0, 0, 0);
1272 _rtl88e_phy_set_sw_chnl_cmdarray(precommoncmd, precommoncmdcnt++,
1273 MAX_PRECMD_CNT, CMDID_END, 0, 0, 0);
1274
1275 postcommoncmdcnt = 0;
1276
1277 _rtl88e_phy_set_sw_chnl_cmdarray(postcommoncmd, postcommoncmdcnt++,
1278 MAX_POSTCMD_CNT, CMDID_END, 0, 0, 0);
1279
1280 rfdependcmdcnt = 0;
1281
1282 RT_ASSERT((channel >= 1 && channel <= 14),
1283 "illegal channel for Zebra: %d\n", channel);
1284
1285 _rtl88e_phy_set_sw_chnl_cmdarray(rfdependcmd, rfdependcmdcnt++,
1286 MAX_RFDEPENDCMD_CNT, CMDID_RF_WRITEREG,
1287 RF_CHNLBW, channel, 10);
1288
1289 _rtl88e_phy_set_sw_chnl_cmdarray(rfdependcmd, rfdependcmdcnt++,
1290 MAX_RFDEPENDCMD_CNT, CMDID_END, 0, 0,
1291 0);
1292
1293 do {
1294 switch (*stage) {
1295 case 0:
1296 currentcmd = &precommoncmd[*step];
1297 break;
1298 case 1:
1299 currentcmd = &rfdependcmd[*step];
1300 break;
1301 case 2:
1302 currentcmd = &postcommoncmd[*step];
1303 break;
1304 default:
1305 RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
1306 "Invalid 'stage' = %d, Check it!\n", *stage);
1307 return true;
1308 }
1309
1310 if (currentcmd->cmdid == CMDID_END) {
1311 if ((*stage) == 2)
1312 return true;
1313 (*stage)++;
1314 (*step) = 0;
1315 continue;
1316 }
1317
1318 switch (currentcmd->cmdid) {
1319 case CMDID_SET_TXPOWEROWER_LEVEL:
1320 rtl88e_phy_set_txpower_level(hw, channel);
1321 break;
1322 case CMDID_WRITEPORT_ULONG:
1323 rtl_write_dword(rtlpriv, currentcmd->para1,
1324 currentcmd->para2);
1325 break;
1326 case CMDID_WRITEPORT_USHORT:
1327 rtl_write_word(rtlpriv, currentcmd->para1,
1328 (u16)currentcmd->para2);
1329 break;
1330 case CMDID_WRITEPORT_UCHAR:
1331 rtl_write_byte(rtlpriv, currentcmd->para1,
1332 (u8)currentcmd->para2);
1333 break;
1334 case CMDID_RF_WRITEREG:
1335 for (rfpath = 0; rfpath < num_total_rfpath; rfpath++) {
1336 rtlphy->rfreg_chnlval[rfpath] =
1337 ((rtlphy->rfreg_chnlval[rfpath] &
1338 0xfffffc00) | currentcmd->para2);
1339
1340 rtl_set_rfreg(hw, (enum radio_path)rfpath,
1341 currentcmd->para1,
1342 RFREG_OFFSET_MASK,
1343 rtlphy->rfreg_chnlval[rfpath]);
1344 }
1345 break;
1346 default:
1347 RT_TRACE(rtlpriv, COMP_ERR, DBG_LOUD,
1348 "switch case not process\n");
1349 break;
1350 }
1351
1352 break;
1353 } while (true);
1354
1355 (*delay) = currentcmd->msdelay;
1356 (*step)++;
1357 return false;
1358}
1359
1360static bool _rtl88e_phy_set_sw_chnl_cmdarray(struct swchnlcmd *cmdtable,
1361 u32 cmdtableidx, u32 cmdtablesz,
1362 enum swchnlcmd_id cmdid,
1363 u32 para1, u32 para2, u32 msdelay)
1364{
1365 struct swchnlcmd *pcmd;
1366
1367 if (cmdtable == NULL) {
1368 RT_ASSERT(false, "cmdtable cannot be NULL.\n");
1369 return false;
1370 }
1371
1372 if (cmdtableidx >= cmdtablesz)
1373 return false;
1374
1375 pcmd = cmdtable + cmdtableidx;
1376 pcmd->cmdid = cmdid;
1377 pcmd->para1 = para1;
1378 pcmd->para2 = para2;
1379 pcmd->msdelay = msdelay;
1380 return true;
1381}
1382
1240static u8 _rtl88e_phy_path_a_iqk(struct ieee80211_hw *hw, bool config_pathb) 1383static u8 _rtl88e_phy_path_a_iqk(struct ieee80211_hw *hw, bool config_pathb)
1241{ 1384{
1242 u32 reg_eac, reg_e94, reg_e9c; 1385 u32 reg_eac, reg_e94, reg_e9c, reg_ea4;
1243 u8 result = 0x00; 1386 u8 result = 0x00;
1244 1387
1245 rtl_set_bbreg(hw, 0xe30, MASKDWORD, 0x10008c1c); 1388 rtl_set_bbreg(hw, 0xe30, MASKDWORD, 0x10008c1c);
@@ -1256,6 +1399,7 @@ static u8 _rtl88e_phy_path_a_iqk(struct ieee80211_hw *hw, bool config_pathb)
1256 reg_eac = rtl_get_bbreg(hw, 0xeac, MASKDWORD); 1399 reg_eac = rtl_get_bbreg(hw, 0xeac, MASKDWORD);
1257 reg_e94 = rtl_get_bbreg(hw, 0xe94, MASKDWORD); 1400 reg_e94 = rtl_get_bbreg(hw, 0xe94, MASKDWORD);
1258 reg_e9c = rtl_get_bbreg(hw, 0xe9c, MASKDWORD); 1401 reg_e9c = rtl_get_bbreg(hw, 0xe9c, MASKDWORD);
1402 reg_ea4 = rtl_get_bbreg(hw, 0xea4, MASKDWORD);
1259 1403
1260 if (!(reg_eac & BIT(28)) && 1404 if (!(reg_eac & BIT(28)) &&
1261 (((reg_e94 & 0x03FF0000) >> 16) != 0x142) && 1405 (((reg_e94 & 0x03FF0000) >> 16) != 0x142) &&
@@ -1295,15 +1439,14 @@ static u8 _rtl88e_phy_path_a_rx_iqk(struct ieee80211_hw *hw, bool config_pathb)
1295{ 1439{
1296 u32 reg_eac, reg_e94, reg_e9c, reg_ea4, u32temp; 1440 u32 reg_eac, reg_e94, reg_e9c, reg_ea4, u32temp;
1297 u8 result = 0x00; 1441 u8 result = 0x00;
1298 int jj = RF90_PATH_A;
1299 1442
1300 /*Get TXIMR Setting*/ 1443 /*Get TXIMR Setting*/
1301 /*Modify RX IQK mode table*/ 1444 /*Modify RX IQK mode table*/
1302 rtl_set_bbreg(hw, RFPGA0_IQK, MASKDWORD, 0x00000000); 1445 rtl_set_bbreg(hw, RFPGA0_IQK, MASKDWORD, 0x00000000);
1303 rtl_set_rfreg(hw, jj, RF_WE_LUT, RFREG_OFFSET_MASK, 0x800a0); 1446 rtl_set_rfreg(hw, RF90_PATH_A, RF_WE_LUT, RFREG_OFFSET_MASK, 0x800a0);
1304 rtl_set_rfreg(hw, jj, RF_RCK_OS, RFREG_OFFSET_MASK, 0x30000); 1447 rtl_set_rfreg(hw, RF90_PATH_A, RF_RCK_OS, RFREG_OFFSET_MASK, 0x30000);
1305 rtl_set_rfreg(hw, jj, RF_TXPA_G1, RFREG_OFFSET_MASK, 0x0000f); 1448 rtl_set_rfreg(hw, RF90_PATH_A, RF_TXPA_G1, RFREG_OFFSET_MASK, 0x0000f);
1306 rtl_set_rfreg(hw, jj, RF_TXPA_G2, RFREG_OFFSET_MASK, 0xf117b); 1449 rtl_set_rfreg(hw, RF90_PATH_A, RF_TXPA_G2, RFREG_OFFSET_MASK, 0xf117b);
1307 rtl_set_bbreg(hw, RFPGA0_IQK, MASKDWORD, 0x80800000); 1450 rtl_set_bbreg(hw, RFPGA0_IQK, MASKDWORD, 0x80800000);
1308 1451
1309 /*IQK Setting*/ 1452 /*IQK Setting*/
@@ -1318,7 +1461,7 @@ static u8 _rtl88e_phy_path_a_rx_iqk(struct ieee80211_hw *hw, bool config_pathb)
1318 1461
1319 /*LO calibration Setting*/ 1462 /*LO calibration Setting*/
1320 rtl_set_bbreg(hw, RIQK_AGC_RSP, MASKDWORD, 0x0046a911); 1463 rtl_set_bbreg(hw, RIQK_AGC_RSP, MASKDWORD, 0x0046a911);
1321 /*one shot, path A LOK & iqk*/ 1464 /*one shot,path A LOK & iqk*/
1322 rtl_set_bbreg(hw, RIQK_AGC_PTS, MASKDWORD, 0xf9000000); 1465 rtl_set_bbreg(hw, RIQK_AGC_PTS, MASKDWORD, 0xf9000000);
1323 rtl_set_bbreg(hw, RIQK_AGC_PTS, MASKDWORD, 0xf8000000); 1466 rtl_set_bbreg(hw, RIQK_AGC_PTS, MASKDWORD, 0xf8000000);
1324 1467
@@ -1336,16 +1479,16 @@ static u8 _rtl88e_phy_path_a_rx_iqk(struct ieee80211_hw *hw, bool config_pathb)
1336 else 1479 else
1337 return result; 1480 return result;
1338 1481
1339 u32temp = 0x80007C00 | (reg_e94&0x3FF0000) | 1482 u32temp = 0x80007C00 | (reg_e94&0x3FF0000) |
1340 ((reg_e9c&0x3FF0000) >> 16); 1483 ((reg_e9c&0x3FF0000) >> 16);
1341 rtl_set_bbreg(hw, RTX_IQK, MASKDWORD, u32temp); 1484 rtl_set_bbreg(hw, RTX_IQK, MASKDWORD, u32temp);
1342 /*RX IQK*/ 1485 /*RX IQK*/
1343 /*Modify RX IQK mode table*/ 1486 /*Modify RX IQK mode table*/
1344 rtl_set_bbreg(hw, RFPGA0_IQK, MASKDWORD, 0x00000000); 1487 rtl_set_bbreg(hw, RFPGA0_IQK, MASKDWORD, 0x00000000);
1345 rtl_set_rfreg(hw, jj, RF_WE_LUT, RFREG_OFFSET_MASK, 0x800a0); 1488 rtl_set_rfreg(hw, RF90_PATH_A, RF_WE_LUT, RFREG_OFFSET_MASK, 0x800a0);
1346 rtl_set_rfreg(hw, jj, RF_RCK_OS, RFREG_OFFSET_MASK, 0x30000); 1489 rtl_set_rfreg(hw, RF90_PATH_A, RF_RCK_OS, RFREG_OFFSET_MASK, 0x30000);
1347 rtl_set_rfreg(hw, jj, RF_TXPA_G1, RFREG_OFFSET_MASK, 0x0000f); 1490 rtl_set_rfreg(hw, RF90_PATH_A, RF_TXPA_G1, RFREG_OFFSET_MASK, 0x0000f);
1348 rtl_set_rfreg(hw, jj, RF_TXPA_G2, RFREG_OFFSET_MASK, 0xf7ffa); 1491 rtl_set_rfreg(hw, RF90_PATH_A, RF_TXPA_G2, RFREG_OFFSET_MASK, 0xf7ffa);
1349 rtl_set_bbreg(hw, RFPGA0_IQK, MASKDWORD, 0x80800000); 1492 rtl_set_bbreg(hw, RFPGA0_IQK, MASKDWORD, 0x80800000);
1350 1493
1351 /*IQK Setting*/ 1494 /*IQK Setting*/
@@ -1359,7 +1502,7 @@ static u8 _rtl88e_phy_path_a_rx_iqk(struct ieee80211_hw *hw, bool config_pathb)
1359 1502
1360 /*LO calibration Setting*/ 1503 /*LO calibration Setting*/
1361 rtl_set_bbreg(hw, RIQK_AGC_RSP, MASKDWORD, 0x0046a911); 1504 rtl_set_bbreg(hw, RIQK_AGC_RSP, MASKDWORD, 0x0046a911);
1362 /*one shot, path A LOK & iqk*/ 1505 /*one shot,path A LOK & iqk*/
1363 rtl_set_bbreg(hw, RIQK_AGC_PTS, MASKDWORD, 0xf9000000); 1506 rtl_set_bbreg(hw, RIQK_AGC_PTS, MASKDWORD, 0xf9000000);
1364 rtl_set_bbreg(hw, RIQK_AGC_PTS, MASKDWORD, 0xf8000000); 1507 rtl_set_bbreg(hw, RIQK_AGC_PTS, MASKDWORD, 0xf8000000);
1365 1508
@@ -1377,57 +1520,58 @@ static u8 _rtl88e_phy_path_a_rx_iqk(struct ieee80211_hw *hw, bool config_pathb)
1377 return result; 1520 return result;
1378} 1521}
1379 1522
1380static void fill_iqk(struct ieee80211_hw *hw, bool iqk_ok, long result[][8], 1523static void _rtl88e_phy_path_a_fill_iqk_matrix(struct ieee80211_hw *hw,
1381 u8 final, bool btxonly) 1524 bool iqk_ok, long result[][8],
1525 u8 final_candidate, bool btxonly)
1382{ 1526{
1383 u32 oldval_0, x, tx0_a, reg; 1527 u32 oldval_0, x, tx0_a, reg;
1384 long y, tx0_c; 1528 long y, tx0_c;
1385 1529
1386 if (final == 0xFF) { 1530 if (final_candidate == 0xFF) {
1387 return; 1531 return;
1388 } else if (iqk_ok) { 1532 } else if (iqk_ok) {
1389 oldval_0 = (rtl_get_bbreg(hw, ROFDM0_XATXIQIMBAL, 1533 oldval_0 = (rtl_get_bbreg(hw, ROFDM0_XATXIQIMBALANCE,
1390 MASKDWORD) >> 22) & 0x3FF; 1534 MASKDWORD) >> 22) & 0x3FF;
1391 x = result[final][0]; 1535 x = result[final_candidate][0];
1392 if ((x & 0x00000200) != 0) 1536 if ((x & 0x00000200) != 0)
1393 x = x | 0xFFFFFC00; 1537 x = x | 0xFFFFFC00;
1394 tx0_a = (x * oldval_0) >> 8; 1538 tx0_a = (x * oldval_0) >> 8;
1395 rtl_set_bbreg(hw, ROFDM0_XATXIQIMBAL, 0x3FF, tx0_a); 1539 rtl_set_bbreg(hw, ROFDM0_XATXIQIMBALANCE, 0x3FF, tx0_a);
1396 rtl_set_bbreg(hw, ROFDM0_ECCATHRES, BIT(31), 1540 rtl_set_bbreg(hw, ROFDM0_ECCATHRESHOLD, BIT(31),
1397 ((x * oldval_0 >> 7) & 0x1)); 1541 ((x * oldval_0 >> 7) & 0x1));
1398 y = result[final][1]; 1542 y = result[final_candidate][1];
1399 if ((y & 0x00000200) != 0) 1543 if ((y & 0x00000200) != 0)
1400 y |= 0xFFFFFC00; 1544 y = y | 0xFFFFFC00;
1401 tx0_c = (y * oldval_0) >> 8; 1545 tx0_c = (y * oldval_0) >> 8;
1402 rtl_set_bbreg(hw, ROFDM0_XCTXAFE, 0xF0000000, 1546 rtl_set_bbreg(hw, ROFDM0_XCTXAFE, 0xF0000000,
1403 ((tx0_c & 0x3C0) >> 6)); 1547 ((tx0_c & 0x3C0) >> 6));
1404 rtl_set_bbreg(hw, ROFDM0_XATXIQIMBAL, 0x003F0000, 1548 rtl_set_bbreg(hw, ROFDM0_XATXIQIMBALANCE, 0x003F0000,
1405 (tx0_c & 0x3F)); 1549 (tx0_c & 0x3F));
1406 rtl_set_bbreg(hw, ROFDM0_ECCATHRES, BIT(29), 1550 rtl_set_bbreg(hw, ROFDM0_ECCATHRESHOLD, BIT(29),
1407 ((y * oldval_0 >> 7) & 0x1)); 1551 ((y * oldval_0 >> 7) & 0x1));
1408 if (btxonly) 1552 if (btxonly)
1409 return; 1553 return;
1410 reg = result[final][2]; 1554 reg = result[final_candidate][2];
1411 rtl_set_bbreg(hw, ROFDM0_XARXIQIMBAL, 0x3FF, reg); 1555 rtl_set_bbreg(hw, ROFDM0_XARXIQIMBALANCE, 0x3FF, reg);
1412 reg = result[final][3] & 0x3F; 1556 reg = result[final_candidate][3] & 0x3F;
1413 rtl_set_bbreg(hw, ROFDM0_XARXIQIMBAL, 0xFC00, reg); 1557 rtl_set_bbreg(hw, ROFDM0_XARXIQIMBALANCE, 0xFC00, reg);
1414 reg = (result[final][3] >> 6) & 0xF; 1558 reg = (result[final_candidate][3] >> 6) & 0xF;
1415 rtl_set_bbreg(hw, 0xca0, 0xF0000000, reg); 1559 rtl_set_bbreg(hw, 0xca0, 0xF0000000, reg);
1416 } 1560 }
1417} 1561}
1418 1562
1419static void save_adda_reg(struct ieee80211_hw *hw, 1563static void _rtl88e_phy_save_adda_registers(struct ieee80211_hw *hw,
1420 const u32 *addareg, u32 *backup, 1564 u32 *addareg, u32 *addabackup,
1421 u32 registernum) 1565 u32 registernum)
1422{ 1566{
1423 u32 i; 1567 u32 i;
1424 1568
1425 for (i = 0; i < registernum; i++) 1569 for (i = 0; i < registernum; i++)
1426 backup[i] = rtl_get_bbreg(hw, addareg[i], MASKDWORD); 1570 addabackup[i] = rtl_get_bbreg(hw, addareg[i], MASKDWORD);
1427} 1571}
1428 1572
1429static void save_mac_reg(struct ieee80211_hw *hw, const u32 *macreg, 1573static void _rtl88e_phy_save_mac_registers(struct ieee80211_hw *hw,
1430 u32 *macbackup) 1574 u32 *macreg, u32 *macbackup)
1431{ 1575{
1432 struct rtl_priv *rtlpriv = rtl_priv(hw); 1576 struct rtl_priv *rtlpriv = rtl_priv(hw);
1433 u32 i; 1577 u32 i;
@@ -1437,17 +1581,18 @@ static void save_mac_reg(struct ieee80211_hw *hw, const u32 *macreg,
1437 macbackup[i] = rtl_read_dword(rtlpriv, macreg[i]); 1581 macbackup[i] = rtl_read_dword(rtlpriv, macreg[i]);
1438} 1582}
1439 1583
1440static void reload_adda(struct ieee80211_hw *hw, const u32 *addareg, 1584static void _rtl88e_phy_reload_adda_registers(struct ieee80211_hw *hw,
1441 u32 *backup, u32 reg_num) 1585 u32 *addareg, u32 *addabackup,
1586 u32 regiesternum)
1442{ 1587{
1443 u32 i; 1588 u32 i;
1444 1589
1445 for (i = 0; i < reg_num; i++) 1590 for (i = 0; i < regiesternum; i++)
1446 rtl_set_bbreg(hw, addareg[i], MASKDWORD, backup[i]); 1591 rtl_set_bbreg(hw, addareg[i], MASKDWORD, addabackup[i]);
1447} 1592}
1448 1593
1449static void reload_mac(struct ieee80211_hw *hw, const u32 *macreg, 1594static void _rtl88e_phy_reload_mac_registers(struct ieee80211_hw *hw,
1450 u32 *macbackup) 1595 u32 *macreg, u32 *macbackup)
1451{ 1596{
1452 struct rtl_priv *rtlpriv = rtl_priv(hw); 1597 struct rtl_priv *rtlpriv = rtl_priv(hw);
1453 u32 i; 1598 u32 i;
@@ -1458,8 +1603,7 @@ static void reload_mac(struct ieee80211_hw *hw, const u32 *macreg,
1458} 1603}
1459 1604
1460static void _rtl88e_phy_path_adda_on(struct ieee80211_hw *hw, 1605static void _rtl88e_phy_path_adda_on(struct ieee80211_hw *hw,
1461 const u32 *addareg, bool is_patha_on, 1606 u32 *addareg, bool is_patha_on, bool is2t)
1462 bool is2t)
1463{ 1607{
1464 u32 pathon; 1608 u32 pathon;
1465 u32 i; 1609 u32 i;
@@ -1477,8 +1621,7 @@ static void _rtl88e_phy_path_adda_on(struct ieee80211_hw *hw,
1477} 1621}
1478 1622
1479static void _rtl88e_phy_mac_setting_calibration(struct ieee80211_hw *hw, 1623static void _rtl88e_phy_mac_setting_calibration(struct ieee80211_hw *hw,
1480 const u32 *macreg, 1624 u32 *macreg, u32 *macbackup)
1481 u32 *macbackup)
1482{ 1625{
1483 struct rtl_priv *rtlpriv = rtl_priv(hw); 1626 struct rtl_priv *rtlpriv = rtl_priv(hw);
1484 u32 i = 0; 1627 u32 i = 0;
@@ -1507,12 +1650,13 @@ static void _rtl88e_phy_pi_mode_switch(struct ieee80211_hw *hw, bool pi_mode)
1507 rtl_set_bbreg(hw, 0x828, MASKDWORD, mode); 1650 rtl_set_bbreg(hw, 0x828, MASKDWORD, mode);
1508} 1651}
1509 1652
1510static bool sim_comp(struct ieee80211_hw *hw, long result[][8], u8 c1, u8 c2) 1653static bool _rtl88e_phy_simularity_compare(struct ieee80211_hw *hw,
1654 long result[][8], u8 c1, u8 c2)
1511{ 1655{
1512 u32 i, j, diff, bitmap, bound; 1656 u32 i, j, diff, simularity_bitmap, bound;
1513 struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw)); 1657 struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
1514 1658
1515 u8 final[2] = {0xFF, 0xFF}; 1659 u8 final_candidate[2] = { 0xFF, 0xFF };
1516 bool bresult = true, is2t = IS_92C_SERIAL(rtlhal->version); 1660 bool bresult = true, is2t = IS_92C_SERIAL(rtlhal->version);
1517 1661
1518 if (is2t) 1662 if (is2t)
@@ -1520,81 +1664,88 @@ static bool sim_comp(struct ieee80211_hw *hw, long result[][8], u8 c1, u8 c2)
1520 else 1664 else
1521 bound = 4; 1665 bound = 4;
1522 1666
1523 bitmap = 0; 1667 simularity_bitmap = 0;
1524 1668
1525 for (i = 0; i < bound; i++) { 1669 for (i = 0; i < bound; i++) {
1526 diff = (result[c1][i] > result[c2][i]) ? 1670 diff = (result[c1][i] > result[c2][i]) ?
1527 (result[c1][i] - result[c2][i]) : 1671 (result[c1][i] - result[c2][i]) :
1528 (result[c2][i] - result[c1][i]); 1672 (result[c2][i] - result[c1][i]);
1529 1673
1530 if (diff > MAX_TOLERANCE) { 1674 if (diff > MAX_TOLERANCE) {
1531 if ((i == 2 || i == 6) && !bitmap) { 1675 if ((i == 2 || i == 6) && !simularity_bitmap) {
1532 if (result[c1][i] + result[c1][i + 1] == 0) 1676 if (result[c1][i] + result[c1][i + 1] == 0)
1533 final[(i / 4)] = c2; 1677 final_candidate[(i / 4)] = c2;
1534 else if (result[c2][i] + result[c2][i + 1] == 0) 1678 else if (result[c2][i] + result[c2][i + 1] == 0)
1535 final[(i / 4)] = c1; 1679 final_candidate[(i / 4)] = c1;
1536 else 1680 else
1537 bitmap = bitmap | (1 << i); 1681 simularity_bitmap = simularity_bitmap |
1538 } else { 1682 (1 << i);
1539 bitmap = bitmap | (1 << i); 1683 } else
1540 } 1684 simularity_bitmap =
1685 simularity_bitmap | (1 << i);
1541 } 1686 }
1542 } 1687 }
1543 1688
1544 if (bitmap == 0) { 1689 if (simularity_bitmap == 0) {
1545 for (i = 0; i < (bound / 4); i++) { 1690 for (i = 0; i < (bound / 4); i++) {
1546 if (final[i] != 0xFF) { 1691 if (final_candidate[i] != 0xFF) {
1547 for (j = i * 4; j < (i + 1) * 4 - 2; j++) 1692 for (j = i * 4; j < (i + 1) * 4 - 2; j++)
1548 result[3][j] = result[final[i]][j]; 1693 result[3][j] =
1694 result[final_candidate[i]][j];
1549 bresult = false; 1695 bresult = false;
1550 } 1696 }
1551 } 1697 }
1552 return bresult; 1698 return bresult;
1553 } else if (!(bitmap & 0x0F)) { 1699 } else if (!(simularity_bitmap & 0x0F)) {
1554 for (i = 0; i < 4; i++) 1700 for (i = 0; i < 4; i++)
1555 result[3][i] = result[c1][i]; 1701 result[3][i] = result[c1][i];
1556 return false; 1702 return false;
1557 } else if (!(bitmap & 0xF0) && is2t) { 1703 } else if (!(simularity_bitmap & 0xF0) && is2t) {
1558 for (i = 4; i < 8; i++) 1704 for (i = 4; i < 8; i++)
1559 result[3][i] = result[c1][i]; 1705 result[3][i] = result[c1][i];
1560 return false; 1706 return false;
1561 } else { 1707 } else {
1562 return false; 1708 return false;
1563 } 1709 }
1710
1564} 1711}
1565 1712
1566static void _rtl88e_phy_iq_calibrate(struct ieee80211_hw *hw, 1713static void _rtl88e_phy_iq_calibrate(struct ieee80211_hw *hw,
1567 long result[][8], u8 t, bool is2t) 1714 long result[][8], u8 t, bool is2t)
1568{ 1715{
1569 struct rtl_priv *rtlpriv = rtl_priv(hw); 1716 struct rtl_priv *rtlpriv = rtl_priv(hw);
1570 struct rtl_phy *rtlphy = &(rtlpriv->phy); 1717 struct rtl_phy *rtlphy = &rtlpriv->phy;
1571 u32 i; 1718 u32 i;
1572 u8 patha_ok, pathb_ok; 1719 u8 patha_ok, pathb_ok;
1573 const u32 adda_reg[IQK_ADDA_REG_NUM] = { 1720 u32 adda_reg[IQK_ADDA_REG_NUM] = {
1574 0x85c, 0xe6c, 0xe70, 0xe74, 1721 0x85c, 0xe6c, 0xe70, 0xe74,
1575 0xe78, 0xe7c, 0xe80, 0xe84, 1722 0xe78, 0xe7c, 0xe80, 0xe84,
1576 0xe88, 0xe8c, 0xed0, 0xed4, 1723 0xe88, 0xe8c, 0xed0, 0xed4,
1577 0xed8, 0xedc, 0xee0, 0xeec 1724 0xed8, 0xedc, 0xee0, 0xeec
1578 }; 1725 };
1579 const u32 iqk_mac_reg[IQK_MAC_REG_NUM] = { 1726 u32 iqk_mac_reg[IQK_MAC_REG_NUM] = {
1580 0x522, 0x550, 0x551, 0x040 1727 0x522, 0x550, 0x551, 0x040
1581 }; 1728 };
1582 const u32 iqk_bb_reg[IQK_BB_REG_NUM] = { 1729 u32 iqk_bb_reg[IQK_BB_REG_NUM] = {
1583 ROFDM0_TRXPATHENABLE, ROFDM0_TRMUXPAR, RFPGA0_XCD_RFINTERFACESW, 1730 ROFDM0_TRXPATHENABLE, ROFDM0_TRMUXPAR,
1584 0xb68, 0xb6c, 0x870, 0x860, 0x864, 0x800 1731 RFPGA0_XCD_RFINTERFACESW, 0xb68, 0xb6c,
1732 0x870, 0x860, 0x864, 0x800
1585 }; 1733 };
1586 const u32 retrycount = 2; 1734 const u32 retrycount = 2;
1587 1735
1588 if (t == 0) { 1736 if (t == 0) {
1589 save_adda_reg(hw, adda_reg, rtlphy->adda_backup, 16); 1737 _rtl88e_phy_save_adda_registers(hw, adda_reg,
1590 save_mac_reg(hw, iqk_mac_reg, rtlphy->iqk_mac_backup); 1738 rtlphy->adda_backup, 16);
1591 save_adda_reg(hw, iqk_bb_reg, rtlphy->iqk_bb_backup, 1739 _rtl88e_phy_save_mac_registers(hw, iqk_mac_reg,
1592 IQK_BB_REG_NUM); 1740 rtlphy->iqk_mac_backup);
1741 _rtl88e_phy_save_adda_registers(hw, iqk_bb_reg,
1742 rtlphy->iqk_bb_backup,
1743 IQK_BB_REG_NUM);
1593 } 1744 }
1594 _rtl88e_phy_path_adda_on(hw, adda_reg, true, is2t); 1745 _rtl88e_phy_path_adda_on(hw, adda_reg, true, is2t);
1595 if (t == 0) { 1746 if (t == 0) {
1596 rtlphy->rfpi_enable = (u8) rtl_get_bbreg(hw, 1747 rtlphy->rfpi_enable =
1597 RFPGA0_XA_HSSIPARAMETER1, BIT(8)); 1748 (u8)rtl_get_bbreg(hw, RFPGA0_XA_HSSIPARAMETER1, BIT(8));
1598 } 1749 }
1599 1750
1600 if (!rtlphy->rfpi_enable) 1751 if (!rtlphy->rfpi_enable)
@@ -1652,10 +1803,9 @@ static void _rtl88e_phy_iq_calibrate(struct ieee80211_hw *hw,
1652 } 1803 }
1653 } 1804 }
1654 1805
1655 if (0 == patha_ok) { 1806 if (0 == patha_ok)
1656 RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, 1807 RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
1657 "Path A IQK Success!!\n"); 1808 "Path A IQK Success!!\n");
1658 }
1659 if (is2t) { 1809 if (is2t) {
1660 _rtl88e_phy_path_a_standby(hw); 1810 _rtl88e_phy_path_a_standby(hw);
1661 _rtl88e_phy_path_adda_on(hw, adda_reg, false, is2t); 1811 _rtl88e_phy_path_adda_on(hw, adda_reg, false, is2t);
@@ -1663,21 +1813,23 @@ static void _rtl88e_phy_iq_calibrate(struct ieee80211_hw *hw,
1663 pathb_ok = _rtl88e_phy_path_b_iqk(hw); 1813 pathb_ok = _rtl88e_phy_path_b_iqk(hw);
1664 if (pathb_ok == 0x03) { 1814 if (pathb_ok == 0x03) {
1665 result[t][4] = (rtl_get_bbreg(hw, 1815 result[t][4] = (rtl_get_bbreg(hw,
1666 0xeb4, MASKDWORD) & 1816 0xeb4,
1817 MASKDWORD) &
1667 0x3FF0000) >> 16; 1818 0x3FF0000) >> 16;
1668 result[t][5] = 1819 result[t][5] =
1669 (rtl_get_bbreg(hw, 0xebc, MASKDWORD) & 1820 (rtl_get_bbreg(hw, 0xebc, MASKDWORD) &
1670 0x3FF0000) >> 16; 1821 0x3FF0000) >> 16;
1671 result[t][6] = 1822 result[t][6] =
1672 (rtl_get_bbreg(hw, 0xec4, MASKDWORD) & 1823 (rtl_get_bbreg(hw, 0xec4, MASKDWORD) &
1673 0x3FF0000) >> 16; 1824 0x3FF0000) >> 16;
1674 result[t][7] = 1825 result[t][7] =
1675 (rtl_get_bbreg(hw, 0xecc, MASKDWORD) & 1826 (rtl_get_bbreg(hw, 0xecc, MASKDWORD) &
1676 0x3FF0000) >> 16; 1827 0x3FF0000) >> 16;
1677 break; 1828 break;
1678 } else if (i == (retrycount - 1) && pathb_ok == 0x01) { 1829 } else if (i == (retrycount - 1) && pathb_ok == 0x01) {
1679 result[t][4] = (rtl_get_bbreg(hw, 1830 result[t][4] = (rtl_get_bbreg(hw,
1680 0xeb4, MASKDWORD) & 1831 0xeb4,
1832 MASKDWORD) &
1681 0x3FF0000) >> 16; 1833 0x3FF0000) >> 16;
1682 } 1834 }
1683 result[t][5] = (rtl_get_bbreg(hw, 0xebc, MASKDWORD) & 1835 result[t][5] = (rtl_get_bbreg(hw, 0xebc, MASKDWORD) &
@@ -1690,10 +1842,13 @@ static void _rtl88e_phy_iq_calibrate(struct ieee80211_hw *hw,
1690 if (t != 0) { 1842 if (t != 0) {
1691 if (!rtlphy->rfpi_enable) 1843 if (!rtlphy->rfpi_enable)
1692 _rtl88e_phy_pi_mode_switch(hw, false); 1844 _rtl88e_phy_pi_mode_switch(hw, false);
1693 reload_adda(hw, adda_reg, rtlphy->adda_backup, 16); 1845 _rtl88e_phy_reload_adda_registers(hw, adda_reg,
1694 reload_mac(hw, iqk_mac_reg, rtlphy->iqk_mac_backup); 1846 rtlphy->adda_backup, 16);
1695 reload_adda(hw, iqk_bb_reg, rtlphy->iqk_bb_backup, 1847 _rtl88e_phy_reload_mac_registers(hw, iqk_mac_reg,
1696 IQK_BB_REG_NUM); 1848 rtlphy->iqk_mac_backup);
1849 _rtl88e_phy_reload_adda_registers(hw, iqk_bb_reg,
1850 rtlphy->iqk_bb_backup,
1851 IQK_BB_REG_NUM);
1697 1852
1698 rtl_set_bbreg(hw, 0x840, MASKDWORD, 0x00032ed3); 1853 rtl_set_bbreg(hw, 0x840, MASKDWORD, 0x00032ed3);
1699 if (is2t) 1854 if (is2t)
@@ -1709,8 +1864,6 @@ static void _rtl88e_phy_lc_calibrate(struct ieee80211_hw *hw, bool is2t)
1709 u8 tmpreg; 1864 u8 tmpreg;
1710 u32 rf_a_mode = 0, rf_b_mode = 0, lc_cal; 1865 u32 rf_a_mode = 0, rf_b_mode = 0, lc_cal;
1711 struct rtl_priv *rtlpriv = rtl_priv(hw); 1866 struct rtl_priv *rtlpriv = rtl_priv(hw);
1712 int jj = RF90_PATH_A;
1713 int kk = RF90_PATH_B;
1714 1867
1715 tmpreg = rtl_read_byte(rtlpriv, 0xd03); 1868 tmpreg = rtl_read_byte(rtlpriv, 0xd03);
1716 1869
@@ -1720,51 +1873,52 @@ static void _rtl88e_phy_lc_calibrate(struct ieee80211_hw *hw, bool is2t)
1720 rtl_write_byte(rtlpriv, REG_TXPAUSE, 0xFF); 1873 rtl_write_byte(rtlpriv, REG_TXPAUSE, 0xFF);
1721 1874
1722 if ((tmpreg & 0x70) != 0) { 1875 if ((tmpreg & 0x70) != 0) {
1723 rf_a_mode = rtl_get_rfreg(hw, jj, 0x00, MASK12BITS); 1876 rf_a_mode = rtl_get_rfreg(hw, RF90_PATH_A, 0x00, MASK12BITS);
1724 1877
1725 if (is2t) 1878 if (is2t)
1726 rf_b_mode = rtl_get_rfreg(hw, kk, 0x00, 1879 rf_b_mode = rtl_get_rfreg(hw, RF90_PATH_B, 0x00,
1727 MASK12BITS); 1880 MASK12BITS);
1728 1881
1729 rtl_set_rfreg(hw, jj, 0x00, MASK12BITS, 1882 rtl_set_rfreg(hw, RF90_PATH_A, 0x00, MASK12BITS,
1730 (rf_a_mode & 0x8FFFF) | 0x10000); 1883 (rf_a_mode & 0x8FFFF) | 0x10000);
1731 1884
1732 if (is2t) 1885 if (is2t)
1733 rtl_set_rfreg(hw, kk, 0x00, MASK12BITS, 1886 rtl_set_rfreg(hw, RF90_PATH_B, 0x00, MASK12BITS,
1734 (rf_b_mode & 0x8FFFF) | 0x10000); 1887 (rf_b_mode & 0x8FFFF) | 0x10000);
1735 } 1888 }
1736 lc_cal = rtl_get_rfreg(hw, jj, 0x18, MASK12BITS); 1889 lc_cal = rtl_get_rfreg(hw, RF90_PATH_A, 0x18, MASK12BITS);
1737 1890
1738 rtl_set_rfreg(hw, jj, 0x18, MASK12BITS, lc_cal | 0x08000); 1891 rtl_set_rfreg(hw, RF90_PATH_A, 0x18, MASK12BITS, lc_cal | 0x08000);
1739 1892
1740 mdelay(100); 1893 mdelay(100);
1741 1894
1742 if ((tmpreg & 0x70) != 0) { 1895 if ((tmpreg & 0x70) != 0) {
1743 rtl_write_byte(rtlpriv, 0xd03, tmpreg); 1896 rtl_write_byte(rtlpriv, 0xd03, tmpreg);
1744 rtl_set_rfreg(hw, jj, 0x00, MASK12BITS, rf_a_mode); 1897 rtl_set_rfreg(hw, RF90_PATH_A, 0x00, MASK12BITS, rf_a_mode);
1745 1898
1746 if (is2t) 1899 if (is2t)
1747 rtl_set_rfreg(hw, kk, 0x00, MASK12BITS, 1900 rtl_set_rfreg(hw, RF90_PATH_B, 0x00, MASK12BITS,
1748 rf_b_mode); 1901 rf_b_mode);
1749 } else { 1902 } else {
1750 rtl_write_byte(rtlpriv, REG_TXPAUSE, 0x00); 1903 rtl_write_byte(rtlpriv, REG_TXPAUSE, 0x00);
1751 } 1904 }
1752 RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, "\n"); 1905RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, "\n");
1906
1753} 1907}
1754 1908
1755static void rfpath_switch(struct ieee80211_hw *hw, 1909static void _rtl88e_phy_set_rfpath_switch(struct ieee80211_hw *hw,
1756 bool bmain, bool is2t) 1910 bool bmain, bool is2t)
1757{ 1911{
1758 struct rtl_priv *rtlpriv = rtl_priv(hw); 1912 struct rtl_priv *rtlpriv = rtl_priv(hw);
1759 struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw)); 1913 struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
1760 struct rtl_efuse *fuse = rtl_efuse(rtl_priv(hw)); 1914 struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw));
1761 RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, "\n"); 1915 RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, "\n");
1762 1916
1763 if (is_hal_stop(rtlhal)) { 1917 if (is_hal_stop(rtlhal)) {
1764 u8 u1btmp; 1918 u8 u1btmp;
1765 u1btmp = rtl_read_byte(rtlpriv, REG_LEDCFG0); 1919 u1btmp = rtl_read_byte(rtlpriv, REG_LEDCFG0);
1766 rtl_write_byte(rtlpriv, REG_LEDCFG0, u1btmp | BIT(7)); 1920 rtl_write_byte(rtlpriv, REG_LEDCFG0, u1btmp | BIT(7));
1767 rtl_set_bbreg(hw, rFPGA0_XAB_RFPARAMETER, BIT(13), 0x01); 1921 rtl_set_bbreg(hw, RFPGA0_XAB_RFPARAMETER, BIT(13), 0x01);
1768 } 1922 }
1769 if (is2t) { 1923 if (is2t) {
1770 if (bmain) 1924 if (bmain)
@@ -1777,24 +1931,24 @@ static void rfpath_switch(struct ieee80211_hw *hw,
1777 rtl_set_bbreg(hw, RFPGA0_XAB_RFINTERFACESW, BIT(8) | BIT(9), 0); 1931 rtl_set_bbreg(hw, RFPGA0_XAB_RFINTERFACESW, BIT(8) | BIT(9), 0);
1778 rtl_set_bbreg(hw, 0x914, MASKLWORD, 0x0201); 1932 rtl_set_bbreg(hw, 0x914, MASKLWORD, 0x0201);
1779 1933
1780 /* We use the RF definition of MAIN and AUX, left antenna and 1934 /* We use the RF definition of MAIN and AUX,
1781 * right antenna repectively. 1935 * left antenna and right antenna repectively.
1782 * Default output at AUX. 1936 * Default output at AUX.
1783 */ 1937 */
1784 if (bmain) { 1938 if (bmain) {
1785 rtl_set_bbreg(hw, RFPGA0_XA_RFINTERFACEOE, BIT(14) | 1939 rtl_set_bbreg(hw, RFPGA0_XA_RFINTERFACEOE,
1786 BIT(13) | BIT(12), 0); 1940 BIT(14) | BIT(13) | BIT(12), 0);
1787 rtl_set_bbreg(hw, RFPGA0_XB_RFINTERFACEOE, BIT(5) | 1941 rtl_set_bbreg(hw, RFPGA0_XB_RFINTERFACEOE,
1788 BIT(4) | BIT(3), 0); 1942 BIT(5) | BIT(4) | BIT(3), 0);
1789 if (fuse->antenna_div_type == CGCS_RX_HW_ANTDIV) 1943 if (rtlefuse->antenna_div_type == CGCS_RX_HW_ANTDIV)
1790 rtl_set_bbreg(hw, RCONFIG_RAM64X16, BIT(31), 0); 1944 rtl_set_bbreg(hw, RCONFIG_RAM64x16, BIT(31), 0);
1791 } else { 1945 } else {
1792 rtl_set_bbreg(hw, RFPGA0_XA_RFINTERFACEOE, BIT(14) | 1946 rtl_set_bbreg(hw, RFPGA0_XA_RFINTERFACEOE,
1793 BIT(13) | BIT(12), 1); 1947 BIT(14) | BIT(13) | BIT(12), 1);
1794 rtl_set_bbreg(hw, RFPGA0_XB_RFINTERFACEOE, BIT(5) | 1948 rtl_set_bbreg(hw, RFPGA0_XB_RFINTERFACEOE,
1795 BIT(4) | BIT(3), 1); 1949 BIT(5) | BIT(4) | BIT(3), 1);
1796 if (fuse->antenna_div_type == CGCS_RX_HW_ANTDIV) 1950 if (rtlefuse->antenna_div_type == CGCS_RX_HW_ANTDIV)
1797 rtl_set_bbreg(hw, RCONFIG_RAM64X16, BIT(31), 1); 1951 rtl_set_bbreg(hw, RCONFIG_RAM64x16, BIT(31), 1);
1798 } 1952 }
1799 } 1953 }
1800} 1954}
@@ -1802,35 +1956,44 @@ static void rfpath_switch(struct ieee80211_hw *hw,
1802#undef IQK_ADDA_REG_NUM 1956#undef IQK_ADDA_REG_NUM
1803#undef IQK_DELAY_TIME 1957#undef IQK_DELAY_TIME
1804 1958
1805void rtl88e_phy_iq_calibrate(struct ieee80211_hw *hw, bool recovery) 1959void rtl88e_phy_iq_calibrate(struct ieee80211_hw *hw, bool b_recovery)
1806{ 1960{
1807 struct rtl_priv *rtlpriv = rtl_priv(hw); 1961 struct rtl_priv *rtlpriv = rtl_priv(hw);
1808 struct rtl_phy *rtlphy = &(rtlpriv->phy); 1962 struct rtl_phy *rtlphy = &rtlpriv->phy;
1809 long result[4][8]; 1963 long result[4][8];
1810 u8 i, final; 1964 u8 i, final_candidate;
1811 bool patha_ok; 1965 bool b_patha_ok, b_pathb_ok;
1812 long reg_e94, reg_e9c, reg_ea4, reg_eb4, reg_ebc, reg_tmp = 0; 1966 long reg_e94, reg_e9c, reg_ea4, reg_eac, reg_eb4, reg_ebc, reg_ec4,
1967 reg_ecc, reg_tmp = 0;
1813 bool is12simular, is13simular, is23simular; 1968 bool is12simular, is13simular, is23simular;
1814 u32 iqk_bb_reg[9] = { 1969 u32 iqk_bb_reg[9] = {
1815 ROFDM0_XARXIQIMBAL, 1970 ROFDM0_XARXIQIMBALANCE,
1816 ROFDM0_XBRXIQIMBAL, 1971 ROFDM0_XBRXIQIMBALANCE,
1817 ROFDM0_ECCATHRES, 1972 ROFDM0_ECCATHRESHOLD,
1818 ROFDM0_AGCRSSITABLE, 1973 ROFDM0_AGCRSSITABLE,
1819 ROFDM0_XATXIQIMBAL, 1974 ROFDM0_XATXIQIMBALANCE,
1820 ROFDM0_XBTXIQIMBAL, 1975 ROFDM0_XBTXIQIMBALANCE,
1821 ROFDM0_XCTXAFE, 1976 ROFDM0_XCTXAFE,
1822 ROFDM0_XDTXAFE, 1977 ROFDM0_XDTXAFE,
1823 ROFDM0_RXIQEXTANTA 1978 ROFDM0_RXIQEXTANTA
1824 }; 1979 };
1825 1980
1826 if (recovery) { 1981 if (b_recovery) {
1827 reload_adda(hw, iqk_bb_reg, rtlphy->iqk_bb_backup, 9); 1982 _rtl88e_phy_reload_adda_registers(hw,
1983 iqk_bb_reg,
1984 rtlphy->iqk_bb_backup, 9);
1828 return; 1985 return;
1829 } 1986 }
1830 1987
1831 memset(result, 0, 32 * sizeof(long)); 1988 for (i = 0; i < 8; i++) {
1832 final = 0xff; 1989 result[0][i] = 0;
1833 patha_ok = false; 1990 result[1][i] = 0;
1991 result[2][i] = 0;
1992 result[3][i] = 0;
1993 }
1994 final_candidate = 0xff;
1995 b_patha_ok = false;
1996 b_pathb_ok = false;
1834 is12simular = false; 1997 is12simular = false;
1835 is23simular = false; 1998 is23simular = false;
1836 is13simular = false; 1999 is13simular = false;
@@ -1840,29 +2003,32 @@ void rtl88e_phy_iq_calibrate(struct ieee80211_hw *hw, bool recovery)
1840 else 2003 else
1841 _rtl88e_phy_iq_calibrate(hw, result, i, false); 2004 _rtl88e_phy_iq_calibrate(hw, result, i, false);
1842 if (i == 1) { 2005 if (i == 1) {
1843 is12simular = sim_comp(hw, result, 0, 1); 2006 is12simular =
2007 _rtl88e_phy_simularity_compare(hw, result, 0, 1);
1844 if (is12simular) { 2008 if (is12simular) {
1845 final = 0; 2009 final_candidate = 0;
1846 break; 2010 break;
1847 } 2011 }
1848 } 2012 }
1849 if (i == 2) { 2013 if (i == 2) {
1850 is13simular = sim_comp(hw, result, 0, 2); 2014 is13simular =
2015 _rtl88e_phy_simularity_compare(hw, result, 0, 2);
1851 if (is13simular) { 2016 if (is13simular) {
1852 final = 0; 2017 final_candidate = 0;
1853 break; 2018 break;
1854 } 2019 }
1855 is23simular = sim_comp(hw, result, 1, 2); 2020 is23simular =
2021 _rtl88e_phy_simularity_compare(hw, result, 1, 2);
1856 if (is23simular) { 2022 if (is23simular) {
1857 final = 1; 2023 final_candidate = 1;
1858 } else { 2024 } else {
1859 for (i = 0; i < 8; i++) 2025 for (i = 0; i < 8; i++)
1860 reg_tmp += result[3][i]; 2026 reg_tmp += result[3][i];
1861 2027
1862 if (reg_tmp != 0) 2028 if (reg_tmp != 0)
1863 final = 3; 2029 final_candidate = 3;
1864 else 2030 else
1865 final = 0xFF; 2031 final_candidate = 0xFF;
1866 } 2032 }
1867 } 2033 }
1868 } 2034 }
@@ -1870,47 +2036,55 @@ void rtl88e_phy_iq_calibrate(struct ieee80211_hw *hw, bool recovery)
1870 reg_e94 = result[i][0]; 2036 reg_e94 = result[i][0];
1871 reg_e9c = result[i][1]; 2037 reg_e9c = result[i][1];
1872 reg_ea4 = result[i][2]; 2038 reg_ea4 = result[i][2];
2039 reg_eac = result[i][3];
1873 reg_eb4 = result[i][4]; 2040 reg_eb4 = result[i][4];
1874 reg_ebc = result[i][5]; 2041 reg_ebc = result[i][5];
2042 reg_ec4 = result[i][6];
2043 reg_ecc = result[i][7];
1875 } 2044 }
1876 if (final != 0xff) { 2045 if (final_candidate != 0xff) {
1877 reg_e94 = result[final][0]; 2046 reg_e94 = result[final_candidate][0];
1878 rtlphy->reg_e94 = reg_e94; 2047 reg_e9c = result[final_candidate][1];
1879 reg_e9c = result[final][1]; 2048 reg_ea4 = result[final_candidate][2];
1880 rtlphy->reg_e9c = reg_e9c; 2049 reg_eac = result[final_candidate][3];
1881 reg_ea4 = result[final][2]; 2050 reg_eb4 = result[final_candidate][4];
1882 reg_eb4 = result[final][4]; 2051 reg_ebc = result[final_candidate][5];
2052 reg_ec4 = result[final_candidate][6];
2053 reg_ecc = result[final_candidate][7];
1883 rtlphy->reg_eb4 = reg_eb4; 2054 rtlphy->reg_eb4 = reg_eb4;
1884 reg_ebc = result[final][5];
1885 rtlphy->reg_ebc = reg_ebc; 2055 rtlphy->reg_ebc = reg_ebc;
1886 patha_ok = true; 2056 rtlphy->reg_e94 = reg_e94;
2057 rtlphy->reg_e9c = reg_e9c;
2058 b_patha_ok = true;
2059 b_pathb_ok = true;
1887 } else { 2060 } else {
1888 rtlphy->reg_e94 = 0x100; 2061 rtlphy->reg_e94 = 0x100;
1889 rtlphy->reg_eb4 = 0x100; 2062 rtlphy->reg_eb4 = 0x100;
1890 rtlphy->reg_ebc = 0x0;
1891 rtlphy->reg_e9c = 0x0; 2063 rtlphy->reg_e9c = 0x0;
2064 rtlphy->reg_ebc = 0x0;
1892 } 2065 }
1893 if (reg_e94 != 0) /*&&(reg_ea4 != 0) */ 2066 if (reg_e94 != 0) /*&&(reg_ea4 != 0) */
1894 fill_iqk(hw, patha_ok, result, final, (reg_ea4 == 0)); 2067 _rtl88e_phy_path_a_fill_iqk_matrix(hw, b_patha_ok, result,
1895 if (final != 0xFF) { 2068 final_candidate,
2069 (reg_ea4 == 0));
2070 if (final_candidate != 0xFF) {
1896 for (i = 0; i < IQK_MATRIX_REG_NUM; i++) 2071 for (i = 0; i < IQK_MATRIX_REG_NUM; i++)
1897 rtlphy->iqk_matrix[0].value[0][i] = result[final][i]; 2072 rtlphy->iqk_matrix[0].value[0][i] =
2073 result[final_candidate][i];
1898 rtlphy->iqk_matrix[0].iqk_done = true; 2074 rtlphy->iqk_matrix[0].iqk_done = true;
2075
1899 } 2076 }
1900 save_adda_reg(hw, iqk_bb_reg, rtlphy->iqk_bb_backup, 9); 2077 _rtl88e_phy_save_adda_registers(hw, iqk_bb_reg,
2078 rtlphy->iqk_bb_backup, 9);
1901} 2079}
1902 2080
1903void rtl88e_phy_lc_calibrate(struct ieee80211_hw *hw) 2081void rtl88e_phy_lc_calibrate(struct ieee80211_hw *hw)
1904{ 2082{
1905 struct rtl_priv *rtlpriv = rtl_priv(hw); 2083 struct rtl_priv *rtlpriv = rtl_priv(hw);
1906 struct rtl_phy *rtlphy = &(rtlpriv->phy); 2084 struct rtl_phy *rtlphy = &rtlpriv->phy;
1907 struct rtl_hal *rtlhal = &(rtlpriv->rtlhal); 2085 struct rtl_hal *rtlhal = &rtlpriv->rtlhal;
1908 bool start_conttx = false, singletone = false;
1909 u32 timeout = 2000, timecount = 0; 2086 u32 timeout = 2000, timecount = 0;
1910 2087
1911 if (start_conttx || singletone)
1912 return;
1913
1914 while (rtlpriv->mac80211.act_scanning && timecount < timeout) { 2088 while (rtlpriv->mac80211.act_scanning && timecount < timeout) {
1915 udelay(50); 2089 udelay(50);
1916 timecount += 50; 2090 timecount += 50;
@@ -1926,20 +2100,24 @@ void rtl88e_phy_lc_calibrate(struct ieee80211_hw *hw)
1926 rtlphy->lck_inprogress = false; 2100 rtlphy->lck_inprogress = false;
1927} 2101}
1928 2102
2103void rtl92c_phy_ap_calibrate(struct ieee80211_hw *hw, char delta)
2104{
2105}
2106
1929void rtl88e_phy_set_rfpath_switch(struct ieee80211_hw *hw, bool bmain) 2107void rtl88e_phy_set_rfpath_switch(struct ieee80211_hw *hw, bool bmain)
1930{ 2108{
1931 rfpath_switch(hw, bmain, false); 2109 _rtl88e_phy_set_rfpath_switch(hw, bmain, false);
1932} 2110}
1933 2111
1934bool rtl88e_phy_set_io_cmd(struct ieee80211_hw *hw, enum io_type iotype) 2112bool rtl88e_phy_set_io_cmd(struct ieee80211_hw *hw, enum io_type iotype)
1935{ 2113{
1936 struct rtl_priv *rtlpriv = rtl_priv(hw); 2114 struct rtl_priv *rtlpriv = rtl_priv(hw);
1937 struct rtl_phy *rtlphy = &(rtlpriv->phy); 2115 struct rtl_phy *rtlphy = &rtlpriv->phy;
1938 bool postprocessing = false; 2116 bool postprocessing = false;
1939 2117
1940 RT_TRACE(rtlpriv, COMP_CMD, DBG_TRACE, 2118 RT_TRACE(rtlpriv, COMP_CMD, DBG_TRACE,
1941 "-->IO Cmd(%#x), set_io_inprogress(%d)\n", 2119 "-->IO Cmd(%#x), set_io_inprogress(%d)\n",
1942 iotype, rtlphy->set_io_inprogress); 2120 iotype, rtlphy->set_io_inprogress);
1943 do { 2121 do {
1944 switch (iotype) { 2122 switch (iotype) {
1945 case IO_CMD_RESUME_DM_BY_SCAN: 2123 case IO_CMD_RESUME_DM_BY_SCAN:
@@ -1947,14 +2125,14 @@ bool rtl88e_phy_set_io_cmd(struct ieee80211_hw *hw, enum io_type iotype)
1947 "[IO CMD] Resume DM after scan.\n"); 2125 "[IO CMD] Resume DM after scan.\n");
1948 postprocessing = true; 2126 postprocessing = true;
1949 break; 2127 break;
1950 case IO_CMD_PAUSE_DM_BY_SCAN: 2128 case IO_CMD_PAUSE_BAND0_DM_BY_SCAN:
1951 RT_TRACE(rtlpriv, COMP_CMD, DBG_TRACE, 2129 RT_TRACE(rtlpriv, COMP_CMD, DBG_TRACE,
1952 "[IO CMD] Pause DM before scan.\n"); 2130 "[IO CMD] Pause DM before scan.\n");
1953 postprocessing = true; 2131 postprocessing = true;
1954 break; 2132 break;
1955 default: 2133 default:
1956 RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, 2134 RT_TRACE(rtlpriv, COMP_ERR, DBG_LOUD,
1957 "switch case not processed\n"); 2135 "switch case not process\n");
1958 break; 2136 break;
1959 } 2137 }
1960 } while (false); 2138 } while (false);
@@ -1969,6 +2147,37 @@ bool rtl88e_phy_set_io_cmd(struct ieee80211_hw *hw, enum io_type iotype)
1969 return true; 2147 return true;
1970} 2148}
1971 2149
2150static void rtl88e_phy_set_io(struct ieee80211_hw *hw)
2151{
2152 struct rtl_priv *rtlpriv = rtl_priv(hw);
2153 struct rtl_phy *rtlphy = &rtlpriv->phy;
2154 struct dig_t *dm_digtable = &rtlpriv->dm_digtable;
2155
2156 RT_TRACE(rtlpriv, COMP_CMD, DBG_TRACE,
2157 "--->Cmd(%#x), set_io_inprogress(%d)\n",
2158 rtlphy->current_io_type, rtlphy->set_io_inprogress);
2159 switch (rtlphy->current_io_type) {
2160 case IO_CMD_RESUME_DM_BY_SCAN:
2161 dm_digtable->cur_igvalue = rtlphy->initgain_backup.xaagccore1;
2162 /*rtl92c_dm_write_dig(hw);*/
2163 rtl88e_phy_set_txpower_level(hw, rtlphy->current_channel);
2164 rtl_set_bbreg(hw, RCCK0_CCA, 0xff0000, 0x83);
2165 break;
2166 case IO_CMD_PAUSE_BAND0_DM_BY_SCAN:
2167 rtlphy->initgain_backup.xaagccore1 = dm_digtable->cur_igvalue;
2168 dm_digtable->cur_igvalue = 0x17;
2169 rtl_set_bbreg(hw, RCCK0_CCA, 0xff0000, 0x40);
2170 break;
2171 default:
2172 RT_TRACE(rtlpriv, COMP_ERR, DBG_LOUD,
2173 "switch case not process\n");
2174 break;
2175 }
2176 rtlphy->set_io_inprogress = false;
2177 RT_TRACE(rtlpriv, COMP_CMD, DBG_TRACE,
2178 "(%#x)\n", rtlphy->current_io_type);
2179}
2180
1972static void rtl88ee_phy_set_rf_on(struct ieee80211_hw *hw) 2181static void rtl88ee_phy_set_rf_on(struct ieee80211_hw *hw)
1973{ 2182{
1974 struct rtl_priv *rtlpriv = rtl_priv(hw); 2183 struct rtl_priv *rtlpriv = rtl_priv(hw);
@@ -1984,10 +2193,9 @@ static void rtl88ee_phy_set_rf_on(struct ieee80211_hw *hw)
1984static void _rtl88ee_phy_set_rf_sleep(struct ieee80211_hw *hw) 2193static void _rtl88ee_phy_set_rf_sleep(struct ieee80211_hw *hw)
1985{ 2194{
1986 struct rtl_priv *rtlpriv = rtl_priv(hw); 2195 struct rtl_priv *rtlpriv = rtl_priv(hw);
1987 int jj = RF90_PATH_A;
1988 2196
1989 rtl_write_byte(rtlpriv, REG_TXPAUSE, 0xFF); 2197 rtl_write_byte(rtlpriv, REG_TXPAUSE, 0xFF);
1990 rtl_set_rfreg(hw, jj, 0x00, RFREG_OFFSET_MASK, 0x00); 2198 rtl_set_rfreg(hw, RF90_PATH_A, 0x00, RFREG_OFFSET_MASK, 0x00);
1991 rtl_write_byte(rtlpriv, REG_SYS_FUNC_EN, 0xE2); 2199 rtl_write_byte(rtlpriv, REG_SYS_FUNC_EN, 0xE2);
1992 rtl_write_byte(rtlpriv, REG_SPS0_CTRL, 0x22); 2200 rtl_write_byte(rtlpriv, REG_SPS0_CTRL, 0x22);
1993} 2201}
@@ -1999,42 +2207,49 @@ static bool _rtl88ee_phy_set_rf_power_state(struct ieee80211_hw *hw,
1999 struct rtl_pci_priv *pcipriv = rtl_pcipriv(hw); 2207 struct rtl_pci_priv *pcipriv = rtl_pcipriv(hw);
2000 struct rtl_mac *mac = rtl_mac(rtl_priv(hw)); 2208 struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
2001 struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw)); 2209 struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw));
2002 struct rtl8192_tx_ring *ring = NULL;
2003 bool bresult = true; 2210 bool bresult = true;
2004 u8 i, queue_id; 2211 u8 i, queue_id;
2212 struct rtl8192_tx_ring *ring = NULL;
2005 2213
2006 switch (rfpwr_state) { 2214 switch (rfpwr_state) {
2007 case ERFON:{ 2215 case ERFON:
2008 if ((ppsc->rfpwr_state == ERFOFF) && 2216 if ((ppsc->rfpwr_state == ERFOFF) &&
2009 RT_IN_PS_LEVEL(ppsc, RT_RF_OFF_LEVL_HALT_NIC)) { 2217 RT_IN_PS_LEVEL(ppsc, RT_RF_OFF_LEVL_HALT_NIC)) {
2010 bool rtstatus; 2218 bool rtstatus;
2011 u32 init = 0; 2219 u32 initializecount = 0;
2220
2012 do { 2221 do {
2013 init++; 2222 initializecount++;
2014 RT_TRACE(rtlpriv, COMP_RF, DBG_DMESG, 2223 RT_TRACE(rtlpriv, COMP_RF, DBG_DMESG,
2015 "IPS Set eRf nic enable\n"); 2224 "IPS Set eRf nic enable\n");
2016 rtstatus = rtl_ps_enable_nic(hw); 2225 rtstatus = rtl_ps_enable_nic(hw);
2017 } while ((rtstatus != true) && (init < 10)); 2226 } while (!rtstatus &&
2227 (initializecount < 10));
2018 RT_CLEAR_PS_LEVEL(ppsc, 2228 RT_CLEAR_PS_LEVEL(ppsc,
2019 RT_RF_OFF_LEVL_HALT_NIC); 2229 RT_RF_OFF_LEVL_HALT_NIC);
2020 } else { 2230 } else {
2021 RT_TRACE(rtlpriv, COMP_RF, DBG_DMESG, 2231 RT_TRACE(rtlpriv, COMP_RF, DBG_DMESG,
2022 "Set ERFON sleeped:%d ms\n", 2232 "Set ERFON sleeped:%d ms\n",
2023 jiffies_to_msecs(jiffies - ppsc-> 2233 jiffies_to_msecs(jiffies -
2024 last_sleep_jiffies)); 2234 ppsc->
2235 last_sleep_jiffies));
2025 ppsc->last_awake_jiffies = jiffies; 2236 ppsc->last_awake_jiffies = jiffies;
2026 rtl88ee_phy_set_rf_on(hw); 2237 rtl88ee_phy_set_rf_on(hw);
2027 } 2238 }
2028 if (mac->link_state == MAC80211_LINKED) 2239 if (mac->link_state == MAC80211_LINKED) {
2029 rtlpriv->cfg->ops->led_control(hw, LED_CTL_LINK); 2240 rtlpriv->cfg->ops->led_control(hw,
2030 else 2241 LED_CTL_LINK);
2031 rtlpriv->cfg->ops->led_control(hw, LED_CTL_NO_LINK); 2242 } else {
2032 break; } 2243 rtlpriv->cfg->ops->led_control(hw,
2033 case ERFOFF:{ 2244 LED_CTL_NO_LINK);
2245 }
2246 break;
2247 case ERFOFF:
2034 for (queue_id = 0, i = 0; 2248 for (queue_id = 0, i = 0;
2035 queue_id < RTL_PCI_MAX_TX_QUEUE_COUNT;) { 2249 queue_id < RTL_PCI_MAX_TX_QUEUE_COUNT;) {
2036 ring = &pcipriv->dev.tx_ring[queue_id]; 2250 ring = &pcipriv->dev.tx_ring[queue_id];
2037 if (skb_queue_len(&ring->queue) == 0) { 2251 if (queue_id == BEACON_QUEUE ||
2252 skb_queue_len(&ring->queue) == 0) {
2038 queue_id++; 2253 queue_id++;
2039 continue; 2254 continue;
2040 } else { 2255 } else {
@@ -2055,6 +2270,7 @@ static bool _rtl88ee_phy_set_rf_power_state(struct ieee80211_hw *hw,
2055 break; 2270 break;
2056 } 2271 }
2057 } 2272 }
2273
2058 if (ppsc->reg_rfps_level & RT_RF_OFF_LEVL_HALT_NIC) { 2274 if (ppsc->reg_rfps_level & RT_RF_OFF_LEVL_HALT_NIC) {
2059 RT_TRACE(rtlpriv, COMP_RF, DBG_DMESG, 2275 RT_TRACE(rtlpriv, COMP_RF, DBG_DMESG,
2060 "IPS Set eRf nic disable\n"); 2276 "IPS Set eRf nic disable\n");
@@ -2063,49 +2279,51 @@ static bool _rtl88ee_phy_set_rf_power_state(struct ieee80211_hw *hw,
2063 } else { 2279 } else {
2064 if (ppsc->rfoff_reason == RF_CHANGE_BY_IPS) { 2280 if (ppsc->rfoff_reason == RF_CHANGE_BY_IPS) {
2065 rtlpriv->cfg->ops->led_control(hw, 2281 rtlpriv->cfg->ops->led_control(hw,
2066 LED_CTL_NO_LINK); 2282 LED_CTL_NO_LINK);
2067 } else { 2283 } else {
2068 rtlpriv->cfg->ops->led_control(hw, 2284 rtlpriv->cfg->ops->led_control(hw,
2069 LED_CTL_POWER_OFF); 2285 LED_CTL_POWER_OFF);
2070 } 2286 }
2071 } 2287 }
2072 break; } 2288 break;
2073 case ERFSLEEP:{ 2289 case ERFSLEEP:{
2074 if (ppsc->rfpwr_state == ERFOFF) 2290 if (ppsc->rfpwr_state == ERFOFF)
2075 break;
2076 for (queue_id = 0, i = 0;
2077 queue_id < RTL_PCI_MAX_TX_QUEUE_COUNT;) {
2078 ring = &pcipriv->dev.tx_ring[queue_id];
2079 if (skb_queue_len(&ring->queue) == 0) {
2080 queue_id++;
2081 continue;
2082 } else {
2083 RT_TRACE(rtlpriv, COMP_ERR, DBG_WARNING,
2084 "eRf Off/Sleep: %d times TcbBusyQueue[%d] =%d before doze!\n",
2085 (i + 1), queue_id,
2086 skb_queue_len(&ring->queue));
2087
2088 udelay(10);
2089 i++;
2090 }
2091 if (i >= MAX_DOZE_WAITING_TIMES_9x) {
2092 RT_TRACE(rtlpriv, COMP_ERR, DBG_WARNING,
2093 "\n ERFSLEEP: %d times TcbBusyQueue[%d] = %d !\n",
2094 MAX_DOZE_WAITING_TIMES_9x,
2095 queue_id,
2096 skb_queue_len(&ring->queue));
2097 break; 2291 break;
2292 for (queue_id = 0, i = 0;
2293 queue_id < RTL_PCI_MAX_TX_QUEUE_COUNT;) {
2294 ring = &pcipriv->dev.tx_ring[queue_id];
2295 if (skb_queue_len(&ring->queue) == 0) {
2296 queue_id++;
2297 continue;
2298 } else {
2299 RT_TRACE(rtlpriv, COMP_ERR, DBG_WARNING,
2300 "eRf Off/Sleep: %d times TcbBusyQueue[%d] =%d before doze!\n",
2301 (i + 1), queue_id,
2302 skb_queue_len(&ring->queue));
2303
2304 udelay(10);
2305 i++;
2306 }
2307 if (i >= MAX_DOZE_WAITING_TIMES_9x) {
2308 RT_TRACE(rtlpriv, COMP_ERR, DBG_WARNING,
2309 "\n ERFSLEEP: %d times TcbBusyQueue[%d] = %d !\n",
2310 MAX_DOZE_WAITING_TIMES_9x,
2311 queue_id,
2312 skb_queue_len(&ring->queue));
2313 break;
2314 }
2098 } 2315 }
2316 RT_TRACE(rtlpriv, COMP_RF, DBG_DMESG,
2317 "Set ERFSLEEP awaked:%d ms\n",
2318 jiffies_to_msecs(jiffies -
2319 ppsc->last_awake_jiffies));
2320 ppsc->last_sleep_jiffies = jiffies;
2321 _rtl88ee_phy_set_rf_sleep(hw);
2322 break;
2099 } 2323 }
2100 RT_TRACE(rtlpriv, COMP_RF, DBG_DMESG,
2101 "Set ERFSLEEP awaked:%d ms\n",
2102 jiffies_to_msecs(jiffies - ppsc->last_awake_jiffies));
2103 ppsc->last_sleep_jiffies = jiffies;
2104 _rtl88ee_phy_set_rf_sleep(hw);
2105 break; }
2106 default: 2324 default:
2107 RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, 2325 RT_TRACE(rtlpriv, COMP_ERR, DBG_LOUD,
2108 "switch case not processed\n"); 2326 "switch case not process\n");
2109 bresult = false; 2327 bresult = false;
2110 break; 2328 break;
2111 } 2329 }
@@ -2118,10 +2336,11 @@ bool rtl88e_phy_set_rf_power_state(struct ieee80211_hw *hw,
2118 enum rf_pwrstate rfpwr_state) 2336 enum rf_pwrstate rfpwr_state)
2119{ 2337{
2120 struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw)); 2338 struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw));
2121 bool bresult; 2339
2340 bool bresult = false;
2122 2341
2123 if (rfpwr_state == ppsc->rfpwr_state) 2342 if (rfpwr_state == ppsc->rfpwr_state)
2124 return false; 2343 return bresult;
2125 bresult = _rtl88ee_phy_set_rf_power_state(hw, rfpwr_state); 2344 bresult = _rtl88ee_phy_set_rf_power_state(hw, rfpwr_state);
2126 return bresult; 2345 return bresult;
2127} 2346}
diff --git a/drivers/net/wireless/rtlwifi/rtl8188ee/phy.h b/drivers/net/wireless/rtlwifi/rtl8188ee/phy.h
index 89f0f1ef1465..4dae55b7c535 100644
--- a/drivers/net/wireless/rtlwifi/rtl8188ee/phy.h
+++ b/drivers/net/wireless/rtlwifi/rtl8188ee/phy.h
@@ -11,10 +11,6 @@
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details. 12 * more details.
13 * 13 *
14 * You should have received a copy of the GNU General Public License along with
15 * this program; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
17 *
18 * The full GNU General Public License is included in this distribution in the 14 * The full GNU General Public License is included in this distribution in the
19 * file called LICENSE. 15 * file called LICENSE.
20 * 16 *
@@ -30,33 +26,35 @@
30#ifndef __RTL92C_PHY_H__ 26#ifndef __RTL92C_PHY_H__
31#define __RTL92C_PHY_H__ 27#define __RTL92C_PHY_H__
32 28
33/*It must always set to 4, otherwise read efuse table secquence will be wrong.*/ 29/* MAX_TX_COUNT must always set to 4, otherwise read efuse
34#define MAX_TX_COUNT 4 30 * table secquence will be wrong.
31 */
32#define MAX_TX_COUNT 4
35 33
36#define MAX_PRECMD_CNT 16 34#define MAX_PRECMD_CNT 16
37#define MAX_RFDEPENDCMD_CNT 16 35#define MAX_RFDEPENDCMD_CNT 16
38#define MAX_POSTCMD_CNT 16 36#define MAX_POSTCMD_CNT 16
39 37
40#define MAX_DOZE_WAITING_TIMES_9x 64 38#define MAX_DOZE_WAITING_TIMES_9x 64
41 39
42#define RT_CANNOT_IO(hw) false 40#define RT_CANNOT_IO(hw) false
43#define HIGHPOWER_RADIOA_ARRAYLEN 22 41#define HIGHPOWER_RADIOA_ARRAYLEN 22
44 42
45#define IQK_ADDA_REG_NUM 16 43#define IQK_ADDA_REG_NUM 16
46#define IQK_BB_REG_NUM 9 44#define IQK_BB_REG_NUM 9
47#define MAX_TOLERANCE 5 45#define MAX_TOLERANCE 5
48#define IQK_DELAY_TIME 10 46#define IQK_DELAY_TIME 10
49#define IDX_MAP 15 47#define INDEX_MAPPING_NUM 15
50 48
51#define APK_BB_REG_NUM 5 49#define APK_BB_REG_NUM 5
52#define APK_AFE_REG_NUM 16 50#define APK_AFE_REG_NUM 16
53#define APK_CURVE_REG_NUM 4 51#define APK_CURVE_REG_NUM 4
54#define PATH_NUM 2 52#define PATH_NUM 2
55 53
56#define LOOP_LIMIT 5 54#define LOOP_LIMIT 5
57#define MAX_STALL_TIME 50 55#define MAX_STALL_TIME 50
58#define ANTENNADIVERSITYVALUE 0x80 56#define ANTENNADIVERSITYVALUE 0x80
59#define MAX_TXPWR_IDX_NMODE_92S 63 57#define MAX_TXPWR_IDX_NMODE_92S 63
60#define RESET_CNT_LIMIT 3 58#define RESET_CNT_LIMIT 3
61 59
62#define IQK_ADDA_REG_NUM 16 60#define IQK_ADDA_REG_NUM 16
@@ -66,8 +64,8 @@
66 64
67#define CT_OFFSET_MAC_ADDR 0X16 65#define CT_OFFSET_MAC_ADDR 0X16
68 66
69#define CT_OFFSET_CCK_TX_PWR_IDX 0x5A 67#define CT_OFFSET_CCK_TX_PWR_IDX 0x5A
70#define CT_OFFSET_HT401S_TX_PWR_IDX 0x60 68#define CT_OFFSET_HT401S_TX_PWR_IDX 0x60
71#define CT_OFFSET_HT402S_TX_PWR_IDX_DIFF 0x66 69#define CT_OFFSET_HT402S_TX_PWR_IDX_DIFF 0x66
72#define CT_OFFSET_HT20_TX_PWR_IDX_DIFF 0x69 70#define CT_OFFSET_HT20_TX_PWR_IDX_DIFF 0x69
73#define CT_OFFSET_OFDM_TX_PWR_IDX_DIFF 0x6C 71#define CT_OFFSET_OFDM_TX_PWR_IDX_DIFF 0x6C
@@ -75,13 +73,13 @@
75#define CT_OFFSET_HT40_MAX_PWR_OFFSET 0x6F 73#define CT_OFFSET_HT40_MAX_PWR_OFFSET 0x6F
76#define CT_OFFSET_HT20_MAX_PWR_OFFSET 0x72 74#define CT_OFFSET_HT20_MAX_PWR_OFFSET 0x72
77 75
78#define CT_OFFSET_CHANNEL_PLAH 0x75 76#define CT_OFFSET_CHANNEL_PLAH 0x75
79#define CT_OFFSET_THERMAL_METER 0x78 77#define CT_OFFSET_THERMAL_METER 0x78
80#define CT_OFFSET_RF_OPTION 0x79 78#define CT_OFFSET_RF_OPTION 0x79
81#define CT_OFFSET_VERSION 0x7E 79#define CT_OFFSET_VERSION 0x7E
82#define CT_OFFSET_CUSTOMER_ID 0x7F 80#define CT_OFFSET_CUSTOMER_ID 0x7F
83 81
84#define RTL92C_MAX_PATH_NUM 2 82#define RTL92C_MAX_PATH_NUM 2
85 83
86enum swchnlcmd_id { 84enum swchnlcmd_id {
87 CMDID_END, 85 CMDID_END,
@@ -160,7 +158,6 @@ struct r_antenna_select_cck {
160 u8 r_ccktx_enable:4; 158 u8 r_ccktx_enable:4;
161}; 159};
162 160
163
164struct efuse_contents { 161struct efuse_contents {
165 u8 mac_addr[ETH_ALEN]; 162 u8 mac_addr[ETH_ALEN];
166 u8 cck_tx_power_idx[6]; 163 u8 cck_tx_power_idx[6];
@@ -192,10 +189,10 @@ struct tx_power_struct {
192}; 189};
193 190
194enum _ANT_DIV_TYPE { 191enum _ANT_DIV_TYPE {
195 NO_ANTDIV = 0xFF, 192 NO_ANTDIV = 0xFF,
196 CG_TRX_HW_ANTDIV = 0x01, 193 CG_TRX_HW_ANTDIV = 0x01,
197 CGCS_RX_HW_ANTDIV = 0x02, 194 CGCS_RX_HW_ANTDIV = 0x02,
198 FIXED_HW_ANTDIV = 0x03, 195 FIXED_HW_ANTDIV = 0x03,
199 CG_TRX_SMART_ANTDIV = 0x04, 196 CG_TRX_SMART_ANTDIV = 0x04,
200 CGCS_RX_SW_ANTDIV = 0x05, 197 CGCS_RX_SW_ANTDIV = 0x05,
201}; 198};
@@ -217,12 +214,15 @@ void rtl88e_phy_get_hw_reg_originalvalue(struct ieee80211_hw *hw);
217void rtl88e_phy_get_txpower_level(struct ieee80211_hw *hw, 214void rtl88e_phy_get_txpower_level(struct ieee80211_hw *hw,
218 long *powerlevel); 215 long *powerlevel);
219void rtl88e_phy_set_txpower_level(struct ieee80211_hw *hw, u8 channel); 216void rtl88e_phy_set_txpower_level(struct ieee80211_hw *hw, u8 channel);
217void rtl88e_phy_scan_operation_backup(struct ieee80211_hw *hw,
218 u8 operation);
220void rtl88e_phy_set_bw_mode_callback(struct ieee80211_hw *hw); 219void rtl88e_phy_set_bw_mode_callback(struct ieee80211_hw *hw);
221void rtl88e_phy_set_bw_mode(struct ieee80211_hw *hw, 220void rtl88e_phy_set_bw_mode(struct ieee80211_hw *hw,
222 enum nl80211_channel_type ch_type); 221 enum nl80211_channel_type ch_type);
223void rtl88e_phy_sw_chnl_callback(struct ieee80211_hw *hw); 222void rtl88e_phy_sw_chnl_callback(struct ieee80211_hw *hw);
224u8 rtl88e_phy_sw_chnl(struct ieee80211_hw *hw); 223u8 rtl88e_phy_sw_chnl(struct ieee80211_hw *hw);
225void rtl88e_phy_iq_calibrate(struct ieee80211_hw *hw, bool b_recovery); 224void rtl88e_phy_iq_calibrate(struct ieee80211_hw *hw, bool b_recovery);
225void rtl92c_phy_ap_calibrate(struct ieee80211_hw *hw, char delta);
226void rtl88e_phy_lc_calibrate(struct ieee80211_hw *hw); 226void rtl88e_phy_lc_calibrate(struct ieee80211_hw *hw);
227void rtl88e_phy_set_rfpath_switch(struct ieee80211_hw *hw, bool bmain); 227void rtl88e_phy_set_rfpath_switch(struct ieee80211_hw *hw, bool bmain);
228bool rtl88e_phy_config_rf_with_headerfile(struct ieee80211_hw *hw, 228bool rtl88e_phy_config_rf_with_headerfile(struct ieee80211_hw *hw,
diff --git a/drivers/net/wireless/rtlwifi/rtl8188ee/pwrseq.c b/drivers/net/wireless/rtlwifi/rtl8188ee/pwrseq.c
index 6dc4e3a954f6..e4e030615332 100644
--- a/drivers/net/wireless/rtlwifi/rtl8188ee/pwrseq.c
+++ b/drivers/net/wireless/rtlwifi/rtl8188ee/pwrseq.c
@@ -11,10 +11,6 @@
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details. 12 * more details.
13 * 13 *
14 * You should have received a copy of the GNU General Public License along with
15 * this program; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
17 *
18 * The full GNU General Public License is included in this distribution in the 14 * The full GNU General Public License is included in this distribution in the
19 * file called LICENSE. 15 * file called LICENSE.
20 * 16 *
@@ -32,41 +28,41 @@
32 28
33/* drivers should parse below arrays and do the corresponding actions */ 29/* drivers should parse below arrays and do the corresponding actions */
34/*3 Power on Array*/ 30/*3 Power on Array*/
35struct wlan_pwr_cfg rtl8188e_power_on_flow[RTL8188E_TRANS_CARDEMU_TO_ACT_STEPS + 31struct wlan_pwr_cfg rtl8188E_power_on_flow[RTL8188E_TRANS_CARDEMU_TO_ACT_STEPS
36 RTL8188E_TRANS_END_STEPS] = { 32 + RTL8188E_TRANS_END_STEPS] = {
37 RTL8188E_TRANS_CARDEMU_TO_ACT 33 RTL8188E_TRANS_CARDEMU_TO_ACT
38 RTL8188E_TRANS_END 34 RTL8188E_TRANS_END
39}; 35};
40 36
41/*3Radio off GPIO Array */ 37/*3Radio off GPIO Array */
42struct wlan_pwr_cfg rtl8188e_radio_off_flow[RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS 38struct wlan_pwr_cfg rtl8188E_radio_off_flow[RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS
43 + RTL8188E_TRANS_END_STEPS] = { 39 + RTL8188E_TRANS_END_STEPS] = {
44 RTL8188E_TRANS_ACT_TO_CARDEMU 40 RTL8188E_TRANS_ACT_TO_CARDEMU
45 RTL8188E_TRANS_END 41 RTL8188E_TRANS_END
46}; 42};
47 43
48/*3Card Disable Array*/ 44/*3Card Disable Array*/
49struct wlan_pwr_cfg rtl8188e_card_disable_flow 45struct wlan_pwr_cfg rtl8188E_card_disable_flow
50 [RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS + 46 [RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS +
51 RTL8188E_TRANS_CARDEMU_TO_PDN_STEPS + 47 RTL8188E_TRANS_CARDEMU_TO_PDN_STEPS +
52 RTL8188E_TRANS_END_STEPS] = { 48 RTL8188E_TRANS_END_STEPS] = {
53 RTL8188E_TRANS_ACT_TO_CARDEMU 49 RTL8188E_TRANS_ACT_TO_CARDEMU
54 RTL8188E_TRANS_CARDEMU_TO_CARDDIS 50 RTL8188E_TRANS_CARDEMU_TO_CARDDIS
55 RTL8188E_TRANS_END 51 RTL8188E_TRANS_END
56}; 52};
57 53
58/*3 Card Enable Array*/ 54/*3 Card Enable Array*/
59struct wlan_pwr_cfg rtl8188e_card_enable_flow 55struct wlan_pwr_cfg rtl8188E_card_enable_flow
60 [RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS + 56 [RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS +
61 RTL8188E_TRANS_CARDEMU_TO_PDN_STEPS + 57 RTL8188E_TRANS_CARDEMU_TO_PDN_STEPS +
62 RTL8188E_TRANS_END_STEPS] = { 58 RTL8188E_TRANS_END_STEPS] = {
63 RTL8188E_TRANS_CARDDIS_TO_CARDEMU 59 RTL8188E_TRANS_CARDDIS_TO_CARDEMU
64 RTL8188E_TRANS_CARDEMU_TO_ACT 60 RTL8188E_TRANS_CARDEMU_TO_ACT
65 RTL8188E_TRANS_END 61 RTL8188E_TRANS_END
66}; 62};
67 63
68/*3Suspend Array*/ 64/*3Suspend Array*/
69struct wlan_pwr_cfg rtl8188e_suspend_flow[RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS 65struct wlan_pwr_cfg rtl8188E_suspend_flow[RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS
70 + RTL8188E_TRANS_CARDEMU_TO_SUS_STEPS 66 + RTL8188E_TRANS_CARDEMU_TO_SUS_STEPS
71 + RTL8188E_TRANS_END_STEPS] = { 67 + RTL8188E_TRANS_END_STEPS] = {
72 RTL8188E_TRANS_ACT_TO_CARDEMU 68 RTL8188E_TRANS_ACT_TO_CARDEMU
@@ -75,7 +71,7 @@ struct wlan_pwr_cfg rtl8188e_suspend_flow[RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS
75}; 71};
76 72
77/*3 Resume Array*/ 73/*3 Resume Array*/
78struct wlan_pwr_cfg rtl8188e_resume_flow[RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS 74struct wlan_pwr_cfg rtl8188E_resume_flow[RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS
79 + RTL8188E_TRANS_CARDEMU_TO_SUS_STEPS 75 + RTL8188E_TRANS_CARDEMU_TO_SUS_STEPS
80 + RTL8188E_TRANS_END_STEPS] = { 76 + RTL8188E_TRANS_END_STEPS] = {
81 RTL8188E_TRANS_SUS_TO_CARDEMU 77 RTL8188E_TRANS_SUS_TO_CARDEMU
@@ -84,7 +80,7 @@ struct wlan_pwr_cfg rtl8188e_resume_flow[RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS
84}; 80};
85 81
86/*3HWPDN Array*/ 82/*3HWPDN Array*/
87struct wlan_pwr_cfg rtl8188e_hwpdn_flow[RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS 83struct wlan_pwr_cfg rtl8188E_hwpdn_flow[RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS
88 + RTL8188E_TRANS_CARDEMU_TO_PDN_STEPS 84 + RTL8188E_TRANS_CARDEMU_TO_PDN_STEPS
89 + RTL8188E_TRANS_END_STEPS] = { 85 + RTL8188E_TRANS_END_STEPS] = {
90 RTL8188E_TRANS_ACT_TO_CARDEMU 86 RTL8188E_TRANS_ACT_TO_CARDEMU
@@ -93,7 +89,7 @@ struct wlan_pwr_cfg rtl8188e_hwpdn_flow[RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS
93}; 89};
94 90
95/*3 Enter LPS */ 91/*3 Enter LPS */
96struct wlan_pwr_cfg rtl8188e_enter_lps_flow[RTL8188E_TRANS_ACT_TO_LPS_STEPS 92struct wlan_pwr_cfg rtl8188E_enter_lps_flow[RTL8188E_TRANS_ACT_TO_LPS_STEPS
97 + RTL8188E_TRANS_END_STEPS] = { 93 + RTL8188E_TRANS_END_STEPS] = {
98 /*FW behavior*/ 94 /*FW behavior*/
99 RTL8188E_TRANS_ACT_TO_LPS 95 RTL8188E_TRANS_ACT_TO_LPS
@@ -101,7 +97,7 @@ struct wlan_pwr_cfg rtl8188e_enter_lps_flow[RTL8188E_TRANS_ACT_TO_LPS_STEPS
101}; 97};
102 98
103/*3 Leave LPS */ 99/*3 Leave LPS */
104struct wlan_pwr_cfg rtl8188e_leave_lps_flow[RTL8188E_TRANS_LPS_TO_ACT_STEPS 100struct wlan_pwr_cfg rtl8188E_leave_lps_flow[RTL8188E_TRANS_LPS_TO_ACT_STEPS
105 + RTL8188E_TRANS_END_STEPS] = { 101 + RTL8188E_TRANS_END_STEPS] = {
106 /*FW behavior*/ 102 /*FW behavior*/
107 RTL8188E_TRANS_LPS_TO_ACT 103 RTL8188E_TRANS_LPS_TO_ACT
diff --git a/drivers/net/wireless/rtlwifi/rtl8188ee/pwrseq.h b/drivers/net/wireless/rtlwifi/rtl8188ee/pwrseq.h
index 45c7f4ada9fb..970afe6ef4d2 100644
--- a/drivers/net/wireless/rtlwifi/rtl8188ee/pwrseq.h
+++ b/drivers/net/wireless/rtlwifi/rtl8188ee/pwrseq.h
@@ -11,10 +11,6 @@
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details. 12 * more details.
13 * 13 *
14 * You should have received a copy of the GNU General Public License along with
15 * this program; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
17 *
18 * The full GNU General Public License is included in this distribution in the 14 * The full GNU General Public License is included in this distribution in the
19 * file called LICENSE. 15 * file called LICENSE.
20 * 16 *
@@ -30,28 +26,28 @@
30#ifndef __RTL8723E_PWRSEQ_H__ 26#ifndef __RTL8723E_PWRSEQ_H__
31#define __RTL8723E_PWRSEQ_H__ 27#define __RTL8723E_PWRSEQ_H__
32 28
33/* 29#include "pwrseqcmd.h"
34 Check document WM-20110607-Paul-RTL8188E_Power_Architecture-R02.vsd 30/* Check document WM-20110607-Paul-RTL8188E_Power_Architecture-R02.vsd
35 There are 6 HW Power States: 31 * There are 6 HW Power States:
36 0: POFF--Power Off 32 * 0: POFF--Power Off
37 1: PDN--Power Down 33 * 1: PDN--Power Down
38 2: CARDEMU--Card Emulation 34 * 2: CARDEMU--Card Emulation
39 3: ACT--Active Mode 35 * 3: ACT--Active Mode
40 4: LPS--Low Power State 36 * 4: LPS--Low Power State
41 5: SUS--Suspend 37 * 5: SUS--Suspend
42 38 *
43 The transision from different states are defined below 39 * The transision from different states are defined below
44 TRANS_CARDEMU_TO_ACT 40 * TRANS_CARDEMU_TO_ACT
45 TRANS_ACT_TO_CARDEMU 41 * TRANS_ACT_TO_CARDEMU
46 TRANS_CARDEMU_TO_SUS 42 * TRANS_CARDEMU_TO_SUS
47 TRANS_SUS_TO_CARDEMU 43 * TRANS_SUS_TO_CARDEMU
48 TRANS_CARDEMU_TO_PDN 44 * TRANS_CARDEMU_TO_PDN
49 TRANS_ACT_TO_LPS 45 * TRANS_ACT_TO_LPS
50 TRANS_LPS_TO_ACT 46 * TRANS_LPS_TO_ACT
51 47 *
52 TRANS_END 48 * TRANS_END
53 PWR SEQ Version: rtl8188e_PwrSeq_V09.h 49 * PWR SEQ Version: rtl8188E_PwrSeq_V09.h
54*/ 50 */
55 51
56#define RTL8188E_TRANS_CARDEMU_TO_ACT_STEPS 10 52#define RTL8188E_TRANS_CARDEMU_TO_ACT_STEPS 10
57#define RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS 10 53#define RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS 10
@@ -63,264 +59,253 @@
63#define RTL8188E_TRANS_LPS_TO_ACT_STEPS 15 59#define RTL8188E_TRANS_LPS_TO_ACT_STEPS 15
64#define RTL8188E_TRANS_END_STEPS 1 60#define RTL8188E_TRANS_END_STEPS 1
65 61
66 62/* The following macros have the following format:
63 * { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value
64 * comments },
65 */
67#define RTL8188E_TRANS_CARDEMU_TO_ACT \ 66#define RTL8188E_TRANS_CARDEMU_TO_ACT \
68 /* format */ \
69 /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value },*/\
70 {0x0006, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \ 67 {0x0006, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \
71 /* wait till 0x04[17] = 1 power ready*/ \ 68 PWR_BASEADDR_MAC, PWR_CMD_POLLING, BIT(1), BIT(1) \
72 PWR_BASEADDR_MAC, PWR_CMD_POLLING, BIT(1), BIT(1)}, \ 69 /* wait till 0x04[17] = 1 power ready*/}, \
73 {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \ 70 {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \
74 /* 0x02[1:0] = 0 reset BB*/ \ 71 PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(0)|BIT(1), 0 \
75 PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(0)|BIT(1), 0}, \ 72 /* 0x02[1:0] = 0 reset BB*/}, \
76 {0x0026, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \ 73 {0x0026, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \
77 /*0x24[23] = 2b'01 schmit trigger */ \ 74 PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(7), BIT(7) \
78 PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(7), BIT(7)}, \ 75 /*0x24[23] = 2b'01 schmit trigger */}, \
79 {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \ 76 {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \
80 /* 0x04[15] = 0 disable HWPDN (control by DRV)*/ \ 77 PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(7), 0 \
81 PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(7), 0}, \ 78 /* 0x04[15] = 0 disable HWPDN (control by DRV)*/}, \
82 {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \ 79 {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \
83 /*0x04[12:11] = 2b'00 disable WL suspend*/ \ 80 PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(4)|BIT(3), 0 \
84 PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(4)|BIT(3), 0}, \ 81 /*0x04[12:11] = 2b'00 disable WL suspend*/}, \
85 {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \ 82 {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \
86 /*0x04[8] = 1 polling until return 0*/ \ 83 PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(0), BIT(0) \
87 PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(0), BIT(0)}, \ 84 /*0x04[8] = 1 polling until return 0*/}, \
88 {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \ 85 {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \
89 /*wait till 0x04[8] = 0*/ \ 86 PWR_BASEADDR_MAC, PWR_CMD_POLLING, BIT(0), 0 \
90 PWR_BASEADDR_MAC, PWR_CMD_POLLING, BIT(0), 0}, \ 87 /*wait till 0x04[8] = 0*/}, \
91 {0x0023, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \ 88 {0x0023, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \
92 PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(4), 0}, /*LDO normal mode*/\ 89 PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(4), 0 \
90 /*LDO normal mode*/}, \
93 {0x0074, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, \ 91 {0x0074, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, \
94 PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(4), BIT(4)}, /*SDIO Driving*/\ 92 PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(4), BIT(4) \
93 /*SDIO Driving*/},
95 94
96#define RTL8188E_TRANS_ACT_TO_CARDEMU \ 95#define RTL8188E_TRANS_ACT_TO_CARDEMU \
97 /* format */ \
98 /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value },*/\
99 {0x001F, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \ 96 {0x001F, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \
100 PWR_BASEADDR_MAC, PWR_CMD_WRITE, 0xFF, 0},/*0x1F[7:0] = 0 turn off RF*/\ 97 PWR_BASEADDR_MAC, PWR_CMD_WRITE, 0xFF, 0 \
98 /*0x1F[7:0] = 0 turn off RF*/}, \
101 {0x0023, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \ 99 {0x0023, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \
102 PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(4), BIT(4)}, /*LDO Sleep mode*/\ 100 PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(4), BIT(4) \
101 /*LDO Sleep mode*/}, \
103 {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \ 102 {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \
104 /*0x04[9] = 1 turn off MAC by HW state machine*/ \ 103 PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(1), BIT(1) \
105 PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(1), BIT(1)}, \ 104 /*0x04[9] = 1 turn off MAC by HW state machine*/}, \
106 {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \ 105 {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \
107 /*wait till 0x04[9] = 0 polling until return 0 to disable*/ \ 106 PWR_BASEADDR_MAC, PWR_CMD_POLLING, BIT(1), 0 \
108 PWR_BASEADDR_MAC, PWR_CMD_POLLING, BIT(1), 0}, \ 107 /*wait till 0x04[9] = 0 polling until return 0 to disable*/},
109
110 108
111#define RTL8188E_TRANS_CARDEMU_TO_SUS \ 109#define RTL8188E_TRANS_CARDEMU_TO_SUS \
112 /* format */ \
113 /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value },*/\
114 {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, \ 110 {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, \
115 PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK, \ 111 PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK, \
116 /*0x04[12:11] = 2b'01enable WL suspend*/ \ 112 PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(3)|BIT(4), BIT(3) \
117 PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(3)|BIT(4), BIT(3)}, \ 113 /*0x04[12:11] = 2b'01enable WL suspend*/}, \
118 {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK, \ 114 {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK, \
119 /*0x04[12:11] = 2b'11enable WL suspend for PCIe*/ \ 115 PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(3)|BIT(4), BIT(3)|BIT(4) \
120 PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(3)|BIT(4), BIT(3)|BIT(4)},\ 116 /*0x04[12:11] = 2b'11enable WL suspend for PCIe*/}, \
121 {0x0007, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, \ 117 {0x0007, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, \
122 PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK, \ 118 PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK, \
123 /* 0x04[31:30] = 2b'10 enable enable bandgap mbias in suspend */\ 119 PWR_BASEADDR_MAC, PWR_CMD_WRITE, 0xFF, BIT(7) \
124 PWR_BASEADDR_MAC, PWR_CMD_WRITE, 0xFF, BIT(7)}, \ 120 /* 0x04[31:30] = 2b'10 enable enable bandgap mbias in suspend */},\
125 {0x0041, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, \ 121 {0x0041, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, \
126 PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK, \ 122 PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK, \
127 /*Clear SIC_EN register 0x40[12] = 1'b0 */ \ 123 PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(4), 0 \
128 PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(4), 0}, \ 124 /*Clear SIC_EN register 0x40[12] = 1'b0 */}, \
129 {0xfe10, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, \ 125 {0xfe10, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, \
130 PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK, \ 126 PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK, \
131 /*Set USB suspend enable local register 0xfe10[4]= 1 */ \ 127 PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(4), BIT(4) \
132 PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(4), BIT(4)}, \ 128 /*Set USB suspend enable local register 0xfe10[4]=1 */}, \
133 {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, \ 129 {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, \
134 /*Set SDIO suspend local register*/ \ 130 PWR_BASEADDR_SDIO, PWR_CMD_WRITE, BIT(0), BIT(0) \
135 PWR_BASEADDR_SDIO, PWR_CMD_WRITE, BIT(0), BIT(0)}, \ 131 /*Set SDIO suspend local register*/}, \
136 {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, \ 132 {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, \
137 /*wait power state to suspend*/ \ 133 PWR_BASEADDR_SDIO, PWR_CMD_POLLING, BIT(1), 0 \
138 PWR_BASEADDR_SDIO, PWR_CMD_POLLING, BIT(1), 0}, 134 /*wait power state to suspend*/},
139 135
140#define RTL8188E_TRANS_SUS_TO_CARDEMU \ 136#define RTL8188E_TRANS_SUS_TO_CARDEMU \
141 /* format */ \
142 /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, */\
143 {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, \ 137 {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, \
144 /*Set SDIO suspend local register*/ \ 138 PWR_BASEADDR_SDIO, PWR_CMD_WRITE, BIT(0), 0 \
145 PWR_BASEADDR_SDIO, PWR_CMD_WRITE, BIT(0), 0}, \ 139 /*Set SDIO suspend local register*/}, \
146 {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, \ 140 {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, \
147 /*wait power state to suspend*/ \ 141 PWR_BASEADDR_SDIO, PWR_CMD_POLLING, BIT(1), BIT(1) \
148 PWR_BASEADDR_SDIO, PWR_CMD_POLLING, BIT(1), BIT(1)}, \ 142 /*wait power state to suspend*/}, \
149 {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \ 143 {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \
150 /*0x04[12:11] = 2b'01enable WL suspend*/ \ 144 PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(3) | BIT(4), 0 \
151 PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(3)|BIT(4), 0}, 145 /*0x04[12:11] = 2b'01enable WL suspend*/},
152 146
153#define RTL8188E_TRANS_CARDEMU_TO_CARDDIS \ 147#define RTL8188E_TRANS_CARDEMU_TO_CARDDIS \
154 /* format */ \
155 /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, */\
156 {0x0026, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \ 148 {0x0026, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \
157 /*0x24[23] = 2b'01 schmit trigger */ \ 149 PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(7), BIT(7) \
158 PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(7), BIT(7)}, \ 150 /*0x24[23] = 2b'01 schmit trigger */}, \
159 {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, \ 151 {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, \
160 PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK, \ 152 PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK, \
161 /*0x04[12:11] = 2b'01 enable WL suspend*/ \ 153 PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(3) | BIT(4), BIT(3) \
162 PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(3)|BIT(4), BIT(3)}, \ 154 /*0x04[12:11] = 2b'01 enable WL suspend*/}, \
163 {0x0007, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, \ 155 {0x0007, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, \
164 PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK, \ 156 PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK, \
165 /* 0x04[31:30] = 2b'10 enable enable bandgap mbias in suspend */\ 157 PWR_BASEADDR_MAC, PWR_CMD_WRITE, 0xFF, 0 \
166 PWR_BASEADDR_MAC, PWR_CMD_WRITE, 0xFF, 0}, \ 158 /* 0x04[31:30] = 2b'10 enable enable bandgap mbias in suspend */},\
167 {0x0041, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, \ 159 {0x0041, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, \
168 PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK, \ 160 PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK, \
169 /*Clear SIC_EN register 0x40[12] = 1'b0 */ \ 161 PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(4), 0 \
170 PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(4), 0}, \ 162 /*Clear SIC_EN register 0x40[12] = 1'b0 */}, \
171 {0xfe10, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK, \ 163 {0xfe10, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK, \
172 /*Set USB suspend enable local register 0xfe10[4]= 1 */ \ 164 PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(4), BIT(4) \
173 PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(4), BIT(4)}, \ 165 /*Set USB suspend enable local register 0xfe10[4]=1 */}, \
174 {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, \ 166 {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, \
175 /*Set SDIO suspend local register*/ \ 167 PWR_BASEADDR_SDIO, PWR_CMD_WRITE, BIT(0), BIT(0) \
176 PWR_BASEADDR_SDIO, PWR_CMD_WRITE, BIT(0), BIT(0)}, \ 168 /*Set SDIO suspend local register*/}, \
177 {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, \ 169 {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, \
178 PWR_CMD_POLLING, BIT(1), 0}, /*wait power state to suspend*/ 170 PWR_BASEADDR_SDIO, PWR_CMD_POLLING, BIT(1), 0 \
171 /*wait power state to suspend*/},
179 172
180#define RTL8188E_TRANS_CARDDIS_TO_CARDEMU \ 173#define RTL8188E_TRANS_CARDDIS_TO_CARDEMU \
181 /* format */ \
182 /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, */\
183 {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, \ 174 {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, \
184 PWR_BASEADDR_SDIO,\ 175 PWR_BASEADDR_SDIO, PWR_CMD_WRITE, BIT(0), 0 \
185 PWR_CMD_WRITE, BIT(0), 0}, /*Set SDIO suspend local register*/ \ 176 /*Set SDIO suspend local register*/}, \
186 {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, \ 177 {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, \
187 PWR_BASEADDR_SDIO,\ 178 PWR_BASEADDR_SDIO, PWR_CMD_POLLING, BIT(1), BIT(1) \
188 PWR_CMD_POLLING, BIT(1), BIT(1)}, /*wait power state to suspend*/\ 179 /*wait power state to suspend*/}, \
189 {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \ 180 {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \
190 PWR_BASEADDR_MAC, \ 181 PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(3)|BIT(4), 0 \
191 PWR_CMD_WRITE, BIT(3)|BIT(4), 0}, \ 182 /*0x04[12:11] = 2b'01enable WL suspend*/},
192 /*0x04[12:11] = 2b'01enable WL suspend*/
193
194 183
195#define RTL8188E_TRANS_CARDEMU_TO_PDN \ 184#define RTL8188E_TRANS_CARDEMU_TO_PDN \
196 /* format */ \
197 /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, */\
198 {0x0006, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \ 185 {0x0006, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \
199 PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(0), 0},/* 0x04[16] = 0*/ \ 186 PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(0), 0/* 0x04[16] = 0*/}, \
200 {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \ 187 {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \
201 PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(7), BIT(7)},/* 0x04[15] = 1*/ 188 PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(7), BIT(7) \
202 189 /* 0x04[15] = 1*/},
203 190
204#define RTL8188E_TRANS_PDN_TO_CARDEMU \ 191#define RTL8188E_TRANS_PDN_TO_CARDEMU \
205 /* format */ \
206 /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, */\
207 {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \ 192 {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \
208 PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(7), 0},/* 0x04[15] = 0*/ 193 PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(7), 0/* 0x04[15] = 0*/},
209
210 194
211#define RTL8188E_TRANS_ACT_TO_LPS \ 195#define RTL8188E_TRANS_ACT_TO_LPS \
212 /* format */ \
213 /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value },*/\
214 {0x0522, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \ 196 {0x0522, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \
215 PWR_BASEADDR_MAC, PWR_CMD_WRITE, 0xFF, 0x7F},/*Tx Pause*/ \ 197 PWR_BASEADDR_MAC, PWR_CMD_WRITE, 0xFF, 0x7F \
198 /*Tx Pause*/}, \
216 {0x05F8, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \ 199 {0x05F8, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \
217 /*zero if no pkt is tx*/\ 200 PWR_BASEADDR_MAC, PWR_CMD_POLLING, 0xFF, 0 \
218 PWR_BASEADDR_MAC, PWR_CMD_POLLING, 0xFF, 0}, \ 201 /*Should be zero if no packet is transmitting*/}, \
219 {0x05F9, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \ 202 {0x05F9, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \
220 /*Should be zero if no packet is transmitting*/ \ 203 PWR_BASEADDR_MAC, PWR_CMD_POLLING, 0xFF, 0 \
221 PWR_BASEADDR_MAC, PWR_CMD_POLLING, 0xFF, 0}, \ 204 /*Should be zero if no packet is transmitting*/}, \
222 {0x05FA, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \ 205 {0x05FA, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \
223 /*Should be zero if no packet is transmitting*/ \ 206 PWR_BASEADDR_MAC, PWR_CMD_POLLING, 0xFF, 0 \
224 PWR_BASEADDR_MAC, PWR_CMD_POLLING, 0xFF, 0}, \ 207 /*Should be zero if no packet is transmitting*/}, \
225 {0x05FB, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \ 208 {0x05FB, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \
226 /*Should be zero if no packet is transmitting*/ \ 209 PWR_BASEADDR_MAC, PWR_CMD_POLLING, 0xFF, 0 \
227 PWR_BASEADDR_MAC, PWR_CMD_POLLING, 0xFF, 0}, \ 210 /*Should be zero if no packet is transmitting*/}, \
228 {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \ 211 {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \
229 /*CCK and OFDM are disabled, and clock are gated*/ \ 212 PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(0), 0 \
230 PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(0), 0}, \ 213 /*CCK and OFDM are disabled,and clock are gated*/}, \
231 {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \ 214 {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \
232 PWR_BASEADDR_MAC, PWR_CMD_DELAY, 0, PWRSEQ_DELAY_US},/*Delay 1us*/\ 215 PWR_BASEADDR_MAC, PWR_CMD_DELAY, 0, PWRSEQ_DELAY_US \
216 /*Delay 1us*/}, \
233 {0x0100, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \ 217 {0x0100, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \
234 PWR_BASEADDR_MAC, PWR_CMD_WRITE, 0xFF, 0x3F},/*Reset MAC TRX*/ \ 218 PWR_BASEADDR_MAC, PWR_CMD_WRITE, 0xFF, 0x3F \
219 /*Reset MAC TRX*/}, \
235 {0x0101, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \ 220 {0x0101, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \
236 /*check if removed later*/ \ 221 PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(1), 0 \
237 PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(1), 0}, \ 222 /*check if removed later*/}, \
238 {0x0553, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \ 223 {0x0553, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \
239 /*Respond TxOK to scheduler*/ \ 224 PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(5), BIT(5) \
240 PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(5), BIT(5)}, \ 225 /*Respond TxOK to scheduler*/},
241 226
242 227
243#define RTL8188E_TRANS_LPS_TO_ACT \ 228#define RTL8188E_TRANS_LPS_TO_ACT \
244 /* format */ \
245 /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, */\
246 {0x0080, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, \ 229 {0x0080, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, \
247 PWR_BASEADDR_SDIO, PWR_CMD_WRITE, 0xFF, 0x84}, /*SDIO RPWM*/ \ 230 PWR_BASEADDR_SDIO, PWR_CMD_WRITE, 0xFF, 0x84 \
231 /*SDIO RPWM*/}, \
248 {0xFE58, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK, \ 232 {0xFE58, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK, \
249 PWR_BASEADDR_MAC, PWR_CMD_WRITE, 0xFF, 0x84}, /*USB RPWM*/ \ 233 PWR_BASEADDR_MAC, PWR_CMD_WRITE, 0xFF, 0x84 \
234 /*USB RPWM*/}, \
250 {0x0361, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK, \ 235 {0x0361, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK, \
251 PWR_BASEADDR_MAC, PWR_CMD_WRITE, 0xFF, 0x84}, /*PCIe RPWM*/ \ 236 PWR_BASEADDR_MAC, PWR_CMD_WRITE, 0xFF, 0x84 \
237 /*PCIe RPWM*/}, \
252 {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \ 238 {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \
253 PWR_BASEADDR_MAC, PWR_CMD_DELAY, 0, PWRSEQ_DELAY_MS}, /*Delay*/ \ 239 PWR_BASEADDR_MAC, PWR_CMD_DELAY, 0, PWRSEQ_DELAY_MS \
240 /*Delay*/}, \
254 {0x0008, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \ 241 {0x0008, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \
255 /*. 0x08[4] = 0 switch TSF to 40M*/ \ 242 PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(4), 0 \
256 PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(4), 0}, \ 243 /*. 0x08[4] = 0 switch TSF to 40M*/}, \
257 {0x0109, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \ 244 {0x0109, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \
258 /*Polling 0x109[7]= 0 TSF in 40M*/ \ 245 PWR_BASEADDR_MAC, PWR_CMD_POLLING, BIT(7), 0 \
259 PWR_BASEADDR_MAC, PWR_CMD_POLLING, BIT(7), 0}, \ 246 /*Polling 0x109[7]=0 TSF in 40M*/}, \
260 {0x0029, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \ 247 {0x0029, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \
261 /*. 0x29[7:6] = 2b'00 enable BB clock*/ \ 248 PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(6)|BIT(7), 0 \
262 PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(6)|BIT(7), 0}, \ 249 /*. 0x29[7:6] = 2b'00 enable BB clock*/}, \
263 {0x0101, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \ 250 {0x0101, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \
264 /*. 0x101[1] = 1*/\ 251 PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(1), BIT(1) \
265 PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(1), BIT(1)}, \ 252 /*. 0x101[1] = 1*/}, \
266 {0x0100, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \ 253 {0x0100, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \
267 /*. 0x100[7:0] = 0xFF enable WMAC TRX*/\ 254 PWR_BASEADDR_MAC, PWR_CMD_WRITE, 0xFF, 0xFF \
268 PWR_BASEADDR_MAC, PWR_CMD_WRITE, 0xFF, 0xFF}, \ 255 /*. 0x100[7:0] = 0xFF enable WMAC TRX*/}, \
269 {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \ 256 {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \
270 /*. 0x02[1:0] = 2b'11 enable BB macro*/\ 257 PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(1)|BIT(0), BIT(1)|BIT(0) \
271 PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(1)|BIT(0), BIT(1)|BIT(0)}, \ 258 /*. 0x02[1:0] = 2b'11 enable BB macro*/}, \
272 {0x0522, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,\ 259 {0x0522, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, \
273 PWR_BASEADDR_MAC, PWR_CMD_WRITE, 0xFF, 0}, /*. 0x522 = 0*/ 260 PWR_BASEADDR_MAC, PWR_CMD_WRITE, 0xFF, 0 \
274 261 /*. 0x522 = 0*/},
275 262
276#define RTL8188E_TRANS_END \ 263#define RTL8188E_TRANS_END \
277 /* format */ \
278 /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value },*/\
279 {0xFFFF, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,\ 264 {0xFFFF, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,\
280 0, PWR_CMD_END, 0, 0} 265 0, PWR_CMD_END, 0, 0}
281 266
282extern struct wlan_pwr_cfg rtl8188e_power_on_flow 267extern struct wlan_pwr_cfg rtl8188E_power_on_flow
283 [RTL8188E_TRANS_CARDEMU_TO_ACT_STEPS + 268 [RTL8188E_TRANS_CARDEMU_TO_ACT_STEPS +
284 RTL8188E_TRANS_END_STEPS]; 269 RTL8188E_TRANS_END_STEPS];
285extern struct wlan_pwr_cfg rtl8188e_radio_off_flow 270extern struct wlan_pwr_cfg rtl8188E_radio_off_flow
286 [RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS + 271 [RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS +
287 RTL8188E_TRANS_END_STEPS]; 272 RTL8188E_TRANS_END_STEPS];
288extern struct wlan_pwr_cfg rtl8188e_card_disable_flow 273extern struct wlan_pwr_cfg rtl8188E_card_disable_flow
289 [RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS + 274 [RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS +
290 RTL8188E_TRANS_CARDEMU_TO_PDN_STEPS + 275 RTL8188E_TRANS_CARDEMU_TO_PDN_STEPS +
291 RTL8188E_TRANS_END_STEPS]; 276 RTL8188E_TRANS_END_STEPS];
292extern struct wlan_pwr_cfg rtl8188e_card_enable_flow 277extern struct wlan_pwr_cfg rtl8188E_card_enable_flow
293 [RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS + 278 [RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS +
294 RTL8188E_TRANS_CARDEMU_TO_PDN_STEPS + 279 RTL8188E_TRANS_CARDEMU_TO_PDN_STEPS +
295 RTL8188E_TRANS_END_STEPS]; 280 RTL8188E_TRANS_END_STEPS];
296extern struct wlan_pwr_cfg rtl8188e_suspend_flow 281extern struct wlan_pwr_cfg rtl8188E_suspend_flow
297 [RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS + 282 [RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS +
298 RTL8188E_TRANS_CARDEMU_TO_SUS_STEPS + 283 RTL8188E_TRANS_CARDEMU_TO_SUS_STEPS +
299 RTL8188E_TRANS_END_STEPS]; 284 RTL8188E_TRANS_END_STEPS];
300extern struct wlan_pwr_cfg rtl8188e_resume_flow 285extern struct wlan_pwr_cfg rtl8188E_resume_flow
301 [RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS + 286 [RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS +
302 RTL8188E_TRANS_CARDEMU_TO_SUS_STEPS + 287 RTL8188E_TRANS_CARDEMU_TO_SUS_STEPS +
303 RTL8188E_TRANS_END_STEPS]; 288 RTL8188E_TRANS_END_STEPS];
304extern struct wlan_pwr_cfg rtl8188e_hwpdn_flow 289extern struct wlan_pwr_cfg rtl8188E_hwpdn_flow
305 [RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS + 290 [RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS +
306 RTL8188E_TRANS_CARDEMU_TO_PDN_STEPS + 291 RTL8188E_TRANS_CARDEMU_TO_PDN_STEPS +
307 RTL8188E_TRANS_END_STEPS]; 292 RTL8188E_TRANS_END_STEPS];
308extern struct wlan_pwr_cfg rtl8188e_enter_lps_flow 293extern struct wlan_pwr_cfg rtl8188E_enter_lps_flow
309 [RTL8188E_TRANS_ACT_TO_LPS_STEPS + 294 [RTL8188E_TRANS_ACT_TO_LPS_STEPS +
310 RTL8188E_TRANS_END_STEPS]; 295 RTL8188E_TRANS_END_STEPS];
311extern struct wlan_pwr_cfg rtl8188e_leave_lps_flow 296extern struct wlan_pwr_cfg rtl8188E_leave_lps_flow
312 [RTL8188E_TRANS_LPS_TO_ACT_STEPS + 297 [RTL8188E_TRANS_LPS_TO_ACT_STEPS +
313 RTL8188E_TRANS_END_STEPS]; 298 RTL8188E_TRANS_END_STEPS];
314 299
315/* RTL8723 Power Configuration CMDs for PCIe interface */ 300/* RTL8723 Power Configuration CMDs for PCIe interface */
316#define RTL8188E_NIC_PWR_ON_FLOW rtl8188e_power_on_flow 301#define RTL8188E_NIC_PWR_ON_FLOW rtl8188E_power_on_flow
317#define RTL8188E_NIC_RF_OFF_FLOW rtl8188e_radio_off_flow 302#define RTL8188E_NIC_RF_OFF_FLOW rtl8188E_radio_off_flow
318#define RTL8188E_NIC_DISABLE_FLOW rtl8188e_card_disable_flow 303#define RTL8188E_NIC_DISABLE_FLOW rtl8188E_card_disable_flow
319#define RTL8188E_NIC_ENABLE_FLOW rtl8188e_card_enable_flow 304#define RTL8188E_NIC_ENABLE_FLOW rtl8188E_card_enable_flow
320#define RTL8188E_NIC_SUSPEND_FLOW rtl8188e_suspend_flow 305#define RTL8188E_NIC_SUSPEND_FLOW rtl8188E_suspend_flow
321#define RTL8188E_NIC_RESUME_FLOW rtl8188e_resume_flow 306#define RTL8188E_NIC_RESUME_FLOW rtl8188E_resume_flow
322#define RTL8188E_NIC_PDN_FLOW rtl8188e_hwpdn_flow 307#define RTL8188E_NIC_PDN_FLOW rtl8188E_hwpdn_flow
323#define RTL8188E_NIC_LPS_ENTER_FLOW rtl8188e_enter_lps_flow 308#define RTL8188E_NIC_LPS_ENTER_FLOW rtl8188E_enter_lps_flow
324#define RTL8188E_NIC_LPS_LEAVE_FLOW rtl8188e_leave_lps_flow 309#define RTL8188E_NIC_LPS_LEAVE_FLOW rtl8188E_leave_lps_flow
325 310
326#endif 311#endif
diff --git a/drivers/net/wireless/rtlwifi/rtl8188ee/pwrseqcmd.c b/drivers/net/wireless/rtlwifi/rtl8188ee/pwrseqcmd.c
index 3a95ddb3257f..eceedcd38974 100644
--- a/drivers/net/wireless/rtlwifi/rtl8188ee/pwrseqcmd.c
+++ b/drivers/net/wireless/rtlwifi/rtl8188ee/pwrseqcmd.c
@@ -11,10 +11,6 @@
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details. 12 * more details.
13 * 13 *
14 * You should have received a copy of the GNU General Public License along with
15 * this program; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
17 *
18 * The full GNU General Public License is included in this distribution in the 14 * The full GNU General Public License is included in this distribution in the
19 * file called LICENSE. 15 * file called LICENSE.
20 * 16 *
@@ -32,76 +28,75 @@
32 28
33 29
34/* Description: 30/* Description:
35 * This routine deal with the Power Configuration CMDs 31* This routine deal with the Power Configuration CMDs
36 * parsing for RTL8723/RTL8188E Series IC. 32* parsing for RTL8723/RTL8188E Series IC.
37 * Assumption: 33* Assumption:
38 * We should follow specific format which was released from HW SD. 34* We should follow specific format which was released from HW SD.
39 * 35*
40 * 2011.07.07, added by Roger. 36* 2011.07.07, added by Roger.
41 */ 37*/
38bool rtl_hal_pwrseqcmdparsing(struct rtl_priv *rtlpriv, u8 cut_version,
39 u8 fab_version, u8 interface_type,
40 struct wlan_pwr_cfg pwrcfgcmd[])
42 41
43bool rtl88_hal_pwrseqcmdparsing(struct rtl_priv *rtlpriv, u8 cut_version,
44 u8 fab_version, u8 interface_type,
45 struct wlan_pwr_cfg pwrcfgcmd[])
46{ 42{
47 struct wlan_pwr_cfg cmd = {0}; 43 struct wlan_pwr_cfg pwr_cfg_cmd = {0};
48 bool polling_bit = false; 44 bool b_polling_bit = false;
49 u32 ary_idx = 0; 45 u32 ary_idx = 0;
50 u8 val = 0; 46 u8 value = 0;
51 u32 offset = 0; 47 u32 offset = 0;
52 u32 polling_count = 0; 48 u32 polling_count = 0;
53 u32 max_polling_cnt = 5000; 49 u32 max_polling_cnt = 5000;
54 50
55 do { 51 do {
56 cmd = pwrcfgcmd[ary_idx]; 52 pwr_cfg_cmd = pwrcfgcmd[ary_idx];
57 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE, 53 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
58 "rtl88_hal_pwrseqcmdparsing(): offset(%#x), cut_msk(%#x), fab_msk(%#x)," 54 "rtl_hal_pwrseqcmdparsing(): offset(%#x),cut_msk(%#x), fab_msk(%#x), interface_msk(%#x), base(%#x), cmd(%#x), msk(%#x), value(%#x)\n",
59 "interface_msk(%#x), base(%#x), cmd(%#x), msk(%#x), val(%#x)\n", 55 GET_PWR_CFG_OFFSET(pwr_cfg_cmd),
60 GET_PWR_CFG_OFFSET(cmd), 56 GET_PWR_CFG_CUT_MASK(pwr_cfg_cmd),
61 GET_PWR_CFG_CUT_MASK(cmd), 57 GET_PWR_CFG_FAB_MASK(pwr_cfg_cmd),
62 GET_PWR_CFG_FAB_MASK(cmd), 58 GET_PWR_CFG_INTF_MASK(pwr_cfg_cmd),
63 GET_PWR_CFG_INTF_MASK(cmd), 59 GET_PWR_CFG_BASE(pwr_cfg_cmd),
64 GET_PWR_CFG_BASE(cmd), 60 GET_PWR_CFG_CMD(pwr_cfg_cmd),
65 GET_PWR_CFG_CMD(cmd), 61 GET_PWR_CFG_MASK(pwr_cfg_cmd),
66 GET_PWR_CFG_MASK(cmd), 62 GET_PWR_CFG_VALUE(pwr_cfg_cmd));
67 GET_PWR_CFG_VALUE(cmd));
68 63
69 if ((GET_PWR_CFG_FAB_MASK(cmd) & fab_version) && 64 if ((GET_PWR_CFG_FAB_MASK(pwr_cfg_cmd)&fab_version) &&
70 (GET_PWR_CFG_CUT_MASK(cmd) & cut_version) && 65 (GET_PWR_CFG_CUT_MASK(pwr_cfg_cmd)&cut_version) &&
71 (GET_PWR_CFG_INTF_MASK(cmd) & interface_type)) { 66 (GET_PWR_CFG_INTF_MASK(pwr_cfg_cmd)&interface_type)) {
72 switch (GET_PWR_CFG_CMD(cmd)) { 67 switch (GET_PWR_CFG_CMD(pwr_cfg_cmd)) {
73 case PWR_CMD_READ: 68 case PWR_CMD_READ:
74 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE, 69 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
75 "rtl88_hal_pwrseqcmdparsing(): PWR_CMD_READ\n"); 70 "rtl_hal_pwrseqcmdparsing(): PWR_CMD_READ\n");
76 break; 71 break;
77 case PWR_CMD_WRITE: { 72 case PWR_CMD_WRITE:
78 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE, 73 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
79 "rtl88_hal_pwrseqcmdparsing(): PWR_CMD_WRITE\n"); 74 "rtl_hal_pwrseqcmdparsing(): PWR_CMD_WRITE\n");
80 offset = GET_PWR_CFG_OFFSET(cmd); 75 offset = GET_PWR_CFG_OFFSET(pwr_cfg_cmd);
81 76
82 /*Read the val from system register*/ 77 /*Read the value from system register*/
83 val = rtl_read_byte(rtlpriv, offset); 78 value = rtl_read_byte(rtlpriv, offset);
84 val &= (~(GET_PWR_CFG_MASK(cmd))); 79 value &= (~(GET_PWR_CFG_MASK(pwr_cfg_cmd)));
85 val |= (GET_PWR_CFG_VALUE(cmd) & 80 value |= (GET_PWR_CFG_VALUE(pwr_cfg_cmd)
86 GET_PWR_CFG_MASK(cmd)); 81 & GET_PWR_CFG_MASK(pwr_cfg_cmd));
87 82
88 /*Write the val back to sytem register*/ 83 /*Write the back to sytem register*/
89 rtl_write_byte(rtlpriv, offset, val); 84 rtl_write_byte(rtlpriv, offset, value);
90 }
91 break; 85 break;
92 case PWR_CMD_POLLING: 86 case PWR_CMD_POLLING:
93 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE, 87 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
94 "rtl88_hal_pwrseqcmdparsing(): PWR_CMD_POLLING\n"); 88 "rtl_hal_pwrseqcmdparsing(): PWR_CMD_POLLING\n");
95 polling_bit = false; 89 b_polling_bit = false;
96 offset = GET_PWR_CFG_OFFSET(cmd); 90 offset = GET_PWR_CFG_OFFSET(pwr_cfg_cmd);
97 91
98 do { 92 do {
99 val = rtl_read_byte(rtlpriv, offset); 93 value = rtl_read_byte(rtlpriv, offset);
100 94
101 val = val & GET_PWR_CFG_MASK(cmd); 95 value &= GET_PWR_CFG_MASK(pwr_cfg_cmd);
102 if (val == (GET_PWR_CFG_VALUE(cmd) & 96 if (value ==
103 GET_PWR_CFG_MASK(cmd))) 97 (GET_PWR_CFG_VALUE(pwr_cfg_cmd) &
104 polling_bit = true; 98 GET_PWR_CFG_MASK(pwr_cfg_cmd)))
99 b_polling_bit = true;
105 else 100 else
106 udelay(10); 101 udelay(10);
107 102
@@ -111,28 +106,28 @@ bool rtl88_hal_pwrseqcmdparsing(struct rtl_priv *rtlpriv, u8 cut_version,
111 "polling fail in pwrseqcmd\n"); 106 "polling fail in pwrseqcmd\n");
112 return false; 107 return false;
113 } 108 }
114 } while (!polling_bit); 109 } while (!b_polling_bit);
115 110
116 break; 111 break;
117 case PWR_CMD_DELAY: 112 case PWR_CMD_DELAY:
118 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE, 113 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
119 "rtl88_hal_pwrseqcmdparsing(): PWR_CMD_DELAY\n"); 114 "rtl_hal_pwrseqcmdparsing(): PWR_CMD_DELAY\n");
120 if (GET_PWR_CFG_VALUE(cmd) == PWRSEQ_DELAY_US) 115 if (GET_PWR_CFG_VALUE(pwr_cfg_cmd) ==
121 udelay(GET_PWR_CFG_OFFSET(cmd)); 116 PWRSEQ_DELAY_US)
117 udelay(GET_PWR_CFG_OFFSET(pwr_cfg_cmd));
122 else 118 else
123 mdelay(GET_PWR_CFG_OFFSET(cmd)); 119 mdelay(GET_PWR_CFG_OFFSET(pwr_cfg_cmd));
124 break; 120 break;
125 case PWR_CMD_END: 121 case PWR_CMD_END:
126 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE, 122 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
127 "rtl88_hal_pwrseqcmdparsing(): PWR_CMD_END\n"); 123 "rtl_hal_pwrseqcmdparsing(): PWR_CMD_END\n");
128 return true; 124 return true;
129 default: 125 default:
130 RT_ASSERT(false, 126 RT_ASSERT(false,
131 "rtl88_hal_pwrseqcmdparsing(): Unknown CMD!!\n"); 127 "rtl_hal_pwrseqcmdparsing(): Unknown CMD!!\n");
132 break; 128 break;
133 } 129 }
134 } 130 }
135
136 ary_idx++; 131 ary_idx++;
137 } while (1); 132 } while (1);
138 133
diff --git a/drivers/net/wireless/rtlwifi/rtl8188ee/pwrseqcmd.h b/drivers/net/wireless/rtlwifi/rtl8188ee/pwrseqcmd.h
index a6cdb0d851a9..dff77a5cef23 100644
--- a/drivers/net/wireless/rtlwifi/rtl8188ee/pwrseqcmd.h
+++ b/drivers/net/wireless/rtlwifi/rtl8188ee/pwrseqcmd.h
@@ -30,22 +30,22 @@
30/*---------------------------------------------*/ 30/*---------------------------------------------*/
31/* The value of cmd: 4 bits */ 31/* The value of cmd: 4 bits */
32/*---------------------------------------------*/ 32/*---------------------------------------------*/
33#define PWR_CMD_READ 0x00 33#define PWR_CMD_READ 0x00
34#define PWR_CMD_WRITE 0x01 34#define PWR_CMD_WRITE 0x01
35#define PWR_CMD_POLLING 0x02 35#define PWR_CMD_POLLING 0x02
36#define PWR_CMD_DELAY 0x03 36#define PWR_CMD_DELAY 0x03
37#define PWR_CMD_END 0x04 37#define PWR_CMD_END 0x04
38 38
39/* define the base address of each block */ 39/* define the base address of each block */
40#define PWR_BASEADDR_MAC 0x00 40#define PWR_BASEADDR_MAC 0x00
41#define PWR_BASEADDR_USB 0x01 41#define PWR_BASEADDR_USB 0x01
42#define PWR_BASEADDR_PCIE 0x02 42#define PWR_BASEADDR_PCIE 0x02
43#define PWR_BASEADDR_SDIO 0x03 43#define PWR_BASEADDR_SDIO 0x03
44 44
45#define PWR_INTF_SDIO_MSK BIT(0) 45#define PWR_INTF_SDIO_MSK BIT(0)
46#define PWR_INTF_USB_MSK BIT(1) 46#define PWR_INTF_USB_MSK BIT(1)
47#define PWR_INTF_PCI_MSK BIT(2) 47#define PWR_INTF_PCI_MSK BIT(2)
48#define PWR_INTF_ALL_MSK (BIT(0)|BIT(1)|BIT(2)|BIT(3)) 48#define PWR_INTF_ALL_MSK (BIT(0)|BIT(1)|BIT(2)|BIT(3))
49 49
50#define PWR_FAB_TSMC_MSK BIT(0) 50#define PWR_FAB_TSMC_MSK BIT(0)
51#define PWR_FAB_UMC_MSK BIT(1) 51#define PWR_FAB_UMC_MSK BIT(1)
@@ -75,19 +75,20 @@ struct wlan_pwr_cfg {
75 u8 cmd:4; 75 u8 cmd:4;
76 u8 msk; 76 u8 msk;
77 u8 value; 77 u8 value;
78
78}; 79};
79 80
80#define GET_PWR_CFG_OFFSET(__PWR) (__PWR.offset) 81#define GET_PWR_CFG_OFFSET(__PWR_CMD) __PWR_CMD.offset
81#define GET_PWR_CFG_CUT_MASK(__PWR) (__PWR.cut_msk) 82#define GET_PWR_CFG_CUT_MASK(__PWR_CMD) __PWR_CMD.cut_msk
82#define GET_PWR_CFG_FAB_MASK(__PWR) (__PWR.fab_msk) 83#define GET_PWR_CFG_FAB_MASK(__PWR_CMD) __PWR_CMD.fab_msk
83#define GET_PWR_CFG_INTF_MASK(__PWR) (__PWR.interface_msk) 84#define GET_PWR_CFG_INTF_MASK(__PWR_CMD) __PWR_CMD.interface_msk
84#define GET_PWR_CFG_BASE(__PWR) (__PWR.base) 85#define GET_PWR_CFG_BASE(__PWR_CMD) __PWR_CMD.base
85#define GET_PWR_CFG_CMD(__PWR) (__PWR.cmd) 86#define GET_PWR_CFG_CMD(__PWR_CMD) __PWR_CMD.cmd
86#define GET_PWR_CFG_MASK(__PWR) (__PWR.msk) 87#define GET_PWR_CFG_MASK(__PWR_CMD) __PWR_CMD.msk
87#define GET_PWR_CFG_VALUE(__PWR) (__PWR.value) 88#define GET_PWR_CFG_VALUE(__PWR_CMD) __PWR_CMD.value
88 89
89bool rtl88_hal_pwrseqcmdparsing(struct rtl_priv *rtlpriv, u8 cut_version, 90bool rtl_hal_pwrseqcmdparsing(struct rtl_priv *rtlpriv, u8 cut_version,
90 u8 fab_version, u8 interface_type, 91 u8 fab_version, u8 interface_type,
91 struct wlan_pwr_cfg pwrcfgcmd[]); 92 struct wlan_pwr_cfg pwrcfgcmd[]);
92 93
93#endif 94#endif
diff --git a/drivers/net/wireless/rtlwifi/rtl8188ee/reg.h b/drivers/net/wireless/rtlwifi/rtl8188ee/reg.h
index cd7e7a527133..15400ee6c04b 100644
--- a/drivers/net/wireless/rtlwifi/rtl8188ee/reg.h
+++ b/drivers/net/wireless/rtlwifi/rtl8188ee/reg.h
@@ -11,10 +11,6 @@
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details. 12 * more details.
13 * 13 *
14 * You should have received a copy of the GNU General Public License along with
15 * this program; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
17 *
18 * The full GNU General Public License is included in this distribution in the 14 * The full GNU General Public License is included in this distribution in the
19 * file called LICENSE. 15 * file called LICENSE.
20 * 16 *
@@ -30,62 +26,60 @@
30#ifndef __RTL92C_REG_H__ 26#ifndef __RTL92C_REG_H__
31#define __RTL92C_REG_H__ 27#define __RTL92C_REG_H__
32 28
33#define TXPKT_BUF_SELECT 0x69 29#define TXPKT_BUF_SELECT 0x69
34#define RXPKT_BUF_SELECT 0xA5 30#define RXPKT_BUF_SELECT 0xA5
35#define DISABLE_TRXPKT_BUF_ACCESS 0x0 31#define DISABLE_TRXPKT_BUF_ACCESS 0x0
36 32
37#define REG_SYS_ISO_CTRL 0x0000 33#define REG_SYS_ISO_CTRL 0x0000
38#define REG_SYS_FUNC_EN 0x0002 34#define REG_SYS_FUNC_EN 0x0002
39#define REG_APS_FSMCO 0x0004 35#define REG_APS_FSMCO 0x0004
40#define REG_SYS_CLKR 0x0008 36#define REG_SYS_CLKR 0x0008
41#define REG_9346CR 0x000A 37#define REG_9346CR 0x000A
42#define REG_EE_VPD 0x000C 38#define REG_EE_VPD 0x000C
43#define REG_AFE_MISC 0x0010 39#define REG_AFE_MISC 0x0010
44#define REG_SPS0_CTRL 0x0011 40#define REG_SPS0_CTRL 0x0011
45#define REG_SPS_OCP_CFG 0x0018 41#define REG_SPS_OCP_CFG 0x0018
46#define REG_RSV_CTRL 0x001C 42#define REG_RSV_CTRL 0x001C
47#define REG_RF_CTRL 0x001F 43#define REG_RF_CTRL 0x001F
48#define REG_LDOA15_CTRL 0x0020 44#define REG_LDOA15_CTRL 0x0020
49#define REG_LDOV12D_CTRL 0x0021 45#define REG_LDOV12D_CTRL 0x0021
50#define REG_LDOHCI12_CTRL 0x0022 46#define REG_LDOHCI12_CTRL 0x0022
51#define REG_LPLDO_CTRL 0x0023 47#define REG_LPLDO_CTRL 0x0023
52#define REG_AFE_XTAL_CTRL 0x0024 48#define REG_AFE_XTAL_CTRL 0x0024
53#define REG_AFE_LDO_CTRL 0x0027 /* 1.5v for 8188EE test 49/* 1.5v for 8188EE test chip, 1.4v for MP chip */
54 * chip, 1.4v for MP chip 50#define REG_AFE_LDO_CTRL 0x0027
55 */
56#define REG_AFE_PLL_CTRL 0x0028 51#define REG_AFE_PLL_CTRL 0x0028
57#define REG_EFUSE_CTRL 0x0030 52#define REG_EFUSE_CTRL 0x0030
58#define REG_EFUSE_TEST 0x0034 53#define REG_EFUSE_TEST 0x0034
59#define REG_PWR_DATA 0x0038 54#define REG_PWR_DATA 0x0038
60#define REG_CAL_TIMER 0x003C 55#define REG_CAL_TIMER 0x003C
61#define REG_ACLK_MON 0x003E 56#define REG_ACLK_MON 0x003E
62#define REG_GPIO_MUXCFG 0x0040 57#define REG_GPIO_MUXCFG 0x0040
63#define REG_GPIO_IO_SEL 0x0042 58#define REG_GPIO_IO_SEL 0x0042
64#define REG_MAC_PINMUX_CFG 0x0043 59#define REG_MAC_PINMUX_CFG 0x0043
65#define REG_GPIO_PIN_CTRL 0x0044 60#define REG_GPIO_PIN_CTRL 0x0044
66#define REG_GPIO_INTM 0x0048 61#define REG_GPIO_INTM 0x0048
67#define REG_LEDCFG0 0x004C 62#define REG_LEDCFG0 0x004C
68#define REG_LEDCFG1 0x004D 63#define REG_LEDCFG1 0x004D
69#define REG_LEDCFG2 0x004E 64#define REG_LEDCFG2 0x004E
70#define REG_LEDCFG3 0x004F 65#define REG_LEDCFG3 0x004F
71#define REG_FSIMR 0x0050 66#define REG_FSIMR 0x0050
72#define REG_FSISR 0x0054 67#define REG_FSISR 0x0054
73#define REG_HSIMR 0x0058 68#define REG_HSIMR 0x0058
74#define REG_HSISR 0x005c 69#define REG_HSISR 0x005c
75#define REG_GPIO_PIN_CTRL_2 0x0060 70#define REG_GPIO_PIN_CTRL_2 0x0060
76#define REG_GPIO_IO_SEL_2 0x0062 71#define REG_GPIO_IO_SEL_2 0x0062
77#define REG_GPIO_OUTPUT 0x006c 72#define REG_GPIO_OUTPUT 0x006c
78#define REG_AFE_XTAL_CTRL_EXT 0x0078 73#define REG_AFE_XTAL_CTRL_EXT 0x0078
79#define REG_XCK_OUT_CTRL 0x007c 74#define REG_XCK_OUT_CTRL 0x007c
80#define REG_MCUFWDL 0x0080 75#define REG_MCUFWDL 0x0080
81#define REG_WOL_EVENT 0x0081 76#define REG_WOL_EVENT 0x0081
82#define REG_MCUTSTCFG 0x0084 77#define REG_MCUTSTCFG 0x0084
83 78
84 79#define REG_HIMR 0x00B0
85#define REG_HIMR 0x00B0 80#define REG_HISR 0x00B4
86#define REG_HISR 0x00B4 81#define REG_HIMRE 0x00B8
87#define REG_HIMRE 0x00B8 82#define REG_HISRE 0x00BC
88#define REG_HISRE 0x00BC
89 83
90#define REG_EFUSE_ACCESS 0x00CF 84#define REG_EFUSE_ACCESS 0x00CF
91 85
@@ -96,23 +90,23 @@
96#define REG_PCIE_MIO_INTF 0x00E4 90#define REG_PCIE_MIO_INTF 0x00E4
97#define REG_PCIE_MIO_INTD 0x00E8 91#define REG_PCIE_MIO_INTD 0x00E8
98#define REG_HPON_FSM 0x00EC 92#define REG_HPON_FSM 0x00EC
99#define REG_SYS_CFG 0x00F0 93#define REG_SYS_CFG 0x00F0
100 94
101#define REG_CR 0x0100 95#define REG_CR 0x0100
102#define REG_PBP 0x0104 96#define REG_PBP 0x0104
103#define REG_PKT_BUFF_ACCESS_CTRL 0x0106 97#define REG_PKT_BUFF_ACCESS_CTRL 0x0106
104#define REG_TRXDMA_CTRL 0x010C 98#define REG_TRXDMA_CTRL 0x010C
105#define REG_TRXFF_BNDY 0x0114 99#define REG_TRXFF_BNDY 0x0114
106#define REG_TRXFF_STATUS 0x0118 100#define REG_TRXFF_STATUS 0x0118
107#define REG_RXFF_PTR 0x011C 101#define REG_RXFF_PTR 0x011C
108 102
109#define REG_CPWM 0x012F 103#define REG_CPWM 0x012F
110#define REG_FWIMR 0x0130 104#define REG_FWIMR 0x0130
111#define REG_FWISR 0x0134 105#define REG_FWISR 0x0134
112#define REG_PKTBUF_DBG_CTRL 0x0140 106#define REG_PKTBUF_DBG_CTRL 0x0140
113#define REG_PKTBUF_DBG_DATA_L 0x0144 107#define REG_PKTBUF_DBG_DATA_L 0x0144
114#define REG_PKTBUF_DBG_DATA_H 0x0148 108#define REG_PKTBUF_DBG_DATA_H 0x0148
115#define REG_RXPKTBUF_CTRL (REG_PKTBUF_DBG_CTRL+2) 109#define REG_RXPKTBUF_CTRL (REG_PKTBUF_DBG_CTRL+2)
116 110
117#define REG_TC0_CTRL 0x0150 111#define REG_TC0_CTRL 0x0150
118#define REG_TC1_CTRL 0x0154 112#define REG_TC1_CTRL 0x0154
@@ -123,13 +117,13 @@
123#define REG_MBIST_START 0x0174 117#define REG_MBIST_START 0x0174
124#define REG_MBIST_DONE 0x0178 118#define REG_MBIST_DONE 0x0178
125#define REG_MBIST_FAIL 0x017C 119#define REG_MBIST_FAIL 0x017C
126#define REG_32K_CTRL 0x0194 120#define REG_32K_CTRL 0x0194
127#define REG_C2HEVT_MSG_NORMAL 0x01A0 121#define REG_C2HEVT_MSG_NORMAL 0x01A0
128#define REG_C2HEVT_CLEAR 0x01AF 122#define REG_C2HEVT_CLEAR 0x01AF
129#define REG_C2HEVT_MSG_TEST 0x01B8 123#define REG_C2HEVT_MSG_TEST 0x01B8
130#define REG_MCUTST_1 0x01c0 124#define REG_MCUTST_1 0x01c0
131#define REG_FMETHR 0x01C8 125#define REG_FMETHR 0x01C8
132#define REG_HMETFR 0x01CC 126#define REG_HMETFR 0x01CC
133#define REG_HMEBOX_0 0x01D0 127#define REG_HMEBOX_0 0x01D0
134#define REG_HMEBOX_1 0x01D4 128#define REG_HMEBOX_1 0x01D4
135#define REG_HMEBOX_2 0x01D8 129#define REG_HMEBOX_2 0x01D8
@@ -144,36 +138,37 @@
144#define REG_HMEBOX_EXT_2 0x01F8 138#define REG_HMEBOX_EXT_2 0x01F8
145#define REG_HMEBOX_EXT_3 0x01FC 139#define REG_HMEBOX_EXT_3 0x01FC
146 140
147#define REG_RQPN 0x0200 141#define REG_RQPN 0x0200
148#define REG_FIFOPAGE 0x0204 142#define REG_FIFOPAGE 0x0204
149#define REG_TDECTRL 0x0208 143#define REG_TDECTRL 0x0208
150#define REG_TXDMA_OFFSET_CHK 0x020C 144#define REG_TXDMA_OFFSET_CHK 0x020C
151#define REG_TXDMA_STATUS 0x0210 145#define REG_TXDMA_STATUS 0x0210
152#define REG_RQPN_NPQ 0x0214 146#define REG_RQPN_NPQ 0x0214
153 147
154#define REG_RXDMA_AGG_PG_TH 0x0280 148#define REG_RXDMA_AGG_PG_TH 0x0280
155#define REG_FW_UPD_RDPTR 0x0284 /* FW shall update this 149/* FW shall update this register before
156 * register before FW * write 150 * FW write RXPKT_RELEASE_POLL to 1
157 * RXPKT_RELEASE_POLL to 1 151 */
158 */ 152#define REG_FW_UPD_RDPTR 0x0284
159#define REG_RXDMA_CONTROL 0x0286 /* Control the RX DMA.*/ 153/* Control the RX DMA.*/
160#define REG_RXPKT_NUM 0x0287 /* The number of packets 154#define REG_RXDMA_CONTROL 0x0286
161 * in RXPKTBUF. 155/* The number of packets in RXPKTBUF. */
162 */ 156#define REG_RXPKT_NUM 0x0287
157
163#define REG_PCIE_CTRL_REG 0x0300 158#define REG_PCIE_CTRL_REG 0x0300
164#define REG_INT_MIG 0x0304 159#define REG_INT_MIG 0x0304
165#define REG_BCNQ_DESA 0x0308 160#define REG_BCNQ_DESA 0x0308
166#define REG_HQ_DESA 0x0310 161#define REG_HQ_DESA 0x0310
167#define REG_MGQ_DESA 0x0318 162#define REG_MGQ_DESA 0x0318
168#define REG_VOQ_DESA 0x0320 163#define REG_VOQ_DESA 0x0320
169#define REG_VIQ_DESA 0x0328 164#define REG_VIQ_DESA 0x0328
170#define REG_BEQ_DESA 0x0330 165#define REG_BEQ_DESA 0x0330
171#define REG_BKQ_DESA 0x0338 166#define REG_BKQ_DESA 0x0338
172#define REG_RX_DESA 0x0340 167#define REG_RX_DESA 0x0340
173 168
174#define REG_DBI 0x0348 169#define REG_DBI 0x0348
175#define REG_MDIO 0x0354 170#define REG_MDIO 0x0354
176#define REG_DBG_SEL 0x0360 171#define REG_DBG_SEL 0x0360
177#define REG_PCIE_HRPWM 0x0361 172#define REG_PCIE_HRPWM 0x0361
178#define REG_PCIE_HCPWM 0x0363 173#define REG_PCIE_HCPWM 0x0363
179#define REG_UART_CTRL 0x0364 174#define REG_UART_CTRL 0x0364
@@ -181,7 +176,6 @@
181#define REG_UART_TX_DESA 0x0370 176#define REG_UART_TX_DESA 0x0370
182#define REG_UART_RX_DESA 0x0378 177#define REG_UART_RX_DESA 0x0378
183 178
184
185#define REG_HDAQ_DESA_NODEF 0x0000 179#define REG_HDAQ_DESA_NODEF 0x0000
186#define REG_CMDQ_DESA_NODEF 0x0000 180#define REG_CMDQ_DESA_NODEF 0x0000
187 181
@@ -191,33 +185,32 @@
191#define REG_BKQ_INFORMATION 0x040C 185#define REG_BKQ_INFORMATION 0x040C
192#define REG_MGQ_INFORMATION 0x0410 186#define REG_MGQ_INFORMATION 0x0410
193#define REG_HGQ_INFORMATION 0x0414 187#define REG_HGQ_INFORMATION 0x0414
194#define REG_BCNQ_INFORMATION 0x0418 188#define REG_BCNQ_INFORMATION 0x0418
195#define REG_TXPKT_EMPTY 0x041A 189#define REG_TXPKT_EMPTY 0x041A
196 190
197 191#define REG_CPU_MGQ_INFORMATION 0x041C
198#define REG_CPU_MGQ_INFORMATION 0x041C
199#define REG_FWHW_TXQ_CTRL 0x0420 192#define REG_FWHW_TXQ_CTRL 0x0420
200#define REG_HWSEQ_CTRL 0x0423 193#define REG_HWSEQ_CTRL 0x0423
201#define REG_TXPKTBUF_BCNQ_BDNY 0x0424 194#define REG_TXPKTBUF_BCNQ_BDNY 0x0424
202#define REG_TXPKTBUF_MGQ_BDNY 0x0425 195#define REG_TXPKTBUF_MGQ_BDNY 0x0425
203#define REG_MULTI_BCNQ_EN 0x0426 196#define REG_MULTI_BCNQ_EN 0x0426
204#define REG_MULTI_BCNQ_OFFSET 0x0427 197#define REG_MULTI_BCNQ_OFFSET 0x0427
205#define REG_SPEC_SIFS 0x0428 198#define REG_SPEC_SIFS 0x0428
206#define REG_RL 0x042A 199#define REG_RL 0x042A
207#define REG_DARFRC 0x0430 200#define REG_DARFRC 0x0430
208#define REG_RARFRC 0x0438 201#define REG_RARFRC 0x0438
209#define REG_RRSR 0x0440 202#define REG_RRSR 0x0440
210#define REG_ARFR0 0x0444 203#define REG_ARFR0 0x0444
211#define REG_ARFR1 0x0448 204#define REG_ARFR1 0x0448
212#define REG_ARFR2 0x044C 205#define REG_ARFR2 0x044C
213#define REG_ARFR3 0x0450 206#define REG_ARFR3 0x0450
214#define REG_AGGLEN_LMT 0x0458 207#define REG_AGGLEN_LMT 0x0458
215#define REG_AMPDU_MIN_SPACE 0x045C 208#define REG_AMPDU_MIN_SPACE 0x045C
216#define REG_TXPKTBUF_WMAC_LBK_BF_HD 0x045D 209#define REG_TXPKTBUF_WMAC_LBK_BF_HD 0x045D
217#define REG_FAST_EDCA_CTRL 0x0460 210#define REG_FAST_EDCA_CTRL 0x0460
218#define REG_RD_RESP_PKT_TH 0x0463 211#define REG_RD_RESP_PKT_TH 0x0463
219#define REG_INIRTS_RATE_SEL 0x0480 212#define REG_INIRTS_RATE_SEL 0x0480
220#define REG_INIDATA_RATE_SEL 0x0484 213#define REG_INIDATA_RATE_SEL 0x0484
221#define REG_POWER_STATUS 0x04A4 214#define REG_POWER_STATUS 0x04A4
222#define REG_POWER_STAGE1 0x04B4 215#define REG_POWER_STAGE1 0x04B4
223#define REG_POWER_STAGE2 0x04B8 216#define REG_POWER_STAGE2 0x04B8
@@ -225,32 +218,32 @@
225#define REG_STBC_SETTING 0x04C4 218#define REG_STBC_SETTING 0x04C4
226#define REG_PROT_MODE_CTRL 0x04C8 219#define REG_PROT_MODE_CTRL 0x04C8
227#define REG_BAR_MODE_CTRL 0x04CC 220#define REG_BAR_MODE_CTRL 0x04CC
228#define REG_RA_TRY_RATE_AGG_LMT 0x04CF 221#define REG_RA_TRY_RATE_AGG_LMT 0x04CF
229#define REG_EARLY_MODE_CONTROL 0x04D0 222#define REG_EARLY_MODE_CONTROL 0x04D0
230#define REG_NQOS_SEQ 0x04DC 223#define REG_NQOS_SEQ 0x04DC
231#define REG_QOS_SEQ 0x04DE 224#define REG_QOS_SEQ 0x04DE
232#define REG_NEED_CPU_HANDLE 0x04E0 225#define REG_NEED_CPU_HANDLE 0x04E0
233#define REG_PKT_LOSE_RPT 0x04E1 226#define REG_PKT_LOSE_RPT 0x04E1
234#define REG_PTCL_ERR_STATUS 0x04E2 227#define REG_PTCL_ERR_STATUS 0x04E2
235#define REG_TX_RPT_CTRL 0x04EC 228#define REG_TX_RPT_CTRL 0x04EC
236#define REG_TX_RPT_TIME 0x04F0 229#define REG_TX_RPT_TIME 0x04F0
237#define REG_DUMMY 0x04FC 230#define REG_DUMMY 0x04FC
238 231
239#define REG_EDCA_VO_PARAM 0x0500 232#define REG_EDCA_VO_PARAM 0x0500
240#define REG_EDCA_VI_PARAM 0x0504 233#define REG_EDCA_VI_PARAM 0x0504
241#define REG_EDCA_BE_PARAM 0x0508 234#define REG_EDCA_BE_PARAM 0x0508
242#define REG_EDCA_BK_PARAM 0x050C 235#define REG_EDCA_BK_PARAM 0x050C
243#define REG_BCNTCFG 0x0510 236#define REG_BCNTCFG 0x0510
244#define REG_PIFS 0x0512 237#define REG_PIFS 0x0512
245#define REG_RDG_PIFS 0x0513 238#define REG_RDG_PIFS 0x0513
246#define REG_SIFS_CTX 0x0514 239#define REG_SIFS_CTX 0x0514
247#define REG_SIFS_TRX 0x0516 240#define REG_SIFS_TRX 0x0516
248#define REG_AGGR_BREAK_TIME 0x051A 241#define REG_AGGR_BREAK_TIME 0x051A
249#define REG_SLOT 0x051B 242#define REG_SLOT 0x051B
250#define REG_TX_PTCL_CTRL 0x0520 243#define REG_TX_PTCL_CTRL 0x0520
251#define REG_TXPAUSE 0x0522 244#define REG_TXPAUSE 0x0522
252#define REG_DIS_TXREQ_CLR 0x0523 245#define REG_DIS_TXREQ_CLR 0x0523
253#define REG_RD_CTRL 0x0524 246#define REG_RD_CTRL 0x0524
254#define REG_TBTT_PROHIBIT 0x0540 247#define REG_TBTT_PROHIBIT 0x0540
255#define REG_RD_NAV_NXT 0x0544 248#define REG_RD_NAV_NXT 0x0544
256#define REG_NAV_PROT_LEN 0x0546 249#define REG_NAV_PROT_LEN 0x0546
@@ -259,21 +252,21 @@
259#define REG_MBID_NUM 0x0552 252#define REG_MBID_NUM 0x0552
260#define REG_DUAL_TSF_RST 0x0553 253#define REG_DUAL_TSF_RST 0x0553
261#define REG_BCN_INTERVAL 0x0554 254#define REG_BCN_INTERVAL 0x0554
262#define REG_MBSSID_BCN_SPACE 0x0554 255#define REG_MBSSID_BCN_SPACE 0x0554
263#define REG_DRVERLYINT 0x0558 256#define REG_DRVERLYINT 0x0558
264#define REG_BCNDMATIM 0x0559 257#define REG_BCNDMATIM 0x0559
265#define REG_ATIMWND 0x055A 258#define REG_ATIMWND 0x055A
266#define REG_BCN_MAX_ERR 0x055D 259#define REG_BCN_MAX_ERR 0x055D
267#define REG_RXTSF_OFFSET_CCK 0x055E 260#define REG_RXTSF_OFFSET_CCK 0x055E
268#define REG_RXTSF_OFFSET_OFDM 0x055F 261#define REG_RXTSF_OFFSET_OFDM 0x055F
269#define REG_TSFTR 0x0560 262#define REG_TSFTR 0x0560
270#define REG_INIT_TSFTR 0x0564 263#define REG_INIT_TSFTR 0x0564
271#define REG_PSTIMER 0x0580 264#define REG_PSTIMER 0x0580
272#define REG_TIMER0 0x0584 265#define REG_TIMER0 0x0584
273#define REG_TIMER1 0x0588 266#define REG_TIMER1 0x0588
274#define REG_ACMHWCTRL 0x05C0 267#define REG_ACMHWCTRL 0x05C0
275#define REG_ACMRSTCTRL 0x05C1 268#define REG_ACMRSTCTRL 0x05C1
276#define REG_ACMAVG 0x05C2 269#define REG_ACMAVG 0x05C2
277#define REG_VO_ADMTIME 0x05C4 270#define REG_VO_ADMTIME 0x05C4
278#define REG_VI_ADMTIME 0x05C6 271#define REG_VI_ADMTIME 0x05C6
279#define REG_BE_ADMTIME 0x05C8 272#define REG_BE_ADMTIME 0x05C8
@@ -282,38 +275,38 @@
282 275
283#define REG_APSD_CTRL 0x0600 276#define REG_APSD_CTRL 0x0600
284#define REG_BWOPMODE 0x0603 277#define REG_BWOPMODE 0x0603
285#define REG_TCR 0x0604 278#define REG_TCR 0x0604
286#define REG_RCR 0x0608 279#define REG_RCR 0x0608
287#define REG_RX_PKT_LIMIT 0x060C 280#define REG_RX_PKT_LIMIT 0x060C
288#define REG_RX_DLK_TIME 0x060D 281#define REG_RX_DLK_TIME 0x060D
289#define REG_RX_DRVINFO_SZ 0x060F 282#define REG_RX_DRVINFO_SZ 0x060F
290 283
291#define REG_MACID 0x0610 284#define REG_MACID 0x0610
292#define REG_BSSID 0x0618 285#define REG_BSSID 0x0618
293#define REG_MAR 0x0620 286#define REG_MAR 0x0620
294#define REG_MBIDCAMCFG 0x0628 287#define REG_MBIDCAMCFG 0x0628
295 288
296#define REG_USTIME_EDCA 0x0638 289#define REG_USTIME_EDCA 0x0638
297#define REG_MAC_SPEC_SIFS 0x063A 290#define REG_MAC_SPEC_SIFS 0x063A
298#define REG_RESP_SIFS_CCK 0x063C 291#define REG_RESP_SIFS_CCK 0x063C
299#define REG_RESP_SIFS_OFDM 0x063E 292#define REG_RESP_SIFS_OFDM 0x063E
300#define REG_ACKTO 0x0640 293#define REG_ACKTO 0x0640
301#define REG_CTS2TO 0x0641 294#define REG_CTS2TO 0x0641
302#define REG_EIFS 0x0642 295#define REG_EIFS 0x0642
303 296
304#define REG_NAV_CTRL 0x0650 297#define REG_NAV_CTRL 0x0650
305#define REG_BACAMCMD 0x0654 298#define REG_BACAMCMD 0x0654
306#define REG_BACAMCONTENT 0x0658 299#define REG_BACAMCONTENT 0x0658
307#define REG_LBDLY 0x0660 300#define REG_LBDLY 0x0660
308#define REG_FWDLY 0x0661 301#define REG_FWDLY 0x0661
309#define REG_RXERR_RPT 0x0664 302#define REG_RXERR_RPT 0x0664
310#define REG_TRXPTCL_CTL 0x0668 303#define REG_TRXPTCL_CTL 0x0668
311 304
312#define REG_CAMCMD 0x0670 305#define REG_CAMCMD 0x0670
313#define REG_CAMWRITE 0x0674 306#define REG_CAMWRITE 0x0674
314#define REG_CAMREAD 0x0678 307#define REG_CAMREAD 0x0678
315#define REG_CAMDBG 0x067C 308#define REG_CAMDBG 0x067C
316#define REG_SECCFG 0x0680 309#define REG_SECCFG 0x0680
317 310
318#define REG_WOW_CTRL 0x0690 311#define REG_WOW_CTRL 0x0690
319#define REG_PSSTATUS 0x0691 312#define REG_PSSTATUS 0x0691
@@ -329,10 +322,10 @@
329#define REG_CALB32K_CTRL 0x06AC 322#define REG_CALB32K_CTRL 0x06AC
330#define REG_PKT_MON_CTRL 0x06B4 323#define REG_PKT_MON_CTRL 0x06B4
331#define REG_BT_COEX_TABLE 0x06C0 324#define REG_BT_COEX_TABLE 0x06C0
332#define REG_WMAC_RESP_TXINFO 0x06D8 325#define REG_WMAC_RESP_TXINFO 0x06D8
333 326
334#define REG_USB_INFO 0xFE17 327#define REG_USB_INFO 0xFE17
335#define REG_USB_SPECIAL_OPTION 0xFE55 328#define REG_USB_SPECIAL_OPTION 0xFE55
336#define REG_USB_DMA_AGG_TO 0xFE5B 329#define REG_USB_DMA_AGG_TO 0xFE5B
337#define REG_USB_AGG_TO 0xFE5C 330#define REG_USB_AGG_TO 0xFE5C
338#define REG_USB_AGG_TH 0xFE5D 331#define REG_USB_AGG_TH 0xFE5D
@@ -340,523 +333,545 @@
340#define REG_TEST_USB_TXQS 0xFE48 333#define REG_TEST_USB_TXQS 0xFE48
341#define REG_TEST_SIE_VID 0xFE60 334#define REG_TEST_SIE_VID 0xFE60
342#define REG_TEST_SIE_PID 0xFE62 335#define REG_TEST_SIE_PID 0xFE62
343#define REG_TEST_SIE_OPTIONAL 0xFE64 336#define REG_TEST_SIE_OPTIONAL 0xFE64
344#define REG_TEST_SIE_CHIRP_K 0xFE65 337#define REG_TEST_SIE_CHIRP_K 0xFE65
345#define REG_TEST_SIE_PHY 0xFE66 338#define REG_TEST_SIE_PHY 0xFE66
346#define REG_TEST_SIE_MAC_ADDR 0xFE70 339#define REG_TEST_SIE_MAC_ADDR 0xFE70
347#define REG_TEST_SIE_STRING 0xFE80 340#define REG_TEST_SIE_STRING 0xFE80
348 341
349#define REG_NORMAL_SIE_VID 0xFE60 342#define REG_NORMAL_SIE_VID 0xFE60
350#define REG_NORMAL_SIE_PID 0xFE62 343#define REG_NORMAL_SIE_PID 0xFE62
351#define REG_NORMAL_SIE_OPTIONAL 0xFE64 344#define REG_NORMAL_SIE_OPTIONAL 0xFE64
352#define REG_NORMAL_SIE_EP 0xFE65 345#define REG_NORMAL_SIE_EP 0xFE65
353#define REG_NORMAL_SIE_PHY 0xFE68 346#define REG_NORMAL_SIE_PHY 0xFE68
354#define REG_NORMAL_SIE_MAC_ADDR 0xFE70 347#define REG_NORMAL_SIE_MAC_ADDR 0xFE70
355#define REG_NORMAL_SIE_STRING 0xFE80 348#define REG_NORMAL_SIE_STRING 0xFE80
356 349
357#define CR9346 REG_9346CR 350#define CR9346 REG_9346CR
358#define MSR (REG_CR + 2) 351#define MSR (REG_CR + 2)
359#define ISR REG_HISR 352#define ISR REG_HISR
360#define TSFR REG_TSFTR 353#define TSFR REG_TSFTR
361 354
362#define MACIDR0 REG_MACID 355#define MACIDR0 REG_MACID
363#define MACIDR4 (REG_MACID + 4) 356#define MACIDR4 (REG_MACID + 4)
364 357
365#define PBP REG_PBP 358#define PBP REG_PBP
366 359
367#define IDR0 MACIDR0 360#define IDR0 MACIDR0
368#define IDR4 MACIDR4 361#define IDR4 MACIDR4
369 362
370#define UNUSED_REGISTER 0x1BF 363#define UNUSED_REGISTER 0x1BF
371#define DCAM UNUSED_REGISTER 364#define DCAM UNUSED_REGISTER
372#define PSR UNUSED_REGISTER 365#define PSR UNUSED_REGISTER
373#define BBADDR UNUSED_REGISTER 366#define BBADDR UNUSED_REGISTER
374#define PHYDATAR UNUSED_REGISTER 367#define PHYDATAR UNUSED_REGISTER
375 368
376#define INVALID_BBRF_VALUE 0x12345678 369#define INVALID_BBRF_VALUE 0x12345678
377 370
378#define MAX_MSS_DENSITY_2T 0x13 371#define MAX_MSS_DENSITY_2T 0x13
379#define MAX_MSS_DENSITY_1T 0x0A 372#define MAX_MSS_DENSITY_1T 0x0A
380 373
381#define CMDEEPROM_EN BIT(5) 374#define CMDEEPROM_EN BIT(5)
382#define CMDEEPROM_SEL BIT(4) 375#define CMDEEPROM_SEL BIT(4)
383#define CMD9346CR_9356SEL BIT(4) 376#define CMD9346CR_9356SEL BIT(4)
384#define AUTOLOAD_EEPROM (CMDEEPROM_EN|CMDEEPROM_SEL) 377#define AUTOLOAD_EEPROM (CMDEEPROM_EN|CMDEEPROM_SEL)
385#define AUTOLOAD_EFUSE CMDEEPROM_EN 378#define AUTOLOAD_EFUSE CMDEEPROM_EN
386 379
387#define GPIOSEL_GPIO 0 380#define GPIOSEL_GPIO 0
388#define GPIOSEL_ENBT BIT(5) 381#define GPIOSEL_ENBT BIT(5)
389 382
390#define GPIO_IN REG_GPIO_PIN_CTRL 383#define GPIO_IN REG_GPIO_PIN_CTRL
391#define GPIO_OUT (REG_GPIO_PIN_CTRL+1) 384#define GPIO_OUT (REG_GPIO_PIN_CTRL+1)
392#define GPIO_IO_SEL (REG_GPIO_PIN_CTRL+2) 385#define GPIO_IO_SEL (REG_GPIO_PIN_CTRL+2)
393#define GPIO_MOD (REG_GPIO_PIN_CTRL+3) 386#define GPIO_MOD (REG_GPIO_PIN_CTRL+3)
394 387
395/* 8723/8188E Host System Interrupt Mask Register (offset 0x58, 32 byte) */ 388/*8723/8188E Host System Interrupt
389 *Mask Register (offset 0x58, 32 byte)
390 */
396#define HSIMR_GPIO12_0_INT_EN BIT(0) 391#define HSIMR_GPIO12_0_INT_EN BIT(0)
397#define HSIMR_SPS_OCP_INT_EN BIT(5) 392#define HSIMR_SPS_OCP_INT_EN BIT(5)
398#define HSIMR_RON_INT_EN BIT(6) 393#define HSIMR_RON_INT_EN BIT(6)
399#define HSIMR_PDN_INT_EN BIT(7) 394#define HSIMR_PDN_INT_EN BIT(7)
400#define HSIMR_GPIO9_INT_EN BIT(25) 395#define HSIMR_GPIO9_INT_EN BIT(25)
401 396
402 397/* 8723/8188E Host System Interrupt
403/* 8723/8188E Host System Interrupt Status Register (offset 0x5C, 32 byte) */ 398 * Status Register (offset 0x5C, 32 byte)
399 */
404#define HSISR_GPIO12_0_INT BIT(0) 400#define HSISR_GPIO12_0_INT BIT(0)
405#define HSISR_SPS_OCP_INT BIT(5) 401#define HSISR_SPS_OCP_INT BIT(5)
406#define HSISR_RON_INT_EN BIT(6) 402#define HSISR_RON_INT_EN BIT(6)
407#define HSISR_PDNINT BIT(7) 403#define HSISR_PDNINT BIT(7)
408#define HSISR_GPIO9_INT BIT(25) 404#define HSISR_GPIO9_INT BIT(25)
409 405
410#define MSR_NOLINK 0x00 406#define MSR_NOLINK 0x00
411#define MSR_ADHOC 0x01 407#define MSR_ADHOC 0x01
412#define MSR_INFRA 0x02 408#define MSR_INFRA 0x02
413#define MSR_AP 0x03 409#define MSR_AP 0x03
414#define MSR_MASK 0x03
415 410
416#define RRSR_RSC_OFFSET 21 411#define RRSR_RSC_OFFSET 21
417#define RRSR_SHORT_OFFSET 23 412#define RRSR_SHORT_OFFSET 23
418#define RRSR_RSC_BW_40M 0x600000 413#define RRSR_RSC_BW_40M 0x600000
419#define RRSR_RSC_UPSUBCHNL 0x400000 414#define RRSR_RSC_UPSUBCHNL 0x400000
420#define RRSR_RSC_LOWSUBCHNL 0x200000 415#define RRSR_RSC_LOWSUBCHNL 0x200000
421#define RRSR_SHORT 0x800000 416#define RRSR_SHORT 0x800000
422#define RRSR_1M BIT(0) 417#define RRSR_1M BIT(0)
423#define RRSR_2M BIT(1) 418#define RRSR_2M BIT(1)
424#define RRSR_5_5M BIT(2) 419#define RRSR_5_5M BIT(2)
425#define RRSR_11M BIT(3) 420#define RRSR_11M BIT(3)
426#define RRSR_6M BIT(4) 421#define RRSR_6M BIT(4)
427#define RRSR_9M BIT(5) 422#define RRSR_9M BIT(5)
428#define RRSR_12M BIT(6) 423#define RRSR_12M BIT(6)
429#define RRSR_18M BIT(7) 424#define RRSR_18M BIT(7)
430#define RRSR_24M BIT(8) 425#define RRSR_24M BIT(8)
431#define RRSR_36M BIT(9) 426#define RRSR_36M BIT(9)
432#define RRSR_48M BIT(10) 427#define RRSR_48M BIT(10)
433#define RRSR_54M BIT(11) 428#define RRSR_54M BIT(11)
434#define RRSR_MCS0 BIT(12) 429#define RRSR_MCS0 BIT(12)
435#define RRSR_MCS1 BIT(13) 430#define RRSR_MCS1 BIT(13)
436#define RRSR_MCS2 BIT(14) 431#define RRSR_MCS2 BIT(14)
437#define RRSR_MCS3 BIT(15) 432#define RRSR_MCS3 BIT(15)
438#define RRSR_MCS4 BIT(16) 433#define RRSR_MCS4 BIT(16)
439#define RRSR_MCS5 BIT(17) 434#define RRSR_MCS5 BIT(17)
440#define RRSR_MCS6 BIT(18) 435#define RRSR_MCS6 BIT(18)
441#define RRSR_MCS7 BIT(19) 436#define RRSR_MCS7 BIT(19)
442#define BRSR_ACKSHORTPMB BIT(23) 437#define BRSR_ACKSHORTPMB BIT(23)
443 438
444#define RATR_1M 0x00000001 439#define RATR_1M 0x00000001
445#define RATR_2M 0x00000002 440#define RATR_2M 0x00000002
446#define RATR_55M 0x00000004 441#define RATR_55M 0x00000004
447#define RATR_11M 0x00000008 442#define RATR_11M 0x00000008
448#define RATR_6M 0x00000010 443#define RATR_6M 0x00000010
449#define RATR_9M 0x00000020 444#define RATR_9M 0x00000020
450#define RATR_12M 0x00000040 445#define RATR_12M 0x00000040
451#define RATR_18M 0x00000080 446#define RATR_18M 0x00000080
452#define RATR_24M 0x00000100 447#define RATR_24M 0x00000100
453#define RATR_36M 0x00000200 448#define RATR_36M 0x00000200
454#define RATR_48M 0x00000400 449#define RATR_48M 0x00000400
455#define RATR_54M 0x00000800 450#define RATR_54M 0x00000800
456#define RATR_MCS0 0x00001000 451#define RATR_MCS0 0x00001000
457#define RATR_MCS1 0x00002000 452#define RATR_MCS1 0x00002000
458#define RATR_MCS2 0x00004000 453#define RATR_MCS2 0x00004000
459#define RATR_MCS3 0x00008000 454#define RATR_MCS3 0x00008000
460#define RATR_MCS4 0x00010000 455#define RATR_MCS4 0x00010000
461#define RATR_MCS5 0x00020000 456#define RATR_MCS5 0x00020000
462#define RATR_MCS6 0x00040000 457#define RATR_MCS6 0x00040000
463#define RATR_MCS7 0x00080000 458#define RATR_MCS7 0x00080000
464#define RATR_MCS8 0x00100000 459#define RATR_MCS8 0x00100000
465#define RATR_MCS9 0x00200000 460#define RATR_MCS9 0x00200000
466#define RATR_MCS10 0x00400000 461#define RATR_MCS10 0x00400000
467#define RATR_MCS11 0x00800000 462#define RATR_MCS11 0x00800000
468#define RATR_MCS12 0x01000000 463#define RATR_MCS12 0x01000000
469#define RATR_MCS13 0x02000000 464#define RATR_MCS13 0x02000000
470#define RATR_MCS14 0x04000000 465#define RATR_MCS14 0x04000000
471#define RATR_MCS15 0x08000000 466#define RATR_MCS15 0x08000000
472 467
473#define RATE_1M BIT(0) 468#define RATE_1M BIT(0)
474#define RATE_2M BIT(1) 469#define RATE_2M BIT(1)
475#define RATE_5_5M BIT(2) 470#define RATE_5_5M BIT(2)
476#define RATE_11M BIT(3) 471#define RATE_11M BIT(3)
477#define RATE_6M BIT(4) 472#define RATE_6M BIT(4)
478#define RATE_9M BIT(5) 473#define RATE_9M BIT(5)
479#define RATE_12M BIT(6) 474#define RATE_12M BIT(6)
480#define RATE_18M BIT(7) 475#define RATE_18M BIT(7)
481#define RATE_24M BIT(8) 476#define RATE_24M BIT(8)
482#define RATE_36M BIT(9) 477#define RATE_36M BIT(9)
483#define RATE_48M BIT(10) 478#define RATE_48M BIT(10)
484#define RATE_54M BIT(11) 479#define RATE_54M BIT(11)
485#define RATE_MCS0 BIT(12) 480#define RATE_MCS0 BIT(12)
486#define RATE_MCS1 BIT(13) 481#define RATE_MCS1 BIT(13)
487#define RATE_MCS2 BIT(14) 482#define RATE_MCS2 BIT(14)
488#define RATE_MCS3 BIT(15) 483#define RATE_MCS3 BIT(15)
489#define RATE_MCS4 BIT(16) 484#define RATE_MCS4 BIT(16)
490#define RATE_MCS5 BIT(17) 485#define RATE_MCS5 BIT(17)
491#define RATE_MCS6 BIT(18) 486#define RATE_MCS6 BIT(18)
492#define RATE_MCS7 BIT(19) 487#define RATE_MCS7 BIT(19)
493#define RATE_MCS8 BIT(20) 488#define RATE_MCS8 BIT(20)
494#define RATE_MCS9 BIT(21) 489#define RATE_MCS9 BIT(21)
495#define RATE_MCS10 BIT(22) 490#define RATE_MCS10 BIT(22)
496#define RATE_MCS11 BIT(23) 491#define RATE_MCS11 BIT(23)
497#define RATE_MCS12 BIT(24) 492#define RATE_MCS12 BIT(24)
498#define RATE_MCS13 BIT(25) 493#define RATE_MCS13 BIT(25)
499#define RATE_MCS14 BIT(26) 494#define RATE_MCS14 BIT(26)
500#define RATE_MCS15 BIT(27) 495#define RATE_MCS15 BIT(27)
501 496
502#define RATE_ALL_CCK (RATR_1M | RATR_2M | RATR_55M | RATR_11M) 497#define RATE_ALL_CCK (RATR_1M | RATR_2M | RATR_55M | RATR_11M)
503#define RATE_ALL_OFDM_AG (RATR_6M | RATR_9M | RATR_12M | RATR_18M | \ 498#define RATE_ALL_OFDM_AG (RATR_6M | RATR_9M | RATR_12M | RATR_18M |\
504 RATR_24M | RATR_36M | RATR_48M | RATR_54M) 499 RATR_24M | RATR_36M | RATR_48M | RATR_54M)
505#define RATE_ALL_OFDM_1SS (RATR_MCS0 | RATR_MCS1 | RATR_MCS2 | \ 500#define RATE_ALL_OFDM_1SS (RATR_MCS0 | RATR_MCS1 | RATR_MCS2 |\
506 RATR_MCS3 | RATR_MCS4 | RATR_MCS5 | \ 501 RATR_MCS3 | RATR_MCS4 | RATR_MCS5 |\
507 RATR_MCS6 | RATR_MCS7) 502 RATR_MCS6 | RATR_MCS7)
508#define RATE_ALL_OFDM_2SS (RATR_MCS8 | RATR_MCS9 | RATR_MCS10 | \ 503#define RATE_ALL_OFDM_2SS (RATR_MCS8 | RATR_MCS9 | RATR_MCS10 |\
509 RATR_MCS11 | RATR_MCS12 | RATR_MCS13 | \ 504 RATR_MCS11 | RATR_MCS12 | RATR_MCS13 |\
510 RATR_MCS14 | RATR_MCS15) 505 RATR_MCS14 | RATR_MCS15)
511 506
512#define BW_OPMODE_20MHZ BIT(2) 507#define BW_OPMODE_20MHZ BIT(2)
513#define BW_OPMODE_5G BIT(1) 508#define BW_OPMODE_5G BIT(1)
514#define BW_OPMODE_11J BIT(0) 509#define BW_OPMODE_11J BIT(0)
515 510
516#define CAM_VALID BIT(15) 511#define CAM_VALID BIT(15)
517#define CAM_NOTVALID 0x0000 512#define CAM_NOTVALID 0x0000
518#define CAM_USEDK BIT(5) 513#define CAM_USEDK BIT(5)
519 514
520#define CAM_NONE 0x0 515#define CAM_NONE 0x0
521#define CAM_WEP40 0x01 516#define CAM_WEP40 0x01
522#define CAM_TKIP 0x02 517#define CAM_TKIP 0x02
523#define CAM_AES 0x04 518#define CAM_AES 0x04
524#define CAM_WEP104 0x05 519#define CAM_WEP104 0x05
525 520
526#define TOTAL_CAM_ENTRY 32 521#define TOTAL_CAM_ENTRY 32
527#define HALF_CAM_ENTRY 16 522#define HALF_CAM_ENTRY 16
528 523
529#define CAM_WRITE BIT(16) 524#define CAM_WRITE BIT(16)
530#define CAM_READ 0x00000000 525#define CAM_READ 0x00000000
531#define CAM_POLLINIG BIT(31) 526#define CAM_POLLINIG BIT(31)
532 527
533#define SCR_USEDK 0x01 528#define SCR_USEDK 0x01
534#define SCR_TXSEC_ENABLE 0x02 529#define SCR_TXSEC_ENABLE 0x02
535#define SCR_RXSEC_ENABLE 0x04 530#define SCR_RXSEC_ENABLE 0x04
536 531
537#define WOW_PMEN BIT(0) 532#define WOW_PMEN BIT(0)
538#define WOW_WOMEN BIT(1) 533#define WOW_WOMEN BIT(1)
539#define WOW_MAGIC BIT(2) 534#define WOW_MAGIC BIT(2)
540#define WOW_UWF BIT(3) 535#define WOW_UWF BIT(3)
541 536
542/********************************************* 537/*********************************************
543* 8188 IMR/ISR bits 538* 8188 IMR/ISR bits
544**********************************************/ 539**********************************************/
545#define IMR_DISABLED 0x0 540#define IMR_DISABLED 0x0
546/* IMR DW0(0x0060-0063) Bit 0-31 */ 541/* IMR DW0(0x0060-0063) Bit 0-31 */
547#define IMR_TXCCK BIT(30) /* TXRPT interrupt when CCX bit of 542/* TXRPT interrupt when CCX bit of the packet is set */
548 * the packet is set 543#define IMR_TXCCK BIT(30)
549 */ 544/* Power Save Time Out Interrupt */
550#define IMR_PSTIMEOUT BIT(29) /* Power Save Time Out Interrupt */ 545#define IMR_PSTIMEOUT BIT(29)
551#define IMR_GTINT4 BIT(28) /* When GTIMER4 expires, 546/* When GTIMER4 expires, this bit is set to 1 */
552 * this bit is set to 1 547#define IMR_GTINT4 BIT(28)
553 */ 548/* When GTIMER3 expires, this bit is set to 1 */
554#define IMR_GTINT3 BIT(27) /* When GTIMER3 expires, 549#define IMR_GTINT3 BIT(27)
555 * this bit is set to 1 550/* Transmit Beacon0 Error */
556 */ 551#define IMR_TBDER BIT(26)
557#define IMR_TBDER BIT(26) /* Transmit Beacon0 Error */ 552/* Transmit Beacon0 OK */
558#define IMR_TBDOK BIT(25) /* Transmit Beacon0 OK */ 553#define IMR_TBDOK BIT(25)
559#define IMR_TSF_BIT32_TOGGLE BIT(24) /* TSF Timer BIT32 toggle ind int */ 554/* TSF Timer BIT32 toggle indication interrupt */
560#define IMR_BCNDMAINT0 BIT(20) /* Beacon DMA Interrupt 0 */ 555#define IMR_TSF_BIT32_TOGGLE BIT(24)
561#define IMR_BCNDOK0 BIT(16) /* Beacon Queue DMA OK0 */ 556/* Beacon DMA Interrupt 0 */
562#define IMR_HSISR_IND_ON_INT BIT(15) /* HSISR Indicator (HSIMR & HSISR is 557#define IMR_BCNDMAINT0 BIT(20)
563 * true, this bit is set to 1) 558/* Beacon Queue DMA OK0 */
564 */ 559#define IMR_BCNDOK0 BIT(16)
565#define IMR_BCNDMAINT_E BIT(14) /* Beacon DMA Int Extension for Win7 */ 560/* HSISR Indicator (HSIMR & HSISR is true, this bit is set to 1) */
566#define IMR_ATIMEND BIT(12) /* CTWidnow End or ATIM Window End */ 561#define IMR_HSISR_IND_ON_INT BIT(15)
567#define IMR_HISR1_IND_INT BIT(11) /* HISR1 Indicator (HISR1 & HIMR1 is 562/* Beacon DMA Interrupt Extension for Win7 */
568 * true, this bit is set to 1) 563#define IMR_BCNDMAINT_E BIT(14)
569 */ 564/* CTWidnow End or ATIM Window End */
570#define IMR_C2HCMD BIT(10) /* CPU to Host Command INT Status, 565#define IMR_ATIMEND BIT(12)
571 * Write 1 clear 566/* HISR1 Indicator (HISR1 & HIMR1 is true, this bit is set to 1)*/
572 */ 567#define IMR_HISR1_IND_INT BIT(11)
573#define IMR_CPWM2 BIT(9) /* CPU power Mode exchange INT Status, 568/* CPU to Host Command INT Status, Write 1 clear */
574 * Write 1 clear 569#define IMR_C2HCMD BIT(10)
575 */ 570/* CPU power Mode exchange INT Status, Write 1 clear */
576#define IMR_CPWM BIT(8) /* CPU power Mode exchange INT Status, 571#define IMR_CPWM2 BIT(9)
577 * Write 1 clear 572/* CPU power Mode exchange INT Status, Write 1 clear */
578 */ 573#define IMR_CPWM BIT(8)
579#define IMR_HIGHDOK BIT(7) /* High Queue DMA OK */ 574/* High Queue DMA OK */
580#define IMR_MGNTDOK BIT(6) /* Management Queue DMA OK */ 575#define IMR_HIGHDOK BIT(7)
581#define IMR_BKDOK BIT(5) /* AC_BK DMA OK */ 576/* Management Queue DMA OK */
582#define IMR_BEDOK BIT(4) /* AC_BE DMA OK */ 577#define IMR_MGNTDOK BIT(6)
583#define IMR_VIDOK BIT(3) /* AC_VI DMA OK */ 578/* AC_BK DMA OK */
584#define IMR_VODOK BIT(2) /* AC_VO DMA OK */ 579#define IMR_BKDOK BIT(5)
585#define IMR_RDU BIT(1) /* Rx Descriptor Unavailable */ 580/* AC_BE DMA OK */
586#define IMR_ROK BIT(0) /* Receive DMA OK */ 581#define IMR_BEDOK BIT(4)
582/* AC_VI DMA OK */
583#define IMR_VIDOK BIT(3)
584/* AC_VO DMA OK */
585#define IMR_VODOK BIT(2)
586/* Rx Descriptor Unavailable */
587#define IMR_RDU BIT(1)
588/* Receive DMA OK */
589#define IMR_ROK BIT(0)
587 590
588/* IMR DW1(0x00B4-00B7) Bit 0-31 */ 591/* IMR DW1(0x00B4-00B7) Bit 0-31 */
589#define IMR_BCNDMAINT7 BIT(27) /* Beacon DMA Interrupt 7 */ 592/* Beacon DMA Interrupt 7 */
590#define IMR_BCNDMAINT6 BIT(26) /* Beacon DMA Interrupt 6 */ 593#define IMR_BCNDMAINT7 BIT(27)
591#define IMR_BCNDMAINT5 BIT(25) /* Beacon DMA Interrupt 5 */ 594/* Beacon DMA Interrupt 6 */
592#define IMR_BCNDMAINT4 BIT(24) /* Beacon DMA Interrupt 4 */ 595#define IMR_BCNDMAINT6 BIT(26)
593#define IMR_BCNDMAINT3 BIT(23) /* Beacon DMA Interrupt 3 */ 596/* Beacon DMA Interrupt 5 */
594#define IMR_BCNDMAINT2 BIT(22) /* Beacon DMA Interrupt 2 */ 597#define IMR_BCNDMAINT5 BIT(25)
595#define IMR_BCNDMAINT1 BIT(21) /* Beacon DMA Interrupt 1 */ 598/* Beacon DMA Interrupt 4 */
596#define IMR_BCNDOK7 BIT(20) /* Beacon Queue DMA OK Interrup 7 */ 599#define IMR_BCNDMAINT4 BIT(24)
597#define IMR_BCNDOK6 BIT(19) /* Beacon Queue DMA OK Interrup 6 */ 600/* Beacon DMA Interrupt 3 */
598#define IMR_BCNDOK5 BIT(18) /* Beacon Queue DMA OK Interrup 5 */ 601#define IMR_BCNDMAINT3 BIT(23)
599#define IMR_BCNDOK4 BIT(17) /* Beacon Queue DMA OK Interrup 4 */ 602/* Beacon DMA Interrupt 2 */
600#define IMR_BCNDOK3 BIT(16) /* Beacon Queue DMA OK Interrup 3 */ 603#define IMR_BCNDMAINT2 BIT(22)
601#define IMR_BCNDOK2 BIT(15) /* Beacon Queue DMA OK Interrup 2 */ 604/* Beacon DMA Interrupt 1 */
602#define IMR_BCNDOK1 BIT(14) /* Beacon Queue DMA OK Interrup 1 */ 605#define IMR_BCNDMAINT1 BIT(21)
603#define IMR_ATIMEND_E BIT(13) /* ATIM Window End Extension for Win7 */ 606/* Beacon Queue DMA OK Interrup 7 */
604#define IMR_TXERR BIT(11) /* Tx Err Flag Int Status, 607#define IMR_BCNDOK7 BIT(20)
605 * write 1 clear. 608/* Beacon Queue DMA OK Interrup 6 */
606 */ 609#define IMR_BCNDOK6 BIT(19)
607#define IMR_RXERR BIT(10) /* Rx Err Flag INT Status, 610/* Beacon Queue DMA OK Interrup 5 */
608 * Write 1 clear 611#define IMR_BCNDOK5 BIT(18)
609 */ 612/* Beacon Queue DMA OK Interrup 4 */
610#define IMR_TXFOVW BIT(9) /* Transmit FIFO Overflow */ 613#define IMR_BCNDOK4 BIT(17)
611#define IMR_RXFOVW BIT(8) /* Receive FIFO Overflow */ 614/* Beacon Queue DMA OK Interrup 3 */
612 615#define IMR_BCNDOK3 BIT(16)
616/* Beacon Queue DMA OK Interrup 2 */
617#define IMR_BCNDOK2 BIT(15)
618/* Beacon Queue DMA OK Interrup 1 */
619#define IMR_BCNDOK1 BIT(14)
620/* ATIM Window End Extension for Win7 */
621#define IMR_ATIMEND_E BIT(13)
622/* Tx Error Flag Interrupt Status, write 1 clear. */
623#define IMR_TXERR BIT(11)
624/* Rx Error Flag INT Status, Write 1 clear */
625#define IMR_RXERR BIT(10)
626/* Transmit FIFO Overflow */
627#define IMR_TXFOVW BIT(9)
628/* Receive FIFO Overflow */
629#define IMR_RXFOVW BIT(8)
613 630
614#define HWSET_MAX_SIZE 512 631#define HWSET_MAX_SIZE 512
615#define EFUSE_MAX_SECTION 64 632#define EFUSE_MAX_SECTION 64
616#define EFUSE_REAL_CONTENT_LEN 256 633#define EFUSE_REAL_CONTENT_LEN 256
617#define EFUSE_OOB_PROTECT_BYTES 18 /* PG data exclude header, 634/* PG data exclude header, dummy 7 bytes frome CP test and reserved 1byte.*/
618 * dummy 7 bytes frome CP 635#define EFUSE_OOB_PROTECT_BYTES 18
619 * test and reserved 1byte. 636
620 */ 637#define EEPROM_DEFAULT_TSSI 0x0
621 638#define EEPROM_DEFAULT_TXPOWERDIFF 0x0
622#define EEPROM_DEFAULT_TSSI 0x0 639#define EEPROM_DEFAULT_CRYSTALCAP 0x5
623#define EEPROM_DEFAULT_TXPOWERDIFF 0x0 640#define EEPROM_DEFAULT_BOARDTYPE 0x02
624#define EEPROM_DEFAULT_CRYSTALCAP 0x5 641#define EEPROM_DEFAULT_TXPOWER 0x1010
625#define EEPROM_DEFAULT_BOARDTYPE 0x02 642#define EEPROM_DEFAULT_HT2T_TXPWR 0x10
626#define EEPROM_DEFAULT_TXPOWER 0x1010
627#define EEPROM_DEFAULT_HT2T_TXPWR 0x10
628 643
629#define EEPROM_DEFAULT_LEGACYHTTXPOWERDIFF 0x3 644#define EEPROM_DEFAULT_LEGACYHTTXPOWERDIFF 0x3
630#define EEPROM_DEFAULT_THERMALMETER 0x18 645#define EEPROM_DEFAULT_THERMALMETER 0x18
631#define EEPROM_DEFAULT_ANTTXPOWERDIFF 0x0 646#define EEPROM_DEFAULT_ANTTXPOWERDIFF 0x0
632#define EEPROM_DEFAULT_TXPWDIFF_CRYSTALCAP 0x5 647#define EEPROM_DEFAULT_TXPWDIFF_CRYSTALCAP 0x5
633#define EEPROM_DEFAULT_TXPOWERLEVEL 0x22 648#define EEPROM_DEFAULT_TXPOWERLEVEL 0x22
634#define EEPROM_DEFAULT_HT40_2SDIFF 0x0 649#define EEPROM_DEFAULT_HT40_2SDIFF 0x0
635#define EEPROM_DEFAULT_HT20_DIFF 2 650#define EEPROM_DEFAULT_HT20_DIFF 2
636#define EEPROM_DEFAULT_LEGACYHTTXPOWERDIFF 0x3 651#define EEPROM_DEFAULT_LEGACYHTTXPOWERDIFF 0x3
637#define EEPROM_DEFAULT_HT40_PWRMAXOFFSET 0 652#define EEPROM_DEFAULT_HT40_PWRMAXOFFSET 0
638#define EEPROM_DEFAULT_HT20_PWRMAXOFFSET 0 653#define EEPROM_DEFAULT_HT20_PWRMAXOFFSET 0
639 654
640#define RF_OPTION1 0x79 655#define RF_OPTION1 0x79
641#define RF_OPTION2 0x7A 656#define RF_OPTION2 0x7A
642#define RF_OPTION3 0x7B 657#define RF_OPTION3 0x7B
643#define RF_OPTION4 0x7C 658#define RF_OPTION4 0x7C
644 659
645#define EEPROM_DEFAULT_PID 0x1234 660#define EEPROM_DEFAULT_PID 0x1234
646#define EEPROM_DEFAULT_VID 0x5678 661#define EEPROM_DEFAULT_VID 0x5678
647#define EEPROM_DEFAULT_CUSTOMERID 0xAB 662#define EEPROM_DEFAULT_CUSTOMERID 0xAB
648#define EEPROM_DEFAULT_SUBCUSTOMERID 0xCD 663#define EEPROM_DEFAULT_SUBCUSTOMERID 0xCD
649#define EEPROM_DEFAULT_VERSION 0 664#define EEPROM_DEFAULT_VERSION 0
650 665
651#define EEPROM_CHANNEL_PLAN_FCC 0x0 666#define EEPROM_CHANNEL_PLAN_FCC 0x0
652#define EEPROM_CHANNEL_PLAN_IC 0x1 667#define EEPROM_CHANNEL_PLAN_IC 0x1
653#define EEPROM_CHANNEL_PLAN_ETSI 0x2 668#define EEPROM_CHANNEL_PLAN_ETSI 0x2
654#define EEPROM_CHANNEL_PLAN_SPAIN 0x3 669#define EEPROM_CHANNEL_PLAN_SPAIN 0x3
655#define EEPROM_CHANNEL_PLAN_FRANCE 0x4 670#define EEPROM_CHANNEL_PLAN_FRANCE 0x4
656#define EEPROM_CHANNEL_PLAN_MKK 0x5 671#define EEPROM_CHANNEL_PLAN_MKK 0x5
657#define EEPROM_CHANNEL_PLAN_MKK1 0x6 672#define EEPROM_CHANNEL_PLAN_MKK1 0x6
658#define EEPROM_CHANNEL_PLAN_ISRAEL 0x7 673#define EEPROM_CHANNEL_PLAN_ISRAEL 0x7
659#define EEPROM_CHANNEL_PLAN_TELEC 0x8 674#define EEPROM_CHANNEL_PLAN_TELEC 0x8
660#define EEPROM_CHANNEL_PLAN_GLOBAL_DOMAIN 0x9 675#define EEPROM_CHANNEL_PLAN_GLOBAL_DOMAIN 0x9
661#define EEPROM_CHANNEL_PLAN_WORLD_WIDE_13 0xA 676#define EEPROM_CHANNEL_PLAN_WORLD_WIDE_13 0xA
662#define EEPROM_CHANNEL_PLAN_NCC 0xB 677#define EEPROM_CHANNEL_PLAN_NCC 0xB
663#define EEPROM_CHANNEL_PLAN_BY_HW_MASK 0x80 678#define EEPROM_CHANNEL_PLAN_BY_HW_MASK 0x80
664 679
665#define EEPROM_CID_DEFAULT 0x0 680#define EEPROM_CID_DEFAULT 0x0
666#define EEPROM_CID_TOSHIBA 0x4 681#define EEPROM_CID_TOSHIBA 0x4
667#define EEPROM_CID_CCX 0x10 682#define EEPROM_CID_CCX 0x10
668#define EEPROM_CID_QMI 0x0D 683#define EEPROM_CID_QMI 0x0D
669#define EEPROM_CID_WHQL 0xFE 684#define EEPROM_CID_WHQL 0xFE
670 685
671#define RTL8188E_EEPROM_ID 0x8129 686#define RTL8188E_EEPROM_ID 0x8129
672 687
673#define EEPROM_HPON 0x02 688#define EEPROM_HPON 0x02
674#define EEPROM_CLK 0x06 689#define EEPROM_CLK 0x06
675#define EEPROM_TESTR 0x08 690#define EEPROM_TESTR 0x08
676 691
677#define EEPROM_TXPOWERCCK 0x10 692#define EEPROM_TXPOWERCCK 0x10
678#define EEPROM_TXPOWERHT40_1S 0x16 693#define EEPROM_TXPOWERHT40_1S 0x16
679#define EEPROM_TXPOWERHT20DIFF 0x1B 694#define EEPROM_TXPOWERHT20DIFF 0x1B
680#define EEPROM_TXPOWER_OFDMDIFF 0x1B 695#define EEPROM_TXPOWER_OFDMDIFF 0x1B
681 696
682#define EEPROM_TX_PWR_INX 0x10 697#define EEPROM_TX_PWR_INX 0x10
683 698
684#define EEPROM_CHANNELPLAN 0xB8 699#define EEPROM_CHANNELPLAN 0xB8
685#define EEPROM_XTAL_88E 0xB9 700#define EEPROM_XTAL_88E 0xB9
686#define EEPROM_THERMAL_METER_88E 0xBA 701#define EEPROM_THERMAL_METER_88E 0xBA
687#define EEPROM_IQK_LCK_88E 0xBB 702#define EEPROM_IQK_LCK_88E 0xBB
688 703
689#define EEPROM_RF_BOARD_OPTION_88E 0xC1 704#define EEPROM_RF_BOARD_OPTION_88E 0xC1
690#define EEPROM_RF_FEATURE_OPTION_88E 0xC2 705#define EEPROM_RF_FEATURE_OPTION_88E 0xC2
691#define EEPROM_RF_BT_SETTING_88E 0xC3 706#define EEPROM_RF_BT_SETTING_88E 0xC3
692#define EEPROM_VERSION 0xC4 707#define EEPROM_VERSION 0xC4
693#define EEPROM_CUSTOMER_ID 0xC5 708#define EEPROM_CUSTOMER_ID 0xC5
694#define EEPROM_RF_ANTENNA_OPT_88E 0xC9 709#define EEPROM_RF_ANTENNA_OPT_88E 0xC9
695 710
696#define EEPROM_MAC_ADDR 0xD0 711#define EEPROM_MAC_ADDR 0xD0
697#define EEPROM_VID 0xD6 712#define EEPROM_VID 0xD6
698#define EEPROM_DID 0xD8 713#define EEPROM_DID 0xD8
699#define EEPROM_SVID 0xDA 714#define EEPROM_SVID 0xDA
700#define EEPROM_SMID 0xDC 715#define EEPROM_SMID 0xDC
701 716
702#define STOPBECON BIT(6) 717#define STOPBECON BIT(6)
703#define STOPHIGHT BIT(5) 718#define STOPHIGHT BIT(5)
704#define STOPMGT BIT(4) 719#define STOPMGT BIT(4)
705#define STOPVO BIT(3) 720#define STOPVO BIT(3)
706#define STOPVI BIT(2) 721#define STOPVI BIT(2)
707#define STOPBE BIT(1) 722#define STOPBE BIT(1)
708#define STOPBK BIT(0) 723#define STOPBK BIT(0)
709 724
710#define RCR_APPFCS BIT(31) 725#define RCR_APPFCS BIT(31)
711#define RCR_APP_MIC BIT(30) 726#define RCR_APP_MIC BIT(30)
712#define RCR_APP_ICV BIT(29) 727#define RCR_APP_ICV BIT(29)
713#define RCR_APP_PHYST_RXFF BIT(28) 728#define RCR_APP_PHYST_RXFF BIT(28)
714#define RCR_APP_BA_SSN BIT(27) 729#define RCR_APP_BA_SSN BIT(27)
715#define RCR_ENMBID BIT(24) 730#define RCR_ENMBID BIT(24)
716#define RCR_LSIGEN BIT(23) 731#define RCR_LSIGEN BIT(23)
717#define RCR_MFBEN BIT(22) 732#define RCR_MFBEN BIT(22)
718#define RCR_HTC_LOC_CTRL BIT(14) 733#define RCR_HTC_LOC_CTRL BIT(14)
719#define RCR_AMF BIT(13) 734#define RCR_AMF BIT(13)
720#define RCR_ACF BIT(12) 735#define RCR_ACF BIT(12)
721#define RCR_ADF BIT(11) 736#define RCR_ADF BIT(11)
722#define RCR_AICV BIT(9) 737#define RCR_AICV BIT(9)
723#define RCR_ACRC32 BIT(8) 738#define RCR_ACRC32 BIT(8)
724#define RCR_CBSSID_BCN BIT(7) 739#define RCR_CBSSID_BCN BIT(7)
725#define RCR_CBSSID_DATA BIT(6) 740#define RCR_CBSSID_DATA BIT(6)
726#define RCR_CBSSID RCR_CBSSID_DATA 741#define RCR_CBSSID RCR_CBSSID_DATA
727#define RCR_APWRMGT BIT(5) 742#define RCR_APWRMGT BIT(5)
728#define RCR_ADD3 BIT(4) 743#define RCR_ADD3 BIT(4)
729#define RCR_AB BIT(3) 744#define RCR_AB BIT(3)
730#define RCR_AM BIT(2) 745#define RCR_AM BIT(2)
731#define RCR_APM BIT(1) 746#define RCR_APM BIT(1)
732#define RCR_AAP BIT(0) 747#define RCR_AAP BIT(0)
733#define RCR_MXDMA_OFFSET 8 748#define RCR_MXDMA_OFFSET 8
734#define RCR_FIFO_OFFSET 13 749#define RCR_FIFO_OFFSET 13
735 750
736#define RSV_CTRL 0x001C 751#define RSV_CTRL 0x001C
737#define RD_CTRL 0x0524 752#define RD_CTRL 0x0524
738 753
739#define REG_USB_INFO 0xFE17 754#define REG_USB_INFO 0xFE17
740#define REG_USB_SPECIAL_OPTION 0xFE55 755#define REG_USB_SPECIAL_OPTION 0xFE55
741#define REG_USB_DMA_AGG_TO 0xFE5B 756#define REG_USB_DMA_AGG_TO 0xFE5B
742#define REG_USB_AGG_TO 0xFE5C 757#define REG_USB_AGG_TO 0xFE5C
743#define REG_USB_AGG_TH 0xFE5D 758#define REG_USB_AGG_TH 0xFE5D
744 759
745#define REG_USB_VID 0xFE60 760#define REG_USB_VID 0xFE60
746#define REG_USB_PID 0xFE62 761#define REG_USB_PID 0xFE62
747#define REG_USB_OPTIONAL 0xFE64 762#define REG_USB_OPTIONAL 0xFE64
748#define REG_USB_CHIRP_K 0xFE65 763#define REG_USB_CHIRP_K 0xFE65
749#define REG_USB_PHY 0xFE66 764#define REG_USB_PHY 0xFE66
750#define REG_USB_MAC_ADDR 0xFE70 765#define REG_USB_MAC_ADDR 0xFE70
751#define REG_USB_HRPWM 0xFE58 766#define REG_USB_HRPWM 0xFE58
752#define REG_USB_HCPWM 0xFE57 767#define REG_USB_HCPWM 0xFE57
753 768
754#define SW18_FPWM BIT(3) 769#define SW18_FPWM BIT(3)
755 770
756#define ISO_MD2PP BIT(0) 771#define ISO_MD2PP BIT(0)
757#define ISO_UA2USB BIT(1) 772#define ISO_UA2USB BIT(1)
758#define ISO_UD2CORE BIT(2) 773#define ISO_UD2CORE BIT(2)
759#define ISO_PA2PCIE BIT(3) 774#define ISO_PA2PCIE BIT(3)
760#define ISO_PD2CORE BIT(4) 775#define ISO_PD2CORE BIT(4)
761#define ISO_IP2MAC BIT(5) 776#define ISO_IP2MAC BIT(5)
762#define ISO_DIOP BIT(6) 777#define ISO_DIOP BIT(6)
763#define ISO_DIOE BIT(7) 778#define ISO_DIOE BIT(7)
764#define ISO_EB2CORE BIT(8) 779#define ISO_EB2CORE BIT(8)
765#define ISO_DIOR BIT(9) 780#define ISO_DIOR BIT(9)
766 781
767#define PWC_EV25V BIT(14) 782#define PWC_EV25V BIT(14)
768#define PWC_EV12V BIT(15) 783#define PWC_EV12V BIT(15)
769 784
770#define FEN_BBRSTB BIT(0) 785#define FEN_BBRSTB BIT(0)
771#define FEN_BB_GLB_RSTN BIT(1) 786#define FEN_BB_GLB_RSTN BIT(1)
772#define FEN_USBA BIT(2) 787#define FEN_USBA BIT(2)
773#define FEN_UPLL BIT(3) 788#define FEN_UPLL BIT(3)
774#define FEN_USBD BIT(4) 789#define FEN_USBD BIT(4)
775#define FEN_DIO_PCIE BIT(5) 790#define FEN_DIO_PCIE BIT(5)
776#define FEN_PCIEA BIT(6) 791#define FEN_PCIEA BIT(6)
777#define FEN_PPLL BIT(7) 792#define FEN_PPLL BIT(7)
778#define FEN_PCIED BIT(8) 793#define FEN_PCIED BIT(8)
779#define FEN_DIOE BIT(9) 794#define FEN_DIOE BIT(9)
780#define FEN_CPUEN BIT(10) 795#define FEN_CPUEN BIT(10)
781#define FEN_DCORE BIT(11) 796#define FEN_DCORE BIT(11)
782#define FEN_ELDR BIT(12) 797#define FEN_ELDR BIT(12)
783#define FEN_DIO_RF BIT(13) 798#define FEN_DIO_RF BIT(13)
784#define FEN_HWPDN BIT(14) 799#define FEN_HWPDN BIT(14)
785#define FEN_MREGEN BIT(15) 800#define FEN_MREGEN BIT(15)
786 801
787#define PFM_LDALL BIT(0) 802#define PFM_LDALL BIT(0)
788#define PFM_ALDN BIT(1) 803#define PFM_ALDN BIT(1)
789#define PFM_LDKP BIT(2) 804#define PFM_LDKP BIT(2)
790#define PFM_WOWL BIT(3) 805#define PFM_WOWL BIT(3)
791#define ENPDN BIT(4) 806#define ENPDN BIT(4)
792#define PDN_PL BIT(5) 807#define PDN_PL BIT(5)
793#define APFM_ONMAC BIT(8) 808#define APFM_ONMAC BIT(8)
794#define APFM_OFF BIT(9) 809#define APFM_OFF BIT(9)
795#define APFM_RSM BIT(10) 810#define APFM_RSM BIT(10)
796#define AFSM_HSUS BIT(11) 811#define AFSM_HSUS BIT(11)
797#define AFSM_PCIE BIT(12) 812#define AFSM_PCIE BIT(12)
798#define APDM_MAC BIT(13) 813#define APDM_MAC BIT(13)
799#define APDM_HOST BIT(14) 814#define APDM_HOST BIT(14)
800#define APDM_HPDN BIT(15) 815#define APDM_HPDN BIT(15)
801#define RDY_MACON BIT(16) 816#define RDY_MACON BIT(16)
802#define SUS_HOST BIT(17) 817#define SUS_HOST BIT(17)
803#define ROP_ALD BIT(20) 818#define ROP_ALD BIT(20)
804#define ROP_PWR BIT(21) 819#define ROP_PWR BIT(21)
805#define ROP_SPS BIT(22) 820#define ROP_SPS BIT(22)
806#define SOP_MRST BIT(25) 821#define SOP_MRST BIT(25)
807#define SOP_FUSE BIT(26) 822#define SOP_FUSE BIT(26)
808#define SOP_ABG BIT(27) 823#define SOP_ABG BIT(27)
809#define SOP_AMB BIT(28) 824#define SOP_AMB BIT(28)
810#define SOP_RCK BIT(29) 825#define SOP_RCK BIT(29)
811#define SOP_A8M BIT(30) 826#define SOP_A8M BIT(30)
812#define XOP_BTCK BIT(31) 827#define XOP_BTCK BIT(31)
813 828
814#define ANAD16V_EN BIT(0) 829#define ANAD16V_EN BIT(0)
815#define ANA8M BIT(1) 830#define ANA8M BIT(1)
816#define MACSLP BIT(4) 831#define MACSLP BIT(4)
817#define LOADER_CLK_EN BIT(5) 832#define LOADER_CLK_EN BIT(5)
818#define _80M_SSC_DIS BIT(7) 833#define _80M_SSC_DIS BIT(7)
819#define _80M_SSC_EN_HO BIT(8) 834#define _80M_SSC_EN_HO BIT(8)
820#define PHY_SSC_RSTB BIT(9) 835#define PHY_SSC_RSTB BIT(9)
821#define SEC_CLK_EN BIT(10) 836#define SEC_CLK_EN BIT(10)
822#define MAC_CLK_EN BIT(11) 837#define MAC_CLK_EN BIT(11)
823#define SYS_CLK_EN BIT(12) 838#define SYS_CLK_EN BIT(12)
824#define RING_CLK_EN BIT(13) 839#define RING_CLK_EN BIT(13)
825 840
826#define BOOT_FROM_EEPROM BIT(4) 841#define BOOT_FROM_EEPROM BIT(4)
827#define EEPROM_EN BIT(5) 842#define EEPROM_EN BIT(5)
828 843
829#define AFE_BGEN BIT(0) 844#define AFE_BGEN BIT(0)
830#define AFE_MBEN BIT(1) 845#define AFE_MBEN BIT(1)
831#define MAC_ID_EN BIT(7) 846#define MAC_ID_EN BIT(7)
832 847
833#define WLOCK_ALL BIT(0) 848#define WLOCK_ALL BIT(0)
834#define WLOCK_00 BIT(1) 849#define WLOCK_00 BIT(1)
835#define WLOCK_04 BIT(2) 850#define WLOCK_04 BIT(2)
836#define WLOCK_08 BIT(3) 851#define WLOCK_08 BIT(3)
837#define WLOCK_40 BIT(4) 852#define WLOCK_40 BIT(4)
838#define R_DIS_PRST_0 BIT(5) 853#define R_DIS_PRST_0 BIT(5)
839#define R_DIS_PRST_1 BIT(6) 854#define R_DIS_PRST_1 BIT(6)
840#define LOCK_ALL_EN BIT(7) 855#define LOCK_ALL_EN BIT(7)
841 856
842#define RF_EN BIT(0) 857#define RF_EN BIT(0)
843#define RF_RSTB BIT(1) 858#define RF_RSTB BIT(1)
844#define RF_SDMRSTB BIT(2) 859#define RF_SDMRSTB BIT(2)
845 860
846#define LDA15_EN BIT(0) 861#define LDA15_EN BIT(0)
847#define LDA15_STBY BIT(1) 862#define LDA15_STBY BIT(1)
848#define LDA15_OBUF BIT(2) 863#define LDA15_OBUF BIT(2)
849#define LDA15_REG_VOS BIT(3) 864#define LDA15_REG_VOS BIT(3)
850#define _LDA15_VOADJ(x) (((x) & 0x7) << 4) 865#define _LDA15_VOADJ(x) (((x) & 0x7) << 4)
851 866
852#define LDV12_EN BIT(0) 867#define LDV12_EN BIT(0)
853#define LDV12_SDBY BIT(1) 868#define LDV12_SDBY BIT(1)
854#define LPLDO_HSM BIT(2) 869#define LPLDO_HSM BIT(2)
855#define LPLDO_LSM_DIS BIT(3) 870#define LPLDO_LSM_DIS BIT(3)
856#define _LDV12_VADJ(x) (((x) & 0xF) << 4) 871#define _LDV12_VADJ(x) (((x) & 0xF) << 4)
857 872
858#define XTAL_EN BIT(0) 873#define XTAL_EN BIT(0)
859#define XTAL_BSEL BIT(1) 874#define XTAL_BSEL BIT(1)
860#define _XTAL_BOSC(x) (((x) & 0x3) << 2) 875#define _XTAL_BOSC(x) (((x) & 0x3) << 2)
861#define _XTAL_CADJ(x) (((x) & 0xF) << 4) 876#define _XTAL_CADJ(x) (((x) & 0xF) << 4)
862#define XTAL_GATE_USB BIT(8) 877#define XTAL_GATE_USB BIT(8)
@@ -871,145 +886,145 @@
871#define _XTAL_BT_DRV(x) (((x) & 0x3) << 21) 886#define _XTAL_BT_DRV(x) (((x) & 0x3) << 21)
872#define _XTAL_GPIO(x) (((x) & 0x7) << 23) 887#define _XTAL_GPIO(x) (((x) & 0x7) << 23)
873 888
874#define CKDLY_AFE BIT(26) 889#define CKDLY_AFE BIT(26)
875#define CKDLY_USB BIT(27) 890#define CKDLY_USB BIT(27)
876#define CKDLY_DIG BIT(28) 891#define CKDLY_DIG BIT(28)
877#define CKDLY_BT BIT(29) 892#define CKDLY_BT BIT(29)
878 893
879#define APLL_EN BIT(0) 894#define APLL_EN BIT(0)
880#define APLL_320_EN BIT(1) 895#define APLL_320_EN BIT(1)
881#define APLL_FREF_SEL BIT(2) 896#define APLL_FREF_SEL BIT(2)
882#define APLL_EDGE_SEL BIT(3) 897#define APLL_EDGE_SEL BIT(3)
883#define APLL_WDOGB BIT(4) 898#define APLL_WDOGB BIT(4)
884#define APLL_LPFEN BIT(5) 899#define APLL_LPFEN BIT(5)
885 900
886#define APLL_REF_CLK_13MHZ 0x1 901#define APLL_REF_CLK_13MHZ 0x1
887#define APLL_REF_CLK_19_2MHZ 0x2 902#define APLL_REF_CLK_19_2MHZ 0x2
888#define APLL_REF_CLK_20MHZ 0x3 903#define APLL_REF_CLK_20MHZ 0x3
889#define APLL_REF_CLK_25MHZ 0x4 904#define APLL_REF_CLK_25MHZ 0x4
890#define APLL_REF_CLK_26MHZ 0x5 905#define APLL_REF_CLK_26MHZ 0x5
891#define APLL_REF_CLK_38_4MHZ 0x6 906#define APLL_REF_CLK_38_4MHZ 0x6
892#define APLL_REF_CLK_40MHZ 0x7 907#define APLL_REF_CLK_40MHZ 0x7
893 908
894#define APLL_320EN BIT(14) 909#define APLL_320EN BIT(14)
895#define APLL_80EN BIT(15) 910#define APLL_80EN BIT(15)
896#define APLL_1MEN BIT(24) 911#define APLL_1MEN BIT(24)
897 912
898#define ALD_EN BIT(18) 913#define ALD_EN BIT(18)
899#define EF_PD BIT(19) 914#define EF_PD BIT(19)
900#define EF_FLAG BIT(31) 915#define EF_FLAG BIT(31)
901 916
902#define EF_TRPT BIT(7) 917#define EF_TRPT BIT(7)
903#define LDOE25_EN BIT(31) 918#define LDOE25_EN BIT(31)
904 919
905#define RSM_EN BIT(0) 920#define RSM_EN BIT(0)
906#define TIMER_EN BIT(4) 921#define TIMER_EN BIT(4)
907 922
908#define TRSW0EN BIT(2) 923#define TRSW0EN BIT(2)
909#define TRSW1EN BIT(3) 924#define TRSW1EN BIT(3)
910#define EROM_EN BIT(4) 925#define EROM_EN BIT(4)
911#define ENBT BIT(5) 926#define ENBT BIT(5)
912#define ENUART BIT(8) 927#define ENUART BIT(8)
913#define UART_910 BIT(9) 928#define UART_910 BIT(9)
914#define ENPMAC BIT(10) 929#define ENPMAC BIT(10)
915#define SIC_SWRST BIT(11) 930#define SIC_SWRST BIT(11)
916#define ENSIC BIT(12) 931#define ENSIC BIT(12)
917#define SIC_23 BIT(13) 932#define SIC_23 BIT(13)
918#define ENHDP BIT(14) 933#define ENHDP BIT(14)
919#define SIC_LBK BIT(15) 934#define SIC_LBK BIT(15)
920 935
921#define LED0PL BIT(4) 936#define LED0PL BIT(4)
922#define LED1PL BIT(12) 937#define LED1PL BIT(12)
923#define LED0DIS BIT(7) 938#define LED0DIS BIT(7)
924 939
925#define MCUFWDL_EN BIT(0) 940#define MCUFWDL_EN BIT(0)
926#define MCUFWDL_RDY BIT(1) 941#define MCUFWDL_RDY BIT(1)
927#define FWDL_CHKSUM_RPT BIT(2) 942#define FWDL_CHKSUM_RPT BIT(2)
928#define MACINI_RDY BIT(3) 943#define MACINI_RDY BIT(3)
929#define BBINI_RDY BIT(4) 944#define BBINI_RDY BIT(4)
930#define RFINI_RDY BIT(5) 945#define RFINI_RDY BIT(5)
931#define WINTINI_RDY BIT(6) 946#define WINTINI_RDY BIT(6)
932#define CPRST BIT(23) 947#define CPRST BIT(23)
933 948
934#define XCLK_VLD BIT(0) 949#define XCLK_VLD BIT(0)
935#define ACLK_VLD BIT(1) 950#define ACLK_VLD BIT(1)
936#define UCLK_VLD BIT(2) 951#define UCLK_VLD BIT(2)
937#define PCLK_VLD BIT(3) 952#define PCLK_VLD BIT(3)
938#define PCIRSTB BIT(4) 953#define PCIRSTB BIT(4)
939#define V15_VLD BIT(5) 954#define V15_VLD BIT(5)
940#define TRP_B15V_EN BIT(7) 955#define TRP_B15V_EN BIT(7)
941#define SIC_IDLE BIT(8) 956#define SIC_IDLE BIT(8)
942#define BD_MAC2 BIT(9) 957#define BD_MAC2 BIT(9)
943#define BD_MAC1 BIT(10) 958#define BD_MAC1 BIT(10)
944#define IC_MACPHY_MODE BIT(11) 959#define IC_MACPHY_MODE BIT(11)
945#define VENDOR_ID BIT(19) 960#define VENDOR_ID BIT(19)
946#define PAD_HWPD_IDN BIT(22) 961#define PAD_HWPD_IDN BIT(22)
947#define TRP_VAUX_EN BIT(23) 962#define TRP_VAUX_EN BIT(23)
948#define TRP_BT_EN BIT(24) 963#define TRP_BT_EN BIT(24)
949#define BD_PKG_SEL BIT(25) 964#define BD_PKG_SEL BIT(25)
950#define BD_HCI_SEL BIT(26) 965#define BD_HCI_SEL BIT(26)
951#define TYPE_ID BIT(27) 966#define TYPE_ID BIT(27)
952 967
953#define CHIP_VER_RTL_MASK 0xF000 968#define CHIP_VER_RTL_MASK 0xF000
954#define CHIP_VER_RTL_SHIFT 12 969#define CHIP_VER_RTL_SHIFT 12
955 970
956#define REG_LBMODE (REG_CR + 3) 971#define REG_LBMODE (REG_CR + 3)
957 972
958#define HCI_TXDMA_EN BIT(0) 973#define HCI_TXDMA_EN BIT(0)
959#define HCI_RXDMA_EN BIT(1) 974#define HCI_RXDMA_EN BIT(1)
960#define TXDMA_EN BIT(2) 975#define TXDMA_EN BIT(2)
961#define RXDMA_EN BIT(3) 976#define RXDMA_EN BIT(3)
962#define PROTOCOL_EN BIT(4) 977#define PROTOCOL_EN BIT(4)
963#define SCHEDULE_EN BIT(5) 978#define SCHEDULE_EN BIT(5)
964#define MACTXEN BIT(6) 979#define MACTXEN BIT(6)
965#define MACRXEN BIT(7) 980#define MACRXEN BIT(7)
966#define ENSWBCN BIT(8) 981#define ENSWBCN BIT(8)
967#define ENSEC BIT(9) 982#define ENSEC BIT(9)
968 983
969#define _NETTYPE(x) (((x) & 0x3) << 16) 984#define _NETTYPE(x) (((x) & 0x3) << 16)
970#define MASK_NETTYPE 0x30000 985#define MASK_NETTYPE 0x30000
971#define NT_NO_LINK 0x0 986#define NT_NO_LINK 0x0
972#define NT_LINK_AD_HOC 0x1 987#define NT_LINK_AD_HOC 0x1
973#define NT_LINK_AP 0x2 988#define NT_LINK_AP 0x2
974#define NT_AS_AP 0x3 989#define NT_AS_AP 0x3
975 990
976#define _LBMODE(x) (((x) & 0xF) << 24) 991#define _LBMODE(x) (((x) & 0xF) << 24)
977#define MASK_LBMODE 0xF000000 992#define MASK_LBMODE 0xF000000
978#define LOOPBACK_NORMAL 0x0 993#define LOOPBACK_NORMAL 0x0
979#define LOOPBACK_IMMEDIATELY 0xB 994#define LOOPBACK_IMMEDIATELY 0xB
980#define LOOPBACK_MAC_DELAY 0x3 995#define LOOPBACK_MAC_DELAY 0x3
981#define LOOPBACK_PHY 0x1 996#define LOOPBACK_PHY 0x1
982#define LOOPBACK_DMA 0x7 997#define LOOPBACK_DMA 0x7
983 998
984#define GET_RX_PAGE_SIZE(value) ((value) & 0xF) 999#define GET_RX_PAGE_SIZE(value) ((value) & 0xF)
985#define GET_TX_PAGE_SIZE(value) (((value) & 0xF0) >> 4) 1000#define GET_TX_PAGE_SIZE(value) (((value) & 0xF0) >> 4)
986#define _PSRX_MASK 0xF 1001#define _PSRX_MASK 0xF
987#define _PSTX_MASK 0xF0 1002#define _PSTX_MASK 0xF0
988#define _PSRX(x) (x) 1003#define _PSRX(x) (x)
989#define _PSTX(x) ((x) << 4) 1004#define _PSTX(x) ((x) << 4)
990 1005
991#define PBP_64 0x0 1006#define PBP_64 0x0
992#define PBP_128 0x1 1007#define PBP_128 0x1
993#define PBP_256 0x2 1008#define PBP_256 0x2
994#define PBP_512 0x3 1009#define PBP_512 0x3
995#define PBP_1024 0x4 1010#define PBP_1024 0x4
996 1011
997#define RXDMA_ARBBW_EN BIT(0) 1012#define RXDMA_ARBBW_EN BIT(0)
998#define RXSHFT_EN BIT(1) 1013#define RXSHFT_EN BIT(1)
999#define RXDMA_AGG_EN BIT(2) 1014#define RXDMA_AGG_EN BIT(2)
1000#define QS_VO_QUEUE BIT(8) 1015#define QS_VO_QUEUE BIT(8)
1001#define QS_VI_QUEUE BIT(9) 1016#define QS_VI_QUEUE BIT(9)
1002#define QS_BE_QUEUE BIT(10) 1017#define QS_BE_QUEUE BIT(10)
1003#define QS_BK_QUEUE BIT(11) 1018#define QS_BK_QUEUE BIT(11)
1004#define QS_MANAGER_QUEUE BIT(12) 1019#define QS_MANAGER_QUEUE BIT(12)
1005#define QS_HIGH_QUEUE BIT(13) 1020#define QS_HIGH_QUEUE BIT(13)
1006 1021
1007#define HQSEL_VOQ BIT(0) 1022#define HQSEL_VOQ BIT(0)
1008#define HQSEL_VIQ BIT(1) 1023#define HQSEL_VIQ BIT(1)
1009#define HQSEL_BEQ BIT(2) 1024#define HQSEL_BEQ BIT(2)
1010#define HQSEL_BKQ BIT(3) 1025#define HQSEL_BKQ BIT(3)
1011#define HQSEL_MGTQ BIT(4) 1026#define HQSEL_MGTQ BIT(4)
1012#define HQSEL_HIQ BIT(5) 1027#define HQSEL_HIQ BIT(5)
1013 1028
1014#define _TXDMA_HIQ_MAP(x) (((x)&0x3) << 14) 1029#define _TXDMA_HIQ_MAP(x) (((x)&0x3) << 14)
1015#define _TXDMA_MGQ_MAP(x) (((x)&0x3) << 12) 1030#define _TXDMA_MGQ_MAP(x) (((x)&0x3) << 12)
@@ -1018,9 +1033,9 @@
1018#define _TXDMA_VIQ_MAP(x) (((x)&0x3) << 6) 1033#define _TXDMA_VIQ_MAP(x) (((x)&0x3) << 6)
1019#define _TXDMA_VOQ_MAP(x) (((x)&0x3) << 4) 1034#define _TXDMA_VOQ_MAP(x) (((x)&0x3) << 4)
1020 1035
1021#define QUEUE_LOW 1 1036#define QUEUE_LOW 1
1022#define QUEUE_NORMAL 2 1037#define QUEUE_NORMAL 2
1023#define QUEUE_HIGH 3 1038#define QUEUE_HIGH 3
1024 1039
1025#define _LLT_NO_ACTIVE 0x0 1040#define _LLT_NO_ACTIVE 0x0
1026#define _LLT_WRITE_ACCESS 0x1 1041#define _LLT_WRITE_ACCESS 0x1
@@ -1028,25 +1043,25 @@
1028 1043
1029#define _LLT_INIT_DATA(x) ((x) & 0xFF) 1044#define _LLT_INIT_DATA(x) ((x) & 0xFF)
1030#define _LLT_INIT_ADDR(x) (((x) & 0xFF) << 8) 1045#define _LLT_INIT_ADDR(x) (((x) & 0xFF) << 8)
1031#define _LLT_OP(x) (((x) & 0x3) << 30) 1046#define _LLT_OP(x) (((x) & 0x3) << 30)
1032#define _LLT_OP_VALUE(x) (((x) >> 30) & 0x3) 1047#define _LLT_OP_VALUE(x) (((x) >> 30) & 0x3)
1033 1048
1034#define BB_WRITE_READ_MASK (BIT(31) | BIT(30)) 1049#define BB_WRITE_READ_MASK (BIT(31) | BIT(30))
1035#define BB_WRITE_EN BIT(30) 1050#define BB_WRITE_EN BIT(30)
1036#define BB_READ_EN BIT(31) 1051#define BB_READ_EN BIT(31)
1037 1052
1038#define _HPQ(x) ((x) & 0xFF) 1053#define _HPQ(x) ((x) & 0xFF)
1039#define _LPQ(x) (((x) & 0xFF) << 8) 1054#define _LPQ(x) (((x) & 0xFF) << 8)
1040#define _PUBQ(x) (((x) & 0xFF) << 16) 1055#define _PUBQ(x) (((x) & 0xFF) << 16)
1041#define _NPQ(x) ((x) & 0xFF) 1056#define _NPQ(x) ((x) & 0xFF)
1042 1057
1043#define HPQ_PUBLIC_DIS BIT(24) 1058#define HPQ_PUBLIC_DIS BIT(24)
1044#define LPQ_PUBLIC_DIS BIT(25) 1059#define LPQ_PUBLIC_DIS BIT(25)
1045#define LD_RQPN BIT(31) 1060#define LD_RQPN BIT(31)
1046 1061
1047#define BCN_VALID BIT(16) 1062#define BCN_VALID BIT(16)
1048#define BCN_HEAD(x) (((x) & 0xFF) << 8) 1063#define BCN_HEAD(x) (((x) & 0xFF) << 8)
1049#define BCN_HEAD_MASK 0xFF00 1064#define BCN_HEAD_MASK 0xFF00
1050 1065
1051#define BLK_DESC_NUM_SHIFT 4 1066#define BLK_DESC_NUM_SHIFT 4
1052#define BLK_DESC_NUM_MASK 0xF 1067#define BLK_DESC_NUM_MASK 0xF
@@ -1066,9 +1081,9 @@
1066 1081
1067#define _RRSR_RSC(x) (((x) & 0x3) << 21) 1082#define _RRSR_RSC(x) (((x) & 0x3) << 21)
1068#define RRSR_RSC_RESERVED 0x0 1083#define RRSR_RSC_RESERVED 0x0
1069#define RRSR_RSC_UPPER_SUBCHANNEL 0x1 1084#define RRSR_RSC_UPPER_SUBCHANNEL 0x1
1070#define RRSR_RSC_LOWER_SUBCHANNEL 0x2 1085#define RRSR_RSC_LOWER_SUBCHANNEL 0x2
1071#define RRSR_RSC_DUPLICATE_MODE 0x3 1086#define RRSR_RSC_DUPLICATE_MODE 0x3
1072 1087
1073#define USE_SHORT_G1 BIT(20) 1088#define USE_SHORT_G1 BIT(20)
1074 1089
@@ -1081,8 +1096,8 @@
1081#define _AGGLMT_MCS6(x) (((x) & 0xF) << 24) 1096#define _AGGLMT_MCS6(x) (((x) & 0xF) << 24)
1082#define _AGGLMT_MCS7(x) (((x) & 0xF) << 28) 1097#define _AGGLMT_MCS7(x) (((x) & 0xF) << 28)
1083 1098
1084#define RETRY_LIMIT_SHORT_SHIFT 8 1099#define RETRY_LIMIT_SHORT_SHIFT 8
1085#define RETRY_LIMIT_LONG_SHIFT 0 1100#define RETRY_LIMIT_LONG_SHIFT 0
1086 1101
1087#define _DARF_RC1(x) ((x) & 0x1F) 1102#define _DARF_RC1(x) ((x) & 0x1F)
1088#define _DARF_RC2(x) (((x) & 0x1F) << 8) 1103#define _DARF_RC2(x) (((x) & 0x1F) << 8)
@@ -1102,20 +1117,20 @@
1102#define _RARF_RC7(x) (((x) & 0x1F) << 16) 1117#define _RARF_RC7(x) (((x) & 0x1F) << 16)
1103#define _RARF_RC8(x) (((x) & 0x1F) << 24) 1118#define _RARF_RC8(x) (((x) & 0x1F) << 24)
1104 1119
1105#define AC_PARAM_TXOP_LIMIT_OFFSET 16 1120#define AC_PARAM_TXOP_LIMIT_OFFSET 16
1106#define AC_PARAM_ECW_MAX_OFFSET 12 1121#define AC_PARAM_ECW_MAX_OFFSET 12
1107#define AC_PARAM_ECW_MIN_OFFSET 8 1122#define AC_PARAM_ECW_MIN_OFFSET 8
1108#define AC_PARAM_AIFS_OFFSET 0 1123#define AC_PARAM_AIFS_OFFSET 0
1109 1124
1110#define _AIFS(x) (x) 1125#define _AIFS(x) (x)
1111#define _ECW_MAX_MIN(x) ((x) << 8) 1126#define _ECW_MAX_MIN(x) ((x) << 8)
1112#define _TXOP_LIMIT(x) ((x) << 16) 1127#define _TXOP_LIMIT(x) ((x) << 16)
1113 1128
1114#define _BCNIFS(x) ((x) & 0xFF) 1129#define _BCNIFS(x) ((x) & 0xFF)
1115#define _BCNECW(x) ((((x) & 0xF)) << 8) 1130#define _BCNECW(x) ((((x) & 0xF)) << 8)
1116 1131
1117#define _LRL(x) ((x) & 0x3F) 1132#define _LRL(x) ((x) & 0x3F)
1118#define _SRL(x) (((x) & 0x3F) << 8) 1133#define _SRL(x) (((x) & 0x3F) << 8)
1119 1134
1120#define _SIFS_CCK_CTX(x) ((x) & 0xFF) 1135#define _SIFS_CCK_CTX(x) ((x) & 0xFF)
1121#define _SIFS_CCK_TRX(x) (((x) & 0xFF) << 8); 1136#define _SIFS_CCK_TRX(x) (((x) & 0xFF) << 8);
@@ -1123,102 +1138,102 @@
1123#define _SIFS_OFDM_CTX(x) ((x) & 0xFF) 1138#define _SIFS_OFDM_CTX(x) ((x) & 0xFF)
1124#define _SIFS_OFDM_TRX(x) (((x) & 0xFF) << 8); 1139#define _SIFS_OFDM_TRX(x) (((x) & 0xFF) << 8);
1125 1140
1126#define _TBTT_PROHIBIT_HOLD(x) (((x) & 0xFF) << 8) 1141#define _TBTT_PROHIBIT_HOLD(x) (((x) & 0xFF) << 8)
1127 1142
1128#define DIS_EDCA_CNT_DWN BIT(11) 1143#define DIS_EDCA_CNT_DWN BIT(11)
1129 1144
1130#define EN_MBSSID BIT(1) 1145#define EN_MBSSID BIT(1)
1131#define EN_TXBCN_RPT BIT(2) 1146#define EN_TXBCN_RPT BIT(2)
1132#define EN_BCN_FUNCTION BIT(3) 1147#define EN_BCN_FUNCTION BIT(3)
1133 1148
1134#define TSFTR_RST BIT(0) 1149#define TSFTR_RST BIT(0)
1135#define TSFTR1_RST BIT(1) 1150#define TSFTR1_RST BIT(1)
1136 1151
1137#define STOP_BCNQ BIT(6) 1152#define STOP_BCNQ BIT(6)
1138 1153
1139#define DIS_TSF_UDT0_NORMAL_CHIP BIT(4) 1154#define DIS_TSF_UDT0_NORMAL_CHIP BIT(4)
1140#define DIS_TSF_UDT0_TEST_CHIP BIT(5) 1155#define DIS_TSF_UDT0_TEST_CHIP BIT(5)
1141 1156
1142#define ACMHW_HWEN BIT(0) 1157#define ACMHW_HWEN BIT(0)
1143#define ACMHW_BEQEN BIT(1) 1158#define ACMHW_BEQEN BIT(1)
1144#define ACMHW_VIQEN BIT(2) 1159#define ACMHW_VIQEN BIT(2)
1145#define ACMHW_VOQEN BIT(3) 1160#define ACMHW_VOQEN BIT(3)
1146#define ACMHW_BEQSTATUS BIT(4) 1161#define ACMHW_BEQSTATUS BIT(4)
1147#define ACMHW_VIQSTATUS BIT(5) 1162#define ACMHW_VIQSTATUS BIT(5)
1148#define ACMHW_VOQSTATUS BIT(6) 1163#define ACMHW_VOQSTATUS BIT(6)
1149 1164
1150#define APSDOFF BIT(6) 1165#define APSDOFF BIT(6)
1151#define APSDOFF_STATUS BIT(7) 1166#define APSDOFF_STATUS BIT(7)
1152 1167
1153#define BW_20MHZ BIT(2) 1168#define BW_20MHZ BIT(2)
1154 1169
1155#define RATE_BITMAP_ALL 0xFFFFF 1170#define RATE_BITMAP_ALL 0xFFFFF
1156 1171
1157#define RATE_RRSR_CCK_ONLY_1M 0xFFFF1 1172#define RATE_RRSR_CCK_ONLY_1M 0xFFFF1
1158 1173
1159#define TSFRST BIT(0) 1174#define TSFRST BIT(0)
1160#define DIS_GCLK BIT(1) 1175#define DIS_GCLK BIT(1)
1161#define PAD_SEL BIT(2) 1176#define PAD_SEL BIT(2)
1162#define PWR_ST BIT(6) 1177#define PWR_ST BIT(6)
1163#define PWRBIT_OW_EN BIT(7) 1178#define PWRBIT_OW_EN BIT(7)
1164#define ACRC BIT(8) 1179#define ACRC BIT(8)
1165#define CFENDFORM BIT(9) 1180#define CFENDFORM BIT(9)
1166#define ICV BIT(10) 1181#define ICV BIT(10)
1167 1182
1168#define AAP BIT(0) 1183#define AAP BIT(0)
1169#define APM BIT(1) 1184#define APM BIT(1)
1170#define AM BIT(2) 1185#define AM BIT(2)
1171#define AB BIT(3) 1186#define AB BIT(3)
1172#define ADD3 BIT(4) 1187#define ADD3 BIT(4)
1173#define APWRMGT BIT(5) 1188#define APWRMGT BIT(5)
1174#define CBSSID BIT(6) 1189#define CBSSID BIT(6)
1175#define CBSSID_DATA BIT(6) 1190#define CBSSID_DATA BIT(6)
1176#define CBSSID_BCN BIT(7) 1191#define CBSSID_BCN BIT(7)
1177#define ACRC32 BIT(8) 1192#define ACRC32 BIT(8)
1178#define AICV BIT(9) 1193#define AICV BIT(9)
1179#define ADF BIT(11) 1194#define ADF BIT(11)
1180#define ACF BIT(12) 1195#define ACF BIT(12)
1181#define AMF BIT(13) 1196#define AMF BIT(13)
1182#define HTC_LOC_CTRL BIT(14) 1197#define HTC_LOC_CTRL BIT(14)
1183#define UC_DATA_EN BIT(16) 1198#define UC_DATA_EN BIT(16)
1184#define BM_DATA_EN BIT(17) 1199#define BM_DATA_EN BIT(17)
1185#define MFBEN BIT(22) 1200#define MFBEN BIT(22)
1186#define LSIGEN BIT(23) 1201#define LSIGEN BIT(23)
1187#define ENMBID BIT(24) 1202#define ENMBID BIT(24)
1188#define APP_BASSN BIT(27) 1203#define APP_BASSN BIT(27)
1189#define APP_PHYSTS BIT(28) 1204#define APP_PHYSTS BIT(28)
1190#define APP_ICV BIT(29) 1205#define APP_ICV BIT(29)
1191#define APP_MIC BIT(30) 1206#define APP_MIC BIT(30)
1192#define APP_FCS BIT(31) 1207#define APP_FCS BIT(31)
1193 1208
1194#define _MIN_SPACE(x) ((x) & 0x7) 1209#define _MIN_SPACE(x) ((x) & 0x7)
1195#define _SHORT_GI_PADDING(x) (((x) & 0x1F) << 3) 1210#define _SHORT_GI_PADDING(x) (((x) & 0x1F) << 3)
1196 1211
1197#define RXERR_TYPE_OFDM_PPDU 0 1212#define RXERR_TYPE_OFDM_PPDU 0
1198#define RXERR_TYPE_OFDM_FALSE_ALARM 1 1213#define RXERR_TYPE_OFDM_FALSE_ALARM 1
1199#define RXERR_TYPE_OFDM_MPDU_OK 2 1214#define RXERR_TYPE_OFDM_MPDU_OK 2
1200#define RXERR_TYPE_OFDM_MPDU_FAIL 3 1215#define RXERR_TYPE_OFDM_MPDU_FAIL 3
1201#define RXERR_TYPE_CCK_PPDU 4 1216#define RXERR_TYPE_CCK_PPDU 4
1202#define RXERR_TYPE_CCK_FALSE_ALARM 5 1217#define RXERR_TYPE_CCK_FALSE_ALARM 5
1203#define RXERR_TYPE_CCK_MPDU_OK 6 1218#define RXERR_TYPE_CCK_MPDU_OK 6
1204#define RXERR_TYPE_CCK_MPDU_FAIL 7 1219#define RXERR_TYPE_CCK_MPDU_FAIL 7
1205#define RXERR_TYPE_HT_PPDU 8 1220#define RXERR_TYPE_HT_PPDU 8
1206#define RXERR_TYPE_HT_FALSE_ALARM 9 1221#define RXERR_TYPE_HT_FALSE_ALARM 9
1207#define RXERR_TYPE_HT_MPDU_TOTAL 10 1222#define RXERR_TYPE_HT_MPDU_TOTAL 10
1208#define RXERR_TYPE_HT_MPDU_OK 11 1223#define RXERR_TYPE_HT_MPDU_OK 11
1209#define RXERR_TYPE_HT_MPDU_FAIL 12 1224#define RXERR_TYPE_HT_MPDU_FAIL 12
1210#define RXERR_TYPE_RX_FULL_DROP 15 1225#define RXERR_TYPE_RX_FULL_DROP 15
1211 1226
1212#define RXERR_COUNTER_MASK 0xFFFFF 1227#define RXERR_COUNTER_MASK 0xFFFFF
1213#define RXERR_RPT_RST BIT(27) 1228#define RXERR_RPT_RST BIT(27)
1214#define _RXERR_RPT_SEL(type) ((type) << 28) 1229#define _RXERR_RPT_SEL(type) ((type) << 28)
1215 1230
1216#define SCR_TXUSEDK BIT(0) 1231#define SCR_TXUSEDK BIT(0)
1217#define SCR_RXUSEDK BIT(1) 1232#define SCR_RXUSEDK BIT(1)
1218#define SCR_TXENCENABLE BIT(2) 1233#define SCR_TXENCENABLE BIT(2)
1219#define SCR_RXDECENABLE BIT(3) 1234#define SCR_RXDECENABLE BIT(3)
1220#define SCR_SKBYA2 BIT(4) 1235#define SCR_SKBYA2 BIT(4)
1221#define SCR_NOSKMC BIT(5) 1236#define SCR_NOSKMC BIT(5)
1222#define SCR_TXBCUSEDK BIT(6) 1237#define SCR_TXBCUSEDK BIT(6)
1223#define SCR_RXBCUSEDK BIT(7) 1238#define SCR_RXBCUSEDK BIT(7)
1224 1239
@@ -1226,32 +1241,32 @@
1226#define USB_IS_FULL_SPEED 1 1241#define USB_IS_FULL_SPEED 1
1227#define USB_SPEED_MASK BIT(5) 1242#define USB_SPEED_MASK BIT(5)
1228 1243
1229#define USB_NORMAL_SIE_EP_MASK 0xF 1244#define USB_NORMAL_SIE_EP_MASK 0xF
1230#define USB_NORMAL_SIE_EP_SHIFT 4 1245#define USB_NORMAL_SIE_EP_SHIFT 4
1231 1246
1232#define USB_TEST_EP_MASK 0x30 1247#define USB_TEST_EP_MASK 0x30
1233#define USB_TEST_EP_SHIFT 4 1248#define USB_TEST_EP_SHIFT 4
1234 1249
1235#define USB_AGG_EN BIT(3) 1250#define USB_AGG_EN BIT(3)
1236 1251
1237#define MAC_ADDR_LEN 6 1252#define MAC_ADDR_LEN 6
1238#define LAST_ENTRY_OF_TX_PKT_BUFFER 175/*255 88e*/ 1253#define LAST_ENTRY_OF_TX_PKT_BUFFER 175/*255 88e*/
1239 1254
1240#define POLLING_LLT_THRESHOLD 20 1255#define POLLING_LLT_THRESHOLD 20
1241#define POLLING_READY_TIMEOUT_COUNT 3000 1256#define POLLING_READY_TIMEOUT_COUNT 3000
1242 1257
1243#define MAX_MSS_DENSITY_2T 0x13 1258#define MAX_MSS_DENSITY_2T 0x13
1244#define MAX_MSS_DENSITY_1T 0x0A 1259#define MAX_MSS_DENSITY_1T 0x0A
1245 1260
1246#define EPROM_CMD_OPERATING_MODE_MASK ((1<<7)|(1<<6)) 1261#define EPROM_CMD_OPERATING_MODE_MASK ((1<<7)|(1<<6))
1247#define EPROM_CMD_CONFIG 0x3 1262#define EPROM_CMD_CONFIG 0x3
1248#define EPROM_CMD_LOAD 1 1263#define EPROM_CMD_LOAD 1
1249 1264
1250#define HWSET_MAX_SIZE_92S HWSET_MAX_SIZE 1265#define HWSET_MAX_SIZE_92S HWSET_MAX_SIZE
1251 1266
1252#define HAL_8192C_HW_GPIO_WPS_BIT BIT(2) 1267#define HAL_8192C_HW_GPIO_WPS_BIT BIT(2)
1253 1268
1254#define RPMAC_RESET 0x100 1269#define RPMAC_RESET 0x100
1255#define RPMAC_TXSTART 0x104 1270#define RPMAC_TXSTART 0x104
1256#define RPMAC_TXLEGACYSIG 0x108 1271#define RPMAC_TXLEGACYSIG 0x108
1257#define RPMAC_TXHTSIG1 0x10c 1272#define RPMAC_TXHTSIG1 0x10c
@@ -1267,12 +1282,12 @@
1267#define RPMAC_TXMACHEADER5 0x134 1282#define RPMAC_TXMACHEADER5 0x134
1268#define RPMAC_TXDADATYPE 0x138 1283#define RPMAC_TXDADATYPE 0x138
1269#define RPMAC_TXRANDOMSEED 0x13c 1284#define RPMAC_TXRANDOMSEED 0x13c
1270#define RPMAC_CCKPLCPPREAMBLE 0x140 1285#define RPMAC_CCKPLCPPREAMBLE 0x140
1271#define RPMAC_CCKPLCPHEADER 0x144 1286#define RPMAC_CCKPLCPHEADER 0x144
1272#define RPMAC_CCKCRC16 0x148 1287#define RPMAC_CCKCRC16 0x148
1273#define RPMAC_OFDMRXCRC32OK 0x170 1288#define RPMAC_OFDMRXCRC32OK 0x170
1274#define RPMAC_OFDMRXCRC32Er 0x174 1289#define RPMAC_OFDMRXCRC32ER 0x174
1275#define RPMAC_OFDMRXPARITYER 0x178 1290#define RPMAC_OFDMRXPARITYER 0x178
1276#define RPMAC_OFDMRXCRC8ER 0x17c 1291#define RPMAC_OFDMRXCRC8ER 0x17c
1277#define RPMAC_CCKCRXRC16ER 0x180 1292#define RPMAC_CCKCRXRC16ER 0x180
1278#define RPMAC_CCKCRXRC32ER 0x184 1293#define RPMAC_CCKCRXRC32ER 0x184
@@ -1289,45 +1304,45 @@
1289#define RFPGA0_RFTIMING1 0x810 1304#define RFPGA0_RFTIMING1 0x810
1290#define RFPGA0_RFTIMING2 0x814 1305#define RFPGA0_RFTIMING2 0x814
1291 1306
1292#define RFPGA0_XA_HSSIPARAMETER1 0x820 1307#define RFPGA0_XA_HSSIPARAMETER1 0x820
1293#define RFPGA0_XA_HSSIPARAMETER2 0x824 1308#define RFPGA0_XA_HSSIPARAMETER2 0x824
1294#define RFPGA0_XB_HSSIPARAMETER1 0x828 1309#define RFPGA0_XB_HSSIPARAMETER1 0x828
1295#define RFPGA0_XB_HSSIPARAMETER2 0x82c 1310#define RFPGA0_XB_HSSIPARAMETER2 0x82c
1296 1311
1297#define RFPGA0_XA_LSSIPARAMETER 0x840 1312#define RFPGA0_XA_LSSIPARAMETER 0x840
1298#define RFPGA0_XB_LSSIPARAMETER 0x844 1313#define RFPGA0_XB_LSSIPARAMETER 0x844
1299 1314
1300#define RFPGA0_RFWAKEUPPARAMETER 0x850 1315#define RFPGA0_RFWAKEUPPARAMETER 0x850
1301#define RFPGA0_RFSLEEPUPPARAMETER 0x854 1316#define RFPGA0_RFSLEEPUPPARAMETER 0x854
1302 1317
1303#define RFPGA0_XAB_SWITCHCONTROL 0x858 1318#define RFPGA0_XAB_SWITCHCONTROL 0x858
1304#define RFPGA0_XCD_SWITCHCONTROL 0x85c 1319#define RFPGA0_XCD_SWITCHCONTROL 0x85c
1305 1320
1306#define RFPGA0_XA_RFINTERFACEOE 0x860 1321#define RFPGA0_XA_RFINTERFACEOE 0x860
1307#define RFPGA0_XB_RFINTERFACEOE 0x864 1322#define RFPGA0_XB_RFINTERFACEOE 0x864
1308 1323
1309#define RFPGA0_XAB_RFINTERFACESW 0x870 1324#define RFPGA0_XAB_RFINTERFACESW 0x870
1310#define RFPGA0_XCD_RFINTERFACESW 0x874 1325#define RFPGA0_XCD_RFINTERFACESW 0x874
1311 1326
1312#define rFPGA0_XAB_RFPARAMETER 0x878 1327#define RFPGA0_XAB_RFPARAMETER 0x878
1313#define rFPGA0_XCD_RFPARAMETER 0x87c 1328#define RFPGA0_XCD_RFPARAMETER 0x87c
1314 1329
1315#define RFPGA0_ANALOGPARAMETER1 0x880 1330#define RFPGA0_ANALOGPARAMETER1 0x880
1316#define RFPGA0_ANALOGPARAMETER2 0x884 1331#define RFPGA0_ANALOGPARAMETER2 0x884
1317#define RFPGA0_ANALOGPARAMETER3 0x888 1332#define RFPGA0_ANALOGPARAMETER3 0x888
1318#define RFPGA0_ANALOGPARAMETER4 0x88c 1333#define RFPGA0_ANALOGPARAMETER4 0x88c
1319 1334
1320#define RFPGA0_XA_LSSIREADBACK 0x8a0 1335#define RFPGA0_XA_LSSIREADBACK 0x8a0
1321#define RFPGA0_XB_LSSIREADBACK 0x8a4 1336#define RFPGA0_XB_LSSIREADBACK 0x8a4
1322#define RFPGA0_XC_LSSIREADBACK 0x8a8 1337#define RFPGA0_XC_LSSIREADBACK 0x8a8
1323#define RFPGA0_XD_LSSIREADBACK 0x8ac 1338#define RFPGA0_XD_LSSIREADBACK 0x8ac
1324 1339
1325#define RFPGA0_PSDREPORT 0x8b4 1340#define RFPGA0_PSDREPORT 0x8b4
1326#define TRANSCEIVEA_HSPI_READBACK 0x8b8 1341#define TRANSCEIVEA_HSPI_READBACK 0x8b8
1327#define TRANSCEIVEB_HSPI_READBACK 0x8bc 1342#define TRANSCEIVEB_HSPI_READBACK 0x8bc
1328#define REG_SC_CNT 0x8c4 1343#define REG_SC_CNT 0x8c4
1329#define RFPGA0_XAB_RFINTERFACERB 0x8e0 1344#define RFPGA0_XAB_RFINTERFACERB 0x8e0
1330#define RFPGA0_XCD_RFINTERFACERB 0x8e4 1345#define RFPGA0_XCD_RFINTERFACERB 0x8e4
1331 1346
1332#define RFPGA1_RFMOD 0x900 1347#define RFPGA1_RFMOD 0x900
1333 1348
@@ -1338,12 +1353,12 @@
1338#define RCCK0_SYSTEM 0xa00 1353#define RCCK0_SYSTEM 0xa00
1339 1354
1340#define RCCK0_AFESETTING 0xa04 1355#define RCCK0_AFESETTING 0xa04
1341#define RCCK0_CCA 0xa08 1356#define RCCK0_CCA 0xa08
1342 1357
1343#define RCCK0_RXAGC1 0xa0c 1358#define RCCK0_RXAGC1 0xa0c
1344#define RCCK0_RXAGC2 0xa10 1359#define RCCK0_RXAGC2 0xa10
1345 1360
1346#define RCCK0_RXHP 0xa14 1361#define RCCK0_RXHP 0xa14
1347 1362
1348#define RCCK0_DSPPARAMETER1 0xa18 1363#define RCCK0_DSPPARAMETER1 0xa18
1349#define RCCK0_DSPPARAMETER2 0xa1c 1364#define RCCK0_DSPPARAMETER2 0xa1c
@@ -1351,75 +1366,74 @@
1351#define RCCK0_TXFILTER1 0xa20 1366#define RCCK0_TXFILTER1 0xa20
1352#define RCCK0_TXFILTER2 0xa24 1367#define RCCK0_TXFILTER2 0xa24
1353#define RCCK0_DEBUGPORT 0xa28 1368#define RCCK0_DEBUGPORT 0xa28
1354#define RCCK0_FALSEALARMREPORT 0xa2c 1369#define RCCK0_FALSEALARMREPORT 0xa2c
1355#define RCCK0_TRSSIREPORT 0xa50 1370#define RCCK0_TRSSIREPORT 0xa50
1356#define RCCK0_RXREPORT 0xa54 1371#define RCCK0_RXREPORT 0xa54
1357#define RCCK0_FACOUNTERLOWER 0xa5c 1372#define RCCK0_FACOUNTERLOWER 0xa5c
1358#define RCCK0_FACOUNTERUPPER 0xa58 1373#define RCCK0_FACOUNTERUPPER 0xa58
1359#define RCCK0_CCA_CNT 0xa60 1374#define RCCK0_CCA_CNT 0xa60
1360
1361 1375
1362/* PageB(0xB00) */ 1376/* PageB(0xB00) */
1363#define RPDP_ANTA 0xb00 1377#define RPDP_ANTA 0xb00
1364#define RPDP_ANTA_4 0xb04 1378#define RPDP_ANTA_4 0xb04
1365#define RPDP_ANTA_8 0xb08 1379#define RPDP_ANTA_8 0xb08
1366#define RPDP_ANTA_C 0xb0c 1380#define RPDP_ANTA_C 0xb0c
1367#define RPDP_ANTA_10 0xb10 1381#define RPDP_ANTA_10 0xb10
1368#define RPDP_ANTA_14 0xb14 1382#define RPDP_ANTA_14 0xb14
1369#define RPDP_ANTA_18 0xb18 1383#define RPDP_ANTA_18 0xb18
1370#define RPDP_ANTA_1C 0xb1c 1384#define RPDP_ANTA_1C 0xb1c
1371#define RPDP_ANTA_20 0xb20 1385#define RPDP_ANTA_20 0xb20
1372#define RPDP_ANTA_24 0xb24 1386#define RPDP_ANTA_24 0xb24
1373 1387
1374#define RCONFIG_PMPD_ANTA 0xb28 1388#define RCONFIG_PMPD_ANTA 0xb28
1375#define RCONFIG_RAM64X16 0xb2c 1389#define RCONFIG_RAM64x16 0xb2c
1376 1390
1377#define RBNDA 0xb30 1391#define RBNDA 0xb30
1378#define RHSSIPAR 0xb34 1392#define RHSSIPAR 0xb34
1379 1393
1380#define RCONFIG_ANTA 0xb68 1394#define RCONFIG_ANTA 0xb68
1381#define RCONFIG_ANTB 0xb6c 1395#define RCONFIG_ANTB 0xb6c
1382 1396
1383#define RPDP_ANTB 0xb70 1397#define RPDP_ANTB 0xb70
1384#define RPDP_ANTB_4 0xb74 1398#define RPDP_ANTB_4 0xb74
1385#define RPDP_ANTB_8 0xb78 1399#define RPDP_ANTB_8 0xb78
1386#define RPDP_ANTB_C 0xb7c 1400#define RPDP_ANTB_C 0xb7c
1387#define RPDP_ANTB_10 0xb80 1401#define RPDP_ANTB_10 0xb80
1388#define RPDP_ANTB_14 0xb84 1402#define RPDP_ANTB_14 0xb84
1389#define RPDP_ANTB_18 0xb88 1403#define RPDP_ANTB_18 0xb88
1390#define RPDP_ANTB_1C 0xb8c 1404#define RPDP_ANTB_1C 0xb8c
1391#define RPDP_ANTB_20 0xb90 1405#define RPDP_ANTB_20 0xb90
1392#define RPDP_ANTB_24 0xb94 1406#define RPDP_ANTB_24 0xb94
1393 1407
1394#define RCONFIG_PMPD_ANTB 0xb98 1408#define RCONFIG_PMPD_ANTB 0xb98
1395 1409
1396#define RBNDB 0xba0 1410#define RBNDB 0xba0
1397 1411
1398#define RAPK 0xbd8 1412#define RAPK 0xbd8
1399#define rPm_Rx0_AntA 0xbdc 1413#define RPM_RX0_ANTA 0xbdc
1400#define rPm_Rx1_AntA 0xbe0 1414#define RPM_RX1_ANTA 0xbe0
1401#define rPm_Rx2_AntA 0xbe4 1415#define RPM_RX2_ANTA 0xbe4
1402#define rPm_Rx3_AntA 0xbe8 1416#define RPM_RX3_ANTA 0xbe8
1403#define rPm_Rx0_AntB 0xbec 1417#define RPM_RX0_ANTB 0xbec
1404#define rPm_Rx1_AntB 0xbf0 1418#define RPM_RX1_ANTB 0xbf0
1405#define rPm_Rx2_AntB 0xbf4 1419#define RPM_RX2_ANTB 0xbf4
1406#define rPm_Rx3_AntB 0xbf8 1420#define RPM_RX3_ANTB 0xbf8
1407 1421
1408/*Page C*/ 1422/*Page C*/
1409#define ROFDM0_LSTF 0xc00 1423#define ROFDM0_LSTF 0xc00
1410 1424
1411#define ROFDM0_TRXPATHENABLE 0xc04 1425#define ROFDM0_TRXPATHENABLE 0xc04
1412#define ROFDM0_TRMUXPAR 0xc08 1426#define ROFDM0_TRMUXPAR 0xc08
1413#define ROFDM0_TRSWISOLATION 0xc0c 1427#define ROFDM0_TRSWISOLATION 0xc0c
1414 1428
1415#define ROFDM0_XARXAFE 0xc10 1429#define ROFDM0_XARXAFE 0xc10
1416#define ROFDM0_XARXIQIMBAL 0xc14 1430#define ROFDM0_XARXIQIMBALANCE 0xc14
1417#define ROFDM0_XBRXAFE 0xc18 1431#define ROFDM0_XBRXAFE 0xc18
1418#define ROFDM0_XBRXIQIMBAL 0xc1c 1432#define ROFDM0_XBRXIQIMBALANCE 0xc1c
1419#define ROFDM0_XCRXAFE 0xc20 1433#define ROFDM0_XCRXAFE 0xc20
1420#define ROFDM0_XCRXIQIMBAL 0xc24 1434#define ROFDM0_XCRXIQIMBANLANCE 0xc24
1421#define ROFDM0_XDRXAFE 0xc28 1435#define ROFDM0_XDRXAFE 0xc28
1422#define ROFDM0_XDRXIQIMBAL 0xc2c 1436#define ROFDM0_XDRXIQIMBALANCE 0xc2c
1423 1437
1424#define ROFDM0_RXDETECTOR1 0xc30 1438#define ROFDM0_RXDETECTOR1 0xc30
1425#define ROFDM0_RXDETECTOR2 0xc34 1439#define ROFDM0_RXDETECTOR2 0xc34
@@ -1428,8 +1442,8 @@
1428 1442
1429#define ROFDM0_RXDSP 0xc40 1443#define ROFDM0_RXDSP 0xc40
1430#define ROFDM0_CFOANDDAGC 0xc44 1444#define ROFDM0_CFOANDDAGC 0xc44
1431#define ROFDM0_CCADROPTHRES 0xc48 1445#define ROFDM0_CCADROPTHRESHOLD 0xc48
1432#define ROFDM0_ECCATHRES 0xc4c 1446#define ROFDM0_ECCATHRESHOLD 0xc4c
1433 1447
1434#define ROFDM0_XAAGCCORE1 0xc50 1448#define ROFDM0_XAAGCCORE1 0xc50
1435#define ROFDM0_XAAGCCORE2 0xc54 1449#define ROFDM0_XAAGCCORE2 0xc54
@@ -1440,18 +1454,18 @@
1440#define ROFDM0_XDAGCCORE1 0xc68 1454#define ROFDM0_XDAGCCORE1 0xc68
1441#define ROFDM0_XDAGCCORE2 0xc6c 1455#define ROFDM0_XDAGCCORE2 0xc6c
1442 1456
1443#define ROFDM0_AGCPARAMETER1 0xc70 1457#define ROFDM0_AGCPARAMETER1 0xc70
1444#define ROFDM0_AGCPARAMETER2 0xc74 1458#define ROFDM0_AGCPARAMETER2 0xc74
1445#define ROFDM0_AGCRSSITABLE 0xc78 1459#define ROFDM0_AGCRSSITABLE 0xc78
1446#define ROFDM0_HTSTFAGC 0xc7c 1460#define ROFDM0_HTSTFAGC 0xc7c
1447 1461
1448#define ROFDM0_XATXIQIMBAL 0xc80 1462#define ROFDM0_XATXIQIMBALANCE 0xc80
1449#define ROFDM0_XATXAFE 0xc84 1463#define ROFDM0_XATXAFE 0xc84
1450#define ROFDM0_XBTXIQIMBAL 0xc88 1464#define ROFDM0_XBTXIQIMBALANCE 0xc88
1451#define ROFDM0_XBTXAFE 0xc8c 1465#define ROFDM0_XBTXAFE 0xc8c
1452#define ROFDM0_XCTXIQIMBAL 0xc90 1466#define ROFDM0_XCTXIQIMBALANCE 0xc90
1453#define ROFDM0_XCTXAFE 0xc94 1467#define ROFDM0_XCTXAFE 0xc94
1454#define ROFDM0_XDTXIQIMBAL 0xc98 1468#define ROFDM0_XDTXIQIMBALANCE 0xc98
1455#define ROFDM0_XDTXAFE 0xc9c 1469#define ROFDM0_XDTXAFE 0xc9c
1456 1470
1457#define ROFDM0_RXIQEXTANTA 0xca0 1471#define ROFDM0_RXIQEXTANTA 0xca0
@@ -1462,25 +1476,24 @@
1462#define ROFDM0_TXCOEFF5 0xcb4 1476#define ROFDM0_TXCOEFF5 0xcb4
1463#define ROFDM0_TXCOEFF6 0xcb8 1477#define ROFDM0_TXCOEFF6 0xcb8
1464 1478
1465#define ROFDM0_RXHPPARAMETER 0xce0 1479#define ROFDM0_RXHPPARAMETER 0xce0
1466#define ROFDM0_TXPSEUDONOISEWGT 0xce4 1480#define ROFDM0_TXPSEUDONOISEWGT 0xce4
1467#define ROFDM0_FRAMESYNC 0xcf0 1481#define ROFDM0_FRAMESYNC 0xcf0
1468#define ROFDM0_DFSREPORT 0xcf4 1482#define ROFDM0_DFSREPORT 0xcf4
1469 1483
1484#define ROFDM1_LSTF 0xd00
1485#define ROFDM1_TRXPATHENABLE 0xd04
1470 1486
1471#define ROFDM1_LSTF 0xd00 1487#define ROFDM1_CF0 0xd08
1472#define ROFDM1_TRXPATHENABLE 0xd04 1488#define ROFDM1_CSI1 0xd10
1473 1489#define ROFDM1_SBD 0xd14
1474#define ROFDM1_CF0 0xd08 1490#define ROFDM1_CSI2 0xd18
1475#define ROFDM1_CSI1 0xd10
1476#define ROFDM1_SBD 0xd14
1477#define ROFDM1_CSI2 0xd18
1478#define ROFDM1_CFOTRACKING 0xd2c 1491#define ROFDM1_CFOTRACKING 0xd2c
1479#define ROFDM1_TRXMESAURE1 0xd34 1492#define ROFDM1_TRXMESAURE1 0xd34
1480#define ROFDM1_INTFDET 0xd3c 1493#define ROFDM1_INTFDET 0xd3c
1481#define ROFDM1_PSEUDONOISESTATEAB 0xd50 1494#define ROFDM1_PSEUDONOISESTATEAB 0xd50
1482#define ROFDM1_PSEUDONOISESTATECD 0xd54 1495#define ROFDM1_PSEUDONOISESTATECD 0xd54
1483#define ROFDM1_RXPSEUDONOISEWGT 0xd58 1496#define ROFDM1_RXPSEUDONOISEWGT 0xd58
1484 1497
1485#define ROFDM_PHYCOUNTER1 0xda0 1498#define ROFDM_PHYCOUNTER1 0xda0
1486#define ROFDM_PHYCOUNTER2 0xda4 1499#define ROFDM_PHYCOUNTER2 0xda4
@@ -1492,84 +1505,84 @@
1492#define ROFDM_LONGCFOCD 0xdb8 1505#define ROFDM_LONGCFOCD 0xdb8
1493#define ROFDM_TAILCF0AB 0xdbc 1506#define ROFDM_TAILCF0AB 0xdbc
1494#define ROFDM_TAILCF0CD 0xdc0 1507#define ROFDM_TAILCF0CD 0xdc0
1495#define ROFDM_PWMEASURE1 0xdc4 1508#define ROFDM_PWMEASURE1 0xdc4
1496#define ROFDM_PWMEASURE2 0xdc8 1509#define ROFDM_PWMEASURE2 0xdc8
1497#define ROFDM_BWREPORT 0xdcc 1510#define ROFDM_BWREPORT 0xdcc
1498#define ROFDM_AGCREPORT 0xdd0 1511#define ROFDM_AGCREPORT 0xdd0
1499#define ROFDM_RXSNR 0xdd4 1512#define ROFDM_RXSNR 0xdd4
1500#define ROFDM_RXEVMCSI 0xdd8 1513#define ROFDM_RXEVMCSI 0xdd8
1501#define ROFDM_SIGREPORT 0xddc 1514#define ROFDM_SIGREPORT 0xddc
1502 1515
1503#define RTXAGC_A_RATE18_06 0xe00 1516#define RTXAGC_A_RATE18_06 0xe00
1504#define RTXAGC_A_RATE54_24 0xe04 1517#define RTXAGC_A_RATE54_24 0xe04
1505#define RTXAGC_A_CCK1_MCS32 0xe08 1518#define RTXAGC_A_CCK1_MCS32 0xe08
1506#define RTXAGC_A_MCS03_MCS00 0xe10 1519#define RTXAGC_A_MCS03_MCS00 0xe10
1507#define RTXAGC_A_MCS07_MCS04 0xe14 1520#define RTXAGC_A_MCS07_MCS04 0xe14
1508#define RTXAGC_A_MCS11_MCS08 0xe18 1521#define RTXAGC_A_MCS11_MCS08 0xe18
1509#define RTXAGC_A_MCS15_MCS12 0xe1c 1522#define RTXAGC_A_MCS15_MCS12 0xe1c
1510 1523
1511#define RTXAGC_B_RATE18_06 0x830 1524#define RTXAGC_B_RATE18_06 0x830
1512#define RTXAGC_B_RATE54_24 0x834 1525#define RTXAGC_B_RATE54_24 0x834
1513#define RTXAGC_B_CCK1_55_MCS32 0x838 1526#define RTXAGC_B_CCK1_55_MCS32 0x838
1514#define RTXAGC_B_MCS03_MCS00 0x83c 1527#define RTXAGC_B_MCS03_MCS00 0x83c
1515#define RTXAGC_B_MCS07_MCS04 0x848 1528#define RTXAGC_B_MCS07_MCS04 0x848
1516#define RTXAGC_B_MCS11_MCS08 0x84c 1529#define RTXAGC_B_MCS11_MCS08 0x84c
1517#define RTXAGC_B_MCS15_MCS12 0x868 1530#define RTXAGC_B_MCS15_MCS12 0x868
1518#define RTXAGC_B_CCK11_A_CCK2_11 0x86c 1531#define RTXAGC_B_CCK11_A_CCK2_11 0x86c
1519 1532
1520#define RFPGA0_IQK 0xe28 1533#define RFPGA0_IQK 0xe28
1521#define RTX_IQK_TONE_A 0xe30 1534#define RTX_IQK_TONE_A 0xe30
1522#define RRX_IQK_TONE_A 0xe34 1535#define RRX_IQK_TONE_A 0xe34
1523#define RTX_IQK_PI_A 0xe38 1536#define RTX_IQK_PI_A 0xe38
1524#define RRX_IQK_PI_A 0xe3c 1537#define RRX_IQK_PI_A 0xe3c
1525 1538
1526#define RTX_IQK 0xe40 1539#define RTX_IQK 0xe40
1527#define RRX_IQK 0xe44 1540#define RRX_IQK 0xe44
1528#define RIQK_AGC_PTS 0xe48 1541#define RIQK_AGC_PTS 0xe48
1529#define RIQK_AGC_RSP 0xe4c 1542#define RIQK_AGC_RSP 0xe4c
1530#define RTX_IQK_TONE_B 0xe50 1543#define RTX_IQK_TONE_B 0xe50
1531#define RRX_IQK_TONE_B 0xe54 1544#define RRX_IQK_TONE_B 0xe54
1532#define RTX_IQK_PI_B 0xe58 1545#define RTX_IQK_PI_B 0xe58
1533#define RRX_IQK_PI_B 0xe5c 1546#define RRX_IQK_PI_B 0xe5c
1534#define RIQK_AGC_CONT 0xe60 1547#define RIQK_AGC_CONT 0xe60
1535 1548
1536#define RBLUE_TOOTH 0xe6c 1549#define RBLUE_TOOTH 0xe6c
1537#define RRX_WAIT_CCA 0xe70 1550#define RRX_WAIT_CCA 0xe70
1538#define RTX_CCK_RFON 0xe74 1551#define RTX_CCK_RFON 0xe74
1539#define RTX_CCK_BBON 0xe78 1552#define RTX_CCK_BBON 0xe78
1540#define RTX_OFDM_RFON 0xe7c 1553#define RTX_OFDM_RFON 0xe7c
1541#define RTX_OFDM_BBON 0xe80 1554#define RTX_OFDM_BBON 0xe80
1542#define RTX_TO_RX 0xe84 1555#define RTX_TO_RX 0xe84
1543#define RTX_TO_TX 0xe88 1556#define RTX_TO_TX 0xe88
1544#define RRX_CCK 0xe8c 1557#define RRX_CCK 0xe8c
1545 1558
1546#define RTX_POWER_BEFORE_IQK_A 0xe94 1559#define RTX_POWER_BEFORE_IQK_A 0xe94
1547#define RTX_POWER_AFTER_IQK_A 0xe9c 1560#define RTX_POWER_AFTER_IQK_A 0xe9c
1548 1561
1549#define RRX_POWER_BEFORE_IQK_A 0xea0 1562#define RRX_POWER_BEFORE_IQK_A 0xea0
1550#define RRX_POWER_BEFORE_IQK_A_2 0xea4 1563#define RRX_POWER_BEFORE_IQK_A_2 0xea4
1551#define RRX_POWER_AFTER_IQK_A 0xea8 1564#define RRX_POWER_AFTER_IQK_A 0xea8
1552#define RRX_POWER_AFTER_IQK_A_2 0xeac 1565#define RRX_POWER_AFTER_IQK_A_2 0xeac
1553 1566
1554#define RTX_POWER_BEFORE_IQK_B 0xeb4 1567#define RTX_POWER_BEFORE_IQK_B 0xeb4
1555#define RTX_POWER_AFTER_IQK_B 0xebc 1568#define RTX_POWER_AFTER_IQK_B 0xebc
1556 1569
1557#define RRX_POWER_BEFORE_IQK_B 0xec0 1570#define RRX_POWER_BEFORE_IQK_B 0xec0
1558#define RRX_POWER_BEFORE_IQK_B_2 0xec4 1571#define RRX_POWER_BEFORE_IQK_B_2 0xec4
1559#define RRX_POWER_AFTER_IQK_B 0xec8 1572#define RRX_POWER_AFTER_IQK_B 0xec8
1560#define RRX_POWER_AFTER_IQK_B_2 0xecc 1573#define RRX_POWER_AFTER_IQK_B_2 0xecc
1561 1574
1562#define RRX_OFDM 0xed0 1575#define RRX_OFDM 0xed0
1563#define RRX_WAIT_RIFS 0xed4 1576#define RRX_WAIT_RIFS 0xed4
1564#define RRX_TO_RX 0xed8 1577#define RRX_TO_RX 0xed8
1565#define RSTANDBY 0xedc 1578#define RSTANDBY 0xedc
1566#define RSLEEP 0xee0 1579#define RSLEEP 0xee0
1567#define RPMPD_ANAEN 0xeec 1580#define RPMPD_ANAEN 0xeec
1568 1581
1569#define RZEBRA1_HSSIENABLE 0x0 1582#define RZEBRA1_HSSIENABLE 0x0
1570#define RZEBRA1_TRXENABLE1 0x1 1583#define RZEBRA1_TRXENABLE1 0x1
1571#define RZEBRA1_TRXENABLE2 0x2 1584#define RZEBRA1_TRXENABLE2 0x2
1572#define RZEBRA1_AGC 0x4 1585#define RZEBRA1_AGC 0x4
1573#define RZEBRA1_CHARGEPUMP 0x5 1586#define RZEBRA1_CHARGEPUMP 0x5
1574#define RZEBRA1_CHANNEL 0x7 1587#define RZEBRA1_CHANNEL 0x7
1575 1588
@@ -1578,666 +1591,681 @@
1578#define RZEBRA1_RXLPF 0xb 1591#define RZEBRA1_RXLPF 0xb
1579#define RZEBRA1_RXHPFCORNER 0xc 1592#define RZEBRA1_RXHPFCORNER 0xc
1580 1593
1581#define RGLOBALCTRL 0 1594#define RGLOBALCTRL 0
1582#define RRTL8256_TXLPF 19 1595#define RRTL8256_TXLPF 19
1583#define RRTL8256_RXLPF 11 1596#define RRTL8256_RXLPF 11
1584#define RRTL8258_TXLPF 0x11 1597#define RRTL8258_TXLPF 0x11
1585#define RRTL8258_RXLPF 0x13 1598#define RRTL8258_RXLPF 0x13
1586#define RRTL8258_RSSILPF 0xa 1599#define RRTL8258_RSSILPF 0xa
1587 1600
1588#define RF_AC 0x00 1601#define RF_AC 0x00
1589 1602
1590#define RF_IQADJ_G1 0x01 1603#define RF_IQADJ_G1 0x01
1591#define RF_IQADJ_G2 0x02 1604#define RF_IQADJ_G2 0x02
1592#define RF_POW_TRSW 0x05 1605#define RF_POW_TRSW 0x05
1593 1606
1594#define RF_GAIN_RX 0x06 1607#define RF_GAIN_RX 0x06
1595#define RF_GAIN_TX 0x07 1608#define RF_GAIN_TX 0x07
1596 1609
1597#define RF_TXM_IDAC 0x08 1610#define RF_TXM_IDAC 0x08
1598#define RF_BS_IQGEN 0x0F 1611#define RF_BS_IQGEN 0x0F
1599 1612
1600#define RF_MODE1 0x10 1613#define RF_MODE1 0x10
1601#define RF_MODE2 0x11 1614#define RF_MODE2 0x11
1602 1615
1603#define RF_RX_AGC_HP 0x12 1616#define RF_RX_AGC_HP 0x12
1604#define RF_TX_AGC 0x13 1617#define RF_TX_AGC 0x13
1605#define RF_BIAS 0x14 1618#define RF_BIAS 0x14
1606#define RF_IPA 0x15 1619#define RF_IPA 0x15
1607#define RF_POW_ABILITY 0x17 1620#define RF_POW_ABILITY 0x17
1608#define RF_MODE_AG 0x18 1621#define RF_MODE_AG 0x18
1609#define RRFCHANNEL 0x18 1622#define RRFCHANNEL 0x18
1610#define RF_CHNLBW 0x18 1623#define RF_CHNLBW 0x18
1611#define RF_TOP 0x19 1624#define RF_TOP 0x19
1612 1625
1613#define RF_RX_G1 0x1A 1626#define RF_RX_G1 0x1A
1614#define RF_RX_G2 0x1B 1627#define RF_RX_G2 0x1B
1615 1628
1616#define RF_RX_BB2 0x1C 1629#define RF_RX_BB2 0x1C
1617#define RF_RX_BB1 0x1D 1630#define RF_RX_BB1 0x1D
1618 1631
1619#define RF_RCK1 0x1E 1632#define RF_RCK1 0x1E
1620#define RF_RCK2 0x1F 1633#define RF_RCK2 0x1F
1621 1634
1622#define RF_TX_G1 0x20 1635#define RF_TX_G1 0x20
1623#define RF_TX_G2 0x21 1636#define RF_TX_G2 0x21
1624#define RF_TX_G3 0x22 1637#define RF_TX_G3 0x22
1625 1638
1626#define RF_TX_BB1 0x23 1639#define RF_TX_BB1 0x23
1627#define RF_T_METER 0x42 1640#define RF_T_METER 0x42
1628 1641
1629#define RF_SYN_G1 0x25 1642#define RF_SYN_G1 0x25
1630#define RF_SYN_G2 0x26 1643#define RF_SYN_G2 0x26
1631#define RF_SYN_G3 0x27 1644#define RF_SYN_G3 0x27
1632#define RF_SYN_G4 0x28 1645#define RF_SYN_G4 0x28
1633#define RF_SYN_G5 0x29 1646#define RF_SYN_G5 0x29
1634#define RF_SYN_G6 0x2A 1647#define RF_SYN_G6 0x2A
1635#define RF_SYN_G7 0x2B 1648#define RF_SYN_G7 0x2B
1636#define RF_SYN_G8 0x2C 1649#define RF_SYN_G8 0x2C
1637 1650
1638#define RF_RCK_OS 0x30 1651#define RF_RCK_OS 0x30
1639#define RF_TXPA_G1 0x31 1652#define RF_TXPA_G1 0x31
1640#define RF_TXPA_G2 0x32 1653#define RF_TXPA_G2 0x32
1641#define RF_TXPA_G3 0x33 1654#define RF_TXPA_G3 0x33
1642 1655
1643#define RF_TX_BIAS_A 0x35 1656#define RF_TX_BIAS_A 0x35
1644#define RF_TX_BIAS_D 0x36 1657#define RF_TX_BIAS_D 0x36
1645#define RF_LOBF_9 0x38 1658#define RF_LOBF_9 0x38
1646#define RF_RXRF_A3 0x3C 1659#define RF_RXRF_A3 0x3C
1647#define RF_TRSW 0x3F 1660#define RF_TRSW 0x3F
1648 1661
1649#define RF_TXRF_A2 0x41 1662#define RF_TXRF_A2 0x41
1650#define RF_TXPA_G4 0x46 1663#define RF_TXPA_G4 0x46
1651#define RF_TXPA_A4 0x4B 1664#define RF_TXPA_A4 0x4B
1652 1665
1653#define RF_WE_LUT 0xEF 1666#define RF_WE_LUT 0xEF
1654 1667
1655#define BBBRESETB 0x100 1668#define BBBRESETB 0x100
1656#define BGLOBALRESETB 0x200 1669#define BGLOBALRESETB 0x200
1657#define BOFDMTXSTART 0x4 1670#define BOFDMTXSTART 0x4
1658#define BCCKTXSTART 0x8 1671#define BCCKTXSTART 0x8
1659#define BCRC32DEBUG 0x100 1672#define BCRC32DEBUG 0x100
1660#define BPMACLOOPBACK 0x10 1673#define BPMACLOOPBACK 0x10
1661#define BTXLSIG 0xffffff 1674#define BTXLSIG 0xffffff
1662#define BOFDMTXRATE 0xf 1675#define BOFDMTXRATE 0xf
1663#define BOFDMTXRESERVED 0x10 1676#define BOFDMTXRESERVED 0x10
1664#define BOFDMTXLENGTH 0x1ffe0 1677#define BOFDMTXLENGTH 0x1ffe0
1665#define BOFDMTXPARITY 0x20000 1678#define BOFDMTXPARITY 0x20000
1666#define BTXHTSIG1 0xffffff 1679#define BTXHTSIG1 0xffffff
1667#define BTXHTMCSRATE 0x7f 1680#define BTXHTMCSRATE 0x7f
1668#define BTXHTBW 0x80 1681#define BTXHTBW 0x80
1669#define BTXHTLENGTH 0xffff00 1682#define BTXHTLENGTH 0xffff00
1670#define BTXHTSIG2 0xffffff 1683#define BTXHTSIG2 0xffffff
1671#define BTXHTSMOOTHING 0x1 1684#define BTXHTSMOOTHING 0x1
1672#define BTXHTSOUNDING 0x2 1685#define BTXHTSOUNDING 0x2
1673#define BTXHTRESERVED 0x4 1686#define BTXHTRESERVED 0x4
1674#define BTXHTAGGREATION 0x8 1687#define BTXHTAGGREATION 0x8
1675#define BTXHTSTBC 0x30 1688#define BTXHTSTBC 0x30
1676#define BTXHTADVANCECODING 0x40 1689#define BTXHTADVANCECODING 0x40
1677#define BTXHTSHORTGI 0x80 1690#define BTXHTSHORTGI 0x80
1678#define BTXHTNUMBERHT_LTF 0x300 1691#define BTXHTNUMBERHT_LTF 0x300
1679#define BTXHTCRC8 0x3fc00 1692#define BTXHTCRC8 0x3fc00
1680#define BCOUNTERRESET 0x10000 1693#define BCOUNTERRESET 0x10000
1681#define BNUMOFOFDMTX 0xffff 1694#define BNUMOFOFDMTX 0xffff
1682#define BNUMOFCCKTX 0xffff0000 1695#define BNUMOFCCKTX 0xffff0000
1683#define BTXIDLEINTERVAL 0xffff 1696#define BTXIDLEINTERVAL 0xffff
1684#define BOFDMSERVICE 0xffff0000 1697#define BOFDMSERVICE 0xffff0000
1685#define BTXMACHEADER 0xffffffff 1698#define BTXMACHEADER 0xffffffff
1686#define BTXDATAINIT 0xff 1699#define BTXDATAINIT 0xff
1687#define BTXHTMODE 0x100 1700#define BTXHTMODE 0x100
1688#define BTXDATATYPE 0x30000 1701#define BTXDATATYPE 0x30000
1689#define BTXRANDOMSEED 0xffffffff 1702#define BTXRANDOMSEED 0xffffffff
1690#define BCCKTXPREAMBLE 0x1 1703#define BCCKTXPREAMBLE 0x1
1691#define BCCKTXSFD 0xffff0000 1704#define BCCKTXSFD 0xffff0000
1692#define BCCKTXSIG 0xff 1705#define BCCKTXSIG 0xff
1693#define BCCKTXSERVICE 0xff00 1706#define BCCKTXSERVICE 0xff00
1694#define BCCKLENGTHEXT 0x8000 1707#define BCCKLENGTHEXT 0x8000
1695#define BCCKTXLENGHT 0xffff0000 1708#define BCCKTXLENGHT 0xffff0000
1696#define BCCKTXCRC16 0xffff 1709#define BCCKTXCRC16 0xffff
1697#define BCCKTXSTATUS 0x1 1710#define BCCKTXSTATUS 0x1
1698#define BOFDMTXSTATUS 0x2 1711#define BOFDMTXSTATUS 0x2
1699#define IS_BB_REG_OFFSET_92S(_offset) \ 1712#define IS_BB_REG_OFFSET_92S(_offset) \
1700 ((_offset >= 0x800) && (_offset <= 0xfff)) 1713 ((_offset >= 0x800) && (_offset <= 0xfff))
1701 1714
1702#define BRFMOD 0x1 1715#define BRFMOD 0x1
1703#define BJAPANMODE 0x2 1716#define BJAPANMODE 0x2
1704#define BCCKTXSC 0x30 1717#define BCCKTXSC 0x30
1705#define BCCKEN 0x1000000 1718#define BCCKEN 0x1000000
1706#define BOFDMEN 0x2000000 1719#define BOFDMEN 0x2000000
1707 1720
1708#define BOFDMRXADCPHASE 0x10000 1721#define BOFDMRXADCPHASE 0x10000
1709#define BOFDMTXDACPHASE 0x40000 1722#define BOFDMTXDACPHASE 0x40000
1710#define BXATXAGC 0x3f 1723#define BXATXAGC 0x3f
1711 1724
1712#define BXBTXAGC 0xf00 1725#define BXBTXAGC 0xf00
1713#define BXCTXAGC 0xf000 1726#define BXCTXAGC 0xf000
1714#define BXDTXAGC 0xf0000 1727#define BXDTXAGC 0xf0000
1715 1728
1716#define BPASTART 0xf0000000 1729#define BPASTART 0xf0000000
1717#define BTRSTART 0x00f00000 1730#define BTRSTART 0x00f00000
1718#define BRFSTART 0x0000f000 1731#define BRFSTART 0x0000f000
1719#define BBBSTART 0x000000f0 1732#define BBBSTART 0x000000f0
1720#define BBBCCKSTART 0x0000000f 1733#define BBBCCKSTART 0x0000000f
1721#define BPAEND 0xf 1734#define BPAEND 0xf
1722#define BTREND 0x0f000000 1735#define BTREND 0x0f000000
1723#define BRFEND 0x000f0000 1736#define BRFEND 0x000f0000
1724#define BCCAMASK 0x000000f0 1737#define BCCAMASK 0x000000f0
1725#define BR2RCCAMASK 0x00000f00 1738#define BR2RCCAMASK 0x00000f00
1726#define BHSSI_R2TDELAY 0xf8000000 1739#define BHSSI_R2TDELAY 0xf8000000
1727#define BHSSI_T2RDELAY 0xf80000 1740#define BHSSI_T2RDELAY 0xf80000
1728#define BCONTXHSSI 0x400 1741#define BCONTXHSSI 0x400
1729#define BIGFROMCCK 0x200 1742#define BIGFROMCCK 0x200
1730#define BAGCADDRESS 0x3f 1743#define BAGCADDRESS 0x3f
1731#define BRXHPTX 0x7000 1744#define BRXHPTX 0x7000
1732#define BRXHP2RX 0x38000 1745#define BRXHP2RX 0x38000
1733#define BRXHPCCKINI 0xc0000 1746#define BRXHPCCKINI 0xc0000
1734#define BAGCTXCODE 0xc00000 1747#define BAGCTXCODE 0xc00000
1735#define BAGCRXCODE 0x300000 1748#define BAGCRXCODE 0x300000
1736 1749
1737#define B3WIREDATALENGTH 0x800 1750#define B3WIREDATALENGTH 0x800
1738#define B3WIREADDREAALENGTH 0x400 1751#define B3WIREADDREAALENGTH 0x400
1739 1752
1740#define B3WIRERFPOWERDOWN 0x1 1753#define B3WIRERFPOWERDOWN 0x1
1741#define B5GPAPEPOLARITY 0x40000000 1754#define B5GPAPEPOLARITY 0x40000000
1742#define B2GPAPEPOLARITY 0x80000000 1755#define B2GPAPEPOLARITY 0x80000000
1743#define BRFSW_TXDEFAULTANT 0x3 1756#define BRFSW_TXDEFAULTANT 0x3
1744#define BRFSW_TXOPTIONANT 0x30 1757#define BRFSW_TXOPTIONANT 0x30
1745#define BRFSW_RXDEFAULTANT 0x300 1758#define BRFSW_RXDEFAULTANT 0x300
1746#define BRFSW_RXOPTIONANT 0x3000 1759#define BRFSW_RXOPTIONANT 0x3000
1747#define BRFSI_3WIREDATA 0x1 1760#define BRFSI_3WIREDATA 0x1
1748#define BRFSI_3WIRECLOCK 0x2 1761#define BRFSI_3WIRECLOCK 0x2
1749#define BRFSI_3WIRELOAD 0x4 1762#define BRFSI_3WIRELOAD 0x4
1750#define BRFSI_3WIRERW 0x8 1763#define BRFSI_3WIRERW 0x8
1751#define BRFSI_3WIRE 0xf 1764#define BRFSI_3WIRE 0xf
1752 1765
1753#define BRFSI_RFENV 0x10 1766#define BRFSI_RFENV 0x10
1754 1767
1755#define BRFSI_TRSW 0x20 1768#define BRFSI_TRSW 0x20
1756#define BRFSI_TRSWB 0x40 1769#define BRFSI_TRSWB 0x40
1757#define BRFSI_ANTSW 0x100 1770#define BRFSI_ANTSW 0x100
1758#define BRFSI_ANTSWB 0x200 1771#define BRFSI_ANTSWB 0x200
1759#define BRFSI_PAPE 0x400 1772#define BRFSI_PAPE 0x400
1760#define BRFSI_PAPE5G 0x800 1773#define BRFSI_PAPE5G 0x800
1761#define BBANDSELECT 0x1 1774#define BBANDSELECT 0x1
1762#define BHTSIG2_GI 0x80 1775#define BHTSIG2_GI 0x80
1763#define BHTSIG2_SMOOTHING 0x01 1776#define BHTSIG2_SMOOTHING 0x01
1764#define BHTSIG2_SOUNDING 0x02 1777#define BHTSIG2_SOUNDING 0x02
1765#define BHTSIG2_AGGREATON 0x08 1778#define BHTSIG2_AGGREATON 0x08
1766#define BHTSIG2_STBC 0x30 1779#define BHTSIG2_STBC 0x30
1767#define BHTSIG2_ADVCODING 0x40 1780#define BHTSIG2_ADVCODING 0x40
1768#define BHTSIG2_NUMOFHTLTF 0x300 1781#define BHTSIG2_NUMOFHTLTF 0x300
1769#define BHTSIG2_CRC8 0x3fc 1782#define BHTSIG2_CRC8 0x3fc
1770#define BHTSIG1_MCS 0x7f 1783#define BHTSIG1_MCS 0x7f
1771#define BHTSIG1_BANDWIDTH 0x80 1784#define BHTSIG1_BANDWIDTH 0x80
1772#define BHTSIG1_HTLENGTH 0xffff 1785#define BHTSIG1_HTLENGTH 0xffff
1773#define BLSIG_RATE 0xf 1786#define BLSIG_RATE 0xf
1774#define BLSIG_RESERVED 0x10 1787#define BLSIG_RESERVED 0x10
1775#define BLSIG_LENGTH 0x1fffe 1788#define BLSIG_LENGTH 0x1fffe
1776#define BLSIG_PARITY 0x20 1789#define BLSIG_PARITY 0x20
1777#define BCCKRXPHASE 0x4 1790#define BCCKRXPHASE 0x4
1778 1791
1779#define BLSSIREADADDRESS 0x7f800000 1792#define BLSSIREADADDRESS 0x7f800000
1780#define BLSSIREADEDGE 0x80000000 1793#define BLSSIREADEDGE 0x80000000
1781 1794
1782#define BLSSIREADBACKDATA 0xfffff 1795#define BLSSIREADBACKDATA 0xfffff
1783 1796
1784#define BLSSIREADOKFLAG 0x1000 1797#define BLSSIREADOKFLAG 0x1000
1785#define BCCKSAMPLERATE 0x8 1798#define BCCKSAMPLERATE 0x8
1786#define BREGULATOR0STANDBY 0x1 1799#define BREGULATOR0STANDBY 0x1
1787#define BREGULATORPLLSTANDBY 0x2 1800#define BREGULATORPLLSTANDBY 0x2
1788#define BREGULATOR1STANDBY 0x4 1801#define BREGULATOR1STANDBY 0x4
1789#define BPLLPOWERUP 0x8 1802#define BPLLPOWERUP 0x8
1790#define BDPLLPOWERUP 0x10 1803#define BDPLLPOWERUP 0x10
1791#define BDA10POWERUP 0x20 1804#define BDA10POWERUP 0x20
1792#define BAD7POWERUP 0x200 1805#define BAD7POWERUP 0x200
1793#define BDA6POWERUP 0x2000 1806#define BDA6POWERUP 0x2000
1794#define BXTALPOWERUP 0x4000 1807#define BXTALPOWERUP 0x4000
1795#define B40MDCLKPOWERUP 0x8000 1808#define B40MDCLKPOWERUP 0x8000
1796#define BDA6DEBUGMODE 0x20000 1809#define BDA6DEBUGMODE 0x20000
1797#define BDA6SWING 0x380000 1810#define BDA6SWING 0x380000
1798 1811
1799#define BADCLKPHASE 0x4000000 1812#define BADCLKPHASE 0x4000000
1800#define B80MCLKDELAY 0x18000000 1813#define B80MCLKDELAY 0x18000000
1801#define BAFEWATCHDOGENABLE 0x20000000 1814#define BAFEWATCHDOGENABLE 0x20000000
1802 1815
1803#define BXTALCAP01 0xc0000000 1816#define BXTALCAP01 0xc0000000
1804#define BXTALCAP23 0x3 1817#define BXTALCAP23 0x3
1805#define BXTALCAP92X 0x0f000000 1818#define BXTALCAP92X 0x0f000000
1806#define BXTALCAP 0x0f000000 1819#define BXTALCAP 0x0f000000
1807 1820
1808#define BINTDIFCLKENABLE 0x400 1821#define BINTDIFCLKENABLE 0x400
1809#define BEXTSIGCLKENABLE 0x800 1822#define BEXTSIGCLKENABLE 0x800
1810#define BBANDGAP_MBIAS_POWERUP 0x10000 1823#define BBANDGAP_MBIAS_POWERUP 0x10000
1811#define BAD11SH_GAIN 0xc0000 1824#define BAD11SH_GAIN 0xc0000
1812#define BAD11NPUT_RANGE 0x700000 1825#define BAD11NPUT_RANGE 0x700000
1813#define BAD110P_CURRENT 0x3800000 1826#define BAD110P_CURRENT 0x3800000
1814#define BLPATH_LOOPBACK 0x4000000 1827#define BLPATH_LOOPBACK 0x4000000
1815#define BQPATH_LOOPBACK 0x8000000 1828#define BQPATH_LOOPBACK 0x8000000
1816#define BAFE_LOOPBACK 0x10000000 1829#define BAFE_LOOPBACK 0x10000000
1817#define BDA10_SWING 0x7e0 1830#define BDA10_SWING 0x7e0
1818#define BDA10_REVERSE 0x800 1831#define BDA10_REVERSE 0x800
1819#define BDA_CLK_SOURCE 0x1000 1832#define BDA_CLK_SOURCE 0x1000
1820#define BDA7INPUT_RANGE 0x6000 1833#define BDA7INPUT_RANGE 0x6000
1821#define BDA7_GAIN 0x38000 1834#define BDA7_GAIN 0x38000
1822#define BDA7OUTPUT_CM_MODE 0x40000 1835#define BDA7OUTPUT_CM_MODE 0x40000
1823#define BDA7INPUT_CM_MODE 0x380000 1836#define BDA7INPUT_CM_MODE 0x380000
1824#define BDA7CURRENT 0xc00000 1837#define BDA7CURRENT 0xc00000
1825#define BREGULATOR_ADJUST 0x7000000 1838#define BREGULATOR_ADJUST 0x7000000
1826#define BAD11POWERUP_ATTX 0x1 1839#define BAD11POWERUP_ATTX 0x1
1827#define BDA10PS_ATTX 0x10 1840#define BDA10PS_ATTX 0x10
1828#define BAD11POWERUP_ATRX 0x100 1841#define BAD11POWERUP_ATRX 0x100
1829#define BDA10PS_ATRX 0x1000 1842#define BDA10PS_ATRX 0x1000
1830#define BCCKRX_AGC_FORMAT 0x200 1843#define BCCKRX_AGC_FORMAT 0x200
1831#define BPSDFFT_SAMPLE_POINT 0xc000 1844#define BPSDFFT_SAMPLE_POINT 0xc000
1832#define BPSD_AVERAGE_NUM 0x3000 1845#define BPSD_AVERAGE_NUM 0x3000
1833#define BIQPATH_CONTROL 0xc00 1846#define BIQPATH_CONTROL 0xc00
1834#define BPSD_FREQ 0x3ff 1847#define BPSD_FREQ 0x3ff
1835#define BPSD_ANTENNA_PATH 0x30 1848#define BPSD_ANTENNA_PATH 0x30
1836#define BPSD_IQ_SWITCH 0x40 1849#define BPSD_IQ_SWITCH 0x40
1837#define BPSD_RX_TRIGGER 0x400000 1850#define BPSD_RX_TRIGGER 0x400000
1838#define BPSD_TX_TRIGGERCW 0x80000000 1851#define BPSD_TX_TRIGGER 0x80000000
1839#define BPSD_SINE_TONE_SCALE 0x7f000000 1852#define BPSD_SINE_TONE_SCALE 0x7f000000
1840#define BPSD_REPORT 0xffff 1853#define BPSD_REPORT 0xffff
1841 1854
1842#define BOFDM_TXSC 0x30000000 1855#define BOFDM_TXSC 0x30000000
1843#define BCCK_TXON 0x1 1856#define BCCK_TXON 0x1
1844#define BOFDM_TXON 0x2 1857#define BOFDM_TXON 0x2
1845#define BDEBUG_PAGE 0xfff 1858#define BDEBUG_PAGE 0xfff
1846#define BDEBUG_ITEM 0xff 1859#define BDEBUG_ITEM 0xff
1847#define BANTL 0x10 1860#define BANTL 0x10
1848#define BANT_NONHT 0x100 1861#define BANT_NONHT 0x100
1849#define BANT_HT1 0x1000 1862#define BANT_HT1 0x1000
1850#define BANT_HT2 0x10000 1863#define BANT_HT2 0x10000
1851#define BANT_HT1S1 0x100000 1864#define BANT_HT1S1 0x100000
1852#define BANT_NONHTS1 0x1000000 1865#define BANT_NONHTS1 0x1000000
1853 1866
1854#define BCCK_BBMODE 0x3 1867#define BCCK_BBMODE 0x3
1855#define BCCK_TXPOWERSAVING 0x80 1868#define BCCK_TXPOWERSAVING 0x80
1856#define BCCK_RXPOWERSAVING 0x40 1869#define BCCK_RXPOWERSAVING 0x40
1857 1870
1858#define BCCK_SIDEBAND 0x10 1871#define BCCK_SIDEBAND 0x10
1859 1872
1860#define BCCK_SCRAMBLE 0x8 1873#define BCCK_SCRAMBLE 0x8
1861#define BCCK_ANTDIVERSITY 0x8000 1874#define BCCK_ANTDIVERSITY 0x8000
1862#define BCCK_CARRIER_RECOVERY 0x4000 1875#define BCCK_CARRIER_RECOVERY 0x4000
1863#define BCCK_TXRATE 0x3000 1876#define BCCK_TXRATE 0x3000
1864#define BCCK_DCCANCEL 0x0800 1877#define BCCK_DCCANCEL 0x0800
1865#define BCCK_ISICANCEL 0x0400 1878#define BCCK_ISICANCEL 0x0400
1866#define BCCK_MATCH_FILTER 0x0200 1879#define BCCK_MATCH_FILTER 0x0200
1867#define BCCK_EQUALIZER 0x0100 1880#define BCCK_EQUALIZER 0x0100
1868#define BCCK_PREAMBLE_DETECT 0x800000 1881#define BCCK_PREAMBLE_DETECT 0x800000
1869#define BCCK_FAST_FALSECCA 0x400000 1882#define BCCK_FAST_FALSECCA 0x400000
1870#define BCCK_CH_ESTSTART 0x300000 1883#define BCCK_CH_ESTSTART 0x300000
1871#define BCCK_CCA_COUNT 0x080000 1884#define BCCK_CCA_COUNT 0x080000
1872#define BCCK_CS_LIM 0x070000 1885#define BCCK_CS_LIM 0x070000
1873#define BCCK_BIST_MODE 0x80000000 1886#define BCCK_BIST_MODE 0x80000000
1874#define BCCK_CCAMASK 0x40000000 1887#define BCCK_CCAMASK 0x40000000
1875#define BCCK_TX_DAC_PHASE 0x4 1888#define BCCK_TX_DAC_PHASE 0x4
1876#define BCCK_RX_ADC_PHASE 0x20000000 1889#define BCCK_RX_ADC_PHASE 0x20000000
1877#define BCCKR_CP_MODE 0x0100 1890#define BCCKR_CP_MODE 0x0100
1878#define BCCK_TXDC_OFFSET 0xf0 1891#define BCCK_TXDC_OFFSET 0xf0
1879#define BCCK_RXDC_OFFSET 0xf 1892#define BCCK_RXDC_OFFSET 0xf
1880#define BCCK_CCA_MODE 0xc000 1893#define BCCK_CCA_MODE 0xc000
1881#define BCCK_FALSECS_LIM 0x3f00 1894#define BCCK_FALSECS_LIM 0x3f00
1882#define BCCK_CS_RATIO 0xc00000 1895#define BCCK_CS_RATIO 0xc00000
1883#define BCCK_CORGBIT_SEL 0x300000 1896#define BCCK_CORGBIT_SEL 0x300000
1884#define BCCK_PD_LIM 0x0f0000 1897#define BCCK_PD_LIM 0x0f0000
1885#define BCCK_NEWCCA 0x80000000 1898#define BCCK_NEWCCA 0x80000000
1886#define BCCK_RXHP_OF_IG 0x8000 1899#define BCCK_RXHP_OF_IG 0x8000
1887#define BCCK_RXIG 0x7f00 1900#define BCCK_RXIG 0x7f00
1888#define BCCK_LNA_POLARITY 0x800000 1901#define BCCK_LNA_POLARITY 0x800000
1889#define BCCK_RX1ST_BAIN 0x7f0000 1902#define BCCK_RX1ST_BAIN 0x7f0000
1890#define BCCK_RF_EXTEND 0x20000000 1903#define BCCK_RF_EXTEND 0x20000000
1891#define BCCK_RXAGC_SATLEVEL 0x1f000000 1904#define BCCK_RXAGC_SATLEVEL 0x1f000000
1892#define BCCK_RXAGC_SATCOUNT 0xe0 1905#define BCCK_RXAGC_SATCOUNT 0xe0
1893#define BCCKRXRFSETTLE 0x1f 1906#define BCCKRXRFSETTLE 0x1f
1894#define BCCK_FIXED_RXAGC 0x8000 1907#define BCCK_FIXED_RXAGC 0x8000
1895#define BCCK_ANTENNA_POLARITY 0x2000 1908#define BCCK_ANTENNA_POLARITY 0x2000
1896#define BCCK_TXFILTER_TYPE 0x0c00 1909#define BCCK_TXFILTER_TYPE 0x0c00
1897#define BCCK_RXAGC_REPORTTYPE 0x0300 1910#define BCCK_RXAGC_REPORTTYPE 0x0300
1898#define BCCK_RXDAGC_EN 0x80000000 1911#define BCCK_RXDAGC_EN 0x80000000
1899#define BCCK_RXDAGC_PERIOD 0x20000000 1912#define BCCK_RXDAGC_PERIOD 0x20000000
1900#define BCCK_RXDAGC_SATLEVEL 0x1f000000 1913#define BCCK_RXDAGC_SATLEVEL 0x1f000000
1901#define BCCK_TIMING_RECOVERY 0x800000 1914#define BCCK_TIMING_RECOVERY 0x800000
1902#define BCCK_TXC0 0x3f0000 1915#define BCCK_TXC0 0x3f0000
1903#define BCCK_TXC1 0x3f000000 1916#define BCCK_TXC1 0x3f000000
1904#define BCCK_TXC2 0x3f 1917#define BCCK_TXC2 0x3f
1905#define BCCK_TXC3 0x3f00 1918#define BCCK_TXC3 0x3f00
1906#define BCCK_TXC4 0x3f0000 1919#define BCCK_TXC4 0x3f0000
1907#define BCCK_TXC5 0x3f000000 1920#define BCCK_TXC5 0x3f000000
1908#define BCCK_TXC6 0x3f 1921#define BCCK_TXC6 0x3f
1909#define BCCK_TXC7 0x3f00 1922#define BCCK_TXC7 0x3f00
1910#define BCCK_DEBUGPORT 0xff0000 1923#define BCCK_DEBUGPORT 0xff0000
1911#define BCCK_DAC_DEBUG 0x0f000000 1924#define BCCK_DAC_DEBUG 0x0f000000
1912#define BCCK_FALSEALARM_ENABLE 0x8000 1925#define BCCK_FALSEALARM_ENABLE 0x8000
1913#define BCCK_FALSEALARM_READ 0x4000 1926#define BCCK_FALSEALARM_READ 0x4000
1914#define BCCK_TRSSI 0x7f 1927#define BCCK_TRSSI 0x7f
1915#define BCCK_RXAGC_REPORT 0xfe 1928#define BCCK_RXAGC_REPORT 0xfe
1916#define BCCK_RXREPORT_ANTSEL 0x80000000 1929#define BCCK_RXREPORT_ANTSEL 0x80000000
1917#define BCCK_RXREPORT_MFOFF 0x40000000 1930#define BCCK_RXREPORT_MFOFF 0x40000000
1918#define BCCK_RXREPORT_SQLOSS 0x20000000 1931#define BCCK_RXREPORT_SQLOSS 0x20000000
1919#define BCCK_RXREPORT_PKTLOSS 0x10000000 1932#define BCCK_RXREPORT_PKTLOSS 0x10000000
1920#define BCCK_RXREPORT_LOCKEDBIT 0x08000000 1933#define BCCK_RXREPORT_LOCKEDBIT 0x08000000
1921#define BCCK_RXREPORT_RATEERROR 0x04000000 1934#define BCCK_RXREPORT_RATEERROR 0x04000000
1922#define BCCK_RXREPORT_RXRATE 0x03000000 1935#define BCCK_RXREPORT_RXRATE 0x03000000
1923#define BCCK_RXFA_COUNTER_LOWER 0xff 1936#define BCCK_RXFA_COUNTER_LOWER 0xff
1924#define BCCK_RXFA_COUNTER_UPPER 0xff000000 1937#define BCCK_RXFA_COUNTER_UPPER 0xff000000
1925#define BCCK_RXHPAGC_START 0xe000 1938#define BCCK_RXHPAGC_START 0xe000
1926#define BCCK_RXHPAGC_FINAL 0x1c00 1939#define BCCK_RXHPAGC_FINAL 0x1c00
1927#define BCCK_RXFALSEALARM_ENABLE 0x8000 1940#define BCCK_RXFALSEALARM_ENABLE 0x8000
1928#define BCCK_FACOUNTER_FREEZE 0x4000 1941#define BCCK_FACOUNTER_FREEZE 0x4000
1929#define BCCK_TXPATH_SEL 0x10000000 1942#define BCCK_TXPATH_SEL 0x10000000
1930#define BCCK_DEFAULT_RXPATH 0xc000000 1943#define BCCK_DEFAULT_RXPATH 0xc000000
1931#define BCCK_OPTION_RXPATH 0x3000000 1944#define BCCK_OPTION_RXPATH 0x3000000
1932 1945
1933#define BNUM_OFSTF 0x3 1946#define BNUM_OFSTF 0x3
1934#define BSHIFT_L 0xc0 1947#define BSHIFT_L 0xc0
1935#define BGI_TH 0xc 1948#define BGI_TH 0xc
1936#define BRXPATH_A 0x1 1949#define BRXPATH_A 0x1
1937#define BRXPATH_B 0x2 1950#define BRXPATH_B 0x2
1938#define BRXPATH_C 0x4 1951#define BRXPATH_C 0x4
1939#define BRXPATH_D 0x8 1952#define BRXPATH_D 0x8
1940#define BTXPATH_A 0x1 1953#define BTXPATH_A 0x1
1941#define BTXPATH_B 0x2 1954#define BTXPATH_B 0x2
1942#define BTXPATH_C 0x4 1955#define BTXPATH_C 0x4
1943#define BTXPATH_D 0x8 1956#define BTXPATH_D 0x8
1944#define BTRSSI_FREQ 0x200 1957#define BTRSSI_FREQ 0x200
1945#define BADC_BACKOFF 0x3000 1958#define BADC_BACKOFF 0x3000
1946#define BDFIR_BACKOFF 0xc000 1959#define BDFIR_BACKOFF 0xc000
1947#define BTRSSI_LATCH_PHASE 0x10000 1960#define BTRSSI_LATCH_PHASE 0x10000
1948#define BRX_LDC_OFFSET 0xff 1961#define BRX_LDC_OFFSET 0xff
1949#define BRX_QDC_OFFSET 0xff00 1962#define BRX_QDC_OFFSET 0xff00
1950#define BRX_DFIR_MODE 0x1800000 1963#define BRX_DFIR_MODE 0x1800000
1951#define BRX_DCNF_TYPE 0xe000000 1964#define BRX_DCNF_TYPE 0xe000000
1952#define BRXIQIMB_A 0x3ff 1965#define BRXIQIMB_A 0x3ff
1953#define BRXIQIMB_B 0xfc00 1966#define BRXIQIMB_B 0xfc00
1954#define BRXIQIMB_C 0x3f0000 1967#define BRXIQIMB_C 0x3f0000
1955#define BRXIQIMB_D 0xffc00000 1968#define BRXIQIMB_D 0xffc00000
1956#define BDC_DC_NOTCH 0x60000 1969#define BDC_DC_NOTCH 0x60000
1957#define BRXNB_NOTCH 0x1f000000 1970#define BRXNB_NOTCH 0x1f000000
1958#define BPD_TH 0xf 1971#define BPD_TH 0xf
1959#define BPD_TH_OPT2 0xc000 1972#define BPD_TH_OPT2 0xc000
1960#define BPWED_TH 0x700 1973#define BPWED_TH 0x700
1961#define BIFMF_WIN_L 0x800 1974#define BIFMF_WIN_L 0x800
1962#define BPD_OPTION 0x1000 1975#define BPD_OPTION 0x1000
1963#define BMF_WIN_L 0xe000 1976#define BMF_WIN_L 0xe000
1964#define BBW_SEARCH_L 0x30000 1977#define BBW_SEARCH_L 0x30000
1965#define BWIN_ENH_L 0xc0000 1978#define BWIN_ENH_L 0xc0000
1966#define BBW_TH 0x700000 1979#define BBW_TH 0x700000
1967#define BED_TH2 0x3800000 1980#define BED_TH2 0x3800000
1968#define BBW_OPTION 0x4000000 1981#define BBW_OPTION 0x4000000
1969#define BRADIO_TH 0x18000000 1982#define BRADIO_TH 0x18000000
1970#define BWINDOW_L 0xe0000000 1983#define BWINDOW_L 0xe0000000
1971#define BSBD_OPTION 0x1 1984#define BSBD_OPTION 0x1
1972#define BFRAME_TH 0x1c 1985#define BFRAME_TH 0x1c
1973#define BFS_OPTION 0x60 1986#define BFS_OPTION 0x60
1974#define BDC_SLOPE_CHECK 0x80 1987#define BDC_SLOPE_CHECK 0x80
1975#define BFGUARD_COUNTER_DC_L 0xe00 1988#define BFGUARD_COUNTER_DC_L 0xe00
1976#define BFRAME_WEIGHT_SHORT 0x7000 1989#define BFRAME_WEIGHT_SHORT 0x7000
1977#define BSUB_TUNE 0xe00000 1990#define BSUB_TUNE 0xe00000
1978#define BFRAME_DC_LENGTH 0xe000000 1991#define BFRAME_DC_LENGTH 0xe000000
1979#define BSBD_START_OFFSET 0x30000000 1992#define BSBD_START_OFFSET 0x30000000
1980#define BFRAME_TH_2 0x7 1993#define BFRAME_TH_2 0x7
1981#define BFRAME_GI2_TH 0x38 1994#define BFRAME_GI2_TH 0x38
1982#define BGI2_SYNC_EN 0x40 1995#define BGI2_SYNC_EN 0x40
1983#define BSARCH_SHORT_EARLY 0x300 1996#define BSARCH_SHORT_EARLY 0x300
1984#define BSARCH_SHORT_LATE 0xc00 1997#define BSARCH_SHORT_LATE 0xc00
1985#define BSARCH_GI2_LATE 0x70000 1998#define BSARCH_GI2_LATE 0x70000
1986#define BCFOANTSUM 0x1 1999#define BCFOANTSUM 0x1
1987#define BCFOACC 0x2 2000#define BCFOACC 0x2
1988#define BCFOSTARTOFFSET 0xc 2001#define BCFOSTARTOFFSET 0xc
1989#define BCFOLOOPBACK 0x70 2002#define BCFOLOOPBACK 0x70
1990#define BCFOSUMWEIGHT 0x80 2003#define BCFOSUMWEIGHT 0x80
1991#define BDAGCENABLE 0x10000 2004#define BDAGCENABLE 0x10000
1992#define BTXIQIMB_A 0x3ff 2005#define BTXIQIMB_A 0x3ff
1993#define BTXIQIMB_B 0xfc00 2006#define BTXIQIMB_b 0xfc00
1994#define BTXIQIMB_C 0x3f0000 2007#define BTXIQIMB_C 0x3f0000
1995#define BTXIQIMB_D 0xffc00000 2008#define BTXIQIMB_D 0xffc00000
1996#define BTXIDCOFFSET 0xff 2009#define BTXIDCOFFSET 0xff
1997#define BTXIQDCOFFSET 0xff00 2010#define BTXIQDCOFFSET 0xff00
1998#define BTXDFIRMODE 0x10000 2011#define BTXDFIRMODE 0x10000
1999#define BTXPESUDO_NOISEON 0x4000000 2012#define BTXPESUDO_NOISEON 0x4000000
2000#define BTXPESUDO_NOISE_A 0xff 2013#define BTXPESUDO_NOISE_A 0xff
2001#define BTXPESUDO_NOISE_B 0xff00 2014#define BTXPESUDO_NOISE_B 0xff00
2002#define BTXPESUDO_NOISE_C 0xff0000 2015#define BTXPESUDO_NOISE_C 0xff0000
2003#define BTXPESUDO_NOISE_D 0xff000000 2016#define BTXPESUDO_NOISE_D 0xff000000
2004#define BCCA_DROPOPTION 0x20000 2017#define BCCA_DROPOPTION 0x20000
2005#define BCCA_DROPTHRES 0xfff00000 2018#define BCCA_DROPTHRES 0xfff00000
2006#define BEDCCA_H 0xf 2019#define BEDCCA_H 0xf
2007#define BEDCCA_L 0xf0 2020#define BEDCCA_L 0xf0
2008#define BLAMBDA_ED 0x300 2021#define BLAMBDA_ED 0x300
2009#define BRX_INITIALGAIN 0x7f 2022#define BRX_INITIALGAIN 0x7f
2010#define BRX_ANTDIV_EN 0x80 2023#define BRX_ANTDIV_EN 0x80
2011#define BRX_AGC_ADDRESS_FOR_LNA 0x7f00 2024#define BRX_AGC_ADDRESS_FOR_LNA 0x7f00
2012#define BRX_HIGHPOWER_FLOW 0x8000 2025#define BRX_HIGHPOWER_FLOW 0x8000
2013#define BRX_AGC_FREEZE_THRES 0xc0000 2026#define BRX_AGC_FREEZE_THRES 0xc0000
2014#define BRX_FREEZESTEP_AGC1 0x300000 2027#define BRX_FREEZESTEP_AGC1 0x300000
2015#define BRX_FREEZESTEP_AGC2 0xc00000 2028#define BRX_FREEZESTEP_AGC2 0xc00000
2016#define BRX_FREEZESTEP_AGC3 0x3000000 2029#define BRX_FREEZESTEP_AGC3 0x3000000
2017#define BRX_FREEZESTEP_AGC0 0xc000000 2030#define BRX_FREEZESTEP_AGC0 0xc000000
2018#define BRXRSSI_CMP_EN 0x10000000 2031#define BRXRSSI_CMP_EN 0x10000000
2019#define BRXQUICK_AGCEN 0x20000000 2032#define BRXQUICK_AGCEN 0x20000000
2020#define BRXAGC_FREEZE_THRES_MODE 0x40000000 2033#define BRXAGC_FREEZE_THRES_MODE 0x40000000
2021#define BRX_OVERFLOW_CHECKTYPE 0x80000000 2034#define BRX_OVERFLOW_CHECKTYPE 0x80000000
2022#define BRX_AGCSHIFT 0x7f 2035#define BRX_AGCSHIFT 0x7f
2023#define BTRSW_TRI_ONLY 0x80 2036#define BTRSW_TRI_ONLY 0x80
2024#define BPOWER_THRES 0x300 2037#define BPOWER_THRES 0x300
2025#define BRXAGC_EN 0x1 2038#define BRXAGC_EN 0x1
2026#define BRXAGC_TOGETHER_EN 0x2 2039#define BRXAGC_TOGETHER_EN 0x2
2027#define BRXAGC_MIN 0x4 2040#define BRXAGC_MIN 0x4
2028#define BRXHP_INI 0x7 2041#define BRXHP_INI 0x7
2029#define BRXHP_TRLNA 0x70 2042#define BRXHP_TRLNA 0x70
2030#define BRXHP_RSSI 0x700 2043#define BRXHP_RSSI 0x700
2031#define BRXHP_BBP1 0x7000 2044#define BRXHP_BBP1 0x7000
2032#define BRXHP_BBP2 0x70000 2045#define BRXHP_BBP2 0x70000
2033#define BRXHP_BBP3 0x700000 2046#define BRXHP_BBP3 0x700000
2034#define BRSSI_H 0x7f0000 2047#define BRSSI_H 0x7f0000
2035#define BRSSI_GEN 0x7f000000 2048#define BRSSI_GEN 0x7f000000
2036#define BRXSETTLE_TRSW 0x7 2049#define BRXSETTLE_TRSW 0x7
2037#define BRXSETTLE_LNA 0x38 2050#define BRXSETTLE_LNA 0x38
2038#define BRXSETTLE_RSSI 0x1c0 2051#define BRXSETTLE_RSSI 0x1c0
2039#define BRXSETTLE_BBP 0xe00 2052#define BRXSETTLE_BBP 0xe00
2040#define BRXSETTLE_RXHP 0x7000 2053#define BRXSETTLE_RXHP 0x7000
2041#define BRXSETTLE_ANTSW_RSSI 0x38000 2054#define BRXSETTLE_ANTSW_RSSI 0x38000
2042#define BRXSETTLE_ANTSW 0xc0000 2055#define BRXSETTLE_ANTSW 0xc0000
2043#define BRXPROCESS_TIME_DAGC 0x300000 2056#define BRXPROCESS_TIME_DAGC 0x300000
2044#define BRXSETTLE_HSSI 0x400000 2057#define BRXSETTLE_HSSI 0x400000
2045#define BRXPROCESS_TIME_BBPPW 0x800000 2058#define BRXPROCESS_TIME_BBPPW 0x800000
2046#define BRXANTENNA_POWER_SHIFT 0x3000000 2059#define BRXANTENNA_POWER_SHIFT 0x3000000
2047#define BRSSI_TABLE_SELECT 0xc000000 2060#define BRSSI_TABLE_SELECT 0xc000000
2048#define BRXHP_FINAL 0x7000000 2061#define BRXHP_FINAL 0x7000000
2049#define BRXHPSETTLE_BBP 0x7 2062#define BRXHPSETTLE_BBP 0x7
2050#define BRXHTSETTLE_HSSI 0x8 2063#define BRXHTSETTLE_HSSI 0x8
2051#define BRXHTSETTLE_RXHP 0x70 2064#define BRXHTSETTLE_RXHP 0x70
2052#define BRXHTSETTLE_BBPPW 0x80 2065#define BRXHTSETTLE_BBPPW 0x80
2053#define BRXHTSETTLE_IDLE 0x300 2066#define BRXHTSETTLE_IDLE 0x300
2054#define BRXHTSETTLE_RESERVED 0x1c00 2067#define BRXHTSETTLE_RESERVED 0x1c00
2055#define BRXHT_RXHP_EN 0x8000 2068#define BRXHT_RXHP_EN 0x8000
2056#define BRXAGC_FREEZE_THRES 0x30000 2069#define BRXAGC_FREEZE_THRES 0x30000
2057#define BRXAGC_TOGETHEREN 0x40000 2070#define BRXAGC_TOGETHEREN 0x40000
2058#define BRXHTAGC_MIN 0x80000 2071#define BRXHTAGC_MIN 0x80000
2059#define BRXHTAGC_EN 0x100000 2072#define BRXHTAGC_EN 0x100000
2060#define BRXHTDAGC_EN 0x200000 2073#define BRXHTDAGC_EN 0x200000
2061#define BRXHT_RXHP_BBP 0x1c00000 2074#define BRXHT_RXHP_BBP 0x1c00000
2062#define BRXHT_RXHP_FINAL 0xe0000000 2075#define BRXHT_RXHP_FINAL 0xe0000000
2063#define BRXPW_RADIO_TH 0x3 2076#define BRXPW_RADIO_TH 0x3
2064#define BRXPW_RADIO_EN 0x4 2077#define BRXPW_RADIO_EN 0x4
2065#define BRXMF_HOLD 0x3800 2078#define BRXMF_HOLD 0x3800
2066#define BRXPD_DELAY_TH1 0x38 2079#define BRXPD_DELAY_TH1 0x38
2067#define BRXPD_DELAY_TH2 0x1c0 2080#define BRXPD_DELAY_TH2 0x1c0
2068#define BRXPD_DC_COUNT_MAX 0x600 2081#define BRXPD_DC_COUNT_MAX 0x600
2069#define BRXPD_DELAY_TH 0x8000 2082#define BRXPD_DELAY_TH 0x8000
2070#define BRXPROCESS_DELAY 0xf0000 2083#define BRXPROCESS_DELAY 0xf0000
2071#define BRXSEARCHRANGE_GI2_EARLY 0x700000 2084#define BRXSEARCHRANGE_GI2_EARLY 0x700000
2072#define BRXFRAME_FUARD_COUNTER_L 0x3800000 2085#define BRXFRAME_FUARD_COUNTER_L 0x3800000
2073#define BRXSGI_GUARD_L 0xc000000 2086#define BRXSGI_GUARD_L 0xc000000
2074#define BRXSGI_SEARCH_L 0x30000000 2087#define BRXSGI_SEARCH_L 0x30000000
2075#define BRXSGI_TH 0xc0000000 2088#define BRXSGI_TH 0xc0000000
2076#define BDFSCNT0 0xff 2089#define BDFSCNT0 0xff
2077#define BDFSCNT1 0xff00 2090#define BDFSCNT1 0xff00
2078#define BDFSFLAG 0xf0000 2091#define BDFSFLAG 0xf0000
2079#define BMF_WEIGHT_SUM 0x300000 2092#define BMF_WEIGHT_SUM 0x300000
2080#define BMINIDX_TH 0x7f000000 2093#define BMINIDX_TH 0x7f000000
2081#define BDAFORMAT 0x40000 2094#define BDAFORMAT 0x40000
2082#define BTXCH_EMU_ENABLE 0x01000000 2095#define BTXCH_EMU_ENABLE 0x01000000
2083#define BTRSW_ISOLATION_A 0x7f 2096#define BTRSW_ISOLATION_A 0x7f
2084#define BTRSW_ISOLATION_B 0x7f00 2097#define BTRSW_ISOLATION_B 0x7f00
2085#define BTRSW_ISOLATION_C 0x7f0000 2098#define BTRSW_ISOLATION_C 0x7f0000
2086#define BTRSW_ISOLATION_D 0x7f000000 2099#define BTRSW_ISOLATION_D 0x7f000000
2087#define BEXT_LNA_GAIN 0x7c00 2100#define BEXT_LNA_GAIN 0x7c00
2088 2101
2089#define BSTBC_EN 0x4 2102#define BSTBC_EN 0x4
2090#define BANTENNA_MAPPING 0x10 2103#define BANTENNA_MAPPING 0x10
2091#define BNSS 0x20 2104#define BNSS 0x20
2092#define BCFO_ANTSUM_ID 0x200 2105#define BCFO_ANTSUM_ID 0x200
2093#define BPHY_COUNTER_RESET 0x8000000 2106#define BPHY_COUNTER_RESET 0x8000000
2094#define BCFO_REPORT_GET 0x4000000 2107#define BCFO_REPORT_GET 0x4000000
2095#define BOFDM_CONTINUE_TX 0x10000000 2108#define BOFDM_CONTINUE_TX 0x10000000
2096#define BOFDM_SINGLE_CARRIER 0x20000000 2109#define BOFDM_SINGLE_CARRIER 0x20000000
2097#define BOFDM_SINGLE_TONE 0x40000000 2110#define BOFDM_SINGLE_TONE 0x40000000
2098#define BHT_DETECT 0x100 2111#define BHT_DETECT 0x100
2099#define BCFOEN 0x10000 2112#define BCFOEN 0x10000
2100#define BCFOVALUE 0xfff00000 2113#define BCFOVALUE 0xfff00000
2101#define BSIGTONE_RE 0x3f 2114#define BSIGTONE_RE 0x3f
2102#define BSIGTONE_IM 0x7f00 2115#define BSIGTONE_IM 0x7f00
2103#define BCOUNTER_CCA 0xffff 2116#define BCOUNTER_CCA 0xffff
2104#define BCOUNTER_PARITYFAIL 0xffff0000 2117#define BCOUNTER_PARITYFAIL 0xffff0000
2105#define BCOUNTER_RATEILLEGAL 0xffff 2118#define BCOUNTER_RATEILLEGAL 0xffff
2106#define BCOUNTER_CRC8FAIL 0xffff0000 2119#define BCOUNTER_CRC8FAIL 0xffff0000
2107#define BCOUNTER_MCSNOSUPPORT 0xffff 2120#define BCOUNTER_MCSNOSUPPORT 0xffff
2108#define BCOUNTER_FASTSYNC 0xffff 2121#define BCOUNTER_FASTSYNC 0xffff
2109#define BSHORTCFO 0xfff 2122#define BSHORTCFO 0xfff
2110#define BSHORTCFOT_LENGTH 12 2123#define BSHORTCFOT_LENGTH 12
2111#define BSHORTCFOF_LENGTH 11 2124#define BSHORTCFOF_LENGTH 11
2112#define BLONGCFO 0x7ff 2125#define BLONGCFO 0x7ff
2113#define BLONGCFOT_LENGTH 11 2126#define BLONGCFOT_LENGTH 11
2114#define BLONGCFOF_LENGTH 11 2127#define BLONGCFOF_LENGTH 11
2115#define BTAILCFO 0x1fff 2128#define BTAILCFO 0x1fff
2116#define BTAILCFOT_LENGTH 13 2129#define BTAILCFOT_LENGTH 13
2117#define BTAILCFOF_LENGTH 12 2130#define BTAILCFOF_LENGTH 12
2118#define BNOISE_EN_PWDB 0xffff 2131#define BNOISE_EN_PWDB 0xffff
2119#define BCC_POWER_DB 0xffff0000 2132#define BCC_POWER_DB 0xffff0000
2120#define BMOISE_PWDB 0xffff 2133#define BMOISE_PWDB 0xffff
2121#define BPOWERMEAST_LENGTH 10 2134#define BPOWERMEAST_LENGTH 10
2122#define BPOWERMEASF_LENGTH 3 2135#define BPOWERMEASF_LENGTH 3
2123#define BRX_HT_BW 0x1 2136#define BRX_HT_BW 0x1
2124#define BRXSC 0x6 2137#define BRXSC 0x6
2125#define BRX_HT 0x8 2138#define BRX_HT 0x8
2126#define BNB_INTF_DET_ON 0x1 2139#define BNB_INTF_DET_ON 0x1
2127#define BINTF_WIN_LEN_CFG 0x30 2140#define BINTF_WIN_LEN_CFG 0x30
2128#define BNB_INTF_TH_CFG 0x1c0 2141#define BNB_INTF_TH_CFG 0x1c0
2129#define BRFGAIN 0x3f 2142#define BRFGAIN 0x3f
2130#define BTABLESEL 0x40 2143#define BTABLESEL 0x40
2131#define BTRSW 0x80 2144#define BTRSW 0x80
2132#define BRXSNR_A 0xff 2145#define BRXSNR_A 0xff
2133#define BRXSNR_B 0xff00 2146#define BRXSNR_B 0xff00
2134#define BRXSNR_C 0xff0000 2147#define BRXSNR_C 0xff0000
2135#define BRXSNR_D 0xff000000 2148#define BRXSNR_D 0xff000000
2136#define BSNR_EVMT_LENGTH 8 2149#define BSNR_EVMT_LENGTH 8
2137#define BSNR_EVMF_LENGTH 1 2150#define BSNR_EVMF_LENGTH 1
2138#define BCSI1ST 0xff 2151#define BCSI1ST 0xff
2139#define BCSI2ND 0xff00 2152#define BCSI2ND 0xff00
2140#define BRXEVM1ST 0xff0000 2153#define BRXEVM1ST 0xff0000
2141#define BRXEVM2ND 0xff000000 2154#define BRXEVM2ND 0xff000000
2142#define BSIGEVM 0xff 2155#define BSIGEVM 0xff
2143#define BPWDB 0xff00 2156#define BPWDB 0xff00
2144#define BSGIEN 0x10000 2157#define BSGIEN 0x10000
2145 2158
2146#define BSFACTOR_QMA1 0xf 2159#define BSFACTOR_QMA1 0xf
2147#define BSFACTOR_QMA2 0xf0 2160#define BSFACTOR_QMA2 0xf0
2148#define BSFACTOR_QMA3 0xf00 2161#define BSFACTOR_QMA3 0xf00
2149#define BSFACTOR_QMA4 0xf000 2162#define BSFACTOR_QMA4 0xf000
2150#define BSFACTOR_QMA5 0xf0000 2163#define BSFACTOR_QMA5 0xf0000
2151#define BSFACTOR_QMA6 0xf0000 2164#define BSFACTOR_QMA6 0xf0000
2152#define BSFACTOR_QMA7 0xf00000 2165#define BSFACTOR_QMA7 0xf00000
2153#define BSFACTOR_QMA8 0xf000000 2166#define BSFACTOR_QMA8 0xf000000
2154#define BSFACTOR_QMA9 0xf0000000 2167#define BSFACTOR_QMA9 0xf0000000
2155#define BCSI_SCHEME 0x100000 2168#define BCSI_SCHEME 0x100000
2156 2169
2157#define BNOISE_LVL_TOP_SET 0x3 2170#define BNOISE_LVL_TOP_SET 0x3
2158#define BCHSMOOTH 0x4 2171#define BCHSMOOTH 0x4
2159#define BCHSMOOTH_CFG1 0x38 2172#define BCHSMOOTH_CFG1 0x38
2160#define BCHSMOOTH_CFG2 0x1c0 2173#define BCHSMOOTH_CFG2 0x1c0
2161#define BCHSMOOTH_CFG3 0xe00 2174#define BCHSMOOTH_CFG3 0xe00
2162#define BCHSMOOTH_CFG4 0x7000 2175#define BCHSMOOTH_CFG4 0x7000
2163#define BMRCMODE 0x800000 2176#define BMRCMODE 0x800000
2164#define BTHEVMCFG 0x7000000 2177#define BTHEVMCFG 0x7000000
2165 2178
2166#define BLOOP_FIT_TYPE 0x1 2179#define BLOOP_FIT_TYPE 0x1
2167#define BUPD_CFO 0x40 2180#define BUPD_CFO 0x40
2168#define BUPD_CFO_OFFDATA 0x80 2181#define BUPD_CFO_OFFDATA 0x80
2169#define BADV_UPD_CFO 0x100 2182#define BADV_UPD_CFO 0x100
2170#define BADV_TIME_CTRL 0x800 2183#define BADV_TIME_CTRL 0x800
2171#define BUPD_CLKO 0x1000 2184#define BUPD_CLKO 0x1000
2172#define BFC 0x6000 2185#define BFC 0x6000
2173#define BTRACKING_MODE 0x8000 2186#define BTRACKING_MODE 0x8000
2174#define BPHCMP_ENABLE 0x10000 2187#define BPHCMP_ENABLE 0x10000
2175#define BUPD_CLKO_LTF 0x20000 2188#define BUPD_CLKO_LTF 0x20000
2176#define BCOM_CH_CFO 0x40000 2189#define BCOM_CH_CFO 0x40000
2177#define BCSI_ESTI_MODE 0x80000 2190#define BCSI_ESTI_MODE 0x80000
2178#define BADV_UPD_EQZ 0x100000 2191#define BADV_UPD_EQZ 0x100000
2179#define BUCHCFG 0x7000000 2192#define BUCHCFG 0x7000000
2180#define BUPDEQZ 0x8000000 2193#define BUPDEQZ 0x8000000
2181 2194
2182#define BRX_PESUDO_NOISE_ON 0x20000000 2195#define BRX_PESUDO_NOISE_ON 0x20000000
2183#define BRX_PESUDO_NOISE_A 0xff 2196#define BRX_PESUDO_NOISE_A 0xff
2184#define BRX_PESUDO_NOISE_B 0xff00 2197#define BRX_PESUDO_NOISE_B 0xff00
2185#define BRX_PESUDO_NOISE_C 0xff0000 2198#define BRX_PESUDO_NOISE_C 0xff0000
2186#define BRX_PESUDO_NOISE_D 0xff000000 2199#define BRX_PESUDO_NOISE_D 0xff000000
2187#define BRX_PESUDO_NOISESTATE_A 0xffff 2200#define BRX_PESUDO_NOISESTATE_A 0xffff
2188#define BRX_PESUDO_NOISESTATE_B 0xffff0000 2201#define BRX_PESUDO_NOISESTATE_B 0xffff0000
2189#define BRX_PESUDO_NOISESTATE_C 0xffff 2202#define BRX_PESUDO_NOISESTATE_C 0xffff
2190#define BRX_PESUDO_NOISESTATE_D 0xffff0000 2203#define BRX_PESUDO_NOISESTATE_D 0xffff0000
2191 2204
2192#define BZEBRA1_HSSIENABLE 0x8 2205#define BZEBRA1_HSSIENABLE 0x8
2193#define BZEBRA1_TRXCONTROL 0xc00 2206#define BZEBRA1_TRXCONTROL 0xc00
2194#define BZEBRA1_TRXGAINSETTING 0x07f 2207#define BZEBRA1_TRXGAINSETTING 0x07f
2195#define BZEBRA1_RXCOUNTER 0xc00 2208#define BZEBRA1_RXCOUNTER 0xc00
2196#define BZEBRA1_TXCHANGEPUMP 0x38 2209#define BZEBRA1_TXCHANGEPUMP 0x38
2197#define BZEBRA1_RXCHANGEPUMP 0x7 2210#define BZEBRA1_RXCHANGEPUMP 0x7
2198#define BZEBRA1_CHANNEL_NUM 0xf80 2211#define BZEBRA1_CHANNEL_NUM 0xf80
2199#define BZEBRA1_TXLPFBW 0x400 2212#define BZEBRA1_TXLPFBW 0x400
2200#define BZEBRA1_RXLPFBW 0x600 2213#define BZEBRA1_RXLPFBW 0x600
2201 2214
2202#define BRTL8256REG_MODE_CTRL1 0x100 2215#define BRTL8256REG_MODE_CTRL1 0x100
2203#define BRTL8256REG_MODE_CTRL0 0x40 2216#define BRTL8256REG_MODE_CTRL0 0x40
2204#define BRTL8256REG_TXLPFBW 0x18 2217#define BRTL8256REG_TXLPFBW 0x18
2205#define BRTL8256REG_RXLPFBW 0x600 2218#define BRTL8256REG_RXLPFBW 0x600
2206 2219
2207#define BRTL8258_TXLPFBW 0xc 2220#define BRTL8258_TXLPFBW 0xc
2208#define BRTL8258_RXLPFBW 0xc00 2221#define BRTL8258_RXLPFBW 0xc00
2209#define BRTL8258_RSSILPFBW 0xc0 2222#define BRTL8258_RSSILPFBW 0xc0
2210 2223
2211#define BBYTE0 0x1 2224#define BBYTE0 0x1
2212#define BBYTE1 0x2 2225#define BBYTE1 0x2
2213#define BBYTE2 0x4 2226#define BBYTE2 0x4
2214#define BBYTE3 0x8 2227#define BBYTE3 0x8
2215#define BWORD0 0x3 2228#define BWORD0 0x3
2216#define BWORD1 0xc 2229#define BWORD1 0xc
2217#define BWORD 0xf 2230#define BWORD 0xf
2218 2231
2219#define BENABLE 0x1 2232#define MASKBYTE0 0xff
2220#define BDISABLE 0x0 2233#define MASKBYTE1 0xff00
2221 2234#define MASKBYTE2 0xff0000
2222#define LEFT_ANTENNA 0x0 2235#define MASKBYTE3 0xff000000
2223#define RIGHT_ANTENNA 0x1 2236#define MASKHWORD 0xffff0000
2224 2237#define MASKLWORD 0x0000ffff
2225#define TCHECK_TXSTATUS 500 2238#define MASKDWORD 0xffffffff
2226#define TUPDATE_RXCOUNTER 100 2239#define MASK12BITS 0xfff
2227 2240#define MASKH4BITS 0xf0000000
2228#define REG_UN_USED_REGISTER 0x01bf 2241#define MASKOFDM_D 0xffc00000
2242#define MASKCCK 0x3f3f3f3f
2243
2244#define MASK4BITS 0x0f
2245#define MASK20BITS 0xfffff
2246#define RFREG_OFFSET_MASK 0xfffff
2247
2248#define BENABLE 0x1
2249#define BDISABLE 0x0
2250
2251#define LEFT_ANTENNA 0x0
2252#define RIGHT_ANTENNA 0x1
2253
2254#define TCHECK_TXSTATUS 500
2255#define TUPDATE_RXCOUNTER 100
2256
2257#define REG_UN_used_register 0x01bf
2229 2258
2230/* WOL bit information */ 2259/* WOL bit information */
2231#define HAL92C_WOL_PTK_UPDATE_EVENT BIT(0) 2260#define HAL92C_WOL_PTK_UPDATE_EVENT BIT(0)
2232#define HAL92C_WOL_GTK_UPDATE_EVENT BIT(1) 2261#define HAL92C_WOL_GTK_UPDATE_EVENT BIT(1)
2233#define HAL92C_WOL_DISASSOC_EVENT BIT(2) 2262#define HAL92C_WOL_DISASSOC_EVENT BIT(2)
2234#define HAL92C_WOL_DEAUTH_EVENT BIT(3) 2263#define HAL92C_WOL_DEAUTH_EVENT BIT(3)
2235#define HAL92C_WOL_FW_DISCONNECT_EVENT BIT(4) 2264#define HAL92C_WOL_FW_DISCONNECT_EVENT BIT(4)
2236 2265
2237#define WOL_REASON_PTK_UPDATE BIT(0) 2266#define WOL_REASON_PTK_UPDATE BIT(0)
2238#define WOL_REASON_GTK_UPDATE BIT(1) 2267#define WOL_REASON_GTK_UPDATE BIT(1)
2239#define WOL_REASON_DISASSOC BIT(2) 2268#define WOL_REASON_DISASSOC BIT(2)
2240#define WOL_REASON_DEAUTH BIT(3) 2269#define WOL_REASON_DEAUTH BIT(3)
2241#define WOL_REASON_FW_DISCONNECT BIT(4) 2270#define WOL_REASON_FW_DISCONNECT BIT(4)
2242
2243#endif 2271#endif
diff --git a/drivers/net/wireless/rtlwifi/rtl8188ee/rf.c b/drivers/net/wireless/rtlwifi/rtl8188ee/rf.c
index 4faafdbab9c6..40893cef7dfe 100644
--- a/drivers/net/wireless/rtlwifi/rtl8188ee/rf.c
+++ b/drivers/net/wireless/rtlwifi/rtl8188ee/rf.c
@@ -11,10 +11,6 @@
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details. 12 * more details.
13 * 13 *
14 * You should have received a copy of the GNU General Public License along with
15 * this program; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
17 *
18 * The full GNU General Public License is included in this distribution in the 14 * The full GNU General Public License is included in this distribution in the
19 * file called LICENSE. 15 * file called LICENSE.
20 * 16 *
@@ -34,6 +30,8 @@
34#include "rf.h" 30#include "rf.h"
35#include "dm.h" 31#include "dm.h"
36 32
33static bool _rtl88e_phy_rf6052_config_parafile(struct ieee80211_hw *hw);
34
37void rtl88e_phy_rf6052_set_bandwidth(struct ieee80211_hw *hw, u8 bandwidth) 35void rtl88e_phy_rf6052_set_bandwidth(struct ieee80211_hw *hw, u8 bandwidth)
38{ 36{
39 struct rtl_priv *rtlpriv = rtl_priv(hw); 37 struct rtl_priv *rtlpriv = rtl_priv(hw);
@@ -60,7 +58,7 @@ void rtl88e_phy_rf6052_set_bandwidth(struct ieee80211_hw *hw, u8 bandwidth)
60} 58}
61 59
62void rtl88e_phy_rf6052_set_cck_txpower(struct ieee80211_hw *hw, 60void rtl88e_phy_rf6052_set_cck_txpower(struct ieee80211_hw *hw,
63 u8 *plevel) 61 u8 *ppowerlevel)
64{ 62{
65 struct rtl_priv *rtlpriv = rtl_priv(hw); 63 struct rtl_priv *rtlpriv = rtl_priv(hw);
66 struct rtl_phy *rtlphy = &(rtlpriv->phy); 64 struct rtl_phy *rtlphy = &(rtlpriv->phy);
@@ -82,32 +80,36 @@ void rtl88e_phy_rf6052_set_cck_txpower(struct ieee80211_hw *hw,
82 80
83 if (turbo_scanoff) { 81 if (turbo_scanoff) {
84 for (idx1 = RF90_PATH_A; idx1 <= RF90_PATH_B; idx1++) { 82 for (idx1 = RF90_PATH_A; idx1 <= RF90_PATH_B; idx1++) {
85 tx_agc[idx1] = plevel[idx1] | 83 tx_agc[idx1] = ppowerlevel[idx1] |
86 (plevel[idx1] << 8) | 84 (ppowerlevel[idx1] << 8) |
87 (plevel[idx1] << 16) | 85 (ppowerlevel[idx1] << 16) |
88 (plevel[idx1] << 24); 86 (ppowerlevel[idx1] << 24);
89 } 87 }
90 } 88 }
91 } else { 89 } else {
92 for (idx1 = RF90_PATH_A; idx1 <= RF90_PATH_B; idx1++) { 90 for (idx1 = RF90_PATH_A; idx1 <= RF90_PATH_B; idx1++) {
93 tx_agc[idx1] = plevel[idx1] | (plevel[idx1] << 8) | 91 tx_agc[idx1] = ppowerlevel[idx1] |
94 (plevel[idx1] << 16) | 92 (ppowerlevel[idx1] << 8) |
95 (plevel[idx1] << 24); 93 (ppowerlevel[idx1] << 16) |
94 (ppowerlevel[idx1] << 24);
96 } 95 }
97 96
98 if (rtlefuse->eeprom_regulatory == 0) { 97 if (rtlefuse->eeprom_regulatory == 0) {
99 tmpval = (rtlphy->mcs_offset[0][6]) + 98 tmpval =
100 (rtlphy->mcs_offset[0][7] << 8); 99 (rtlphy->mcs_txpwrlevel_origoffset[0][6]) +
100 (rtlphy->mcs_txpwrlevel_origoffset[0][7] <<
101 8);
101 tx_agc[RF90_PATH_A] += tmpval; 102 tx_agc[RF90_PATH_A] += tmpval;
102 103
103 tmpval = (rtlphy->mcs_offset[0][14]) + 104 tmpval = (rtlphy->mcs_txpwrlevel_origoffset[0][14]) +
104 (rtlphy->mcs_offset[0][15] << 24); 105 (rtlphy->mcs_txpwrlevel_origoffset[0][15] <<
106 24);
105 tx_agc[RF90_PATH_B] += tmpval; 107 tx_agc[RF90_PATH_B] += tmpval;
106 } 108 }
107 } 109 }
108 110
109 for (idx1 = RF90_PATH_A; idx1 <= RF90_PATH_B; idx1++) { 111 for (idx1 = RF90_PATH_A; idx1 <= RF90_PATH_B; idx1++) {
110 ptr = (u8 *)(&(tx_agc[idx1])); 112 ptr = (u8 *)(&tx_agc[idx1]);
111 for (idx2 = 0; idx2 < 4; idx2++) { 113 for (idx2 = 0; idx2 < 4; idx2++) {
112 if (*ptr > RF6052_MAX_TX_PWR) 114 if (*ptr > RF6052_MAX_TX_PWR)
113 *ptr = RF6052_MAX_TX_PWR; 115 *ptr = RF6052_MAX_TX_PWR;
@@ -127,10 +129,12 @@ void rtl88e_phy_rf6052_set_cck_txpower(struct ieee80211_hw *hw,
127 129
128 RTPRINT(rtlpriv, FPHY, PHY_TXPWR, 130 RTPRINT(rtlpriv, FPHY, PHY_TXPWR,
129 "CCK PWR 1M (rf-A) = 0x%x (reg 0x%x)\n", tmpval, 131 "CCK PWR 1M (rf-A) = 0x%x (reg 0x%x)\n", tmpval,
130 RTXAGC_A_CCK1_MCS32); 132 RTXAGC_A_CCK1_MCS32);
131 133
132 tmpval = tx_agc[RF90_PATH_A] >> 8; 134 tmpval = tx_agc[RF90_PATH_A] >> 8;
133 135
136 /*tmpval = tmpval & 0xff00ffff;*/
137
134 rtl_set_bbreg(hw, RTXAGC_B_CCK11_A_CCK2_11, 0xffffff00, tmpval); 138 rtl_set_bbreg(hw, RTXAGC_B_CCK11_A_CCK2_11, 0xffffff00, tmpval);
135 139
136 RTPRINT(rtlpriv, FPHY, PHY_TXPWR, 140 RTPRINT(rtlpriv, FPHY, PHY_TXPWR,
@@ -153,148 +157,180 @@ void rtl88e_phy_rf6052_set_cck_txpower(struct ieee80211_hw *hw,
153} 157}
154 158
155static void rtl88e_phy_get_power_base(struct ieee80211_hw *hw, 159static void rtl88e_phy_get_power_base(struct ieee80211_hw *hw,
156 u8 *pwrlvlofdm, u8 *pwrlvlbw20, 160 u8 *ppowerlevel_ofdm,
157 u8 *pwrlvlbw40, u8 channel, 161 u8 *ppowerlevel_bw20,
162 u8 *ppowerlevel_bw40, u8 channel,
158 u32 *ofdmbase, u32 *mcsbase) 163 u32 *ofdmbase, u32 *mcsbase)
159{ 164{
160 struct rtl_priv *rtlpriv = rtl_priv(hw); 165 struct rtl_priv *rtlpriv = rtl_priv(hw);
161 struct rtl_phy *rtlphy = &(rtlpriv->phy); 166 struct rtl_phy *rtlphy = &(rtlpriv->phy);
162 u32 base0, base1; 167 u32 powerbase0, powerbase1;
163 u8 i, powerlevel[2]; 168 u8 i, powerlevel[2];
164 169
165 for (i = 0; i < 2; i++) { 170 for (i = 0; i < 2; i++) {
166 base0 = pwrlvlofdm[i]; 171 powerbase0 = ppowerlevel_ofdm[i];
167 172
168 base0 = (base0 << 24) | (base0 << 16) | 173 powerbase0 = (powerbase0 << 24) | (powerbase0 << 16) |
169 (base0 << 8) | base0; 174 (powerbase0 << 8) | powerbase0;
170 *(ofdmbase + i) = base0; 175 *(ofdmbase + i) = powerbase0;
171 RTPRINT(rtlpriv, FPHY, PHY_TXPWR, 176 RTPRINT(rtlpriv, FPHY, PHY_TXPWR,
172 "[OFDM power base index rf(%c) = 0x%x]\n", 177 " [OFDM power base index rf(%c) = 0x%x]\n",
173 ((i == 0) ? 'A' : 'B'), *(ofdmbase + i)); 178 ((i == 0) ? 'A' : 'B'), *(ofdmbase + i));
174 } 179 }
175 180
176 for (i = 0; i < 2; i++) { 181 for (i = 0; i < 2; i++) {
177 if (rtlphy->current_chan_bw == HT_CHANNEL_WIDTH_20) 182 if (rtlphy->current_chan_bw == HT_CHANNEL_WIDTH_20)
178 powerlevel[i] = pwrlvlbw20[i]; 183 powerlevel[i] = ppowerlevel_bw20[i];
179 else 184 else
180 powerlevel[i] = pwrlvlbw40[i]; 185 powerlevel[i] = ppowerlevel_bw40[i];
181 base1 = powerlevel[i];
182 base1 = (base1 << 24) |
183 (base1 << 16) | (base1 << 8) | base1;
184 186
185 *(mcsbase + i) = base1; 187 powerbase1 = powerlevel[i];
188 powerbase1 = (powerbase1 << 24) |
189 (powerbase1 << 16) | (powerbase1 << 8) | powerbase1;
190
191 *(mcsbase + i) = powerbase1;
186 192
187 RTPRINT(rtlpriv, FPHY, PHY_TXPWR, 193 RTPRINT(rtlpriv, FPHY, PHY_TXPWR,
188 "[MCS power base index rf(%c) = 0x%x]\n", 194 " [MCS power base index rf(%c) = 0x%x]\n",
189 ((i == 0) ? 'A' : 'B'), *(mcsbase + i)); 195 ((i == 0) ? 'A' : 'B'), *(mcsbase + i));
190 } 196 }
191} 197}
192 198
193static void get_txpwr_by_reg(struct ieee80211_hw *hw, u8 chan, u8 index, 199static void _rtl88e_get_txpower_writeval_by_regulatory(struct ieee80211_hw *hw,
194 u32 *base0, u32 *base1, u32 *outval) 200 u8 channel, u8 index,
201 u32 *powerbase0,
202 u32 *powerbase1,
203 u32 *p_outwriteval)
195{ 204{
196 struct rtl_priv *rtlpriv = rtl_priv(hw); 205 struct rtl_priv *rtlpriv = rtl_priv(hw);
197 struct rtl_phy *rtlphy = &(rtlpriv->phy); 206 struct rtl_phy *rtlphy = &(rtlpriv->phy);
198 struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw)); 207 struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw));
199 u8 i, chg = 0, pwr_lim[4], pwr_diff = 0, cust_pwr_dif; 208 u8 i, chnlgroup = 0, pwr_diff_limit[4], pwr_diff = 0, customer_pwr_diff;
200 u32 writeval, cust_lim, rf, tmp; 209 u32 writeval, customer_limit, rf;
201 u8 ch = chan - 1;
202 u8 j;
203 210
204 for (rf = 0; rf < 2; rf++) { 211 for (rf = 0; rf < 2; rf++) {
205 j = index + (rf ? 8 : 0);
206 tmp = ((index < 2) ? base0[rf] : base1[rf]);
207 switch (rtlefuse->eeprom_regulatory) { 212 switch (rtlefuse->eeprom_regulatory) {
208 case 0: 213 case 0:
209 chg = 0; 214 chnlgroup = 0;
210 215
211 writeval = rtlphy->mcs_offset[chg][j] + tmp; 216 writeval =
217 rtlphy->mcs_txpwrlevel_origoffset
218 [chnlgroup][index + (rf ? 8 : 0)]
219 + ((index < 2) ? powerbase0[rf] : powerbase1[rf]);
212 220
213 RTPRINT(rtlpriv, FPHY, PHY_TXPWR, 221 RTPRINT(rtlpriv, FPHY, PHY_TXPWR,
214 "RTK better performance, " 222 "RTK better performance, writeval(%c) = 0x%x\n",
215 "writeval(%c) = 0x%x\n",
216 ((rf == 0) ? 'A' : 'B'), writeval); 223 ((rf == 0) ? 'A' : 'B'), writeval);
217 break; 224 break;
218 case 1: 225 case 1:
219 if (rtlphy->pwrgroup_cnt == 1) { 226 if (rtlphy->pwrgroup_cnt == 1) {
220 chg = 0; 227 chnlgroup = 0;
221 } else { 228 } else {
222 chg = chan / 3; 229 if (channel < 3)
223 if (chan == 14) 230 chnlgroup = 0;
224 chg = 5; 231 else if (channel < 6)
232 chnlgroup = 1;
233 else if (channel < 9)
234 chnlgroup = 2;
235 else if (channel < 12)
236 chnlgroup = 3;
237 else if (channel < 14)
238 chnlgroup = 4;
239 else if (channel == 14)
240 chnlgroup = 5;
225 } 241 }
226 writeval = rtlphy->mcs_offset[chg][j] + tmp; 242
243 writeval =
244 rtlphy->mcs_txpwrlevel_origoffset[chnlgroup]
245 [index + (rf ? 8 : 0)] + ((index < 2) ?
246 powerbase0[rf] :
247 powerbase1[rf]);
227 248
228 RTPRINT(rtlpriv, FPHY, PHY_TXPWR, 249 RTPRINT(rtlpriv, FPHY, PHY_TXPWR,
229 "Realtek regulatory, 20MHz, writeval(%c) = 0x%x\n", 250 "Realtek regulatory, 20MHz, writeval(%c) = 0x%x\n",
230 ((rf == 0) ? 'A' : 'B'), writeval); 251 ((rf == 0) ? 'A' : 'B'), writeval);
252
231 break; 253 break;
232 case 2: 254 case 2:
233 writeval = ((index < 2) ? base0[rf] : base1[rf]); 255 writeval =
256 ((index < 2) ? powerbase0[rf] : powerbase1[rf]);
234 257
235 RTPRINT(rtlpriv, FPHY, PHY_TXPWR, 258 RTPRINT(rtlpriv, FPHY, PHY_TXPWR,
236 "Better regulatory, writeval(%c) = 0x%x\n", 259 "Better regulatory, writeval(%c) = 0x%x\n",
237 ((rf == 0) ? 'A' : 'B'), writeval); 260 ((rf == 0) ? 'A' : 'B'), writeval);
238 break; 261 break;
239 case 3: 262 case 3:
240 chg = 0; 263 chnlgroup = 0;
241 264
242 if (rtlphy->current_chan_bw == HT_CHANNEL_WIDTH_20_40) { 265 if (rtlphy->current_chan_bw == HT_CHANNEL_WIDTH_20_40) {
243 RTPRINT(rtlpriv, FPHY, PHY_TXPWR, 266 RTPRINT(rtlpriv, FPHY, PHY_TXPWR,
244 "customer's limit, 40MHz rf(%c) = 0x%x\n", 267 "customer's limit, 40MHz rf(%c) = 0x%x\n",
245 ((rf == 0) ? 'A' : 'B'), 268 ((rf == 0) ? 'A' : 'B'),
246 rtlefuse->pwrgroup_ht40[rf][ch]); 269 rtlefuse->pwrgroup_ht40[rf][channel -
270 1]);
247 } else { 271 } else {
248 RTPRINT(rtlpriv, FPHY, PHY_TXPWR, 272 RTPRINT(rtlpriv, FPHY, PHY_TXPWR,
249 "customer's limit, 20MHz rf(%c) = 0x%x\n", 273 "customer's limit, 20MHz rf(%c) = 0x%x\n",
250 ((rf == 0) ? 'A' : 'B'), 274 ((rf == 0) ? 'A' : 'B'),
251 rtlefuse->pwrgroup_ht20[rf][ch]); 275 rtlefuse->pwrgroup_ht20[rf][channel -
276 1]);
252 } 277 }
253 278
254 if (index < 2) 279 if (index < 2)
255 pwr_diff = rtlefuse->txpwr_legacyhtdiff[rf][ch]; 280 pwr_diff =
281 rtlefuse->txpwr_legacyhtdiff[rf][channel-1];
256 else if (rtlphy->current_chan_bw == HT_CHANNEL_WIDTH_20) 282 else if (rtlphy->current_chan_bw == HT_CHANNEL_WIDTH_20)
257 pwr_diff = rtlefuse->txpwr_ht20diff[rf][ch]; 283 pwr_diff =
284 rtlefuse->txpwr_ht20diff[rf][channel-1];
258 285
259 if (rtlphy->current_chan_bw == HT_CHANNEL_WIDTH_20_40) 286 if (rtlphy->current_chan_bw == HT_CHANNEL_WIDTH_20_40)
260 cust_pwr_dif = rtlefuse->pwrgroup_ht40[rf][ch]; 287 customer_pwr_diff =
288 rtlefuse->pwrgroup_ht40[rf][channel-1];
261 else 289 else
262 cust_pwr_dif = rtlefuse->pwrgroup_ht20[rf][ch]; 290 customer_pwr_diff =
291 rtlefuse->pwrgroup_ht20[rf][channel-1];
263 292
264 if (pwr_diff > cust_pwr_dif) 293 if (pwr_diff > customer_pwr_diff)
265 pwr_diff = 0; 294 pwr_diff = 0;
266 else 295 else
267 pwr_diff = cust_pwr_dif - pwr_diff; 296 pwr_diff = customer_pwr_diff - pwr_diff;
268 297
269 for (i = 0; i < 4; i++) { 298 for (i = 0; i < 4; i++) {
270 pwr_lim[i] = (u8)((rtlphy->mcs_offset[chg][j] & 299 pwr_diff_limit[i] =
271 (0x7f << (i * 8))) >> (i * 8)); 300 (u8)((rtlphy->mcs_txpwrlevel_origoffset
272 301 [chnlgroup][index +
273 if (pwr_lim[i] > pwr_diff) 302 (rf ? 8 : 0)] & (0x7f <<
274 pwr_lim[i] = pwr_diff; 303 (i * 8))) >> (i * 8));
304
305 if (pwr_diff_limit[i] > pwr_diff)
306 pwr_diff_limit[i] = pwr_diff;
275 } 307 }
276 308
277 cust_lim = (pwr_lim[3] << 24) | (pwr_lim[2] << 16) | 309 customer_limit = (pwr_diff_limit[3] << 24) |
278 (pwr_lim[1] << 8) | (pwr_lim[0]); 310 (pwr_diff_limit[2] << 16) |
311 (pwr_diff_limit[1] << 8) | (pwr_diff_limit[0]);
279 312
280 RTPRINT(rtlpriv, FPHY, PHY_TXPWR, 313 RTPRINT(rtlpriv, FPHY, PHY_TXPWR,
281 "Customer's limit rf(%c) = 0x%x\n", 314 "Customer's limit rf(%c) = 0x%x\n",
282 ((rf == 0) ? 'A' : 'B'), cust_lim); 315 ((rf == 0) ? 'A' : 'B'), customer_limit);
283 316
284 writeval = cust_lim + tmp; 317 writeval = customer_limit +
318 ((index < 2) ? powerbase0[rf] : powerbase1[rf]);
285 319
286 RTPRINT(rtlpriv, FPHY, PHY_TXPWR, 320 RTPRINT(rtlpriv, FPHY, PHY_TXPWR,
287 "Customer, writeval rf(%c) = 0x%x\n", 321 "Customer, writeval rf(%c)= 0x%x\n",
288 ((rf == 0) ? 'A' : 'B'), writeval); 322 ((rf == 0) ? 'A' : 'B'), writeval);
289 break; 323 break;
290 default: 324 default:
291 chg = 0; 325 chnlgroup = 0;
292 writeval = rtlphy->mcs_offset[chg][j] + tmp; 326 writeval =
327 rtlphy->mcs_txpwrlevel_origoffset[chnlgroup]
328 [index + (rf ? 8 : 0)]
329 + ((index < 2) ? powerbase0[rf] : powerbase1[rf]);
293 330
294 RTPRINT(rtlpriv, FPHY, PHY_TXPWR, 331 RTPRINT(rtlpriv, FPHY, PHY_TXPWR,
295 "RTK better performance, writeval " 332 "RTK better performance, writeval rf(%c) = 0x%x\n",
296 "rf(%c) = 0x%x\n", 333 ((rf == 0) ? 'A' : 'B'), writeval);
297 ((rf == 0) ? 'A' : 'B'), writeval);
298 break; 334 break;
299 } 335 }
300 336
@@ -302,12 +338,13 @@ static void get_txpwr_by_reg(struct ieee80211_hw *hw, u8 chan, u8 index,
302 writeval = writeval - 0x06060606; 338 writeval = writeval - 0x06060606;
303 else if (rtlpriv->dm.dynamic_txhighpower_lvl == 339 else if (rtlpriv->dm.dynamic_txhighpower_lvl ==
304 TXHIGHPWRLEVEL_BT2) 340 TXHIGHPWRLEVEL_BT2)
305 writeval -= 0x0c0c0c0c; 341 writeval = writeval - 0x0c0c0c0c;
306 *(outval + rf) = writeval; 342 *(p_outwriteval + rf) = writeval;
307 } 343 }
308} 344}
309 345
310static void write_ofdm_pwr(struct ieee80211_hw *hw, u8 index, u32 *pvalue) 346static void _rtl88e_write_ofdm_power_reg(struct ieee80211_hw *hw,
347 u8 index, u32 *value)
311{ 348{
312 struct rtl_priv *rtlpriv = rtl_priv(hw); 349 struct rtl_priv *rtlpriv = rtl_priv(hw);
313 u16 regoffset_a[6] = { 350 u16 regoffset_a[6] = {
@@ -325,16 +362,16 @@ static void write_ofdm_pwr(struct ieee80211_hw *hw, u8 index, u32 *pvalue)
325 u16 regoffset; 362 u16 regoffset;
326 363
327 for (rf = 0; rf < 2; rf++) { 364 for (rf = 0; rf < 2; rf++) {
328 writeval = pvalue[rf]; 365 writeval = value[rf];
329 for (i = 0; i < 4; i++) { 366 for (i = 0; i < 4; i++) {
330 pwr_val[i] = (u8) ((writeval & (0x7f << 367 pwr_val[i] = (u8)((writeval & (0x7f <<
331 (i * 8))) >> (i * 8)); 368 (i * 8))) >> (i * 8));
332 369
333 if (pwr_val[i] > RF6052_MAX_TX_PWR) 370 if (pwr_val[i] > RF6052_MAX_TX_PWR)
334 pwr_val[i] = RF6052_MAX_TX_PWR; 371 pwr_val[i] = RF6052_MAX_TX_PWR;
335 } 372 }
336 writeval = (pwr_val[3] << 24) | (pwr_val[2] << 16) | 373 writeval = (pwr_val[3] << 24) | (pwr_val[2] << 16) |
337 (pwr_val[1] << 8) | pwr_val[0]; 374 (pwr_val[1] << 8) | pwr_val[0];
338 375
339 if (rf == 0) 376 if (rf == 0)
340 regoffset = regoffset_a[index]; 377 regoffset = regoffset_a[index];
@@ -348,24 +385,27 @@ static void write_ofdm_pwr(struct ieee80211_hw *hw, u8 index, u32 *pvalue)
348} 385}
349 386
350void rtl88e_phy_rf6052_set_ofdm_txpower(struct ieee80211_hw *hw, 387void rtl88e_phy_rf6052_set_ofdm_txpower(struct ieee80211_hw *hw,
351 u8 *pwrlvlofdm, 388 u8 *ppowerlevel_ofdm,
352 u8 *pwrlvlbw20, 389 u8 *ppowerlevel_bw20,
353 u8 *pwrlvlbw40, u8 chan) 390 u8 *ppowerlevel_bw40, u8 channel)
354{ 391{
355 u32 writeval[2], base0[2], base1[2]; 392 u32 writeval[2], powerbase0[2], powerbase1[2];
356 u8 index; 393 u8 index;
357 u8 direction; 394 u8 direction;
358 u32 pwrtrac_value; 395 u32 pwrtrac_value;
359 396
360 rtl88e_phy_get_power_base(hw, pwrlvlofdm, pwrlvlbw20, 397 rtl88e_phy_get_power_base(hw, ppowerlevel_ofdm,
361 pwrlvlbw40, chan, &base0[0], 398 ppowerlevel_bw20, ppowerlevel_bw40,
362 &base1[0]); 399 channel, &powerbase0[0], &powerbase1[0]);
363 400
364 rtl88e_dm_txpower_track_adjust(hw, 1, &direction, &pwrtrac_value); 401 rtl88e_dm_txpower_track_adjust(hw, 1, &direction, &pwrtrac_value);
365 402
366 for (index = 0; index < 6; index++) { 403 for (index = 0; index < 6; index++) {
367 get_txpwr_by_reg(hw, chan, index, &base0[0], &base1[0], 404 _rtl88e_get_txpower_writeval_by_regulatory(hw,
368 &writeval[0]); 405 channel, index,
406 &powerbase0[0],
407 &powerbase1[0],
408 &writeval[0]);
369 if (direction == 1) { 409 if (direction == 1) {
370 writeval[0] += pwrtrac_value; 410 writeval[0] += pwrtrac_value;
371 writeval[1] += pwrtrac_value; 411 writeval[1] += pwrtrac_value;
@@ -373,15 +413,28 @@ void rtl88e_phy_rf6052_set_ofdm_txpower(struct ieee80211_hw *hw,
373 writeval[0] -= pwrtrac_value; 413 writeval[0] -= pwrtrac_value;
374 writeval[1] -= pwrtrac_value; 414 writeval[1] -= pwrtrac_value;
375 } 415 }
376 write_ofdm_pwr(hw, index, &writeval[0]); 416 _rtl88e_write_ofdm_power_reg(hw, index, &writeval[0]);
377 } 417 }
378} 418}
379 419
380static bool rf6052_conf_para(struct ieee80211_hw *hw) 420bool rtl88e_phy_rf6052_config(struct ieee80211_hw *hw)
381{ 421{
382 struct rtl_priv *rtlpriv = rtl_priv(hw); 422 struct rtl_priv *rtlpriv = rtl_priv(hw);
383 struct rtl_phy *rtlphy = &(rtlpriv->phy); 423 struct rtl_phy *rtlphy = &(rtlpriv->phy);
384 u32 u4val = 0; 424
425 if (rtlphy->rf_type == RF_1T1R)
426 rtlphy->num_total_rfpath = 1;
427 else
428 rtlphy->num_total_rfpath = 2;
429
430 return _rtl88e_phy_rf6052_config_parafile(hw);
431}
432
433static bool _rtl88e_phy_rf6052_config_parafile(struct ieee80211_hw *hw)
434{
435 struct rtl_priv *rtlpriv = rtl_priv(hw);
436 struct rtl_phy *rtlphy = &rtlpriv->phy;
437 u32 u4_regvalue = 0;
385 u8 rfpath; 438 u8 rfpath;
386 bool rtstatus = true; 439 bool rtstatus = true;
387 struct bb_reg_def *pphyreg; 440 struct bb_reg_def *pphyreg;
@@ -392,12 +445,12 @@ static bool rf6052_conf_para(struct ieee80211_hw *hw)
392 switch (rfpath) { 445 switch (rfpath) {
393 case RF90_PATH_A: 446 case RF90_PATH_A:
394 case RF90_PATH_C: 447 case RF90_PATH_C:
395 u4val = rtl_get_bbreg(hw, pphyreg->rfintfs, 448 u4_regvalue = rtl_get_bbreg(hw, pphyreg->rfintfs,
396 BRFSI_RFENV); 449 BRFSI_RFENV);
397 break; 450 break;
398 case RF90_PATH_B: 451 case RF90_PATH_B:
399 case RF90_PATH_D: 452 case RF90_PATH_D:
400 u4val = rtl_get_bbreg(hw, pphyreg->rfintfs, 453 u4_regvalue = rtl_get_bbreg(hw, pphyreg->rfintfs,
401 BRFSI_RFENV << 16); 454 BRFSI_RFENV << 16);
402 break; 455 break;
403 } 456 }
@@ -418,11 +471,11 @@ static bool rf6052_conf_para(struct ieee80211_hw *hw)
418 switch (rfpath) { 471 switch (rfpath) {
419 case RF90_PATH_A: 472 case RF90_PATH_A:
420 rtstatus = rtl88e_phy_config_rf_with_headerfile(hw, 473 rtstatus = rtl88e_phy_config_rf_with_headerfile(hw,
421 (enum radio_path)rfpath); 474 (enum radio_path)rfpath);
422 break; 475 break;
423 case RF90_PATH_B: 476 case RF90_PATH_B:
424 rtstatus = rtl88e_phy_config_rf_with_headerfile(hw, 477 rtstatus = rtl88e_phy_config_rf_with_headerfile(hw,
425 (enum radio_path)rfpath); 478 (enum radio_path)rfpath);
426 break; 479 break;
427 case RF90_PATH_C: 480 case RF90_PATH_C:
428 break; 481 break;
@@ -433,12 +486,13 @@ static bool rf6052_conf_para(struct ieee80211_hw *hw)
433 switch (rfpath) { 486 switch (rfpath) {
434 case RF90_PATH_A: 487 case RF90_PATH_A:
435 case RF90_PATH_C: 488 case RF90_PATH_C:
436 rtl_set_bbreg(hw, pphyreg->rfintfs, BRFSI_RFENV, u4val); 489 rtl_set_bbreg(hw, pphyreg->rfintfs,
490 BRFSI_RFENV, u4_regvalue);
437 break; 491 break;
438 case RF90_PATH_B: 492 case RF90_PATH_B:
439 case RF90_PATH_D: 493 case RF90_PATH_D:
440 rtl_set_bbreg(hw, pphyreg->rfintfs, BRFSI_RFENV << 16, 494 rtl_set_bbreg(hw, pphyreg->rfintfs,
441 u4val); 495 BRFSI_RFENV << 16, u4_regvalue);
442 break; 496 break;
443 } 497 }
444 498
@@ -447,21 +501,9 @@ static bool rf6052_conf_para(struct ieee80211_hw *hw)
447 "Radio[%d] Fail!!", rfpath); 501 "Radio[%d] Fail!!", rfpath);
448 return false; 502 return false;
449 } 503 }
504
450 } 505 }
451 506
452 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE, "\n"); 507 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE, "\n");
453 return rtstatus; 508 return rtstatus;
454} 509}
455
456bool rtl88e_phy_rf6052_config(struct ieee80211_hw *hw)
457{
458 struct rtl_priv *rtlpriv = rtl_priv(hw);
459 struct rtl_phy *rtlphy = &(rtlpriv->phy);
460
461 if (rtlphy->rf_type == RF_1T1R)
462 rtlphy->num_total_rfpath = 1;
463 else
464 rtlphy->num_total_rfpath = 2;
465
466 return rf6052_conf_para(hw);
467}
diff --git a/drivers/net/wireless/rtlwifi/rtl8188ee/rf.h b/drivers/net/wireless/rtlwifi/rtl8188ee/rf.h
index a39a2a3dbcc9..5c1472d88fd4 100644
--- a/drivers/net/wireless/rtlwifi/rtl8188ee/rf.h
+++ b/drivers/net/wireless/rtlwifi/rtl8188ee/rf.h
@@ -11,10 +11,6 @@
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details. 12 * more details.
13 * 13 *
14 * You should have received a copy of the GNU General Public License along with
15 * this program; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
17 *
18 * The full GNU General Public License is included in this distribution in the 14 * The full GNU General Public License is included in this distribution in the
19 * file called LICENSE. 15 * file called LICENSE.
20 * 16 *
@@ -40,7 +36,8 @@ void rtl88e_phy_rf6052_set_cck_txpower(struct ieee80211_hw *hw,
40void rtl88e_phy_rf6052_set_ofdm_txpower(struct ieee80211_hw *hw, 36void rtl88e_phy_rf6052_set_ofdm_txpower(struct ieee80211_hw *hw,
41 u8 *ppowerlevel_ofdm, 37 u8 *ppowerlevel_ofdm,
42 u8 *ppowerlevel_bw20, 38 u8 *ppowerlevel_bw20,
43 u8 *ppowerlevel_bw40, u8 channel); 39 u8 *ppowerlevel_bw40,
40 u8 channel);
44bool rtl88e_phy_rf6052_config(struct ieee80211_hw *hw); 41bool rtl88e_phy_rf6052_config(struct ieee80211_hw *hw);
45 42
46#endif 43#endif
diff --git a/drivers/net/wireless/rtlwifi/rtl8188ee/sw.c b/drivers/net/wireless/rtlwifi/rtl8188ee/sw.c
index 631b6907c17d..ab7dbfb2623f 100644
--- a/drivers/net/wireless/rtlwifi/rtl8188ee/sw.c
+++ b/drivers/net/wireless/rtlwifi/rtl8188ee/sw.c
@@ -11,10 +11,6 @@
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details. 12 * more details.
13 * 13 *
14 * You should have received a copy of the GNU General Public License along with
15 * this program; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
17 *
18 * The full GNU General Public License is included in this distribution in the 14 * The full GNU General Public License is included in this distribution in the
19 * file called LICENSE. 15 * file called LICENSE.
20 * 16 *
@@ -30,7 +26,6 @@
30#include "../wifi.h" 26#include "../wifi.h"
31#include "../core.h" 27#include "../core.h"
32#include "../pci.h" 28#include "../pci.h"
33#include "../base.h"
34#include "reg.h" 29#include "reg.h"
35#include "def.h" 30#include "def.h"
36#include "phy.h" 31#include "phy.h"
@@ -122,7 +117,7 @@ int rtl88e_init_sw_vars(struct ieee80211_hw *hw)
122 0); 117 0);
123 118
124 rtlpci->irq_mask[0] = 119 rtlpci->irq_mask[0] =
125 (u32) (IMR_PSTIMEOUT | 120 (u32)(IMR_PSTIMEOUT |
126 IMR_HSISR_IND_ON_INT | 121 IMR_HSISR_IND_ON_INT |
127 IMR_C2HCMD | 122 IMR_C2HCMD |
128 IMR_HIGHDOK | 123 IMR_HIGHDOK |
@@ -143,6 +138,8 @@ int rtl88e_init_sw_vars(struct ieee80211_hw *hw)
143 rtlpriv->psc.inactiveps = rtlpriv->cfg->mod_params->inactiveps; 138 rtlpriv->psc.inactiveps = rtlpriv->cfg->mod_params->inactiveps;
144 rtlpriv->psc.swctrl_lps = rtlpriv->cfg->mod_params->swctrl_lps; 139 rtlpriv->psc.swctrl_lps = rtlpriv->cfg->mod_params->swctrl_lps;
145 rtlpriv->psc.fwctrl_lps = rtlpriv->cfg->mod_params->fwctrl_lps; 140 rtlpriv->psc.fwctrl_lps = rtlpriv->cfg->mod_params->fwctrl_lps;
141 if (rtlpriv->cfg->mod_params->disable_watchdog)
142 pr_info("watchdog disabled\n");
146 if (!rtlpriv->psc.inactiveps) 143 if (!rtlpriv->psc.inactiveps)
147 pr_info("rtl8188ee: Power Save off (module option)\n"); 144 pr_info("rtl8188ee: Power Save off (module option)\n");
148 if (!rtlpriv->psc.fwctrl_lps) 145 if (!rtlpriv->psc.fwctrl_lps)
@@ -199,7 +196,7 @@ int rtl88e_init_sw_vars(struct ieee80211_hw *hw)
199 init_timer(&rtlpriv->works.fast_antenna_training_timer); 196 init_timer(&rtlpriv->works.fast_antenna_training_timer);
200 setup_timer(&rtlpriv->works.fast_antenna_training_timer, 197 setup_timer(&rtlpriv->works.fast_antenna_training_timer,
201 rtl88e_dm_fast_antenna_training_callback, 198 rtl88e_dm_fast_antenna_training_callback,
202 (unsigned long)hw); 199 (unsigned long)hw);
203 return err; 200 return err;
204} 201}
205 202
@@ -218,6 +215,12 @@ void rtl88e_deinit_sw_vars(struct ieee80211_hw *hw)
218 del_timer_sync(&rtlpriv->works.fast_antenna_training_timer); 215 del_timer_sync(&rtlpriv->works.fast_antenna_training_timer);
219} 216}
220 217
218/* get bt coexist status */
219bool rtl88e_get_btc_status(void)
220{
221 return false;
222}
223
221static struct rtl_hal_ops rtl8188ee_hal_ops = { 224static struct rtl_hal_ops rtl8188ee_hal_ops = {
222 .init_sw_vars = rtl88e_init_sw_vars, 225 .init_sw_vars = rtl88e_init_sw_vars,
223 .deinit_sw_vars = rtl88e_deinit_sw_vars, 226 .deinit_sw_vars = rtl88e_deinit_sw_vars,
@@ -246,11 +249,12 @@ static struct rtl_hal_ops rtl8188ee_hal_ops = {
246 .set_bw_mode = rtl88e_phy_set_bw_mode, 249 .set_bw_mode = rtl88e_phy_set_bw_mode,
247 .switch_channel = rtl88e_phy_sw_chnl, 250 .switch_channel = rtl88e_phy_sw_chnl,
248 .dm_watchdog = rtl88e_dm_watchdog, 251 .dm_watchdog = rtl88e_dm_watchdog,
249 .scan_operation_backup = rtl_phy_scan_operation_backup, 252 .scan_operation_backup = rtl88e_phy_scan_operation_backup,
250 .set_rf_power_state = rtl88e_phy_set_rf_power_state, 253 .set_rf_power_state = rtl88e_phy_set_rf_power_state,
251 .led_control = rtl88ee_led_control, 254 .led_control = rtl88ee_led_control,
252 .set_desc = rtl88ee_set_desc, 255 .set_desc = rtl88ee_set_desc,
253 .get_desc = rtl88ee_get_desc, 256 .get_desc = rtl88ee_get_desc,
257 .is_tx_desc_closed = rtl88ee_is_tx_desc_closed,
254 .tx_polling = rtl88ee_tx_polling, 258 .tx_polling = rtl88ee_tx_polling,
255 .enable_hw_sec = rtl88ee_enable_hw_security_config, 259 .enable_hw_sec = rtl88ee_enable_hw_security_config,
256 .set_key = rtl88ee_set_key, 260 .set_key = rtl88ee_set_key,
@@ -259,14 +263,17 @@ static struct rtl_hal_ops rtl8188ee_hal_ops = {
259 .set_bbreg = rtl88e_phy_set_bb_reg, 263 .set_bbreg = rtl88e_phy_set_bb_reg,
260 .get_rfreg = rtl88e_phy_query_rf_reg, 264 .get_rfreg = rtl88e_phy_query_rf_reg,
261 .set_rfreg = rtl88e_phy_set_rf_reg, 265 .set_rfreg = rtl88e_phy_set_rf_reg,
266 .get_btc_status = rtl88e_get_btc_status,
267 .rx_command_packet = rtl88ee_rx_command_packet,
268
262}; 269};
263 270
264static struct rtl_mod_params rtl88ee_mod_params = { 271static struct rtl_mod_params rtl88ee_mod_params = {
265 .sw_crypto = false, 272 .sw_crypto = false,
266 .inactiveps = true, 273 .inactiveps = false,
267 .swctrl_lps = false, 274 .swctrl_lps = false,
268 .fwctrl_lps = true, 275 .fwctrl_lps = false,
269 .msi_support = false, 276 .msi_support = true,
270 .debug = DBG_EMERG, 277 .debug = DBG_EMERG,
271}; 278};
272 279
@@ -274,6 +281,7 @@ static struct rtl_hal_cfg rtl88ee_hal_cfg = {
274 .bar_id = 2, 281 .bar_id = 2,
275 .write_readback = true, 282 .write_readback = true,
276 .name = "rtl88e_pci", 283 .name = "rtl88e_pci",
284 .fw_name = "rtlwifi/rtl8188efw.bin",
277 .ops = &rtl8188ee_hal_ops, 285 .ops = &rtl8188ee_hal_ops,
278 .mod_params = &rtl88ee_mod_params, 286 .mod_params = &rtl88ee_mod_params,
279 287
@@ -285,6 +293,9 @@ static struct rtl_hal_cfg rtl88ee_hal_cfg = {
285 .maps[MAC_RCR_ACRC32] = ACRC32, 293 .maps[MAC_RCR_ACRC32] = ACRC32,
286 .maps[MAC_RCR_ACF] = ACF, 294 .maps[MAC_RCR_ACF] = ACF,
287 .maps[MAC_RCR_AAP] = AAP, 295 .maps[MAC_RCR_AAP] = AAP,
296 .maps[MAC_HIMR] = REG_HIMR,
297 .maps[MAC_HIMRE] = REG_HIMRE,
298 .maps[MAC_HSISR] = REG_HSISR,
288 299
289 .maps[EFUSE_ACCESS] = REG_EFUSE_ACCESS, 300 .maps[EFUSE_ACCESS] = REG_EFUSE_ACCESS,
290 301
@@ -345,6 +356,7 @@ static struct rtl_hal_cfg rtl88ee_hal_cfg = {
345 .maps[RTL_IMR_VIDOK] = IMR_VIDOK, 356 .maps[RTL_IMR_VIDOK] = IMR_VIDOK,
346 .maps[RTL_IMR_VODOK] = IMR_VODOK, 357 .maps[RTL_IMR_VODOK] = IMR_VODOK,
347 .maps[RTL_IMR_ROK] = IMR_ROK, 358 .maps[RTL_IMR_ROK] = IMR_ROK,
359 .maps[RTL_IMR_HSISR_IND] = IMR_HSISR_IND_ON_INT,
348 .maps[RTL_IBSS_INT_MASKS] = (IMR_BCNDMAINT0 | IMR_TBDOK | IMR_TBDER), 360 .maps[RTL_IBSS_INT_MASKS] = (IMR_BCNDMAINT0 | IMR_TBDOK | IMR_TBDER),
349 361
350 .maps[RTL_RC_CCK_RATE1M] = DESC92C_RATE1M, 362 .maps[RTL_RC_CCK_RATE1M] = DESC92C_RATE1M,
@@ -364,7 +376,7 @@ static struct rtl_hal_cfg rtl88ee_hal_cfg = {
364 .maps[RTL_RC_HT_RATEMCS15] = DESC92C_RATEMCS15, 376 .maps[RTL_RC_HT_RATEMCS15] = DESC92C_RATEMCS15,
365}; 377};
366 378
367static const struct pci_device_id rtl88ee_pci_ids[] = { 379static struct pci_device_id rtl88ee_pci_ids[] = {
368 {RTL_PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0x8179, rtl88ee_hal_cfg)}, 380 {RTL_PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0x8179, rtl88ee_hal_cfg)},
369 {}, 381 {},
370}; 382};
@@ -384,12 +396,15 @@ module_param_named(ips, rtl88ee_mod_params.inactiveps, bool, 0444);
384module_param_named(swlps, rtl88ee_mod_params.swctrl_lps, bool, 0444); 396module_param_named(swlps, rtl88ee_mod_params.swctrl_lps, bool, 0444);
385module_param_named(fwlps, rtl88ee_mod_params.fwctrl_lps, bool, 0444); 397module_param_named(fwlps, rtl88ee_mod_params.fwctrl_lps, bool, 0444);
386module_param_named(msi, rtl88ee_mod_params.msi_support, bool, 0444); 398module_param_named(msi, rtl88ee_mod_params.msi_support, bool, 0444);
399module_param_named(disable_watchdog, rtl88ee_mod_params.disable_watchdog,
400 bool, 0444);
387MODULE_PARM_DESC(swenc, "Set to 1 for software crypto (default 0)\n"); 401MODULE_PARM_DESC(swenc, "Set to 1 for software crypto (default 0)\n");
388MODULE_PARM_DESC(ips, "Set to 0 to not use link power save (default 1)\n"); 402MODULE_PARM_DESC(ips, "Set to 0 to not use link power save (default 1)\n");
389MODULE_PARM_DESC(swlps, "Set to 1 to use SW control power save (default 0)\n"); 403MODULE_PARM_DESC(swlps, "Set to 1 to use SW control power save (default 0)\n");
390MODULE_PARM_DESC(fwlps, "Set to 1 to use FW control power save (default 1)\n"); 404MODULE_PARM_DESC(fwlps, "Set to 1 to use FW control power save (default 1)\n");
391MODULE_PARM_DESC(msi, "Set to 1 to use MSI interrupts mode (default 0)\n"); 405MODULE_PARM_DESC(msi, "Set to 1 to use MSI interrupts mode (default 1)\n");
392MODULE_PARM_DESC(debug, "Set debug level (0-5) (default 0)"); 406MODULE_PARM_DESC(debug, "Set debug level (0-5) (default 0)");
407MODULE_PARM_DESC(disable_watchdog, "Set to 1 to disable the watchdog (default 0)\n");
393 408
394static SIMPLE_DEV_PM_OPS(rtlwifi_pm_ops, rtl_pci_suspend, rtl_pci_resume); 409static SIMPLE_DEV_PM_OPS(rtlwifi_pm_ops, rtl_pci_suspend, rtl_pci_resume);
395 410
diff --git a/drivers/net/wireless/rtlwifi/rtl8188ee/sw.h b/drivers/net/wireless/rtlwifi/rtl8188ee/sw.h
index 85e02b3bdff8..22398c3753a6 100644
--- a/drivers/net/wireless/rtlwifi/rtl8188ee/sw.h
+++ b/drivers/net/wireless/rtlwifi/rtl8188ee/sw.h
@@ -11,10 +11,6 @@
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details. 12 * more details.
13 * 13 *
14 * You should have received a copy of the GNU General Public License along with
15 * this program; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
17 *
18 * The full GNU General Public License is included in this distribution in the 14 * The full GNU General Public License is included in this distribution in the
19 * file called LICENSE. 15 * file called LICENSE.
20 * 16 *
@@ -32,5 +28,7 @@
32 28
33int rtl88e_init_sw_vars(struct ieee80211_hw *hw); 29int rtl88e_init_sw_vars(struct ieee80211_hw *hw);
34void rtl88e_deinit_sw_vars(struct ieee80211_hw *hw); 30void rtl88e_deinit_sw_vars(struct ieee80211_hw *hw);
31bool rtl88e_get_btc_status(void);
32
35 33
36#endif 34#endif
diff --git a/drivers/net/wireless/rtlwifi/rtl8188ee/table.c b/drivers/net/wireless/rtlwifi/rtl8188ee/table.c
index fad373f97b2c..68bcb7fe6a65 100644
--- a/drivers/net/wireless/rtlwifi/rtl8188ee/table.c
+++ b/drivers/net/wireless/rtlwifi/rtl8188ee/table.c
@@ -11,10 +11,6 @@
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details. 12 * more details.
13 * 13 *
14 * You should have received a copy of the GNU General Public License along with
15 * this program; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
17 *
18 * The full GNU General Public License is included in this distribution in the 14 * The full GNU General Public License is included in this distribution in the
19 * file called LICENSE. 15 * file called LICENSE.
20 * 16 *
@@ -30,7 +26,6 @@
30 *****************************************************************************/ 26 *****************************************************************************/
31 27
32#include "table.h" 28#include "table.h"
33
34u32 RTL8188EEPHY_REG_1TARRAY[] = { 29u32 RTL8188EEPHY_REG_1TARRAY[] = {
35 0x800, 0x80040000, 30 0x800, 0x80040000,
36 0x804, 0x00000003, 31 0x804, 0x00000003,
@@ -640,4 +635,5 @@ u32 RTL8188EEAGCTAB_1TARRAY[] = {
640 0xC78, 0x407D0001, 635 0xC78, 0x407D0001,
641 0xC78, 0x407E0001, 636 0xC78, 0x407E0001,
642 0xC78, 0x407F0001, 637 0xC78, 0x407F0001,
638
643}; 639};
diff --git a/drivers/net/wireless/rtlwifi/rtl8188ee/table.h b/drivers/net/wireless/rtlwifi/rtl8188ee/table.h
index c1218e835129..403c4ddd236f 100644
--- a/drivers/net/wireless/rtlwifi/rtl8188ee/table.h
+++ b/drivers/net/wireless/rtlwifi/rtl8188ee/table.h
@@ -11,10 +11,6 @@
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details. 12 * more details.
13 * 13 *
14 * You should have received a copy of the GNU General Public License along with
15 * this program; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
17 *
18 * The full GNU General Public License is included in this distribution in the 14 * The full GNU General Public License is included in this distribution in the
19 * file called LICENSE. 15 * file called LICENSE.
20 * 16 *
@@ -35,13 +31,13 @@
35#include <linux/types.h> 31#include <linux/types.h>
36#define RTL8188EEPHY_REG_1TARRAYLEN 382 32#define RTL8188EEPHY_REG_1TARRAYLEN 382
37extern u32 RTL8188EEPHY_REG_1TARRAY[]; 33extern u32 RTL8188EEPHY_REG_1TARRAY[];
38#define RTL8188EEPHY_REG_ARRAY_PGLEN 264 34#define RTL8188EEPHY_REG_ARRAY_PGLEN 264
39extern u32 RTL8188EEPHY_REG_ARRAY_PG[]; 35extern u32 RTL8188EEPHY_REG_ARRAY_PG[];
40#define RTL8188EE_RADIOA_1TARRAYLEN 190 36#define RTL8188EE_RADIOA_1TARRAYLEN 190
41extern u32 RTL8188EE_RADIOA_1TARRAY[]; 37extern u32 RTL8188EE_RADIOA_1TARRAY[];
42#define RTL8188EEMAC_1T_ARRAYLEN 180 38#define RTL8188EEMAC_1T_ARRAYLEN 180
43extern u32 RTL8188EEMAC_1T_ARRAY[]; 39extern u32 RTL8188EEMAC_1T_ARRAY[];
44#define RTL8188EEAGCTAB_1TARRAYLEN 256 40#define RTL8188EEAGCTAB_1TARRAYLEN 256
45extern u32 RTL8188EEAGCTAB_1TARRAY[]; 41extern u32 RTL8188EEAGCTAB_1TARRAY[];
46 42
47#endif 43#endif
diff --git a/drivers/net/wireless/rtlwifi/rtl8188ee/trx.c b/drivers/net/wireless/rtlwifi/rtl8188ee/trx.c
index 5b4c225396f2..cf56ec8791ba 100644
--- a/drivers/net/wireless/rtlwifi/rtl8188ee/trx.c
+++ b/drivers/net/wireless/rtlwifi/rtl8188ee/trx.c
@@ -11,10 +11,6 @@
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details. 12 * more details.
13 * 13 *
14 * You should have received a copy of the GNU General Public License along with
15 * this program; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
17 *
18 * The full GNU General Public License is included in this distribution in the 14 * The full GNU General Public License is included in this distribution in the
19 * file called LICENSE. 15 * file called LICENSE.
20 * 16 *
@@ -37,6 +33,7 @@
37#include "trx.h" 33#include "trx.h"
38#include "led.h" 34#include "led.h"
39#include "dm.h" 35#include "dm.h"
36#include "phy.h"
40 37
41static u8 _rtl88ee_map_hwqueue_to_fwqueue(struct sk_buff *skb, u8 hw_queue) 38static u8 _rtl88ee_map_hwqueue_to_fwqueue(struct sk_buff *skb, u8 hw_queue)
42{ 39{
@@ -50,6 +47,164 @@ static u8 _rtl88ee_map_hwqueue_to_fwqueue(struct sk_buff *skb, u8 hw_queue)
50 return skb->priority; 47 return skb->priority;
51} 48}
52 49
50/* mac80211's rate_idx is like this:
51 *
52 * 2.4G band:rx_status->band == IEEE80211_BAND_2GHZ
53 *
54 * B/G rate:
55 * (rx_status->flag & RX_FLAG_HT) = 0,
56 * DESC92C_RATE1M-->DESC92C_RATE54M ==> idx is 0-->11,
57 *
58 * N rate:
59 * (rx_status->flag & RX_FLAG_HT) = 1,
60 * DESC92C_RATEMCS0-->DESC92C_RATEMCS15 ==> idx is 0-->15
61 *
62 * 5G band:rx_status->band == IEEE80211_BAND_5GHZ
63 * A rate:
64 * (rx_status->flag & RX_FLAG_HT) = 0,
65 * DESC92C_RATE6M-->DESC92C_RATE54M ==> idx is 0-->7,
66 *
67 * N rate:
68 * (rx_status->flag & RX_FLAG_HT) = 1,
69 * DESC92C_RATEMCS0-->DESC92C_RATEMCS15 ==> idx is 0-->15
70 */
71static int _rtl88ee_rate_mapping(struct ieee80211_hw *hw,
72 bool isht, u8 desc_rate)
73{
74 int rate_idx;
75
76 if (!isht) {
77 if (IEEE80211_BAND_2GHZ == hw->conf.chandef.chan->band) {
78 switch (desc_rate) {
79 case DESC92C_RATE1M:
80 rate_idx = 0;
81 break;
82 case DESC92C_RATE2M:
83 rate_idx = 1;
84 break;
85 case DESC92C_RATE5_5M:
86 rate_idx = 2;
87 break;
88 case DESC92C_RATE11M:
89 rate_idx = 3;
90 break;
91 case DESC92C_RATE6M:
92 rate_idx = 4;
93 break;
94 case DESC92C_RATE9M:
95 rate_idx = 5;
96 break;
97 case DESC92C_RATE12M:
98 rate_idx = 6;
99 break;
100 case DESC92C_RATE18M:
101 rate_idx = 7;
102 break;
103 case DESC92C_RATE24M:
104 rate_idx = 8;
105 break;
106 case DESC92C_RATE36M:
107 rate_idx = 9;
108 break;
109 case DESC92C_RATE48M:
110 rate_idx = 10;
111 break;
112 case DESC92C_RATE54M:
113 rate_idx = 11;
114 break;
115 default:
116 rate_idx = 0;
117 break;
118 }
119 } else {
120 switch (desc_rate) {
121 case DESC92C_RATE6M:
122 rate_idx = 0;
123 break;
124 case DESC92C_RATE9M:
125 rate_idx = 1;
126 break;
127 case DESC92C_RATE12M:
128 rate_idx = 2;
129 break;
130 case DESC92C_RATE18M:
131 rate_idx = 3;
132 break;
133 case DESC92C_RATE24M:
134 rate_idx = 4;
135 break;
136 case DESC92C_RATE36M:
137 rate_idx = 5;
138 break;
139 case DESC92C_RATE48M:
140 rate_idx = 6;
141 break;
142 case DESC92C_RATE54M:
143 rate_idx = 7;
144 break;
145 default:
146 rate_idx = 0;
147 break;
148 }
149 }
150 } else {
151 switch (desc_rate) {
152 case DESC92C_RATEMCS0:
153 rate_idx = 0;
154 break;
155 case DESC92C_RATEMCS1:
156 rate_idx = 1;
157 break;
158 case DESC92C_RATEMCS2:
159 rate_idx = 2;
160 break;
161 case DESC92C_RATEMCS3:
162 rate_idx = 3;
163 break;
164 case DESC92C_RATEMCS4:
165 rate_idx = 4;
166 break;
167 case DESC92C_RATEMCS5:
168 rate_idx = 5;
169 break;
170 case DESC92C_RATEMCS6:
171 rate_idx = 6;
172 break;
173 case DESC92C_RATEMCS7:
174 rate_idx = 7;
175 break;
176 case DESC92C_RATEMCS8:
177 rate_idx = 8;
178 break;
179 case DESC92C_RATEMCS9:
180 rate_idx = 9;
181 break;
182 case DESC92C_RATEMCS10:
183 rate_idx = 10;
184 break;
185 case DESC92C_RATEMCS11:
186 rate_idx = 11;
187 break;
188 case DESC92C_RATEMCS12:
189 rate_idx = 12;
190 break;
191 case DESC92C_RATEMCS13:
192 rate_idx = 13;
193 break;
194 case DESC92C_RATEMCS14:
195 rate_idx = 14;
196 break;
197 case DESC92C_RATEMCS15:
198 rate_idx = 15;
199 break;
200 default:
201 rate_idx = 0;
202 break;
203 }
204 }
205 return rate_idx;
206}
207
53static void _rtl88ee_query_rxphystatus(struct ieee80211_hw *hw, 208static void _rtl88ee_query_rxphystatus(struct ieee80211_hw *hw,
54 struct rtl_stats *pstatus, u8 *pdesc, 209 struct rtl_stats *pstatus, u8 *pdesc,
55 struct rx_fwinfo_88e *p_drvinfo, 210 struct rx_fwinfo_88e *p_drvinfo,
@@ -59,7 +214,8 @@ static void _rtl88ee_query_rxphystatus(struct ieee80211_hw *hw,
59 struct rtl_priv *rtlpriv = rtl_priv(hw); 214 struct rtl_priv *rtlpriv = rtl_priv(hw);
60 struct rtl_ps_ctl *ppsc = rtl_psc(rtlpriv); 215 struct rtl_ps_ctl *ppsc = rtl_psc(rtlpriv);
61 struct phy_sts_cck_8192s_t *cck_buf; 216 struct phy_sts_cck_8192s_t *cck_buf;
62 struct phy_status_rpt *phystrpt = (struct phy_status_rpt *)p_drvinfo; 217 struct phy_status_rpt *phystrpt =
218 (struct phy_status_rpt *)p_drvinfo;
63 struct rtl_dm *rtldm = rtl_dm(rtl_priv(hw)); 219 struct rtl_dm *rtldm = rtl_dm(rtl_priv(hw));
64 char rx_pwr_all = 0, rx_pwr[4]; 220 char rx_pwr_all = 0, rx_pwr[4];
65 u8 rf_rx_num = 0, evm, pwdb_all; 221 u8 rf_rx_num = 0, evm, pwdb_all;
@@ -72,11 +228,11 @@ static void _rtl88ee_query_rxphystatus(struct ieee80211_hw *hw,
72 pstatus->packet_matchbssid = bpacket_match_bssid; 228 pstatus->packet_matchbssid = bpacket_match_bssid;
73 pstatus->packet_toself = bpacket_toself; 229 pstatus->packet_toself = bpacket_toself;
74 pstatus->packet_beacon = packet_beacon; 230 pstatus->packet_beacon = packet_beacon;
75 pstatus->rx_mimo_sig_qual[0] = -1; 231 pstatus->rx_mimo_signalquality[0] = -1;
76 pstatus->rx_mimo_sig_qual[1] = -1; 232 pstatus->rx_mimo_signalquality[1] = -1;
77 233
78 if (is_cck) { 234 if (is_cck) {
79 u8 cck_hipwr; 235 u8 cck_highpwr;
80 u8 cck_agc_rpt; 236 u8 cck_agc_rpt;
81 /* CCK Driver info Structure is not the same as OFDM packet. */ 237 /* CCK Driver info Structure is not the same as OFDM packet. */
82 cck_buf = (struct phy_sts_cck_8192s_t *)p_drvinfo; 238 cck_buf = (struct phy_sts_cck_8192s_t *)p_drvinfo;
@@ -87,53 +243,58 @@ static void _rtl88ee_query_rxphystatus(struct ieee80211_hw *hw,
87 * hardware (for rate adaptive) 243 * hardware (for rate adaptive)
88 */ 244 */
89 if (ppsc->rfpwr_state == ERFON) 245 if (ppsc->rfpwr_state == ERFON)
90 cck_hipwr = rtl_get_bbreg(hw, RFPGA0_XA_HSSIPARAMETER2, 246 cck_highpwr =
247 (u8)rtl_get_bbreg(hw, RFPGA0_XA_HSSIPARAMETER2,
91 BIT(9)); 248 BIT(9));
92 else 249 else
93 cck_hipwr = false; 250 cck_highpwr = false;
94 251
95 lan_idx = ((cck_agc_rpt & 0xE0) >> 5); 252 lan_idx = ((cck_agc_rpt & 0xE0) >> 5);
96 vga_idx = (cck_agc_rpt & 0x1f); 253 vga_idx = (cck_agc_rpt & 0x1f);
97 switch (lan_idx) { 254 switch (lan_idx) {
98 case 7: 255 case 7:
99 if (vga_idx <= 27) 256 if (vga_idx <= 27)
100 rx_pwr_all = -100 + 2 * (27 - vga_idx); 257 /*VGA_idx = 27~2*/
258 rx_pwr_all = -100 + 2*(27-vga_idx);
101 else 259 else
102 rx_pwr_all = -100; 260 rx_pwr_all = -100;
103 break; 261 break;
104 case 6: 262 case 6:
105 rx_pwr_all = -48 + 2 * (2 - vga_idx); /*VGA_idx = 2~0*/ 263 /*VGA_idx = 2~0*/
264 rx_pwr_all = -48 + 2*(2-vga_idx);
106 break; 265 break;
107 case 5: 266 case 5:
108 rx_pwr_all = -42 + 2 * (7 - vga_idx); /*VGA_idx = 7~5*/ 267 /*VGA_idx = 7~5*/
268 rx_pwr_all = -42 + 2*(7-vga_idx);
109 break; 269 break;
110 case 4: 270 case 4:
111 rx_pwr_all = -36 + 2 * (7 - vga_idx); /*VGA_idx = 7~4*/ 271 /*VGA_idx = 7~4*/
272 rx_pwr_all = -36 + 2*(7-vga_idx);
112 break; 273 break;
113 case 3: 274 case 3:
114 rx_pwr_all = -24 + 2 * (7 - vga_idx); /*VGA_idx = 7~0*/ 275 /*VGA_idx = 7~0*/
276 rx_pwr_all = -24 + 2*(7-vga_idx);
115 break; 277 break;
116 case 2: 278 case 2:
117 if (cck_hipwr) 279 if (cck_highpwr)
118 rx_pwr_all = -12 + 2 * (5 - vga_idx); 280 /*VGA_idx = 5~0*/
281 rx_pwr_all = -12 + 2*(5-vga_idx);
119 else 282 else
120 rx_pwr_all = -6 + 2 * (5 - vga_idx); 283 rx_pwr_all = -6 + 2*(5-vga_idx);
121 break; 284 break;
122 case 1: 285 case 1:
123 rx_pwr_all = 8 - 2 * vga_idx; 286 rx_pwr_all = 8-2*vga_idx;
124 break; 287 break;
125 case 0: 288 case 0:
126 rx_pwr_all = 14 - 2 * vga_idx; 289 rx_pwr_all = 14-2*vga_idx;
127 break; 290 break;
128 default: 291 default:
129 break; 292 break;
130 } 293 }
131 rx_pwr_all += 6; 294 rx_pwr_all += 6;
132 pwdb_all = rtl_query_rxpwrpercentage(rx_pwr_all); 295 pwdb_all = rtl_query_rxpwrpercentage(rx_pwr_all);
133 /* CCK gain is smaller than OFDM/MCS gain, 296 /* CCK gain is smaller than OFDM/MCS gain, */
134 * so we add gain diff by experiences, 297 /* so we add gain diff by experiences, the val is 6 */
135 * the val is 6
136 */
137 pwdb_all += 6; 298 pwdb_all += 6;
138 if (pwdb_all > 100) 299 if (pwdb_all > 100)
139 pwdb_all = 100; 300 pwdb_all = 100;
@@ -148,10 +309,10 @@ static void _rtl88ee_query_rxphystatus(struct ieee80211_hw *hw,
148 pwdb_all -= 8; 309 pwdb_all -= 8;
149 else if (pwdb_all > 4 && pwdb_all <= 14) 310 else if (pwdb_all > 4 && pwdb_all <= 14)
150 pwdb_all -= 4; 311 pwdb_all -= 4;
151 if (cck_hipwr == false) { 312 if (!cck_highpwr) {
152 if (pwdb_all >= 80) 313 if (pwdb_all >= 80)
153 pwdb_all = ((pwdb_all - 80)<<1) + 314 pwdb_all = ((pwdb_all-80)<<1) +
154 ((pwdb_all - 80)>>1) + 80; 315 ((pwdb_all-80)>>1) + 80;
155 else if ((pwdb_all <= 78) && (pwdb_all >= 20)) 316 else if ((pwdb_all <= 78) && (pwdb_all >= 20))
156 pwdb_all += 3; 317 pwdb_all += 3;
157 if (pwdb_all > 100) 318 if (pwdb_all > 100)
@@ -165,9 +326,9 @@ static void _rtl88ee_query_rxphystatus(struct ieee80211_hw *hw,
165 if (bpacket_match_bssid) { 326 if (bpacket_match_bssid) {
166 u8 sq; 327 u8 sq;
167 328
168 if (pstatus->rx_pwdb_all > 40) { 329 if (pstatus->rx_pwdb_all > 40)
169 sq = 100; 330 sq = 100;
170 } else { 331 else {
171 sq = cck_buf->sq_rpt; 332 sq = cck_buf->sq_rpt;
172 if (sq > 64) 333 if (sq > 64)
173 sq = 0; 334 sq = 0;
@@ -178,8 +339,8 @@ static void _rtl88ee_query_rxphystatus(struct ieee80211_hw *hw,
178 } 339 }
179 340
180 pstatus->signalquality = sq; 341 pstatus->signalquality = sq;
181 pstatus->rx_mimo_sig_qual[0] = sq; 342 pstatus->rx_mimo_signalquality[0] = sq;
182 pstatus->rx_mimo_sig_qual[1] = -1; 343 pstatus->rx_mimo_signalquality[1] = -1;
183 } 344 }
184 } else { 345 } else {
185 rtlpriv->dm.rfpath_rxenable[0] = 346 rtlpriv->dm.rfpath_rxenable[0] =
@@ -191,18 +352,20 @@ static void _rtl88ee_query_rxphystatus(struct ieee80211_hw *hw,
191 if (rtlpriv->dm.rfpath_rxenable[i]) 352 if (rtlpriv->dm.rfpath_rxenable[i])
192 rf_rx_num++; 353 rf_rx_num++;
193 354
194 rx_pwr[i] = ((p_drvinfo->gain_trsw[i] & 0x3f) * 2)-110; 355 rx_pwr[i] = ((p_drvinfo->gain_trsw[i] &
356 0x3f) * 2) - 110;
195 357
196 /* Translate DBM to percentage. */ 358 /* Translate DBM to percentage. */
197 rssi = rtl_query_rxpwrpercentage(rx_pwr[i]); 359 rssi = rtl_query_rxpwrpercentage(rx_pwr[i]);
198 total_rssi += rssi; 360 total_rssi += rssi;
199 361
200 /* Get Rx snr value in DB */ 362 /* Get Rx snr value in DB */
201 rtlpriv->stats.rx_snr_db[i] = p_drvinfo->rxsnr[i] / 2; 363 rtlpriv->stats.rx_snr_db[i] =
364 (long)(p_drvinfo->rxsnr[i] / 2);
202 365
203 /* Record Signal Strength for next packet */ 366 /* Record Signal Strength for next packet */
204 if (bpacket_match_bssid) 367 if (bpacket_match_bssid)
205 pstatus->rx_mimo_signalstrength[i] = (u8) rssi; 368 pstatus->rx_mimo_signalstrength[i] = (u8)rssi;
206 } 369 }
207 370
208 /* (2)PWDB, Average PWDB cacluated by 371 /* (2)PWDB, Average PWDB cacluated by
@@ -227,11 +390,13 @@ static void _rtl88ee_query_rxphystatus(struct ieee80211_hw *hw,
227 390
228 if (bpacket_match_bssid) { 391 if (bpacket_match_bssid) {
229 /* Fill value in RFD, Get the first 392 /* Fill value in RFD, Get the first
230 * spatial stream only 393 * spatial stream onlyi
231 */ 394 */
232 if (i == 0) 395 if (i == 0)
233 pstatus->signalquality = evm & 0xff; 396 pstatus->signalquality =
234 pstatus->rx_mimo_sig_qual[i] = evm & 0xff; 397 (u8)(evm & 0xff);
398 pstatus->rx_mimo_signalquality[i] =
399 (u8)(evm & 0xff);
235 } 400 }
236 } 401 }
237 } 402 }
@@ -241,10 +406,10 @@ static void _rtl88ee_query_rxphystatus(struct ieee80211_hw *hw,
241 */ 406 */
242 if (is_cck) 407 if (is_cck)
243 pstatus->signalstrength = (u8)(rtl_signal_scale_mapping(hw, 408 pstatus->signalstrength = (u8)(rtl_signal_scale_mapping(hw,
244 pwdb_all)); 409 pwdb_all));
245 else if (rf_rx_num != 0) 410 else if (rf_rx_num != 0)
246 pstatus->signalstrength = (u8)(rtl_signal_scale_mapping(hw, 411 pstatus->signalstrength = (u8)(rtl_signal_scale_mapping(hw,
247 total_rssi /= rf_rx_num)); 412 total_rssi /= rf_rx_num));
248 /*HW antenna diversity*/ 413 /*HW antenna diversity*/
249 rtldm->fat_table.antsel_rx_keep_0 = phystrpt->ant_sel; 414 rtldm->fat_table.antsel_rx_keep_0 = phystrpt->ant_sel;
250 rtldm->fat_table.antsel_rx_keep_1 = phystrpt->ant_sel_b; 415 rtldm->fat_table.antsel_rx_keep_1 = phystrpt->ant_sel_b;
@@ -256,34 +421,39 @@ static void _rtl88ee_smart_antenna(struct ieee80211_hw *hw,
256{ 421{
257 struct rtl_dm *rtldm = rtl_dm(rtl_priv(hw)); 422 struct rtl_dm *rtldm = rtl_dm(rtl_priv(hw));
258 struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw)); 423 struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw));
259 u8 ant_mux; 424 u8 antsel_tr_mux;
260 struct fast_ant_training *pfat = &(rtldm->fat_table); 425 struct fast_ant_training *pfat_table = &rtldm->fat_table;
261 426
262 if (rtlefuse->antenna_div_type == CG_TRX_SMART_ANTDIV) { 427 if (rtlefuse->antenna_div_type == CG_TRX_SMART_ANTDIV) {
263 if (pfat->fat_state == FAT_TRAINING_STATE) { 428 if (pfat_table->fat_state == FAT_TRAINING_STATE) {
264 if (pstatus->packet_toself) { 429 if (pstatus->packet_toself) {
265 ant_mux = (pfat->antsel_rx_keep_2 << 2) | 430 antsel_tr_mux =
266 (pfat->antsel_rx_keep_1 << 1) | 431 (pfat_table->antsel_rx_keep_2 << 2) |
267 pfat->antsel_rx_keep_0; 432 (pfat_table->antsel_rx_keep_1 << 1) |
268 pfat->ant_sum[ant_mux] += pstatus->rx_pwdb_all; 433 pfat_table->antsel_rx_keep_0;
269 pfat->ant_cnt[ant_mux]++; 434 pfat_table->ant_sum[antsel_tr_mux] +=
435 pstatus->rx_pwdb_all;
436 pfat_table->ant_cnt[antsel_tr_mux]++;
270 } 437 }
271 } 438 }
272 } else if ((rtlefuse->antenna_div_type == CG_TRX_HW_ANTDIV) || 439 } else if ((rtlefuse->antenna_div_type == CG_TRX_HW_ANTDIV) ||
273 (rtlefuse->antenna_div_type == CGCS_RX_HW_ANTDIV)) { 440 (rtlefuse->antenna_div_type == CGCS_RX_HW_ANTDIV)) {
274 if (pstatus->packet_toself || pstatus->packet_matchbssid) { 441 if (pstatus->packet_toself || pstatus->packet_matchbssid) {
275 ant_mux = (pfat->antsel_rx_keep_2 << 2) | 442 antsel_tr_mux = (pfat_table->antsel_rx_keep_2 << 2) |
276 (pfat->antsel_rx_keep_1 << 1) | 443 (pfat_table->antsel_rx_keep_1 << 1) |
277 pfat->antsel_rx_keep_0; 444 pfat_table->antsel_rx_keep_0;
278 rtl88e_dm_ant_sel_statistics(hw, ant_mux, 0, 445 rtl88e_dm_ant_sel_statistics(hw, antsel_tr_mux, 0,
279 pstatus->rx_pwdb_all); 446 pstatus->rx_pwdb_all);
280 } 447 }
448
281 } 449 }
282} 450}
283 451
284static void _rtl88ee_translate_rx_signal_stuff(struct ieee80211_hw *hw, 452static void _rtl88ee_translate_rx_signal_stuff(struct ieee80211_hw *hw,
285 struct sk_buff *skb, struct rtl_stats *pstatus, 453 struct sk_buff *skb,
286 u8 *pdesc, struct rx_fwinfo_88e *p_drvinfo) 454 struct rtl_stats *pstatus,
455 u8 *pdesc,
456 struct rx_fwinfo_88e *p_drvinfo)
287{ 457{
288 struct rtl_mac *mac = rtl_mac(rtl_priv(hw)); 458 struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
289 struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw)); 459 struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw));
@@ -292,42 +462,42 @@ static void _rtl88ee_translate_rx_signal_stuff(struct ieee80211_hw *hw,
292 u8 *praddr; 462 u8 *praddr;
293 u8 *psaddr; 463 u8 *psaddr;
294 __le16 fc; 464 __le16 fc;
295 u16 type, ufc; 465 bool packet_matchbssid, packet_toself, packet_beacon;
296 bool match_bssid, packet_toself, packet_beacon = false, addr;
297 466
298 tmp_buf = skb->data + pstatus->rx_drvinfo_size + pstatus->rx_bufshift; 467 tmp_buf = skb->data + pstatus->rx_drvinfo_size + pstatus->rx_bufshift;
299 468
300 hdr = (struct ieee80211_hdr *)tmp_buf; 469 hdr = (struct ieee80211_hdr *)tmp_buf;
301 fc = hdr->frame_control; 470 fc = hdr->frame_control;
302 ufc = le16_to_cpu(fc);
303 type = WLAN_FC_GET_TYPE(fc);
304 praddr = hdr->addr1; 471 praddr = hdr->addr1;
305 psaddr = ieee80211_get_SA(hdr); 472 psaddr = ieee80211_get_SA(hdr);
306 memcpy(pstatus->psaddr, psaddr, ETH_ALEN); 473 memcpy(pstatus->psaddr, psaddr, ETH_ALEN);
307 474
308 addr = ether_addr_equal(mac->bssid, 475 packet_matchbssid = ((!ieee80211_is_ctl(fc)) &&
309 (ufc & IEEE80211_FCTL_TODS) ? hdr->addr1 : 476 (ether_addr_equal(mac->bssid, ieee80211_has_tods(fc) ?
310 (ufc & IEEE80211_FCTL_FROMDS) ? hdr->addr2 : 477 hdr->addr1 : ieee80211_has_fromds(fc) ?
311 hdr->addr3); 478 hdr->addr2 : hdr->addr3)) &&
312 match_bssid = ((IEEE80211_FTYPE_CTL != type) && (!pstatus->hwerror) && 479 (!pstatus->hwerror) &&
313 (!pstatus->crc) && (!pstatus->icv)) && addr; 480 (!pstatus->crc) && (!pstatus->icv));
314 481
315 addr = ether_addr_equal(praddr, rtlefuse->dev_addr); 482 packet_toself = packet_matchbssid &&
316 packet_toself = match_bssid && addr; 483 (ether_addr_equal(praddr, rtlefuse->dev_addr));
317 484
318 if (ieee80211_is_beacon(fc)) 485 if (ieee80211_is_beacon(hdr->frame_control))
319 packet_beacon = true; 486 packet_beacon = true;
487 else
488 packet_beacon = false;
320 489
321 _rtl88ee_query_rxphystatus(hw, pstatus, pdesc, p_drvinfo, 490 _rtl88ee_query_rxphystatus(hw, pstatus, pdesc, p_drvinfo,
322 match_bssid, packet_toself, packet_beacon); 491 packet_matchbssid, packet_toself,
492 packet_beacon);
323 _rtl88ee_smart_antenna(hw, pstatus); 493 _rtl88ee_smart_antenna(hw, pstatus);
324 rtl_process_phyinfo(hw, tmp_buf, pstatus); 494 rtl_process_phyinfo(hw, tmp_buf, pstatus);
325} 495}
326 496
327static void insert_em(struct rtl_tcb_desc *ptcb_desc, u8 *virtualaddress) 497static void _rtl88ee_insert_emcontent(struct rtl_tcb_desc *ptcb_desc,
498 u8 *virtualaddress)
328{ 499{
329 u32 dwtmp = 0; 500 u32 dwtmp = 0;
330
331 memset(virtualaddress, 0, 8); 501 memset(virtualaddress, 0, 8);
332 502
333 SET_EARLYMODE_PKTNUM(virtualaddress, ptcb_desc->empkt_num); 503 SET_EARLYMODE_PKTNUM(virtualaddress, ptcb_desc->empkt_num);
@@ -335,7 +505,7 @@ static void insert_em(struct rtl_tcb_desc *ptcb_desc, u8 *virtualaddress)
335 dwtmp = ptcb_desc->empkt_len[0]; 505 dwtmp = ptcb_desc->empkt_len[0];
336 } else { 506 } else {
337 dwtmp = ptcb_desc->empkt_len[0]; 507 dwtmp = ptcb_desc->empkt_len[0];
338 dwtmp += ((dwtmp % 4) ? (4 - dwtmp % 4) : 0) + 4; 508 dwtmp += ((dwtmp%4) ? (4-dwtmp%4) : 0)+4;
339 dwtmp += ptcb_desc->empkt_len[1]; 509 dwtmp += ptcb_desc->empkt_len[1];
340 } 510 }
341 SET_EARLYMODE_LEN0(virtualaddress, dwtmp); 511 SET_EARLYMODE_LEN0(virtualaddress, dwtmp);
@@ -344,7 +514,7 @@ static void insert_em(struct rtl_tcb_desc *ptcb_desc, u8 *virtualaddress)
344 dwtmp = ptcb_desc->empkt_len[2]; 514 dwtmp = ptcb_desc->empkt_len[2];
345 } else { 515 } else {
346 dwtmp = ptcb_desc->empkt_len[2]; 516 dwtmp = ptcb_desc->empkt_len[2];
347 dwtmp += ((dwtmp % 4) ? (4 - dwtmp % 4) : 0) + 4; 517 dwtmp += ((dwtmp%4) ? (4-dwtmp%4) : 0)+4;
348 dwtmp += ptcb_desc->empkt_len[3]; 518 dwtmp += ptcb_desc->empkt_len[3];
349 } 519 }
350 SET_EARLYMODE_LEN1(virtualaddress, dwtmp); 520 SET_EARLYMODE_LEN1(virtualaddress, dwtmp);
@@ -352,7 +522,7 @@ static void insert_em(struct rtl_tcb_desc *ptcb_desc, u8 *virtualaddress)
352 dwtmp = ptcb_desc->empkt_len[4]; 522 dwtmp = ptcb_desc->empkt_len[4];
353 } else { 523 } else {
354 dwtmp = ptcb_desc->empkt_len[4]; 524 dwtmp = ptcb_desc->empkt_len[4];
355 dwtmp += ((dwtmp % 4) ? (4 - dwtmp % 4) : 0) + 4; 525 dwtmp += ((dwtmp%4) ? (4-dwtmp%4) : 0)+4;
356 dwtmp += ptcb_desc->empkt_len[5]; 526 dwtmp += ptcb_desc->empkt_len[5];
357 } 527 }
358 SET_EARLYMODE_LEN2_1(virtualaddress, dwtmp & 0xF); 528 SET_EARLYMODE_LEN2_1(virtualaddress, dwtmp & 0xF);
@@ -361,7 +531,7 @@ static void insert_em(struct rtl_tcb_desc *ptcb_desc, u8 *virtualaddress)
361 dwtmp = ptcb_desc->empkt_len[6]; 531 dwtmp = ptcb_desc->empkt_len[6];
362 } else { 532 } else {
363 dwtmp = ptcb_desc->empkt_len[6]; 533 dwtmp = ptcb_desc->empkt_len[6];
364 dwtmp += ((dwtmp % 4) ? (4 - dwtmp % 4) : 0) + 4; 534 dwtmp += ((dwtmp%4) ? (4-dwtmp%4) : 0)+4;
365 dwtmp += ptcb_desc->empkt_len[7]; 535 dwtmp += ptcb_desc->empkt_len[7];
366 } 536 }
367 SET_EARLYMODE_LEN3(virtualaddress, dwtmp); 537 SET_EARLYMODE_LEN3(virtualaddress, dwtmp);
@@ -369,7 +539,7 @@ static void insert_em(struct rtl_tcb_desc *ptcb_desc, u8 *virtualaddress)
369 dwtmp = ptcb_desc->empkt_len[8]; 539 dwtmp = ptcb_desc->empkt_len[8];
370 } else { 540 } else {
371 dwtmp = ptcb_desc->empkt_len[8]; 541 dwtmp = ptcb_desc->empkt_len[8];
372 dwtmp += ((dwtmp % 4) ? (4 - dwtmp % 4) : 0) + 4; 542 dwtmp += ((dwtmp%4) ? (4-dwtmp%4) : 0)+4;
373 dwtmp += ptcb_desc->empkt_len[9]; 543 dwtmp += ptcb_desc->empkt_len[9];
374 } 544 }
375 SET_EARLYMODE_LEN4(virtualaddress, dwtmp); 545 SET_EARLYMODE_LEN4(virtualaddress, dwtmp);
@@ -387,21 +557,21 @@ bool rtl88ee_rx_query_desc(struct ieee80211_hw *hw,
387 u32 phystatus = GET_RX_DESC_PHYST(pdesc); 557 u32 phystatus = GET_RX_DESC_PHYST(pdesc);
388 status->packet_report_type = (u8)GET_RX_STATUS_DESC_RPT_SEL(pdesc); 558 status->packet_report_type = (u8)GET_RX_STATUS_DESC_RPT_SEL(pdesc);
389 if (status->packet_report_type == TX_REPORT2) 559 if (status->packet_report_type == TX_REPORT2)
390 status->length = (u16) GET_RX_RPT2_DESC_PKT_LEN(pdesc); 560 status->length = (u16)GET_RX_RPT2_DESC_PKT_LEN(pdesc);
391 else 561 else
392 status->length = (u16) GET_RX_DESC_PKT_LEN(pdesc); 562 status->length = (u16)GET_RX_DESC_PKT_LEN(pdesc);
393 status->rx_drvinfo_size = (u8) GET_RX_DESC_DRV_INFO_SIZE(pdesc) * 563 status->rx_drvinfo_size = (u8)GET_RX_DESC_DRV_INFO_SIZE(pdesc) *
394 RX_DRV_INFO_SIZE_UNIT; 564 RX_DRV_INFO_SIZE_UNIT;
395 status->rx_bufshift = (u8) (GET_RX_DESC_SHIFT(pdesc) & 0x03); 565 status->rx_bufshift = (u8)(GET_RX_DESC_SHIFT(pdesc) & 0x03);
396 status->icv = (u16) GET_RX_DESC_ICV(pdesc); 566 status->icv = (u16)GET_RX_DESC_ICV(pdesc);
397 status->crc = (u16) GET_RX_DESC_CRC32(pdesc); 567 status->crc = (u16)GET_RX_DESC_CRC32(pdesc);
398 status->hwerror = (status->crc | status->icv); 568 status->hwerror = (status->crc | status->icv);
399 status->decrypted = !GET_RX_DESC_SWDEC(pdesc); 569 status->decrypted = !GET_RX_DESC_SWDEC(pdesc);
400 status->rate = (u8) GET_RX_DESC_RXMCS(pdesc); 570 status->rate = (u8)GET_RX_DESC_RXMCS(pdesc);
401 status->shortpreamble = (u16) GET_RX_DESC_SPLCP(pdesc); 571 status->shortpreamble = (u16)GET_RX_DESC_SPLCP(pdesc);
402 status->isampdu = (bool) (GET_RX_DESC_PAGGR(pdesc) == 1); 572 status->isampdu = (bool) (GET_RX_DESC_PAGGR(pdesc) == 1);
403 status->isfirst_ampdu = (bool) ((GET_RX_DESC_PAGGR(pdesc) == 1) && 573 status->isfirst_ampdu = (bool)((GET_RX_DESC_PAGGR(pdesc) == 1) &&
404 (GET_RX_DESC_FAGGR(pdesc) == 1)); 574 (GET_RX_DESC_FAGGR(pdesc) == 1));
405 if (status->packet_report_type == NORMAL_RX) 575 if (status->packet_report_type == NORMAL_RX)
406 status->timestamp_low = GET_RX_DESC_TSFL(pdesc); 576 status->timestamp_low = GET_RX_DESC_TSFL(pdesc);
407 status->rx_is40Mhzpacket = (bool) GET_RX_DESC_BW(pdesc); 577 status->rx_is40Mhzpacket = (bool) GET_RX_DESC_BW(pdesc);
@@ -420,11 +590,14 @@ bool rtl88ee_rx_query_desc(struct ieee80211_hw *hw,
420 status->wake_match = 0; 590 status->wake_match = 0;
421 if (status->wake_match) 591 if (status->wake_match)
422 RT_TRACE(rtlpriv, COMP_RXDESC, DBG_LOUD, 592 RT_TRACE(rtlpriv, COMP_RXDESC, DBG_LOUD,
423 "Get Wakeup Packet!! WakeMatch =%d\n", 593 "GGGGGGGGGGGGGet Wakeup Packet!! WakeMatch=%d\n",
424 status->wake_match); 594 status->wake_match);
425 rx_status->freq = hw->conf.chandef.chan->center_freq; 595 rx_status->freq = hw->conf.chandef.chan->center_freq;
426 rx_status->band = hw->conf.chandef.chan->band; 596 rx_status->band = hw->conf.chandef.chan->band;
427 597
598 hdr = (struct ieee80211_hdr *)(skb->data + status->rx_drvinfo_size
599 + status->rx_bufshift);
600
428 if (status->crc) 601 if (status->crc)
429 rx_status->flag |= RX_FLAG_FAILED_FCS_CRC; 602 rx_status->flag |= RX_FLAG_FAILED_FCS_CRC;
430 603
@@ -445,18 +618,18 @@ bool rtl88ee_rx_query_desc(struct ieee80211_hw *hw,
445 * to decrypt it 618 * to decrypt it
446 */ 619 */
447 if (status->decrypted) { 620 if (status->decrypted) {
448 hdr = (struct ieee80211_hdr *)(skb->data +
449 status->rx_drvinfo_size + status->rx_bufshift);
450
451 if (!hdr) { 621 if (!hdr) {
452 /* During testing, hdr was NULL */ 622 WARN_ON_ONCE(true);
623 pr_err("decrypted is true but hdr NULL, from skb %p\n",
624 rtl_get_hdr(skb));
453 return false; 625 return false;
454 } 626 }
455 if ((_ieee80211_is_robust_mgmt_frame(hdr)) && 627
628 if ((!_ieee80211_is_robust_mgmt_frame(hdr)) &&
456 (ieee80211_has_protected(hdr->frame_control))) 629 (ieee80211_has_protected(hdr->frame_control)))
457 rx_status->flag &= ~RX_FLAG_DECRYPTED;
458 else
459 rx_status->flag |= RX_FLAG_DECRYPTED; 630 rx_status->flag |= RX_FLAG_DECRYPTED;
631 else
632 rx_status->flag &= ~RX_FLAG_DECRYPTED;
460 } 633 }
461 634
462 /* rate_idx: index of data rate into band's 635 /* rate_idx: index of data rate into band's
@@ -464,19 +637,18 @@ bool rtl88ee_rx_query_desc(struct ieee80211_hw *hw,
464 * are use (RX_FLAG_HT) 637 * are use (RX_FLAG_HT)
465 * Notice: this is diff with windows define 638 * Notice: this is diff with windows define
466 */ 639 */
467 rx_status->rate_idx = rtlwifi_rate_mapping(hw, status->is_ht, 640 rx_status->rate_idx = _rtl88ee_rate_mapping(hw,
468 status->rate, false); 641 status->is_ht, status->rate);
469 642
470 rx_status->mactime = status->timestamp_low; 643 rx_status->mactime = status->timestamp_low;
471 if (phystatus == true) { 644 if (phystatus == true) {
472 p_drvinfo = (struct rx_fwinfo_88e *)(skb->data + 645 p_drvinfo = (struct rx_fwinfo_88e *)(skb->data +
473 status->rx_bufshift); 646 status->rx_bufshift);
474 647
475 _rtl88ee_translate_rx_signal_stuff(hw, skb, status, pdesc, 648 _rtl88ee_translate_rx_signal_stuff(hw,
649 skb, status, pdesc,
476 p_drvinfo); 650 p_drvinfo);
477 } 651 }
478
479 /*rx_status->qual = status->signal; */
480 rx_status->signal = status->recvsignalpower + 10; 652 rx_status->signal = status->recvsignalpower + 10;
481 if (status->packet_report_type == TX_REPORT2) { 653 if (status->packet_report_type == TX_REPORT2) {
482 status->macid_valid_entry[0] = 654 status->macid_valid_entry[0] =
@@ -489,15 +661,17 @@ bool rtl88ee_rx_query_desc(struct ieee80211_hw *hw,
489 661
490void rtl88ee_tx_fill_desc(struct ieee80211_hw *hw, 662void rtl88ee_tx_fill_desc(struct ieee80211_hw *hw,
491 struct ieee80211_hdr *hdr, u8 *pdesc_tx, 663 struct ieee80211_hdr *hdr, u8 *pdesc_tx,
492 u8 *pbd_desc_tx, struct ieee80211_tx_info *info, 664 u8 *txbd, struct ieee80211_tx_info *info,
493 struct ieee80211_sta *sta, struct sk_buff *skb, 665 struct ieee80211_sta *sta,
666 struct sk_buff *skb,
494 u8 hw_queue, struct rtl_tcb_desc *ptcb_desc) 667 u8 hw_queue, struct rtl_tcb_desc *ptcb_desc)
668
495{ 669{
496 struct rtl_priv *rtlpriv = rtl_priv(hw); 670 struct rtl_priv *rtlpriv = rtl_priv(hw);
497 struct rtl_mac *mac = rtl_mac(rtl_priv(hw)); 671 struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
498 struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw)); 672 struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
499 struct rtl_hal *rtlhal = rtl_hal(rtlpriv); 673 struct rtl_hal *rtlhal = rtl_hal(rtlpriv);
500 u8 *pdesc = pdesc_tx; 674 u8 *pdesc = (u8 *)pdesc_tx;
501 u16 seq_number; 675 u16 seq_number;
502 __le16 fc = hdr->frame_control; 676 __le16 fc = hdr->frame_control;
503 unsigned int buf_len = 0; 677 unsigned int buf_len = 0;
@@ -547,8 +721,9 @@ void rtl88ee_tx_fill_desc(struct ieee80211_hw *hw,
547 if (ptcb_desc->empkt_num) { 721 if (ptcb_desc->empkt_num) {
548 RT_TRACE(rtlpriv, COMP_SEND, DBG_TRACE, 722 RT_TRACE(rtlpriv, COMP_SEND, DBG_TRACE,
549 "Insert 8 byte.pTcb->EMPktNum:%d\n", 723 "Insert 8 byte.pTcb->EMPktNum:%d\n",
550 ptcb_desc->empkt_num); 724 ptcb_desc->empkt_num);
551 insert_em(ptcb_desc, (u8 *)(skb->data)); 725 _rtl88ee_insert_emcontent(ptcb_desc,
726 (u8 *)(skb->data));
552 } 727 }
553 } else { 728 } else {
554 SET_TX_DESC_OFFSET(pdesc, USB_HWDESC_HEADER_LEN); 729 SET_TX_DESC_OFFSET(pdesc, USB_HWDESC_HEADER_LEN);
@@ -560,6 +735,7 @@ void rtl88ee_tx_fill_desc(struct ieee80211_hw *hw,
560 short_gi = (ptcb_desc->use_shortgi) ? 1 : 0; 735 short_gi = (ptcb_desc->use_shortgi) ? 1 : 0;
561 else 736 else
562 short_gi = (ptcb_desc->use_shortpreamble) ? 1 : 0; 737 short_gi = (ptcb_desc->use_shortpreamble) ? 1 : 0;
738
563 SET_TX_DESC_DATA_SHORTGI(pdesc, short_gi); 739 SET_TX_DESC_DATA_SHORTGI(pdesc, short_gi);
564 740
565 if (info->flags & IEEE80211_TX_CTL_AMPDU) { 741 if (info->flags & IEEE80211_TX_CTL_AMPDU) {
@@ -568,7 +744,7 @@ void rtl88ee_tx_fill_desc(struct ieee80211_hw *hw,
568 } 744 }
569 SET_TX_DESC_SEQ(pdesc, seq_number); 745 SET_TX_DESC_SEQ(pdesc, seq_number);
570 SET_TX_DESC_RTS_ENABLE(pdesc, ((ptcb_desc->rts_enable && 746 SET_TX_DESC_RTS_ENABLE(pdesc, ((ptcb_desc->rts_enable &&
571 !ptcb_desc->cts_enable) ? 1 : 0)); 747 !ptcb_desc->cts_enable) ? 1 : 0));
572 SET_TX_DESC_HW_RTS_ENABLE(pdesc, 0); 748 SET_TX_DESC_HW_RTS_ENABLE(pdesc, 0);
573 SET_TX_DESC_CTS2SELF(pdesc, ((ptcb_desc->cts_enable) ? 1 : 0)); 749 SET_TX_DESC_CTS2SELF(pdesc, ((ptcb_desc->cts_enable) ? 1 : 0));
574 SET_TX_DESC_RTS_STBC(pdesc, ((ptcb_desc->rts_stbc) ? 1 : 0)); 750 SET_TX_DESC_RTS_STBC(pdesc, ((ptcb_desc->rts_stbc) ? 1 : 0));
@@ -581,17 +757,17 @@ void rtl88ee_tx_fill_desc(struct ieee80211_hw *hw,
581 (ptcb_desc->rts_use_shortpreamble ? 1 : 0) : 757 (ptcb_desc->rts_use_shortpreamble ? 1 : 0) :
582 (ptcb_desc->rts_use_shortgi ? 1 : 0))); 758 (ptcb_desc->rts_use_shortgi ? 1 : 0)));
583 759
584 if (ptcb_desc->btx_enable_sw_calc_duration) 760 if (ptcb_desc->tx_enable_sw_calc_duration)
585 SET_TX_DESC_NAV_USE_HDR(pdesc, 1); 761 SET_TX_DESC_NAV_USE_HDR(pdesc, 1);
586 762
587 if (bw_40) { 763 if (bw_40) {
588 if (ptcb_desc->packet_bw) { 764 if (ptcb_desc->packet_bw == HT_CHANNEL_WIDTH_20_40) {
589 SET_TX_DESC_DATA_BW(pdesc, 1); 765 SET_TX_DESC_DATA_BW(pdesc, 1);
590 SET_TX_DESC_TX_SUB_CARRIER(pdesc, 3); 766 SET_TX_DESC_TX_SUB_CARRIER(pdesc, 3);
591 } else { 767 } else {
592 SET_TX_DESC_DATA_BW(pdesc, 0); 768 SET_TX_DESC_DATA_BW(pdesc, 0);
593 SET_TX_DESC_TX_SUB_CARRIER(pdesc, 769 SET_TX_DESC_TX_SUB_CARRIER(pdesc,
594 mac->cur_40_prime_sc); 770 mac->cur_40_prime_sc);
595 } 771 }
596 } else { 772 } else {
597 SET_TX_DESC_DATA_BW(pdesc, 0); 773 SET_TX_DESC_DATA_BW(pdesc, 0);
@@ -599,13 +775,14 @@ void rtl88ee_tx_fill_desc(struct ieee80211_hw *hw,
599 } 775 }
600 776
601 SET_TX_DESC_LINIP(pdesc, 0); 777 SET_TX_DESC_LINIP(pdesc, 0);
602 SET_TX_DESC_PKT_SIZE(pdesc, (u16) skb_len); 778 SET_TX_DESC_PKT_SIZE(pdesc, (u16)skb_len);
603 if (sta) { 779 if (sta) {
604 u8 ampdu_density = sta->ht_cap.ampdu_density; 780 u8 ampdu_density = sta->ht_cap.ampdu_density;
605 SET_TX_DESC_AMPDU_DENSITY(pdesc, ampdu_density); 781 SET_TX_DESC_AMPDU_DENSITY(pdesc, ampdu_density);
606 } 782 }
607 if (info->control.hw_key) { 783 if (info->control.hw_key) {
608 struct ieee80211_key_conf *keyconf; 784 struct ieee80211_key_conf *keyconf;
785
609 keyconf = info->control.hw_key; 786 keyconf = info->control.hw_key;
610 switch (keyconf->cipher) { 787 switch (keyconf->cipher) {
611 case WLAN_CIPHER_SUITE_WEP40: 788 case WLAN_CIPHER_SUITE_WEP40:
@@ -619,6 +796,7 @@ void rtl88ee_tx_fill_desc(struct ieee80211_hw *hw,
619 default: 796 default:
620 SET_TX_DESC_SEC_TYPE(pdesc, 0x0); 797 SET_TX_DESC_SEC_TYPE(pdesc, 0x0);
621 break; 798 break;
799
622 } 800 }
623 } 801 }
624 802
@@ -629,6 +807,7 @@ void rtl88ee_tx_fill_desc(struct ieee80211_hw *hw,
629 1 : 0); 807 1 : 0);
630 SET_TX_DESC_USE_RATE(pdesc, ptcb_desc->use_driver_rate ? 1 : 0); 808 SET_TX_DESC_USE_RATE(pdesc, ptcb_desc->use_driver_rate ? 1 : 0);
631 809
810 /*SET_TX_DESC_PWR_STATUS(pdesc, pwr_status);*/
632 /* Set TxRate and RTSRate in TxDesc */ 811 /* Set TxRate and RTSRate in TxDesc */
633 /* This prevent Tx initial rate of new-coming packets */ 812 /* This prevent Tx initial rate of new-coming packets */
634 /* from being overwritten by retried packet rate.*/ 813 /* from being overwritten by retried packet rate.*/
@@ -639,7 +818,7 @@ void rtl88ee_tx_fill_desc(struct ieee80211_hw *hw,
639 if (ieee80211_is_data_qos(fc)) { 818 if (ieee80211_is_data_qos(fc)) {
640 if (mac->rdg_en) { 819 if (mac->rdg_en) {
641 RT_TRACE(rtlpriv, COMP_SEND, DBG_TRACE, 820 RT_TRACE(rtlpriv, COMP_SEND, DBG_TRACE,
642 "Enable RDG function.\n"); 821 "Enable RDG function.\n");
643 SET_TX_DESC_RDG_ENABLE(pdesc, 1); 822 SET_TX_DESC_RDG_ENABLE(pdesc, 1);
644 SET_TX_DESC_HTC(pdesc, 1); 823 SET_TX_DESC_HTC(pdesc, 1);
645 } 824 }
@@ -648,7 +827,7 @@ void rtl88ee_tx_fill_desc(struct ieee80211_hw *hw,
648 827
649 SET_TX_DESC_FIRST_SEG(pdesc, (firstseg ? 1 : 0)); 828 SET_TX_DESC_FIRST_SEG(pdesc, (firstseg ? 1 : 0));
650 SET_TX_DESC_LAST_SEG(pdesc, (lastseg ? 1 : 0)); 829 SET_TX_DESC_LAST_SEG(pdesc, (lastseg ? 1 : 0));
651 SET_TX_DESC_TX_BUFFER_SIZE(pdesc, (u16) buf_len); 830 SET_TX_DESC_TX_BUFFER_SIZE(pdesc, (u16)buf_len);
652 SET_TX_DESC_TX_BUFFER_ADDRESS(pdesc, mapping); 831 SET_TX_DESC_TX_BUFFER_ADDRESS(pdesc, mapping);
653 if (rtlpriv->dm.useramask) { 832 if (rtlpriv->dm.useramask) {
654 SET_TX_DESC_RATE_ID(pdesc, ptcb_desc->ratr_index); 833 SET_TX_DESC_RATE_ID(pdesc, ptcb_desc->ratr_index);
@@ -664,8 +843,9 @@ void rtl88ee_tx_fill_desc(struct ieee80211_hw *hw,
664 SET_TX_DESC_HWSEQ_EN(pdesc, 1); 843 SET_TX_DESC_HWSEQ_EN(pdesc, 1);
665 SET_TX_DESC_MORE_FRAG(pdesc, (lastseg ? 0 : 1)); 844 SET_TX_DESC_MORE_FRAG(pdesc, (lastseg ? 0 : 1));
666 if (is_multicast_ether_addr(ieee80211_get_DA(hdr)) || 845 if (is_multicast_ether_addr(ieee80211_get_DA(hdr)) ||
667 is_broadcast_ether_addr(ieee80211_get_DA(hdr))) 846 is_broadcast_ether_addr(ieee80211_get_DA(hdr))) {
668 SET_TX_DESC_BMC(pdesc, 1); 847 SET_TX_DESC_BMC(pdesc, 1);
848 }
669 849
670 rtl88e_dm_set_tx_ant_by_tx_info(hw, pdesc, ptcb_desc->mac_id); 850 rtl88e_dm_set_tx_ant_by_tx_info(hw, pdesc, ptcb_desc->mac_id);
671 RT_TRACE(rtlpriv, COMP_SEND, DBG_TRACE, "\n"); 851 RT_TRACE(rtlpriv, COMP_SEND, DBG_TRACE, "\n");
@@ -733,8 +913,8 @@ void rtl88ee_tx_fill_cmddesc(struct ieee80211_hw *hw,
733 pdesc, TX_DESC_SIZE); 913 pdesc, TX_DESC_SIZE);
734} 914}
735 915
736void rtl88ee_set_desc(struct ieee80211_hw *hw, u8 *pdesc, bool istx, 916void rtl88ee_set_desc(struct ieee80211_hw *hw, u8 *pdesc,
737 u8 desc_name, u8 *val) 917 bool istx, u8 desc_name, u8 *val)
738{ 918{
739 if (istx == true) { 919 if (istx == true) {
740 switch (desc_name) { 920 switch (desc_name) {
@@ -745,7 +925,7 @@ void rtl88ee_set_desc(struct ieee80211_hw *hw, u8 *pdesc, bool istx,
745 SET_TX_DESC_NEXT_DESC_ADDRESS(pdesc, *(u32 *)val); 925 SET_TX_DESC_NEXT_DESC_ADDRESS(pdesc, *(u32 *)val);
746 break; 926 break;
747 default: 927 default:
748 RT_ASSERT(false, "ERR txdesc :%d not processed\n", 928 RT_ASSERT(false, "ERR txdesc :%d not process\n",
749 desc_name); 929 desc_name);
750 break; 930 break;
751 } 931 }
@@ -764,7 +944,7 @@ void rtl88ee_set_desc(struct ieee80211_hw *hw, u8 *pdesc, bool istx,
764 SET_RX_DESC_EOR(pdesc, 1); 944 SET_RX_DESC_EOR(pdesc, 1);
765 break; 945 break;
766 default: 946 default:
767 RT_ASSERT(false, "ERR rxdesc :%d not processed\n", 947 RT_ASSERT(false, "ERR rxdesc :%d not process\n",
768 desc_name); 948 desc_name);
769 break; 949 break;
770 } 950 }
@@ -784,7 +964,7 @@ u32 rtl88ee_get_desc(u8 *pdesc, bool istx, u8 desc_name)
784 ret = GET_TX_DESC_TX_BUFFER_ADDRESS(pdesc); 964 ret = GET_TX_DESC_TX_BUFFER_ADDRESS(pdesc);
785 break; 965 break;
786 default: 966 default:
787 RT_ASSERT(false, "ERR txdesc :%d not processed\n", 967 RT_ASSERT(false, "ERR txdesc :%d not process\n",
788 desc_name); 968 desc_name);
789 break; 969 break;
790 } 970 }
@@ -796,8 +976,11 @@ u32 rtl88ee_get_desc(u8 *pdesc, bool istx, u8 desc_name)
796 case HW_DESC_RXPKT_LEN: 976 case HW_DESC_RXPKT_LEN:
797 ret = GET_RX_DESC_PKT_LEN(pdesc); 977 ret = GET_RX_DESC_PKT_LEN(pdesc);
798 break; 978 break;
979 case HW_DESC_RXBUFF_ADDR:
980 ret = GET_RX_DESC_BUFF_ADDR(pdesc);
981 break;
799 default: 982 default:
800 RT_ASSERT(false, "ERR rxdesc :%d not processed\n", 983 RT_ASSERT(false, "ERR rxdesc :%d not process\n",
801 desc_name); 984 desc_name);
802 break; 985 break;
803 } 986 }
@@ -805,6 +988,22 @@ u32 rtl88ee_get_desc(u8 *pdesc, bool istx, u8 desc_name)
805 return ret; 988 return ret;
806} 989}
807 990
991bool rtl88ee_is_tx_desc_closed(struct ieee80211_hw *hw, u8 hw_queue, u16 index)
992{
993 struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
994 struct rtl8192_tx_ring *ring = &rtlpci->tx_ring[hw_queue];
995 u8 *entry = (u8 *)(&ring->desc[ring->idx]);
996 u8 own = (u8)rtl88ee_get_desc(entry, true, HW_DESC_OWN);
997
998 /*beacon packet will only use the first
999 *descriptor defautly,and the own may not
1000 *be cleared by the hardware
1001 */
1002 if (own)
1003 return false;
1004 return true;
1005}
1006
808void rtl88ee_tx_polling(struct ieee80211_hw *hw, u8 hw_queue) 1007void rtl88ee_tx_polling(struct ieee80211_hw *hw, u8 hw_queue)
809{ 1008{
810 struct rtl_priv *rtlpriv = rtl_priv(hw); 1009 struct rtl_priv *rtlpriv = rtl_priv(hw);
@@ -815,3 +1014,10 @@ void rtl88ee_tx_polling(struct ieee80211_hw *hw, u8 hw_queue)
815 BIT(0) << (hw_queue)); 1014 BIT(0) << (hw_queue));
816 } 1015 }
817} 1016}
1017
1018u32 rtl88ee_rx_command_packet(struct ieee80211_hw *hw,
1019 struct rtl_stats status,
1020 struct sk_buff *skb)
1021{
1022 return 0;
1023}
diff --git a/drivers/net/wireless/rtlwifi/rtl8188ee/trx.h b/drivers/net/wireless/rtlwifi/rtl8188ee/trx.h
index 8c2609412d2c..eab5ae0eb46c 100644
--- a/drivers/net/wireless/rtlwifi/rtl8188ee/trx.h
+++ b/drivers/net/wireless/rtlwifi/rtl8188ee/trx.h
@@ -11,10 +11,6 @@
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details. 12 * more details.
13 * 13 *
14 * You should have received a copy of the GNU General Public License along with
15 * this program; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
17 *
18 * The full GNU General Public License is included in this distribution in the 14 * The full GNU General Public License is included in this distribution in the
19 * file called LICENSE. 15 * file called LICENSE.
20 * 16 *
@@ -30,59 +26,59 @@
30#ifndef __RTL92CE_TRX_H__ 26#ifndef __RTL92CE_TRX_H__
31#define __RTL92CE_TRX_H__ 27#define __RTL92CE_TRX_H__
32 28
33#define TX_DESC_SIZE 64 29#define TX_DESC_SIZE 64
34#define TX_DESC_AGGR_SUBFRAME_SIZE 32 30#define TX_DESC_AGGR_SUBFRAME_SIZE 32
35 31
36#define RX_DESC_SIZE 32 32#define RX_DESC_SIZE 32
37#define RX_DRV_INFO_SIZE_UNIT 8 33#define RX_DRV_INFO_SIZE_UNIT 8
38 34
39#define TX_DESC_NEXT_DESC_OFFSET 40 35#define TX_DESC_NEXT_DESC_OFFSET 40
40#define USB_HWDESC_HEADER_LEN 32 36#define USB_HWDESC_HEADER_LEN 32
41#define CRCLENGTH 4 37#define CRCLENGTH 4
42 38
43#define SET_TX_DESC_PKT_SIZE(__pdesc, __val) \ 39#define SET_TX_DESC_PKT_SIZE(__pdesc, __val) \
44 SET_BITS_TO_LE_4BYTE(__pdesc, 0, 16, __val) 40 SET_BITS_TO_LE_4BYTE(__pdesc, 0, 16, __val)
45#define SET_TX_DESC_OFFSET(__pdesc, __val) \ 41#define SET_TX_DESC_OFFSET(__pdesc, __val) \
46 SET_BITS_TO_LE_4BYTE(__pdesc, 16, 8, __val) 42 SET_BITS_TO_LE_4BYTE(__pdesc, 16, 8, __val)
47#define SET_TX_DESC_BMC(__pdesc, __val) \ 43#define SET_TX_DESC_BMC(__pdesc, __val) \
48 SET_BITS_TO_LE_4BYTE(__pdesc, 24, 1, __val) 44 SET_BITS_TO_LE_4BYTE(__pdesc, 24, 1, __val)
49#define SET_TX_DESC_HTC(__pdesc, __val) \ 45#define SET_TX_DESC_HTC(__pdesc, __val) \
50 SET_BITS_TO_LE_4BYTE(__pdesc, 25, 1, __val) 46 SET_BITS_TO_LE_4BYTE(__pdesc, 25, 1, __val)
51#define SET_TX_DESC_LAST_SEG(__pdesc, __val) \ 47#define SET_TX_DESC_LAST_SEG(__pdesc, __val) \
52 SET_BITS_TO_LE_4BYTE(__pdesc, 26, 1, __val) 48 SET_BITS_TO_LE_4BYTE(__pdesc, 26, 1, __val)
53#define SET_TX_DESC_FIRST_SEG(__pdesc, __val) \ 49#define SET_TX_DESC_FIRST_SEG(__pdesc, __val) \
54 SET_BITS_TO_LE_4BYTE(__pdesc, 27, 1, __val) 50 SET_BITS_TO_LE_4BYTE(__pdesc, 27, 1, __val)
55#define SET_TX_DESC_LINIP(__pdesc, __val) \ 51#define SET_TX_DESC_LINIP(__pdesc, __val) \
56 SET_BITS_TO_LE_4BYTE(__pdesc, 28, 1, __val) 52 SET_BITS_TO_LE_4BYTE(__pdesc, 28, 1, __val)
57#define SET_TX_DESC_NO_ACM(__pdesc, __val) \ 53#define SET_TX_DESC_NO_ACM(__pdesc, __val) \
58 SET_BITS_TO_LE_4BYTE(__pdesc, 29, 1, __val) 54 SET_BITS_TO_LE_4BYTE(__pdesc, 29, 1, __val)
59#define SET_TX_DESC_GF(__pdesc, __val) \ 55#define SET_TX_DESC_GF(__pdesc, __val) \
60 SET_BITS_TO_LE_4BYTE(__pdesc, 30, 1, __val) 56 SET_BITS_TO_LE_4BYTE(__pdesc, 30, 1, __val)
61#define SET_TX_DESC_OWN(__pdesc, __val) \ 57#define SET_TX_DESC_OWN(__pdesc, __val) \
62 SET_BITS_TO_LE_4BYTE(__pdesc, 31, 1, __val) 58 SET_BITS_TO_LE_4BYTE(__pdesc, 31, 1, __val)
63 59
64#define GET_TX_DESC_PKT_SIZE(__pdesc) \ 60#define GET_TX_DESC_PKT_SIZE(__pdesc) \
65 LE_BITS_TO_4BYTE(__pdesc, 0, 16) 61 LE_BITS_TO_4BYTE(__pdesc, 0, 16)
66#define GET_TX_DESC_OFFSET(__pdesc) \ 62#define GET_TX_DESC_OFFSET(__pdesc) \
67 LE_BITS_TO_4BYTE(__pdesc, 16, 8) 63 LE_BITS_TO_4BYTE(__pdesc, 16, 8)
68#define GET_TX_DESC_BMC(__pdesc) \ 64#define GET_TX_DESC_BMC(__pdesc) \
69 LE_BITS_TO_4BYTE(__pdesc, 24, 1) 65 LE_BITS_TO_4BYTE(__pdesc, 24, 1)
70#define GET_TX_DESC_HTC(__pdesc) \ 66#define GET_TX_DESC_HTC(__pdesc) \
71 LE_BITS_TO_4BYTE(__pdesc, 25, 1) 67 LE_BITS_TO_4BYTE(__pdesc, 25, 1)
72#define GET_TX_DESC_LAST_SEG(__pdesc) \ 68#define GET_TX_DESC_LAST_SEG(__pdesc) \
73 LE_BITS_TO_4BYTE(__pdesc, 26, 1) 69 LE_BITS_TO_4BYTE(__pdesc, 26, 1)
74#define GET_TX_DESC_FIRST_SEG(__pdesc) \ 70#define GET_TX_DESC_FIRST_SEG(__pdesc) \
75 LE_BITS_TO_4BYTE(__pdesc, 27, 1) 71 LE_BITS_TO_4BYTE(__pdesc, 27, 1)
76#define GET_TX_DESC_LINIP(__pdesc) \ 72#define GET_TX_DESC_LINIP(__pdesc) \
77 LE_BITS_TO_4BYTE(__pdesc, 28, 1) 73 LE_BITS_TO_4BYTE(__pdesc, 28, 1)
78#define GET_TX_DESC_NO_ACM(__pdesc) \ 74#define GET_TX_DESC_NO_ACM(__pdesc) \
79 LE_BITS_TO_4BYTE(__pdesc, 29, 1) 75 LE_BITS_TO_4BYTE(__pdesc, 29, 1)
80#define GET_TX_DESC_GF(__pdesc) \ 76#define GET_TX_DESC_GF(__pdesc) \
81 LE_BITS_TO_4BYTE(__pdesc, 30, 1) 77 LE_BITS_TO_4BYTE(__pdesc, 30, 1)
82#define GET_TX_DESC_OWN(__pdesc) \ 78#define GET_TX_DESC_OWN(__pdesc) \
83 LE_BITS_TO_4BYTE(__pdesc, 31, 1) 79 LE_BITS_TO_4BYTE(__pdesc, 31, 1)
84 80
85#define SET_TX_DESC_MACID(__pdesc, __val) \ 81#define SET_TX_DESC_MACID(__pdesc, __val) \
86 SET_BITS_TO_LE_4BYTE(__pdesc+4, 0, 6, __val) 82 SET_BITS_TO_LE_4BYTE(__pdesc+4, 0, 6, __val)
87#define SET_TX_DESC_QUEUE_SEL(__pdesc, __val) \ 83#define SET_TX_DESC_QUEUE_SEL(__pdesc, __val) \
88 SET_BITS_TO_LE_4BYTE(__pdesc+4, 8, 5, __val) 84 SET_BITS_TO_LE_4BYTE(__pdesc+4, 8, 5, __val)
@@ -90,11 +86,11 @@
90 SET_BITS_TO_LE_4BYTE(__pdesc+4, 13, 1, __val) 86 SET_BITS_TO_LE_4BYTE(__pdesc+4, 13, 1, __val)
91#define SET_TX_DESC_LSIG_TXOP_EN(__pdesc, __val) \ 87#define SET_TX_DESC_LSIG_TXOP_EN(__pdesc, __val) \
92 SET_BITS_TO_LE_4BYTE(__pdesc+4, 14, 1, __val) 88 SET_BITS_TO_LE_4BYTE(__pdesc+4, 14, 1, __val)
93#define SET_TX_DESC_PIFS(__pdesc, __val) \ 89#define SET_TX_DESC_PIFS(__pdesc, __val) \
94 SET_BITS_TO_LE_4BYTE(__pdesc+4, 15, 1, __val) 90 SET_BITS_TO_LE_4BYTE(__pdesc+4, 15, 1, __val)
95#define SET_TX_DESC_RATE_ID(__pdesc, __val) \ 91#define SET_TX_DESC_RATE_ID(__pdesc, __val) \
96 SET_BITS_TO_LE_4BYTE(__pdesc+4, 16, 4, __val) 92 SET_BITS_TO_LE_4BYTE(__pdesc+4, 16, 4, __val)
97#define SET_TX_DESC_NAV_USE_HDR(__pdesc, __val) \ 93#define SET_TX_DESC_NAV_USE_HDR(__pdesc, __val) \
98 SET_BITS_TO_LE_4BYTE(__pdesc+4, 20, 1, __val) 94 SET_BITS_TO_LE_4BYTE(__pdesc+4, 20, 1, __val)
99#define SET_TX_DESC_EN_DESC_ID(__pdesc, __val) \ 95#define SET_TX_DESC_EN_DESC_ID(__pdesc, __val) \
100 SET_BITS_TO_LE_4BYTE(__pdesc+4, 21, 1, __val) 96 SET_BITS_TO_LE_4BYTE(__pdesc+4, 21, 1, __val)
@@ -102,10 +98,10 @@
102 SET_BITS_TO_LE_4BYTE(__pdesc+4, 22, 2, __val) 98 SET_BITS_TO_LE_4BYTE(__pdesc+4, 22, 2, __val)
103#define SET_TX_DESC_PKT_OFFSET(__pdesc, __val) \ 99#define SET_TX_DESC_PKT_OFFSET(__pdesc, __val) \
104 SET_BITS_TO_LE_4BYTE(__pdesc+4, 26, 5, __val) 100 SET_BITS_TO_LE_4BYTE(__pdesc+4, 26, 5, __val)
105#define SET_TX_DESC_PADDING_LEN(__pdesc, __val) \ 101#define SET_TX_DESC_PADDING_LEN(__pdesc, __val) \
106 SET_BITS_TO_LE_4BYTE(__pdesc+4, 24, 8, __val) 102 SET_BITS_TO_LE_4BYTE(__pdesc+4, 24, 8, __val)
107 103
108#define GET_TX_DESC_MACID(__pdesc) \ 104#define GET_TX_DESC_MACID(__pdesc) \
109 LE_BITS_TO_4BYTE(__pdesc+4, 0, 5) 105 LE_BITS_TO_4BYTE(__pdesc+4, 0, 5)
110#define GET_TX_DESC_AGG_ENABLE(__pdesc) \ 106#define GET_TX_DESC_AGG_ENABLE(__pdesc) \
111 LE_BITS_TO_4BYTE(__pdesc+4, 5, 1) 107 LE_BITS_TO_4BYTE(__pdesc+4, 5, 1)
@@ -119,7 +115,7 @@
119 LE_BITS_TO_4BYTE(__pdesc+4, 13, 1) 115 LE_BITS_TO_4BYTE(__pdesc+4, 13, 1)
120#define GET_TX_DESC_LSIG_TXOP_EN(__pdesc) \ 116#define GET_TX_DESC_LSIG_TXOP_EN(__pdesc) \
121 LE_BITS_TO_4BYTE(__pdesc+4, 14, 1) 117 LE_BITS_TO_4BYTE(__pdesc+4, 14, 1)
122#define GET_TX_DESC_PIFS(__pdesc) \ 118#define GET_TX_DESC_PIFS(__pdesc) \
123 LE_BITS_TO_4BYTE(__pdesc+4, 15, 1) 119 LE_BITS_TO_4BYTE(__pdesc+4, 15, 1)
124#define GET_TX_DESC_RATE_ID(__pdesc) \ 120#define GET_TX_DESC_RATE_ID(__pdesc) \
125 LE_BITS_TO_4BYTE(__pdesc+4, 16, 4) 121 LE_BITS_TO_4BYTE(__pdesc+4, 16, 4)
@@ -205,7 +201,6 @@
205#define SET_TX_DESC_HWSEQ_EN(__pdesc, __val) \ 201#define SET_TX_DESC_HWSEQ_EN(__pdesc, __val) \
206 SET_BITS_TO_LE_4BYTE(__pdesc+12, 31, 1, __val) 202 SET_BITS_TO_LE_4BYTE(__pdesc+12, 31, 1, __val)
207 203
208
209#define GET_TX_DESC_NEXT_HEAP_PAGE(__pdesc) \ 204#define GET_TX_DESC_NEXT_HEAP_PAGE(__pdesc) \
210 LE_BITS_TO_4BYTE(__pdesc+12, 0, 8) 205 LE_BITS_TO_4BYTE(__pdesc+12, 0, 8)
211#define GET_TX_DESC_TAIL_PAGE(__pdesc) \ 206#define GET_TX_DESC_TAIL_PAGE(__pdesc) \
@@ -213,7 +208,6 @@
213#define GET_TX_DESC_SEQ(__pdesc) \ 208#define GET_TX_DESC_SEQ(__pdesc) \
214 LE_BITS_TO_4BYTE(__pdesc+12, 16, 12) 209 LE_BITS_TO_4BYTE(__pdesc+12, 16, 12)
215 210
216
217#define SET_TX_DESC_RTS_RATE(__pdesc, __val) \ 211#define SET_TX_DESC_RTS_RATE(__pdesc, __val) \
218 SET_BITS_TO_LE_4BYTE(__pdesc+16, 0, 5, __val) 212 SET_BITS_TO_LE_4BYTE(__pdesc+16, 0, 5, __val)
219#define SET_TX_DESC_AP_DCFE(__pdesc, __val) \ 213#define SET_TX_DESC_AP_DCFE(__pdesc, __val) \
@@ -386,7 +380,6 @@
386#define GET_TX_DESC_TX_BUFFER_SIZE(__pdesc) \ 380#define GET_TX_DESC_TX_BUFFER_SIZE(__pdesc) \
387 LE_BITS_TO_4BYTE(__pdesc+28, 0, 16) 381 LE_BITS_TO_4BYTE(__pdesc+28, 0, 16)
388 382
389
390#define SET_TX_DESC_TX_BUFFER_ADDRESS(__pdesc, __val) \ 383#define SET_TX_DESC_TX_BUFFER_ADDRESS(__pdesc, __val) \
391 SET_BITS_TO_LE_4BYTE(__pdesc+32, 0, 32, __val) 384 SET_BITS_TO_LE_4BYTE(__pdesc+32, 0, 32, __val)
392#define SET_TX_DESC_TX_BUFFER_ADDRESS64(__pdesc, __val) \ 385#define SET_TX_DESC_TX_BUFFER_ADDRESS64(__pdesc, __val) \
@@ -549,8 +542,10 @@ do { \
549 rxmcs == DESC92C_RATE5_5M ||\ 542 rxmcs == DESC92C_RATE5_5M ||\
550 rxmcs == DESC92C_RATE11M) 543 rxmcs == DESC92C_RATE11M)
551 544
545#define IS_LITTLE_ENDIAN 1
546
552struct phy_rx_agc_info_t { 547struct phy_rx_agc_info_t {
553 #ifdef __LITTLE_ENDIAN 548 #if IS_LITTLE_ENDIAN
554 u8 gain:7, trsw:1; 549 u8 gain:7, trsw:1;
555 #else 550 #else
556 u8 trsw:1, gain:7; 551 u8 trsw:1, gain:7;
@@ -562,7 +557,7 @@ struct phy_status_rpt {
562 u8 cck_sig_qual_ofdm_pwdb_all; 557 u8 cck_sig_qual_ofdm_pwdb_all;
563 u8 cck_agc_rpt_ofdm_cfosho_a; 558 u8 cck_agc_rpt_ofdm_cfosho_a;
564 u8 cck_rpt_b_ofdm_cfosho_b; 559 u8 cck_rpt_b_ofdm_cfosho_b;
565 u8 rsvd_1; 560 u8 rsvd_1;/* ch_corr_msb; */
566 u8 noise_power_db_msb; 561 u8 noise_power_db_msb;
567 u8 path_cfotail[2]; 562 u8 path_cfotail[2];
568 u8 pcts_mask[2]; 563 u8 pcts_mask[2];
@@ -574,7 +569,7 @@ struct phy_status_rpt {
574 u8 stream_target_csi[2]; 569 u8 stream_target_csi[2];
575 u8 sig_evm; 570 u8 sig_evm;
576 u8 rsvd_3; 571 u8 rsvd_3;
577#ifdef __LITTLE_ENDIAN 572#if IS_LITTLE_ENDIAN
578 u8 antsel_rx_keep_2:1; /*ex_intf_flg:1;*/ 573 u8 antsel_rx_keep_2:1; /*ex_intf_flg:1;*/
579 u8 sgi_en:1; 574 u8 sgi_en:1;
580 u8 rxsc:2; 575 u8 rxsc:2;
@@ -777,19 +772,25 @@ struct rx_desc_88e {
777 772
778void rtl88ee_tx_fill_desc(struct ieee80211_hw *hw, 773void rtl88ee_tx_fill_desc(struct ieee80211_hw *hw,
779 struct ieee80211_hdr *hdr, u8 *pdesc_tx, 774 struct ieee80211_hdr *hdr, u8 *pdesc_tx,
780 u8 *pbd_desc_tx, struct ieee80211_tx_info *info, 775 u8 *txbd, struct ieee80211_tx_info *info,
781 struct ieee80211_sta *sta, struct sk_buff *skb, 776 struct ieee80211_sta *sta,
777 struct sk_buff *skb,
782 u8 hw_queue, struct rtl_tcb_desc *ptcb_desc); 778 u8 hw_queue, struct rtl_tcb_desc *ptcb_desc);
783bool rtl88ee_rx_query_desc(struct ieee80211_hw *hw, 779bool rtl88ee_rx_query_desc(struct ieee80211_hw *hw,
784 struct rtl_stats *status, 780 struct rtl_stats *status,
785 struct ieee80211_rx_status *rx_status, 781 struct ieee80211_rx_status *rx_status,
786 u8 *pdesc, struct sk_buff *skb); 782 u8 *pdesc, struct sk_buff *skb);
787void rtl88ee_set_desc(struct ieee80211_hw *hw, u8 *pdesc, bool istx, 783void rtl88ee_set_desc(struct ieee80211_hw *hw, u8 *pdesc,
788 u8 desc_name, u8 *val); 784 bool istx, u8 desc_name, u8 *val);
789u32 rtl88ee_get_desc(u8 *pdesc, bool istx, u8 desc_name); 785u32 rtl88ee_get_desc(u8 *pdesc, bool istx, u8 desc_name);
786bool rtl88ee_is_tx_desc_closed(struct ieee80211_hw *hw,
787 u8 hw_queue, u16 index);
790void rtl88ee_tx_polling(struct ieee80211_hw *hw, u8 hw_queue); 788void rtl88ee_tx_polling(struct ieee80211_hw *hw, u8 hw_queue);
791void rtl88ee_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc, 789void rtl88ee_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc,
792 bool b_firstseg, bool b_lastseg, 790 bool firstseg, bool lastseg,
793 struct sk_buff *skb); 791 struct sk_buff *skb);
792u32 rtl88ee_rx_command_packet(struct ieee80211_hw *hw,
793 struct rtl_stats status,
794 struct sk_buff *skb);
794 795
795#endif 796#endif
diff --git a/drivers/net/wireless/rtlwifi/rtl8723be/trx.c b/drivers/net/wireless/rtlwifi/rtl8723be/trx.c
index 969eaea5eddd..557b416246b0 100644
--- a/drivers/net/wireless/rtlwifi/rtl8723be/trx.c
+++ b/drivers/net/wireless/rtlwifi/rtl8723be/trx.c
@@ -732,7 +732,7 @@ void rtl8723be_tx_fill_desc(struct ieee80211_hw *hw,
732 (ptcb_desc->rts_use_shortpreamble ? 1 : 0) : 732 (ptcb_desc->rts_use_shortpreamble ? 1 : 0) :
733 (ptcb_desc->rts_use_shortgi ? 1 : 0))); 733 (ptcb_desc->rts_use_shortgi ? 1 : 0)));
734 734
735 if (ptcb_desc->btx_enable_sw_calc_duration) 735 if (ptcb_desc->tx_enable_sw_calc_duration)
736 SET_TX_DESC_NAV_USE_HDR(pdesc, 1); 736 SET_TX_DESC_NAV_USE_HDR(pdesc, 1);
737 737
738 if (bw_40) { 738 if (bw_40) {
diff --git a/drivers/net/wireless/rtlwifi/wifi.h b/drivers/net/wireless/rtlwifi/wifi.h
index af7c6f22aaea..06b5741401a7 100644
--- a/drivers/net/wireless/rtlwifi/wifi.h
+++ b/drivers/net/wireless/rtlwifi/wifi.h
@@ -1160,6 +1160,8 @@ struct rtl_phy {
1160 1160
1161 u8 pwrgroup_cnt; 1161 u8 pwrgroup_cnt;
1162 u8 cck_high_power; 1162 u8 cck_high_power;
1163 /* this is for 88E & 8723A */
1164 u32 mcs_txpwrlevel_origoffset[MAX_PG_GROUP][16];
1163 /* MAX_PG_GROUP groups of pwr diff by rates */ 1165 /* MAX_PG_GROUP groups of pwr diff by rates */
1164 u32 mcs_offset[MAX_PG_GROUP][16]; 1166 u32 mcs_offset[MAX_PG_GROUP][16];
1165 u32 tx_power_by_rate_offset[TX_PWR_BY_RATE_NUM_BAND] 1167 u32 tx_power_by_rate_offset[TX_PWR_BY_RATE_NUM_BAND]
@@ -1890,6 +1892,7 @@ struct rtl_stats {
1890 bool rx_is40Mhzpacket; 1892 bool rx_is40Mhzpacket;
1891 u32 rx_pwdb_all; 1893 u32 rx_pwdb_all;
1892 u8 rx_mimo_signalstrength[4]; /*in 0~100 index */ 1894 u8 rx_mimo_signalstrength[4]; /*in 0~100 index */
1895 s8 rx_mimo_signalquality[4];
1893 u8 rx_mimo_evm_dbm[4]; 1896 u8 rx_mimo_evm_dbm[4];
1894 u16 cfo_short[4]; /* per-path's Cfo_short */ 1897 u16 cfo_short[4]; /* per-path's Cfo_short */
1895 u16 cfo_tail[4]; 1898 u16 cfo_tail[4];
@@ -1966,7 +1969,7 @@ struct rtl_tcb_desc {
1966 u8 empkt_num; 1969 u8 empkt_num;
1967 /* The max value by HW */ 1970 /* The max value by HW */
1968 u32 empkt_len[10]; 1971 u32 empkt_len[10];
1969 bool btx_enable_sw_calc_duration; 1972 bool tx_enable_sw_calc_duration;
1970}; 1973};
1971 1974
1972struct rtl92c_firmware_header; 1975struct rtl92c_firmware_header;