1 /******************************************************************************
\r
3 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
\r
5 * This program is free software; you can redistribute it and/or modify it
\r
6 * under the terms of version 2 of the GNU General Public License as
\r
7 * published by the Free Software Foundation.
\r
9 * This program is distributed in the hope that it will be useful, but WITHOUT
\r
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
\r
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
\r
14 * You should have received a copy of the GNU General Public License along with
\r
15 * this program; if not, write to the Free Software Foundation, Inc.,
\r
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
\r
19 ******************************************************************************/
\r
21 #ifndef __PHYDMPOWERTRACKING_H__
\r
22 #define __PHYDMPOWERTRACKING_H__
\r
24 #define POWRTRACKING_VERSION "1.1"
\r
26 #if (DM_ODM_SUPPORT_TYPE == ODM_AP)
\r
27 #ifdef RTK_AC_SUPPORT
\r
28 #define ODM_IC_11AC_SERIES_SUPPORT 1
\r
30 #define ODM_IC_11AC_SERIES_SUPPORT 0
\r
33 #define ODM_IC_11AC_SERIES_SUPPORT 1
\r
36 #define DPK_DELTA_MAPPING_NUM 13
\r
37 #define index_mapping_HP_NUM 15
\r
38 #define DELTA_SWINGIDX_SIZE 30
\r
39 #define DELTA_SWINTSSI_SIZE 61
\r
41 #define MAX_RF_PATH 4
\r
42 #define TXSCALE_TABLE_SIZE 37
\r
43 #define CCK_TABLE_SIZE_8723D 41
\r
45 #define IQK_MAC_REG_NUM 4
\r
46 #define IQK_ADDA_REG_NUM 16
\r
47 #define IQK_BB_REG_NUM_MAX 10
\r
49 #define IQK_BB_REG_NUM 9
\r
51 #define HP_THERMAL_NUM 8
\r
53 #define AVG_THERMAL_NUM 8
\r
54 #define IQK_Matrix_REG_NUM 8
\r
55 //#define IQK_Matrix_Settings_NUM 1+24+21
\r
56 #define IQK_Matrix_Settings_NUM (14+24+21) // Channels_2_4G_NUM + Channels_5G_20M_NUM + Channels_5G
\r
58 #if !defined(_OUTSRC_COEXIST)
\r
59 #define OFDM_TABLE_SIZE_92D 43
\r
60 #define OFDM_TABLE_SIZE 37
\r
61 #define CCK_TABLE_SIZE 33
\r
62 #define CCK_TABLE_SIZE_88F 21
\r
66 //#define OFDM_TABLE_SIZE_92E 54
\r
67 //#define CCK_TABLE_SIZE_92E 54
\r
68 extern u4Byte OFDMSwingTable[OFDM_TABLE_SIZE_92D];
\r
69 extern u1Byte CCKSwingTable_Ch1_Ch13[CCK_TABLE_SIZE][8];
\r
70 extern u1Byte CCKSwingTable_Ch14 [CCK_TABLE_SIZE][8];
\r
73 extern u4Byte OFDMSwingTable_New[OFDM_TABLE_SIZE_92D];
\r
74 extern u1Byte CCKSwingTable_Ch1_Ch13_New[CCK_TABLE_SIZE][8];
\r
75 extern u1Byte CCKSwingTable_Ch14_New [CCK_TABLE_SIZE][8];
\r
76 extern u1Byte CCKSwingTable_Ch1_Ch14_88F[CCK_TABLE_SIZE_88F][16];
\r
77 extern u1Byte CCKSwingTable_Ch1_Ch13_88F[CCK_TABLE_SIZE_88F][16];
\r
78 extern u1Byte CCKSwingTable_Ch14_88F[CCK_TABLE_SIZE_88F][16];
\r
82 #define ODM_OFDM_TABLE_SIZE 37
\r
83 #define ODM_CCK_TABLE_SIZE 33
\r
84 // <20140613, YuChen> In case fail to read TxPowerTrack.txt, we use the table of 88E as the default table.
\r
85 extern u1Byte DeltaSwingTableIdx_2GA_P_DEFAULT[DELTA_SWINGIDX_SIZE];
\r
86 extern u1Byte DeltaSwingTableIdx_2GA_N_DEFAULT[DELTA_SWINGIDX_SIZE];
\r
88 static u1Byte DeltaSwingTableIdx_2GA_P_8188E[] = {0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 7, 7, 8, 8, 8, 9, 9, 9, 9, 9};
\r
89 static u1Byte DeltaSwingTableIdx_2GA_N_8188E[] = {0, 0, 0, 2, 2, 3, 3, 4, 4, 4, 4, 5, 5, 6, 6, 7, 7, 7, 7, 8, 8, 9, 9, 10, 10, 10, 11, 11, 11, 11};
\r
91 //extern u4Byte OFDMSwingTable_92E[OFDM_TABLE_SIZE_92E];
\r
92 //extern u1Byte CCKSwingTable_Ch1_Ch13_92E[CCK_TABLE_SIZE_92E][8];
\r
93 //extern u1Byte CCKSwingTable_Ch14_92E[CCK_TABLE_SIZE_92E][8];
\r
95 #ifdef CONFIG_WLAN_HAL_8192EE
\r
96 #define OFDM_TABLE_SIZE_92E 54
\r
97 #define CCK_TABLE_SIZE_92E 54
\r
98 extern u4Byte OFDMSwingTable_92E[OFDM_TABLE_SIZE_92E];
\r
99 extern u1Byte CCKSwingTable_Ch1_Ch13_92E[CCK_TABLE_SIZE_92E][8];
\r
100 extern u1Byte CCKSwingTable_Ch14_92E[CCK_TABLE_SIZE_92E][8];
\r
103 #define OFDM_TABLE_SIZE_8812 43
\r
104 #define AVG_THERMAL_NUM_8812 4
\r
106 #if (RTL8814A_SUPPORT == 1 || RTL8822B_SUPPORT == 1)
\r
107 extern u4Byte TxScalingTable_Jaguar[TXSCALE_TABLE_SIZE];
\r
108 #elif(ODM_IC_11AC_SERIES_SUPPORT)
\r
109 extern unsigned int OFDMSwingTable_8812[OFDM_TABLE_SIZE_8812];
\r
112 extern u4Byte CCKSwingTable_Ch1_Ch14_8723D[CCK_TABLE_SIZE_8723D];
\r
114 #define dm_CheckTXPowerTracking ODM_TXPowerTrackingCheck
\r
116 typedef struct _IQK_MATRIX_REGS_SETTING{
\r
118 s4Byte Value[1][IQK_Matrix_REG_NUM];
\r
119 }IQK_MATRIX_REGS_SETTING,*PIQK_MATRIX_REGS_SETTING;
\r
121 typedef struct ODM_RF_Calibration_Structure
\r
123 //for tx power tracking
\r
125 u4Byte RegA24; // for TempCCK
\r
131 //u1Byte bTXPowerTracking;
\r
132 u1Byte TXPowercount;
\r
133 BOOLEAN bTXPowerTrackingInit;
\r
134 BOOLEAN bTXPowerTracking;
\r
135 u1Byte TxPowerTrackControl; //for mp mode, turn off txpwrtracking as default
\r
137 u1Byte InternalPA5G[2]; //pathA / pathB
\r
139 u1Byte ThermalMeter[2]; // ThermalMeter, index 0 for RFIC0, and 1 for RFIC1
\r
140 u1Byte ThermalValue;
\r
141 u1Byte ThermalValue_LCK;
\r
142 u1Byte ThermalValue_IQK;
\r
143 u1Byte ThermalValue_DPK;
\r
144 u1Byte ThermalValue_AVG[AVG_THERMAL_NUM];
\r
145 u1Byte ThermalValue_AVG_index;
\r
146 u1Byte ThermalValue_RxGain;
\r
147 u1Byte ThermalValue_Crystal;
\r
148 u1Byte ThermalValue_DPKstore;
\r
149 u1Byte ThermalValue_DPKtrack;
\r
150 BOOLEAN TxPowerTrackingInProgress;
\r
151 BOOLEAN bDPKenable;
\r
153 BOOLEAN bReloadtxpowerindex;
\r
154 u1Byte bRfPiEnable;
\r
155 u4Byte TXPowerTrackingCallbackCnt; //cosa add for debug
\r
159 u1Byte OFDM_index[MAX_RF_PATH];
\r
160 s1Byte PowerIndexOffset;
\r
161 s1Byte DeltaPowerIndex;
\r
162 s1Byte DeltaPowerIndexLast;
\r
163 BOOLEAN bTxPowerChanged;
\r
165 u1Byte ThermalValue_HP[HP_THERMAL_NUM];
\r
166 u1Byte ThermalValue_HP_index;
\r
167 IQK_MATRIX_REGS_SETTING IQKMatrixRegSetting[IQK_Matrix_Settings_NUM];
\r
169 u1Byte DeltaSwingTableIdx_2GCCKA_P[DELTA_SWINGIDX_SIZE];
\r
170 u1Byte DeltaSwingTableIdx_2GCCKA_N[DELTA_SWINGIDX_SIZE];
\r
171 u1Byte DeltaSwingTableIdx_2GCCKB_P[DELTA_SWINGIDX_SIZE];
\r
172 u1Byte DeltaSwingTableIdx_2GCCKB_N[DELTA_SWINGIDX_SIZE];
\r
173 u1Byte DeltaSwingTableIdx_2GCCKC_P[DELTA_SWINGIDX_SIZE];
\r
174 u1Byte DeltaSwingTableIdx_2GCCKC_N[DELTA_SWINGIDX_SIZE];
\r
175 u1Byte DeltaSwingTableIdx_2GCCKD_P[DELTA_SWINGIDX_SIZE];
\r
176 u1Byte DeltaSwingTableIdx_2GCCKD_N[DELTA_SWINGIDX_SIZE];
\r
177 u1Byte DeltaSwingTableIdx_2GA_P[DELTA_SWINGIDX_SIZE];
\r
178 u1Byte DeltaSwingTableIdx_2GA_N[DELTA_SWINGIDX_SIZE];
\r
179 u1Byte DeltaSwingTableIdx_2GB_P[DELTA_SWINGIDX_SIZE];
\r
180 u1Byte DeltaSwingTableIdx_2GB_N[DELTA_SWINGIDX_SIZE];
\r
181 u1Byte DeltaSwingTableIdx_2GC_P[DELTA_SWINGIDX_SIZE];
\r
182 u1Byte DeltaSwingTableIdx_2GC_N[DELTA_SWINGIDX_SIZE];
\r
183 u1Byte DeltaSwingTableIdx_2GD_P[DELTA_SWINGIDX_SIZE];
\r
184 u1Byte DeltaSwingTableIdx_2GD_N[DELTA_SWINGIDX_SIZE];
\r
185 u1Byte DeltaSwingTableIdx_5GA_P[BAND_NUM][DELTA_SWINGIDX_SIZE];
\r
186 u1Byte DeltaSwingTableIdx_5GA_N[BAND_NUM][DELTA_SWINGIDX_SIZE];
\r
187 u1Byte DeltaSwingTableIdx_5GB_P[BAND_NUM][DELTA_SWINGIDX_SIZE];
\r
188 u1Byte DeltaSwingTableIdx_5GB_N[BAND_NUM][DELTA_SWINGIDX_SIZE];
\r
189 u1Byte DeltaSwingTableIdx_5GC_P[BAND_NUM][DELTA_SWINGIDX_SIZE];
\r
190 u1Byte DeltaSwingTableIdx_5GC_N[BAND_NUM][DELTA_SWINGIDX_SIZE];
\r
191 u1Byte DeltaSwingTableIdx_5GD_P[BAND_NUM][DELTA_SWINGIDX_SIZE];
\r
192 u1Byte DeltaSwingTableIdx_5GD_N[BAND_NUM][DELTA_SWINGIDX_SIZE];
\r
193 u1Byte DeltaSwingTSSITable_2GCCKA[DELTA_SWINTSSI_SIZE];
\r
194 u1Byte DeltaSwingTSSITable_2GCCKB[DELTA_SWINTSSI_SIZE];
\r
195 u1Byte DeltaSwingTSSITable_2GCCKC[DELTA_SWINTSSI_SIZE];
\r
196 u1Byte DeltaSwingTSSITable_2GCCKD[DELTA_SWINTSSI_SIZE];
\r
197 u1Byte DeltaSwingTSSITable_2GA[DELTA_SWINTSSI_SIZE];
\r
198 u1Byte DeltaSwingTSSITable_2GB[DELTA_SWINTSSI_SIZE];
\r
199 u1Byte DeltaSwingTSSITable_2GC[DELTA_SWINTSSI_SIZE];
\r
200 u1Byte DeltaSwingTSSITable_2GD[DELTA_SWINTSSI_SIZE];
\r
201 u1Byte DeltaSwingTSSITable_5GA[BAND_NUM][DELTA_SWINTSSI_SIZE];
\r
202 u1Byte DeltaSwingTSSITable_5GB[BAND_NUM][DELTA_SWINTSSI_SIZE];
\r
203 u1Byte DeltaSwingTSSITable_5GC[BAND_NUM][DELTA_SWINTSSI_SIZE];
\r
204 u1Byte DeltaSwingTSSITable_5GD[BAND_NUM][DELTA_SWINTSSI_SIZE];
\r
205 u1Byte DeltaSwingTableIdx_2GA_P_8188E[DELTA_SWINGIDX_SIZE];
\r
206 u1Byte DeltaSwingTableIdx_2GA_N_8188E[DELTA_SWINGIDX_SIZE];
\r
208 u1Byte BbSwingIdxOfdm[MAX_RF_PATH];
\r
209 u1Byte BbSwingIdxOfdmCurrent;
\r
210 #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))
\r
211 u1Byte BbSwingIdxOfdmBase[MAX_RF_PATH];
\r
213 u1Byte BbSwingIdxOfdmBase;
\r
215 BOOLEAN BbSwingFlagOfdm;
\r
216 u1Byte BbSwingIdxCck;
\r
217 u1Byte BbSwingIdxCckCurrent;
\r
218 u1Byte BbSwingIdxCckBase;
\r
219 u1Byte DefaultOfdmIndex;
\r
220 u1Byte DefaultCckIndex;
\r
221 BOOLEAN BbSwingFlagCck;
\r
223 s1Byte Absolute_OFDMSwingIdx[MAX_RF_PATH];
\r
224 s1Byte Remnant_OFDMSwingIdx[MAX_RF_PATH];
\r
225 s1Byte Absolute_CCKSwingIdx[MAX_RF_PATH];
\r
226 s1Byte Remnant_CCKSwingIdx;
\r
227 s1Byte Modify_TxAGC_Value; /*Remnat compensate value at TxAGC */
\r
228 BOOLEAN Modify_TxAGC_Flag_PathA;
\r
229 BOOLEAN Modify_TxAGC_Flag_PathB;
\r
230 BOOLEAN Modify_TxAGC_Flag_PathC;
\r
231 BOOLEAN Modify_TxAGC_Flag_PathD;
\r
232 BOOLEAN Modify_TxAGC_Flag_PathA_CCK;
\r
234 s1Byte KfreeOffset[MAX_RF_PATH];
\r
236 //--------------------------------------------------------------------//
\r
248 BOOLEAN bIQKInitialized;
\r
249 BOOLEAN bLCKInProgress;
\r
250 BOOLEAN bAntennaDetected;
\r
252 BOOLEAN bIQKInProgress;
\r
255 u4Byte ADDA_backup[IQK_ADDA_REG_NUM];
\r
256 u4Byte IQK_MAC_backup[IQK_MAC_REG_NUM];
\r
257 u4Byte IQK_BB_backup_recover[9];
\r
258 u4Byte IQK_BB_backup[IQK_BB_REG_NUM];
\r
259 u4Byte TxIQC_8723B[2][3][2]; /* { {S1: 0xc94, 0xc80, 0xc4c} , {S0: 0xc9c, 0xc88, 0xc4c}} */
\r
260 u4Byte RxIQC_8723B[2][2][2]; /* { {S1: 0xc14, 0xca0} , {S0: 0xc14, 0xca0}} */
\r
261 u4Byte TxIQC_8703B[3][2]; /* { {S1: 0xc94, 0xc80, 0xc4c} , {S0: 0xc9c, 0xc88, 0xc4c}}*/
\r
262 u4Byte RxIQC_8703B[2][2]; /* { {S1: 0xc14, 0xca0} , {S0: 0xc14, 0xca0}}*/
\r
264 u8Byte IQK_StartTime;
\r
265 u8Byte IQK_TotalProgressingTime;
\r
266 u8Byte IQK_ProgressingTime;
\r
270 u1Byte retry_count[4][2]; /* [4]: path ABCD, [2] TXK, RXK */
\r
274 u4Byte APKoutput[2][2]; //path A/B; output1_1a/output1_2a
\r
276 u1Byte bAPKThermalMeterIgnore;
\r
281 /*Add by Yuchen for Kfree Phydm*/
\r
282 u1Byte RegRfKFreeEnable; /*for registry*/
\r
283 u1Byte RfKFreeEnable; /*for efuse enable check*/
\r
285 }ODM_RF_CAL_T,*PODM_RF_CAL_T;
\r
288 odm_TXPowerTrackingCheckAP(
\r
293 ODM_TXPowerTrackingCheck(
\r
299 odm_TXPowerTrackingThermalMeterInit(
\r
304 odm_TXPowerTrackingInit(
\r
309 odm_TXPowerTrackingCheckMP(
\r
315 odm_TXPowerTrackingCheckCE(
\r
320 #if(DM_ODM_SUPPORT_TYPE & (ODM_WIN))
\r
323 odm_TXPowerTrackingCallbackThermalMeter92C(
\r
324 IN PADAPTER Adapter
\r
328 odm_TXPowerTrackingCallbackRXGainThermalMeter92D(
\r
329 IN PADAPTER Adapter
\r
333 odm_TXPowerTrackingCallbackThermalMeter92D(
\r
334 IN PADAPTER Adapter
\r
338 odm_TXPowerTrackingDirectCall92C(
\r
339 IN PADAPTER Adapter
\r
343 odm_TXPowerTrackingThermalMeterCheck(
\r
344 IN PADAPTER Adapter
\r