hc
2023-11-06 15ade055295d13f95d49e3d99b09f3bbfb4a43e7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
/******************************************************************************
 *
 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
 *                                        
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of version 2 of the GNU General Public License as
 * published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
 * more details.
 *
 * You should have received a copy of the GNU General Public License along with
 * this program; if not, write to the Free Software Foundation, Inc.,
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
 *
 *
 ******************************************************************************/
 
#ifndef    __PHYDMPOWERTRACKING_H__
#define    __PHYDMPOWERTRACKING_H__
 
#define POWRTRACKING_VERSION    "1.1"
 
#if (DM_ODM_SUPPORT_TYPE == ODM_AP)
#ifdef RTK_AC_SUPPORT
#define ODM_IC_11AC_SERIES_SUPPORT        1
#else
#define ODM_IC_11AC_SERIES_SUPPORT        0
#endif
#else
#define ODM_IC_11AC_SERIES_SUPPORT        1
#endif
 
#define        DPK_DELTA_MAPPING_NUM    13
#define        index_mapping_HP_NUM    15
#define        DELTA_SWINGIDX_SIZE     30
#define        BAND_NUM                 3
#define        MAX_RF_PATH    4
#define         TXSCALE_TABLE_SIZE         37
#define IQK_MAC_REG_NUM        4
#define IQK_ADDA_REG_NUM        16
#define IQK_BB_REG_NUM_MAX    10
 
#define IQK_BB_REG_NUM        9
 
#define HP_THERMAL_NUM        8
 
#define AVG_THERMAL_NUM        8
#define IQK_Matrix_REG_NUM    8
//#define IQK_Matrix_Settings_NUM    1+24+21
#define IQK_Matrix_Settings_NUM    (14+24+21) // Channels_2_4G_NUM + Channels_5G_20M_NUM + Channels_5G
 
#if !defined(_OUTSRC_COEXIST)
#define    OFDM_TABLE_SIZE_92D     43
#define    OFDM_TABLE_SIZE     37
#define    CCK_TABLE_SIZE        33
#define    CCK_TABLE_SIZE_88F    21
 
 
 
//#define    OFDM_TABLE_SIZE_92E     54
//#define     CCK_TABLE_SIZE_92E         54
extern    u4Byte OFDMSwingTable[OFDM_TABLE_SIZE_92D];
extern    u1Byte CCKSwingTable_Ch1_Ch13[CCK_TABLE_SIZE][8];
extern    u1Byte CCKSwingTable_Ch14 [CCK_TABLE_SIZE][8];
 
 
extern    u4Byte OFDMSwingTable_New[OFDM_TABLE_SIZE_92D];
extern    u1Byte CCKSwingTable_Ch1_Ch13_New[CCK_TABLE_SIZE][8];
extern    u1Byte CCKSwingTable_Ch14_New [CCK_TABLE_SIZE][8];
extern    u1Byte CCKSwingTable_Ch1_Ch14_88F[CCK_TABLE_SIZE_88F][16];
 
#endif
 
#define    ODM_OFDM_TABLE_SIZE     37
#define    ODM_CCK_TABLE_SIZE        33
// <20140613, YuChen> In case fail to read TxPowerTrack.txt, we use the table of 88E as the default table.
extern u1Byte DeltaSwingTableIdx_2GA_P_DEFAULT[DELTA_SWINGIDX_SIZE];
extern u1Byte DeltaSwingTableIdx_2GA_N_DEFAULT[DELTA_SWINGIDX_SIZE]; 
 
 
//extern    u4Byte OFDMSwingTable_92E[OFDM_TABLE_SIZE_92E];
//extern    u1Byte CCKSwingTable_Ch1_Ch13_92E[CCK_TABLE_SIZE_92E][8];
//extern    u1Byte CCKSwingTable_Ch14_92E[CCK_TABLE_SIZE_92E][8];
 
#ifdef CONFIG_WLAN_HAL_8192EE
#define    OFDM_TABLE_SIZE_92E     54
#define    CCK_TABLE_SIZE_92E         54
extern    u4Byte OFDMSwingTable_92E[OFDM_TABLE_SIZE_92E];
extern    u1Byte CCKSwingTable_Ch1_Ch13_92E[CCK_TABLE_SIZE_92E][8];
extern    u1Byte CCKSwingTable_Ch14_92E[CCK_TABLE_SIZE_92E][8];
#endif
 
#define    OFDM_TABLE_SIZE_8812     43
#define    AVG_THERMAL_NUM_8812    4
 
#if(RTL8814A_SUPPORT == 1)
extern u4Byte TxScalingTable_Jaguar[TXSCALE_TABLE_SIZE];
#elif(ODM_IC_11AC_SERIES_SUPPORT)
extern unsigned int OFDMSwingTable_8812[OFDM_TABLE_SIZE_8812];
#endif
 
#define dm_CheckTXPowerTracking     ODM_TXPowerTrackingCheck
 
typedef struct _IQK_MATRIX_REGS_SETTING{
   BOOLEAN     bIQKDone;
   s4Byte        Value[1][IQK_Matrix_REG_NUM];
}IQK_MATRIX_REGS_SETTING,*PIQK_MATRIX_REGS_SETTING;
 
typedef struct ODM_RF_Calibration_Structure
{
   //for tx power tracking
   
   u4Byte    RegA24; // for TempCCK
   s4Byte    RegE94;
   s4Byte     RegE9C;
   s4Byte    RegEB4;
   s4Byte    RegEBC;    
 
   //u1Byte bTXPowerTracking;
   u1Byte      TXPowercount;
   BOOLEAN bTXPowerTrackingInit; 
   BOOLEAN bTXPowerTracking;
   u1Byte      TxPowerTrackControl; //for mp mode, turn off txpwrtracking as default
   u1Byte      TM_Trigger;
        u1Byte      InternalPA5G[2];    //pathA / pathB
   
   u1Byte      ThermalMeter[2];    // ThermalMeter, index 0 for RFIC0, and 1 for RFIC1
   u1Byte      ThermalValue;
   u1Byte      ThermalValue_LCK;
   u1Byte      ThermalValue_IQK;
   u1Byte    ThermalValue_DPK;        
   u1Byte    ThermalValue_AVG[AVG_THERMAL_NUM];
   u1Byte    ThermalValue_AVG_index;        
   u1Byte    ThermalValue_RxGain;
   u1Byte    ThermalValue_Crystal;
   u1Byte    ThermalValue_DPKstore;
   u1Byte    ThermalValue_DPKtrack;
   BOOLEAN    TxPowerTrackingInProgress;
   BOOLEAN    bDPKenable;
   
   BOOLEAN    bReloadtxpowerindex;    
   u1Byte     bRfPiEnable;
   u4Byte     TXPowerTrackingCallbackCnt; //cosa add for debug
 
   u1Byte     bCCKinCH14;
   u1Byte     CCK_index;
   u1Byte     OFDM_index[MAX_RF_PATH];
   s1Byte    PowerIndexOffset;
   s1Byte    DeltaPowerIndex;
   s1Byte    DeltaPowerIndexLast;    
   BOOLEAN bTxPowerChanged;
       
   u1Byte     ThermalValue_HP[HP_THERMAL_NUM];
   u1Byte     ThermalValue_HP_index;
   IQK_MATRIX_REGS_SETTING IQKMatrixRegSetting[IQK_Matrix_Settings_NUM];
   BOOLEAN bNeedIQK;
   u1Byte    Delta_IQK;
   u1Byte    Delta_LCK;
   u1Byte  DeltaSwingTableIdx_2GCCKA_P[DELTA_SWINGIDX_SIZE];
   u1Byte  DeltaSwingTableIdx_2GCCKA_N[DELTA_SWINGIDX_SIZE];
   u1Byte  DeltaSwingTableIdx_2GCCKB_P[DELTA_SWINGIDX_SIZE];
   u1Byte  DeltaSwingTableIdx_2GCCKB_N[DELTA_SWINGIDX_SIZE];
   u1Byte  DeltaSwingTableIdx_2GCCKC_P[DELTA_SWINGIDX_SIZE];
   u1Byte  DeltaSwingTableIdx_2GCCKC_N[DELTA_SWINGIDX_SIZE];
   u1Byte  DeltaSwingTableIdx_2GCCKD_P[DELTA_SWINGIDX_SIZE];
   u1Byte  DeltaSwingTableIdx_2GCCKD_N[DELTA_SWINGIDX_SIZE];
   u1Byte  DeltaSwingTableIdx_2GA_P[DELTA_SWINGIDX_SIZE];
   u1Byte  DeltaSwingTableIdx_2GA_N[DELTA_SWINGIDX_SIZE];
   u1Byte  DeltaSwingTableIdx_2GB_P[DELTA_SWINGIDX_SIZE];
   u1Byte  DeltaSwingTableIdx_2GB_N[DELTA_SWINGIDX_SIZE];
   u1Byte  DeltaSwingTableIdx_2GC_P[DELTA_SWINGIDX_SIZE];
   u1Byte  DeltaSwingTableIdx_2GC_N[DELTA_SWINGIDX_SIZE];
   u1Byte  DeltaSwingTableIdx_2GD_P[DELTA_SWINGIDX_SIZE];
   u1Byte  DeltaSwingTableIdx_2GD_N[DELTA_SWINGIDX_SIZE];
   u1Byte  DeltaSwingTableIdx_5GA_P[BAND_NUM][DELTA_SWINGIDX_SIZE];
   u1Byte  DeltaSwingTableIdx_5GA_N[BAND_NUM][DELTA_SWINGIDX_SIZE];
   u1Byte  DeltaSwingTableIdx_5GB_P[BAND_NUM][DELTA_SWINGIDX_SIZE];
   u1Byte  DeltaSwingTableIdx_5GB_N[BAND_NUM][DELTA_SWINGIDX_SIZE];
   u1Byte  DeltaSwingTableIdx_5GC_P[BAND_NUM][DELTA_SWINGIDX_SIZE];
   u1Byte  DeltaSwingTableIdx_5GC_N[BAND_NUM][DELTA_SWINGIDX_SIZE];
   u1Byte  DeltaSwingTableIdx_5GD_P[BAND_NUM][DELTA_SWINGIDX_SIZE];
   u1Byte  DeltaSwingTableIdx_5GD_N[BAND_NUM][DELTA_SWINGIDX_SIZE];
   u1Byte  DeltaSwingTableIdx_2GA_P_8188E[DELTA_SWINGIDX_SIZE];
   u1Byte  DeltaSwingTableIdx_2GA_N_8188E[DELTA_SWINGIDX_SIZE];
   
   u1Byte            BbSwingIdxOfdm[MAX_RF_PATH];
   u1Byte            BbSwingIdxOfdmCurrent;
#if (DM_ODM_SUPPORT_TYPE &  (ODM_WIN|ODM_CE))    
   u1Byte            BbSwingIdxOfdmBase[MAX_RF_PATH];
#else
   u1Byte            BbSwingIdxOfdmBase;
#endif
   BOOLEAN            BbSwingFlagOfdm;
   u1Byte            BbSwingIdxCck;
   u1Byte            BbSwingIdxCckCurrent;
   u1Byte            BbSwingIdxCckBase;
   u1Byte            DefaultOfdmIndex;
   u1Byte            DefaultCckIndex;    
   BOOLEAN            BbSwingFlagCck;
   
   s1Byte            Absolute_OFDMSwingIdx[MAX_RF_PATH];   
   s1Byte            Remnant_OFDMSwingIdx[MAX_RF_PATH];   
   s1Byte            Remnant_CCKSwingIdx;
   s1Byte            Modify_TxAGC_Value;       /*Remnat compensate value at TxAGC */
   BOOLEAN            Modify_TxAGC_Flag_PathA;
   BOOLEAN            Modify_TxAGC_Flag_PathB;
   BOOLEAN            Modify_TxAGC_Flag_PathC;
   BOOLEAN            Modify_TxAGC_Flag_PathD;
   BOOLEAN            Modify_TxAGC_Flag_PathA_CCK;
   
   s1Byte            KfreeOffset[MAX_RF_PATH];
    
   //--------------------------------------------------------------------//    
   
   //for IQK    
   u4Byte     RegC04;
   u4Byte     Reg874;
   u4Byte     RegC08;
   u4Byte     RegB68;
   u4Byte     RegB6C;
   u4Byte     Reg870;
   u4Byte     Reg860;
   u4Byte     Reg864;
   
   BOOLEAN    bIQKInitialized;
   BOOLEAN bLCKInProgress;
   BOOLEAN    bAntennaDetected;
   u4Byte    ADDA_backup[IQK_ADDA_REG_NUM];
   u4Byte    IQK_MAC_backup[IQK_MAC_REG_NUM];
   u4Byte    IQK_BB_backup_recover[9];
   u4Byte    IQK_BB_backup[IQK_BB_REG_NUM];    
 
   //for APK
   u4Byte     APKoutput[2][2]; //path A/B; output1_1a/output1_2a
   u1Byte     bAPKdone;
   u1Byte     bAPKThermalMeterIgnore;
   u1Byte     bDPdone;
   u1Byte     bDPPathAOK;
   u1Byte     bDPPathBOK;
 
   /*Add by Yuchen for Kfree Phydm*/
   u1Byte            RegRfKFreeEnable;    /*for registry*/
   u1Byte            RfKFreeEnable;        /*for efuse enable check*/
   
}ODM_RF_CAL_T,*PODM_RF_CAL_T;
 
VOID
odm_TXPowerTrackingCheckAP(
   IN    PVOID        pDM_VOID
   );
 
VOID
ODM_TXPowerTrackingCheck(
   IN    PVOID        pDM_VOID
   );
 
 
VOID
odm_TXPowerTrackingThermalMeterInit(
   IN    PVOID        pDM_VOID
   );
 
VOID
odm_TXPowerTrackingInit(
   IN    PVOID        pDM_VOID
   );
 
VOID
odm_TXPowerTrackingCheckMP(
   IN    PVOID        pDM_VOID
   );
 
 
VOID
odm_TXPowerTrackingCheckCE(
   IN    PVOID        pDM_VOID
   );
 
 
#if(DM_ODM_SUPPORT_TYPE & (ODM_WIN)) 
 
VOID 
odm_TXPowerTrackingCallbackThermalMeter92C(
            IN PADAPTER    Adapter
            );
 
VOID
odm_TXPowerTrackingCallbackRXGainThermalMeter92D(
   IN PADAPTER     Adapter
   );
 
VOID
odm_TXPowerTrackingCallbackThermalMeter92D(
            IN PADAPTER    Adapter
            );
 
VOID
odm_TXPowerTrackingDirectCall92C(
            IN    PADAPTER        Adapter
            );
 
VOID
odm_TXPowerTrackingThermalMeterCheck(
   IN    PADAPTER        Adapter
   );
 
#endif
 
 
 
#endif