hc
2023-12-09 b22da3d8526a935aa31e086e63f60ff3246cb61c
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
/******************************************************************************
 *
 * 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"
 
#define    DPK_DELTA_MAPPING_NUM    13
#define    index_mapping_HP_NUM    15    
#define    TXSCALE_TABLE_SIZE         37
#define    TXPWR_TRACK_TABLE_SIZE     30
#define    DELTA_SWINGIDX_SIZE     30
#define    BAND_NUM                 3
#define    MAX_RF_PATH    4
#define    CCK_TABLE_SIZE_88F    21
 
 
#define    dm_CheckTXPowerTracking     ODM_TXPowerTrackingCheck
 
#define IQK_Matrix_Settings_NUM    14+24+21 // Channels_2_4G_NUM + Channels_5G_20M_NUM + Channels_5G
#define    AVG_THERMAL_NUM        8
#define    HP_THERMAL_NUM        8
#define    IQK_Matrix_REG_NUM    8
#define    IQK_MAC_REG_NUM        4
#define    IQK_ADDA_REG_NUM        16
 
#define    IQK_BB_REG_NUM        9
 
 
extern    u4Byte OFDMSwingTable[OFDM_TABLE_SIZE];
extern    u1Byte CCKSwingTable_Ch1_Ch13[CCK_TABLE_SIZE][8];
extern    u1Byte CCKSwingTable_Ch14 [CCK_TABLE_SIZE][8];
 
extern    u4Byte OFDMSwingTable_New[OFDM_TABLE_SIZE];
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];
 
extern  u4Byte TxScalingTable_Jaguar[TXSCALE_TABLE_SIZE];
 
// <20121018, Kordan> In case fail to read TxPowerTrack.txt, we use the table of 88E as the default table.
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};
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}; 
 
VOID
ODM_TXPowerTrackingCheck(
   IN    PVOID        pDM_VOID
   );
 
VOID
odm_TXPowerTrackingCheckAP(
   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_TXPowerTrackingThermalMeterCheck(
   IN    PADAPTER        Adapter
   );
 
#endif
 
typedef struct _IQK_MATRIX_REGS_SETTING{
   BOOLEAN     bIQKDone;
   s4Byte        Value[3][IQK_Matrix_REG_NUM];
   BOOLEAN     bBWIqkResultSaved[3];    
}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_AVG[AVG_THERMAL_NUM];
   u1Byte    ThermalValue_AVG_index;        
   u1Byte    ThermalValue_RxGain;
   
   BOOLEAN    bReloadtxpowerindex;    
   u1Byte     bRfPiEnable;
   u4Byte     TXPowerTrackingCallbackCnt; //cosa add for debug
 
 
   //------------------------- Tx power Tracking -------------------------//
   u1Byte     bCCKinCH14;
   u1Byte     CCK_index;
   u1Byte     OFDM_index[MAX_RF_PATH];
   s1Byte    PowerIndexOffset[MAX_RF_PATH];
   s1Byte    DeltaPowerIndex[MAX_RF_PATH];
   s1Byte    DeltaPowerIndexLast[MAX_RF_PATH];    
   BOOLEAN bTxPowerChanged;
       
   u1Byte     ThermalValue_HP[HP_THERMAL_NUM];
   u1Byte     ThermalValue_HP_index;
   IQK_MATRIX_REGS_SETTING IQKMatrixRegSetting[IQK_Matrix_Settings_NUM];
   u1Byte    Delta_LCK;
   s1Byte  BBSwingDiff2G, BBSwingDiff5G; // Unit: dB
   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;
   BOOLEAN    bNeedIQK;
   BOOLEAN    bIQKInProgress;    
   u1Byte    Delta_IQK;
   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];    
   u4Byte    TxIQC_8723B[2][3][2]; /* { {S1: 0xc94, 0xc80, 0xc4c} , {S0: 0xc9c, 0xc88, 0xc4c}} */
   u4Byte    RxIQC_8723B[2][2][2]; /* { {S1: 0xc14, 0xca0} ,           {S0: 0xc14, 0xca0}} */
   u4Byte    TxIQC_8703B[3][2];    /* { {S1: 0xc94, 0xc80, 0xc4c} , {S0: 0xc9c, 0xc88, 0xc4c}}*/
   u4Byte    RxIQC_8703B[2][2];    /* { {S1: 0xc14, 0xca0} ,           {S0: 0xc14, 0xca0}}*/
   
   
 
   // <James> IQK time measurement 
   u8Byte    IQK_StartTime;
   u8Byte    IQK_ProgressingTime;
   u4Byte  LOK_Result;
 
   //for APK
   u4Byte     APKoutput[2][2]; //path A/B; output1_1a/output1_2a
   u1Byte     bAPKdone;
   u1Byte     bAPKThermalMeterIgnore;
   
   // DPK
   BOOLEAN bDPKFail;    
   u1Byte     bDPdone;
   u1Byte     bDPPathAOK;
   u1Byte     bDPPathBOK;
 
   u4Byte    TxLOK[2];
   u4Byte  DpkTxAGC;
   s4Byte  DpkGain;
   u4Byte  DpkThermal[4];    
 
   s1Byte Modify_TxAGC_Value_OFDM;
   s1Byte Modify_TxAGC_Value_CCK;
}ODM_RF_CAL_T,*PODM_RF_CAL_T;
 
 
 
 
#endif