1 /******************************************************************************
2 *
3 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
4 *
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of version 2 of the GNU General Public License as
7 * published by the Free Software Foundation.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
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 *
19 ******************************************************************************/
20
21 #include "mp_precomp.h"
22 #include "../phydm_precomp.h"
23
24 #if (RTL8822B_SUPPORT == 1)
25
26 BOOLEAN
GetMixModeTXAGCBBSWingOffset_8822b(PVOID pDM_VOID,PWRTRACK_METHOD Method,u1Byte RFPath,u1Byte TxPowerIndexOffest)27 GetMixModeTXAGCBBSWingOffset_8822b(
28 PVOID pDM_VOID,
29 PWRTRACK_METHOD Method,
30 u1Byte RFPath,
31 u1Byte TxPowerIndexOffest
32 )
33 {
34 PDM_ODM_T pDM_Odm = (PDM_ODM_T)pDM_VOID;
35 PODM_RF_CAL_T pRFCalibrateInfo = &(pDM_Odm->RFCalibrateInfo);
36
37 u1Byte BBSwingUpperBound = pRFCalibrateInfo->DefaultOfdmIndex + 10;
38 u1Byte BBSwingLowerBound = 0;
39
40 s1Byte TX_AGC_Index = 0;
41 u1Byte TX_BBSwing_Index = pRFCalibrateInfo->DefaultOfdmIndex;
42
43 ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
44 ("Path_%d pRFCalibrateInfo->Absolute_OFDMSwingIdx[RFPath]=%d, TxPowerIndexOffest=%d\n",
45 RFPath, pRFCalibrateInfo->Absolute_OFDMSwingIdx[RFPath], TxPowerIndexOffest));
46
47 if (TxPowerIndexOffest > 0XF)
48 TxPowerIndexOffest = 0XF;
49
50 if (pRFCalibrateInfo->Absolute_OFDMSwingIdx[RFPath] >= 0 && pRFCalibrateInfo->Absolute_OFDMSwingIdx[RFPath] <= TxPowerIndexOffest) {
51 TX_AGC_Index = pRFCalibrateInfo->Absolute_OFDMSwingIdx[RFPath];
52 TX_BBSwing_Index = pRFCalibrateInfo->DefaultOfdmIndex;
53 } else if (pRFCalibrateInfo->Absolute_OFDMSwingIdx[RFPath] > TxPowerIndexOffest) {
54 TX_AGC_Index = TxPowerIndexOffest;
55 pRFCalibrateInfo->Remnant_OFDMSwingIdx[RFPath] = pRFCalibrateInfo->Absolute_OFDMSwingIdx[RFPath] - TxPowerIndexOffest;
56 TX_BBSwing_Index = pRFCalibrateInfo->DefaultOfdmIndex + pRFCalibrateInfo->Remnant_OFDMSwingIdx[RFPath];
57
58 if (TX_BBSwing_Index > BBSwingUpperBound)
59 TX_BBSwing_Index = BBSwingUpperBound;
60 } else {
61 TX_AGC_Index = 0;
62
63 if (pRFCalibrateInfo->DefaultOfdmIndex > (pRFCalibrateInfo->Absolute_OFDMSwingIdx[RFPath] * (-1)))
64 TX_BBSwing_Index = pRFCalibrateInfo->DefaultOfdmIndex + pRFCalibrateInfo->Absolute_OFDMSwingIdx[RFPath];
65 else
66 TX_BBSwing_Index = BBSwingLowerBound;
67
68 if (TX_BBSwing_Index < BBSwingLowerBound)
69 TX_BBSwing_Index = BBSwingLowerBound;
70 }
71
72 pRFCalibrateInfo->Absolute_OFDMSwingIdx[RFPath] = TX_AGC_Index;
73 pRFCalibrateInfo->BbSwingIdxOfdm[RFPath] = TX_BBSwing_Index;
74
75 ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
76 ("MixMode Offset Path_%d pRFCalibrateInfo->Absolute_OFDMSwingIdx[RFPath]=%d pRFCalibrateInfo->BbSwingIdxOfdm[RFPath]=%d TxPowerIndexOffest=%d\n",
77 RFPath, pRFCalibrateInfo->Absolute_OFDMSwingIdx[RFPath], pRFCalibrateInfo->BbSwingIdxOfdm[RFPath] , TxPowerIndexOffest));
78
79 return TRUE;
80 }
81
82
83 VOID
ODM_TxPwrTrackSetPwr8822B(PVOID pDM_VOID,PWRTRACK_METHOD Method,u1Byte RFPath,u1Byte ChannelMappedIndex)84 ODM_TxPwrTrackSetPwr8822B(
85 PVOID pDM_VOID,
86 PWRTRACK_METHOD Method,
87 u1Byte RFPath,
88 u1Byte ChannelMappedIndex
89 )
90 {
91
92 #if 0
93 PDM_ODM_T pDM_Odm = (PDM_ODM_T)pDM_VOID;
94 PADAPTER Adapter = pDM_Odm->Adapter;
95 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
96 PODM_RF_CAL_T pRFCalibrateInfo = &(pDM_Odm->RFCalibrateInfo);
97 u1Byte Channel = pHalData->CurrentChannel;
98 u1Byte BandWidth = pHalData->CurrentChannelBW;
99 u1Byte TxPowerIndex = 0;
100 u1Byte TxRate = 0xFF;
101 RT_STATUS status = RT_STATUS_SUCCESS;
102
103 PHALMAC_PWR_TRACKING_OPTION pPwr_tracking_opt = &(pRFCalibrateInfo->HALMAC_PWR_TRACKING_INFO);
104
105 if (pDM_Odm->mp_mode == TRUE) {
106 #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN | ODM_CE))
107 #if (DM_ODM_SUPPORT_TYPE & ODM_WIN)
108 #if (MP_DRIVER == 1)
109 PMPT_CONTEXT pMptCtx = &(Adapter->MptCtx);
110
111 TxRate = MptToMgntRate(pMptCtx->MptRateIndex);
112 #endif
113 #elif (DM_ODM_SUPPORT_TYPE & ODM_CE)
114 PMPT_CONTEXT pMptCtx = &(Adapter->mppriv.MptCtx);
115
116 TxRate = MptToMgntRate(pMptCtx->MptRateIndex);
117 #endif
118 #endif
119 } else {
120 u2Byte rate = *(pDM_Odm->pForcedDataRate);
121
122 if (!rate) { /*auto rate*/
123 #if (DM_ODM_SUPPORT_TYPE & ODM_WIN)
124 TxRate = Adapter->HalFunc.GetHwRateFromMRateHandler(pDM_Odm->TxRate);
125 #elif (DM_ODM_SUPPORT_TYPE & ODM_CE)
126 if (pDM_Odm->number_linked_client != 0)
127 TxRate = HwRateToMRate(pDM_Odm->TxRate);
128 #endif
129 } else { /*force rate*/
130 TxRate = (u1Byte) rate;
131 }
132 }
133
134 ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD, ("Call:%s TxRate=0x%X\n", __func__, TxRate));
135
136 TxPowerIndex = PHY_GetTxPowerIndex(Adapter, (ODM_RF_RADIO_PATH_E) RFPath, TxRate, BandWidth, Channel);
137
138 ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
139 ("type=%d TxPowerIndex=%d pRFCalibrateInfo->Absolute_OFDMSwingIdx=%d pRFCalibrateInfo->DefaultOfdmIndex=%d RFPath=%d\n", Method, TxPowerIndex, pRFCalibrateInfo->Absolute_OFDMSwingIdx[RFPath], pRFCalibrateInfo->DefaultOfdmIndex, RFPath));
140
141 pPwr_tracking_opt->type = Method;
142 pPwr_tracking_opt->bbswing_index = pRFCalibrateInfo->DefaultOfdmIndex;
143 pPwr_tracking_opt->pwr_tracking_para[RFPath].enable = 1;
144 pPwr_tracking_opt->pwr_tracking_para[RFPath].tx_pwr_index = TxPowerIndex;
145 pPwr_tracking_opt->pwr_tracking_para[RFPath].pwr_tracking_offset_value = pRFCalibrateInfo->Absolute_OFDMSwingIdx[RFPath];
146 pPwr_tracking_opt->pwr_tracking_para[RFPath].tssi_value = 0;
147
148
149 if (RFPath == (MAX_PATH_NUM_8822B - 1)) {
150 status = HAL_MAC_Send_PowerTracking_Info(&GET_HAL_MAC_INFO(Adapter), pPwr_tracking_opt);
151
152 if (status == RT_STATUS_SUCCESS) {
153 ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
154 ("Path A 0xC94=0x%X 0xC1C=0x%X\n",
155 ODM_GetBBReg(pDM_Odm, 0xC94, BIT29 | BIT28 | BIT27 | BIT26 | BIT25),
156 ODM_GetBBReg(pDM_Odm, 0xC1C, 0xFFE00000)
157 ));
158 ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
159 ("Path B 0xE94=0x%X 0xE1C=0x%X\n",
160 ODM_GetBBReg(pDM_Odm, 0xE94, BIT29 | BIT28 | BIT27 | BIT26 | BIT25),
161 ODM_GetBBReg(pDM_Odm, 0xE1C, 0xFFE00000)
162 ));
163 } else {
164 ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
165 ("Power Tracking to FW Fail ret code = %d\n", status));
166 }
167 }
168
169 #endif
170
171 PDM_ODM_T pDM_Odm = (PDM_ODM_T)pDM_VOID;
172 PODM_RF_CAL_T pRFCalibrateInfo = &(pDM_Odm->RFCalibrateInfo);
173 u1Byte TxPowerIndexOffest = 0;
174 u1Byte TxPowerIndex = 0;
175
176
177 #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN | ODM_CE))
178 PADAPTER Adapter = pDM_Odm->Adapter;
179 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
180 u1Byte Channel = pHalData->CurrentChannel;
181 u1Byte BandWidth = pHalData->CurrentChannelBW;
182 u1Byte TxRate = 0xFF;
183
184 if (pDM_Odm->mp_mode == TRUE) {
185 #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN | ODM_CE))
186 #if (DM_ODM_SUPPORT_TYPE & ODM_WIN)
187 #if (MP_DRIVER == 1)
188 PMPT_CONTEXT pMptCtx = &(Adapter->MptCtx);
189
190 TxRate = MptToMgntRate(pMptCtx->MptRateIndex);
191 #endif
192 #elif (DM_ODM_SUPPORT_TYPE & ODM_CE)
193 PMPT_CONTEXT pMptCtx = &(Adapter->mppriv.MptCtx);
194
195 TxRate = MptToMgntRate(pMptCtx->MptRateIndex);
196 #endif
197 #endif
198 } else {
199 u2Byte rate = *(pDM_Odm->pForcedDataRate);
200
201 if (!rate) { /*auto rate*/
202 #if (DM_ODM_SUPPORT_TYPE & ODM_WIN)
203 TxRate = Adapter->HalFunc.GetHwRateFromMRateHandler(pDM_Odm->TxRate);
204 #elif (DM_ODM_SUPPORT_TYPE & ODM_CE)
205 if (pDM_Odm->number_linked_client != 0)
206 TxRate = HwRateToMRate(pDM_Odm->TxRate);
207 #endif
208 } else { /*force rate*/
209 TxRate = (u1Byte) rate;
210 }
211 }
212
213 ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD, ("Call:%s TxRate=0x%X\n", __func__, TxRate));
214
215 #endif
216
217 ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
218 ("pRF->DefaultOfdmIndex=%d pRF->DefaultCckIndex=%d\n", pRFCalibrateInfo->DefaultOfdmIndex, pRFCalibrateInfo->DefaultCckIndex));
219
220 ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
221 ("pRF->Absolute_OFDMSwingIdx=%d pRF->Remnant_OFDMSwingIdx=%d pRF->Absolute_CCKSwingIdx=%d pRF->Remnant_CCKSwingIdx=%d RFPath=%d\n",
222 pRFCalibrateInfo->Absolute_OFDMSwingIdx[RFPath], pRFCalibrateInfo->Remnant_OFDMSwingIdx[RFPath], pRFCalibrateInfo->Absolute_CCKSwingIdx[RFPath], pRFCalibrateInfo->Remnant_CCKSwingIdx, RFPath));
223
224 #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN | ODM_CE))
225 TxPowerIndex = PHY_GetTxPowerIndex(Adapter, (ODM_RF_RADIO_PATH_E) RFPath, TxRate, BandWidth, Channel);
226 #else
227 TxPowerIndex = config_phydm_read_txagc_8822b(pDM_Odm, RFPath, 0x04); /*0x04(TX_AGC_OFDM_6M)*/
228 #endif
229
230 if (TxPowerIndex >= 63)
231 TxPowerIndex = 63;
232
233 TxPowerIndexOffest = 63 - TxPowerIndex;
234
235 ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
236 ("TxPowerIndex=%d TxPowerIndexOffest=%d RFPath=%d\n", TxPowerIndex, TxPowerIndexOffest, RFPath));
237
238
239 if (Method == MIX_MODE) {
240 switch (RFPath) {
241 case ODM_RF_PATH_A:
242 GetMixModeTXAGCBBSWingOffset_8822b(pDM_Odm, Method, RFPath, TxPowerIndexOffest);
243 ODM_SetBBReg(pDM_Odm, 0xC94, (BIT29 | BIT28 | BIT27 | BIT26 | BIT25), pRFCalibrateInfo->Absolute_OFDMSwingIdx[RFPath]);
244 ODM_SetBBReg(pDM_Odm, rA_TxScale_Jaguar, 0xFFE00000, TxScalingTable_Jaguar[pRFCalibrateInfo->BbSwingIdxOfdm[RFPath]]);
245
246 ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
247 ("TXAGC(0xC94)=0x%x BBSwing(0xc1c)=0x%x BBSwingIndex=%d RFPath=%d\n",
248 ODM_GetBBReg(pDM_Odm, 0xC94, (BIT29 | BIT28 | BIT27 | BIT26 | BIT25)),
249 ODM_GetBBReg(pDM_Odm, 0xc1c, 0xFFE00000),
250 pRFCalibrateInfo->BbSwingIdxOfdm[RFPath], RFPath));
251 break;
252
253 case ODM_RF_PATH_B:
254 GetMixModeTXAGCBBSWingOffset_8822b(pDM_Odm, Method, RFPath, TxPowerIndexOffest);
255 ODM_SetBBReg(pDM_Odm, 0xE94, (BIT29 | BIT28 | BIT27 | BIT26 | BIT25), pRFCalibrateInfo->Absolute_OFDMSwingIdx[RFPath]);
256 ODM_SetBBReg(pDM_Odm, rB_TxScale_Jaguar, 0xFFE00000, TxScalingTable_Jaguar[pRFCalibrateInfo->BbSwingIdxOfdm[RFPath]]);
257
258 ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
259 ("TXAGC(0xE94)=0x%x BBSwing(0xe1c)=0x%x BBSwingIndex=%d RFPath=%d\n",
260 ODM_GetBBReg(pDM_Odm, 0xE94, (BIT29 | BIT28 | BIT27 | BIT26 | BIT25)),
261 ODM_GetBBReg(pDM_Odm, 0xe1c, 0xFFE00000),
262 pRFCalibrateInfo->BbSwingIdxOfdm[RFPath], RFPath));
263 break;
264
265 default:
266 break;
267 }
268 }
269 }
270
271
272 VOID
GetDeltaSwingTable_8822B(PVOID pDM_VOID,pu1Byte * TemperatureUP_A,pu1Byte * TemperatureDOWN_A,pu1Byte * TemperatureUP_B,pu1Byte * TemperatureDOWN_B,pu1Byte * TemperatureUP_CCK_A,pu1Byte * TemperatureDOWN_CCK_A,pu1Byte * TemperatureUP_CCK_B,pu1Byte * TemperatureDOWN_CCK_B)273 GetDeltaSwingTable_8822B(
274 PVOID pDM_VOID,
275 #if (DM_ODM_SUPPORT_TYPE & ODM_AP)
276 pu1Byte *TemperatureUP_A,
277 pu1Byte *TemperatureDOWN_A,
278 pu1Byte *TemperatureUP_B,
279 pu1Byte *TemperatureDOWN_B,
280 pu1Byte *TemperatureUP_CCK_A,
281 pu1Byte *TemperatureDOWN_CCK_A,
282 pu1Byte *TemperatureUP_CCK_B,
283 pu1Byte *TemperatureDOWN_CCK_B
284 #else
285 pu1Byte *TemperatureUP_A,
286 pu1Byte *TemperatureDOWN_A,
287 pu1Byte *TemperatureUP_B,
288 pu1Byte *TemperatureDOWN_B
289 #endif
290 )
291 {
292 PDM_ODM_T pDM_Odm = (PDM_ODM_T)pDM_VOID;
293 PODM_RF_CAL_T pRFCalibrateInfo = &(pDM_Odm->RFCalibrateInfo);
294
295 #if (DM_ODM_SUPPORT_TYPE & ODM_AP)
296 u1Byte channel = *(pDM_Odm->pChannel);
297 #else
298 PADAPTER Adapter = pDM_Odm->Adapter;
299 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
300 u1Byte channel = pHalData->CurrentChannel;
301 #endif
302
303 #if (DM_ODM_SUPPORT_TYPE & ODM_AP)
304 *TemperatureUP_CCK_A = pRFCalibrateInfo->DeltaSwingTableIdx_2GCCKA_P;
305 *TemperatureDOWN_CCK_A = pRFCalibrateInfo->DeltaSwingTableIdx_2GCCKA_N;
306 *TemperatureUP_CCK_B = pRFCalibrateInfo->DeltaSwingTableIdx_2GCCKB_P;
307 *TemperatureDOWN_CCK_B = pRFCalibrateInfo->DeltaSwingTableIdx_2GCCKB_N;
308 #endif
309
310 *TemperatureUP_A = pRFCalibrateInfo->DeltaSwingTableIdx_2GA_P;
311 *TemperatureDOWN_A = pRFCalibrateInfo->DeltaSwingTableIdx_2GA_N;
312 *TemperatureUP_B = pRFCalibrateInfo->DeltaSwingTableIdx_2GB_P;
313 *TemperatureDOWN_B = pRFCalibrateInfo->DeltaSwingTableIdx_2GB_N;
314
315 if (36 <= channel && channel <= 64) {
316 *TemperatureUP_A = pRFCalibrateInfo->DeltaSwingTableIdx_5GA_P[0];
317 *TemperatureDOWN_A = pRFCalibrateInfo->DeltaSwingTableIdx_5GA_N[0];
318 *TemperatureUP_B = pRFCalibrateInfo->DeltaSwingTableIdx_5GB_P[0];
319 *TemperatureDOWN_B = pRFCalibrateInfo->DeltaSwingTableIdx_5GB_N[0];
320 } else if (100 <= channel && channel <= 144) {
321 *TemperatureUP_A = pRFCalibrateInfo->DeltaSwingTableIdx_5GA_P[1];
322 *TemperatureDOWN_A = pRFCalibrateInfo->DeltaSwingTableIdx_5GA_N[1];
323 *TemperatureUP_B = pRFCalibrateInfo->DeltaSwingTableIdx_5GB_P[1];
324 *TemperatureDOWN_B = pRFCalibrateInfo->DeltaSwingTableIdx_5GB_N[1];
325 } else if (149 <= channel && channel <= 177) {
326 *TemperatureUP_A = pRFCalibrateInfo->DeltaSwingTableIdx_5GA_P[2];
327 *TemperatureDOWN_A = pRFCalibrateInfo->DeltaSwingTableIdx_5GA_N[2];
328 *TemperatureUP_B = pRFCalibrateInfo->DeltaSwingTableIdx_5GB_P[2];
329 *TemperatureDOWN_B = pRFCalibrateInfo->DeltaSwingTableIdx_5GB_N[2];
330 }
331 }
332
333
334 VOID
phy_LCCalibrate_8822B(PDM_ODM_T pDM_Odm)335 phy_LCCalibrate_8822B(
336 PDM_ODM_T pDM_Odm
337 )
338 {
339 u4Byte LC_Cal = 0, cnt = 0;
340
341 /*backup RF0x18*/
342 LC_Cal = ODM_GetRFReg(pDM_Odm, ODM_RF_PATH_A, RF_CHNLBW, bRFRegOffsetMask);
343
344 /*Start LCK*/
345 ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, RF_CHNLBW, bRFRegOffsetMask, LC_Cal | 0x08000);
346
347 ODM_delay_ms(100);
348
349 for (cnt = 0; cnt < 100; cnt++) {
350 if (ODM_GetRFReg(pDM_Odm, ODM_RF_PATH_A, RF_CHNLBW, 0x8000) != 0x1)
351 break;
352 ODM_delay_ms(10);
353 }
354
355 /*Recover channel number*/
356 ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, RF_CHNLBW, bRFRegOffsetMask, LC_Cal);
357 }
358
359
360
361 VOID
PHY_LCCalibrate_8822B(PVOID pDM_VOID)362 PHY_LCCalibrate_8822B(
363 PVOID pDM_VOID
364 )
365 {
366 PDM_ODM_T pDM_Odm = (PDM_ODM_T)pDM_VOID;
367 BOOLEAN bStartContTx = FALSE, bSingleTone = FALSE, bCarrierSuppression = FALSE;
368 u8Byte StartTime;
369 u8Byte ProgressingTime;
370
371
372 #if !(DM_ODM_SUPPORT_TYPE & ODM_AP)
373 PADAPTER pAdapter = pDM_Odm->Adapter;
374
375 #if (MP_DRIVER == 1)
376 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
377 PMPT_CONTEXT pMptCtx = &(pAdapter->MptCtx);
378 #else
379 PMPT_CONTEXT pMptCtx = &(pAdapter->mppriv.MptCtx);
380 #endif
381 bStartContTx = pMptCtx->bStartContTx;
382 bSingleTone = pMptCtx->bSingleTone;
383 bCarrierSuppression = pMptCtx->bCarrierSuppression;
384 #endif
385 #endif
386
387 if (bStartContTx || bSingleTone || bCarrierSuppression) {
388 ODM_RT_TRACE(pDM_Odm, ODM_COMP_CALIBRATION, ODM_DBG_LOUD, ("[LCK]continues TX ing !!! LCK return\n"));
389 return;
390 }
391
392 StartTime = ODM_GetCurrentTime(pDM_Odm);
393 phy_LCCalibrate_8822B(pDM_Odm);
394 ProgressingTime = ODM_GetProgressingTime(pDM_Odm, StartTime);
395 ODM_RT_TRACE(pDM_Odm, ODM_COMP_CALIBRATION, ODM_DBG_LOUD, ("[LCK]LCK ProgressingTime = %lld\n", ProgressingTime));
396 }
397
398
399
ConfigureTxpowerTrack_8822B(PTXPWRTRACK_CFG pConfig)400 void ConfigureTxpowerTrack_8822B(
401 PTXPWRTRACK_CFG pConfig
402 )
403 {
404 pConfig->SwingTableSize_CCK = TXSCALE_TABLE_SIZE;
405 pConfig->SwingTableSize_OFDM = TXSCALE_TABLE_SIZE;
406 pConfig->Threshold_IQK = IQK_THRESHOLD;
407 pConfig->Threshold_DPK = DPK_THRESHOLD;
408 pConfig->AverageThermalNum = AVG_THERMAL_NUM_8822B;
409 pConfig->RfPathCount = MAX_PATH_NUM_8822B;
410 pConfig->ThermalRegAddr = RF_T_METER_8822B;
411
412 pConfig->ODM_TxPwrTrackSetPwr = ODM_TxPwrTrackSetPwr8822B;
413 pConfig->DoIQK = DoIQK_8822B;
414 pConfig->PHY_LCCalibrate = PHY_LCCalibrate_8822B;
415
416 #if (DM_ODM_SUPPORT_TYPE & ODM_AP)
417 pConfig->GetDeltaAllSwingTable = GetDeltaSwingTable_8822B;
418 #else
419 pConfig->GetDeltaSwingTable = GetDeltaSwingTable_8822B;
420 #endif
421 }
422
423
PHY_SetRFPathSwitch_8822B(IN PDM_ODM_T pDM_Odm,IN BOOLEAN bMain)424 VOID PHY_SetRFPathSwitch_8822B(
425 #if (DM_ODM_SUPPORT_TYPE & ODM_AP)
426 IN PDM_ODM_T pDM_Odm,
427 #else
428 IN PADAPTER pAdapter,
429 #endif
430 IN BOOLEAN bMain
431 )
432 {
433 #if !(DM_ODM_SUPPORT_TYPE & ODM_AP)
434 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
435 #if (DM_ODM_SUPPORT_TYPE == ODM_CE)
436 PDM_ODM_T pDM_Odm = &pHalData->odmpriv;
437 #endif
438 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
439 PDM_ODM_T pDM_Odm = &pHalData->DM_OutSrc;
440 #endif
441 #endif
442
443 #if 0
444 ODM_SetBBReg(pDM_Odm, 0xCB4, bMaskDWord, 0x00004577);
445 ODM_SetBBReg(pDM_Odm, 0x1900, bMaskDWord, 0x00001000);
446 ODM_SetBBReg(pDM_Odm, 0x4C, bMaskDWord, 0x01628202);
447
448 if (bMain)
449 ODM_SetBBReg(pDM_Odm, 0xCBC, bMaskDWord, 0x00000200); /*WiFi */
450 else
451 ODM_SetBBReg(pDM_Odm, 0xCBC, bMaskDWord, 0x00000100); /* BT*/
452 #else
453 /*BY SY Request */
454 ODM_SetBBReg(pDM_Odm, 0x4C, (BIT24 | BIT23), 0x2);
455 ODM_SetBBReg(pDM_Odm, 0x974, 0xff, 0xff);
456
457 /*ODM_SetBBReg(pDM_Odm, 0x1991, 0x3, 0x0);*/
458 ODM_SetBBReg(pDM_Odm, 0x1990, (BIT9 | BIT8), 0x0);
459
460 /*ODM_SetBBReg(pDM_Odm, 0xCBE, 0x8, 0x0);*/
461 ODM_SetBBReg(pDM_Odm, 0xCBC, BIT19, 0x0);
462
463 ODM_SetBBReg(pDM_Odm, 0xCB4, 0xff, 0x77);
464
465 if (bMain) {
466 /*ODM_SetBBReg(pDM_Odm, 0xCBD, 0x3, 0x2); WiFi */
467 ODM_SetBBReg(pDM_Odm, 0xCBC, (BIT9 | BIT8), 0x2); /*WiFi */
468 } else {
469 /*ODM_SetBBReg(pDM_Odm, 0xCBD, 0x3, 0x1); BT*/
470 ODM_SetBBReg(pDM_Odm, 0xCBC, (BIT9 | BIT8), 0x1); /*BT*/
471 }
472
473 #endif
474 }
475
476 BOOLEAN
phy_QueryRFPathSwitch_8822B(PDM_ODM_T pDM_Odm)477 phy_QueryRFPathSwitch_8822B(
478 #if (DM_ODM_SUPPORT_TYPE & ODM_AP)
479 PDM_ODM_T pDM_Odm
480 #else
481 PADAPTER pAdapter
482 #endif
483 )
484 {
485 #if !(DM_ODM_SUPPORT_TYPE & ODM_AP)
486 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
487 #if (DM_ODM_SUPPORT_TYPE == ODM_CE)
488 PDM_ODM_T pDM_Odm = &pHalData->odmpriv;
489 #endif
490 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
491 PDM_ODM_T pDM_Odm = &pHalData->DM_OutSrc;
492 #endif
493 #endif
494
495 if (ODM_GetBBReg(pDM_Odm, 0xCBC, (BIT9 | BIT8)) == 0x2) /*WiFi */
496 return TRUE;
497 else
498 return FALSE;
499 }
500
501
PHY_QueryRFPathSwitch_8822B(PDM_ODM_T pDM_Odm)502 BOOLEAN PHY_QueryRFPathSwitch_8822B(
503 #if (DM_ODM_SUPPORT_TYPE & ODM_AP)
504 PDM_ODM_T pDM_Odm
505 #else
506 PADAPTER pAdapter
507 #endif
508 )
509 {
510
511 #if DISABLE_BB_RF
512 return TRUE;
513 #endif
514
515 #if (DM_ODM_SUPPORT_TYPE & ODM_AP)
516 return phy_QueryRFPathSwitch_8822B(pDM_Odm);
517 #else
518 return phy_QueryRFPathSwitch_8822B(pAdapter);
519 #endif
520 }
521
522
523 #endif /* (RTL8822B_SUPPORT == 0)*/
524