8723BU: Update 8723BU wifi driver to version v4.3.16_14189.20150519_BTCOEX2015119...
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / rtl8723bu / hal / OUTSRC / phydm_PowerTracking.h
1 /******************************************************************************\r
2  *\r
3  * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.\r
4  *                                        \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
8  *\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
12  * more details.\r
13  *\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
17  *\r
18  *\r
19  ******************************************************************************/\r
20  \r
21 #ifndef __PHYDMPOWERTRACKING_H__\r
22 #define    __PHYDMPOWERTRACKING_H__\r
23 \r
24 #define POWRTRACKING_VERSION    "1.0"\r
25 \r
26 #define         DPK_DELTA_MAPPING_NUM   13\r
27 #define         index_mapping_HP_NUM    15      \r
28 #define OFDM_TABLE_SIZE         43\r
29 #define CCK_TABLE_SIZE                  33\r
30 #define TXSCALE_TABLE_SIZE              37\r
31 #define TXPWR_TRACK_TABLE_SIZE  30\r
32 #define DELTA_SWINGIDX_SIZE     30\r
33 #define BAND_NUM                                4\r
34 \r
35 #define AVG_THERMAL_NUM         8\r
36 #define HP_THERMAL_NUM          8\r
37 #define IQK_MAC_REG_NUM         4\r
38 #define IQK_ADDA_REG_NUM                16\r
39 #define IQK_BB_REG_NUM_MAX      10\r
40 #if (RTL8192D_SUPPORT==1) \r
41 #define IQK_BB_REG_NUM          10\r
42 #else\r
43 #define IQK_BB_REG_NUM          9\r
44 #endif\r
45 \r
46 \r
47 #define IQK_Matrix_REG_NUM      8\r
48 #define IQK_Matrix_Settings_NUM 14+24+21 // Channels_2_4G_NUM + Channels_5G_20M_NUM + Channels_5G\r
49 \r
50 extern  u4Byte OFDMSwingTable[OFDM_TABLE_SIZE];\r
51 extern  u1Byte CCKSwingTable_Ch1_Ch13[CCK_TABLE_SIZE][8];\r
52 extern  u1Byte CCKSwingTable_Ch14 [CCK_TABLE_SIZE][8];\r
53 \r
54 extern  u4Byte OFDMSwingTable_New[OFDM_TABLE_SIZE];\r
55 extern  u1Byte CCKSwingTable_Ch1_Ch13_New[CCK_TABLE_SIZE][8];\r
56 extern  u1Byte CCKSwingTable_Ch14_New [CCK_TABLE_SIZE][8];\r
57 \r
58 extern  u4Byte TxScalingTable_Jaguar[TXSCALE_TABLE_SIZE];\r
59 \r
60 // <20121018, Kordan> In case fail to read TxPowerTrack.txt, we use the table of 88E as the default table.\r
61 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
62 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
63 \r
64 #define dm_CheckTXPowerTracking         ODM_TXPowerTrackingCheck\r
65 \r
66 typedef struct _IQK_MATRIX_REGS_SETTING{\r
67         BOOLEAN         bIQKDone;\r
68         s4Byte          Value[3][IQK_Matrix_REG_NUM];\r
69         BOOLEAN         bBWIqkResultSaved[3];   \r
70 }IQK_MATRIX_REGS_SETTING,*PIQK_MATRIX_REGS_SETTING;\r
71 \r
72 typedef struct ODM_RF_Calibration_Structure\r
73 {\r
74         //for tx power tracking\r
75         \r
76         u4Byte  RegA24; // for TempCCK\r
77         s4Byte  RegE94;\r
78         s4Byte  RegE9C;\r
79         s4Byte  RegEB4;\r
80         s4Byte  RegEBC; \r
81 \r
82         u1Byte          TXPowercount;\r
83         BOOLEAN bTXPowerTrackingInit; \r
84         BOOLEAN bTXPowerTracking;\r
85         u1Byte          TxPowerTrackControl; //for mp mode, turn off txpwrtracking as default\r
86         u1Byte          TM_Trigger;\r
87         u1Byte          InternalPA5G[2];        //pathA / pathB\r
88         \r
89         u1Byte          ThermalMeter[2];    // ThermalMeter, index 0 for RFIC0, and 1 for RFIC1\r
90         u1Byte          ThermalValue;\r
91         u1Byte          ThermalValue_LCK;\r
92         u1Byte          ThermalValue_IQK;\r
93         u1Byte  ThermalValue_DPK;               \r
94         u1Byte  ThermalValue_AVG[AVG_THERMAL_NUM];\r
95         u1Byte  ThermalValue_AVG_index;         \r
96         u1Byte  ThermalValue_RxGain;\r
97         u1Byte  ThermalValue_Crystal;\r
98         u1Byte  ThermalValue_DPKstore;\r
99         u1Byte  ThermalValue_DPKtrack;\r
100         BOOLEAN TxPowerTrackingInProgress;\r
101         \r
102         BOOLEAN bReloadtxpowerindex;    \r
103         u1Byte  bRfPiEnable;\r
104         u4Byte  TXPowerTrackingCallbackCnt; //cosa add for debug\r
105 \r
106 \r
107         //------------------------- Tx power Tracking -------------------------//\r
108         u1Byte  bCCKinCH14;\r
109         u1Byte  CCK_index;\r
110         u1Byte  OFDM_index[MAX_RF_PATH];\r
111         s1Byte  PowerIndexOffset[MAX_RF_PATH];\r
112         s1Byte  DeltaPowerIndex[MAX_RF_PATH];\r
113         s1Byte  DeltaPowerIndexLast[MAX_RF_PATH];       \r
114         BOOLEAN bTxPowerChanged;\r
115                 \r
116         u1Byte  ThermalValue_HP[HP_THERMAL_NUM];\r
117         u1Byte  ThermalValue_HP_index;\r
118         IQK_MATRIX_REGS_SETTING IQKMatrixRegSetting[IQK_Matrix_Settings_NUM];\r
119         u1Byte  Delta_LCK;\r
120         s1Byte  BBSwingDiff2G, BBSwingDiff5G; // Unit: dB\r
121         u1Byte  DeltaSwingTableIdx_2GCCKA_P[DELTA_SWINGIDX_SIZE];\r
122         u1Byte  DeltaSwingTableIdx_2GCCKA_N[DELTA_SWINGIDX_SIZE];\r
123         u1Byte  DeltaSwingTableIdx_2GCCKB_P[DELTA_SWINGIDX_SIZE];\r
124         u1Byte  DeltaSwingTableIdx_2GCCKB_N[DELTA_SWINGIDX_SIZE];\r
125         u1Byte  DeltaSwingTableIdx_2GCCKC_P[DELTA_SWINGIDX_SIZE];\r
126         u1Byte  DeltaSwingTableIdx_2GCCKC_N[DELTA_SWINGIDX_SIZE];\r
127         u1Byte  DeltaSwingTableIdx_2GCCKD_P[DELTA_SWINGIDX_SIZE];\r
128         u1Byte  DeltaSwingTableIdx_2GCCKD_N[DELTA_SWINGIDX_SIZE];\r
129         u1Byte  DeltaSwingTableIdx_2GA_P[DELTA_SWINGIDX_SIZE];\r
130         u1Byte  DeltaSwingTableIdx_2GA_N[DELTA_SWINGIDX_SIZE];\r
131         u1Byte  DeltaSwingTableIdx_2GB_P[DELTA_SWINGIDX_SIZE];\r
132         u1Byte  DeltaSwingTableIdx_2GB_N[DELTA_SWINGIDX_SIZE];\r
133         u1Byte  DeltaSwingTableIdx_2GC_P[DELTA_SWINGIDX_SIZE];\r
134         u1Byte  DeltaSwingTableIdx_2GC_N[DELTA_SWINGIDX_SIZE];\r
135         u1Byte  DeltaSwingTableIdx_2GD_P[DELTA_SWINGIDX_SIZE];\r
136         u1Byte  DeltaSwingTableIdx_2GD_N[DELTA_SWINGIDX_SIZE];\r
137         u1Byte  DeltaSwingTableIdx_5GA_P[BAND_NUM][DELTA_SWINGIDX_SIZE];\r
138         u1Byte  DeltaSwingTableIdx_5GA_N[BAND_NUM][DELTA_SWINGIDX_SIZE];\r
139         u1Byte  DeltaSwingTableIdx_5GB_P[BAND_NUM][DELTA_SWINGIDX_SIZE];\r
140         u1Byte  DeltaSwingTableIdx_5GB_N[BAND_NUM][DELTA_SWINGIDX_SIZE];\r
141         u1Byte  DeltaSwingTableIdx_5GC_P[BAND_NUM][DELTA_SWINGIDX_SIZE];\r
142         u1Byte  DeltaSwingTableIdx_5GC_N[BAND_NUM][DELTA_SWINGIDX_SIZE];\r
143         u1Byte  DeltaSwingTableIdx_5GD_P[BAND_NUM][DELTA_SWINGIDX_SIZE];\r
144         u1Byte  DeltaSwingTableIdx_5GD_N[BAND_NUM][DELTA_SWINGIDX_SIZE];\r
145         u1Byte  DeltaSwingTableIdx_2GA_P_8188E[DELTA_SWINGIDX_SIZE];\r
146         u1Byte  DeltaSwingTableIdx_2GA_N_8188E[DELTA_SWINGIDX_SIZE];\r
147     \r
148         u1Byte                  BbSwingIdxOfdm[MAX_RF_PATH];\r
149         u1Byte                  BbSwingIdxOfdmCurrent;\r
150 #if (DM_ODM_SUPPORT_TYPE &  (ODM_WIN|ODM_CE))   \r
151         u1Byte                  BbSwingIdxOfdmBase[MAX_RF_PATH];\r
152 #else\r
153         u1Byte                  BbSwingIdxOfdmBase;\r
154 #endif\r
155         BOOLEAN                 BbSwingFlagOfdm;\r
156         u1Byte                  BbSwingIdxCck;\r
157         u1Byte                  BbSwingIdxCckCurrent;\r
158         u1Byte                  BbSwingIdxCckBase;\r
159         u1Byte                  DefaultOfdmIndex;\r
160         u1Byte                  DefaultCckIndex;        \r
161         BOOLEAN                 BbSwingFlagCck;\r
162         \r
163         s1Byte                  Absolute_OFDMSwingIdx[MAX_RF_PATH];   \r
164         s1Byte                  Remnant_OFDMSwingIdx[MAX_RF_PATH];   \r
165         s1Byte                  Remnant_CCKSwingIdx;\r
166         s1Byte                  Modify_TxAGC_Value;       /*Remnat compensate value at TxAGC */\r
167         BOOLEAN                 Modify_TxAGC_Flag_PathA;\r
168         BOOLEAN                 Modify_TxAGC_Flag_PathB;\r
169         BOOLEAN                 Modify_TxAGC_Flag_PathC;\r
170         BOOLEAN                 Modify_TxAGC_Flag_PathD;\r
171         BOOLEAN                 Modify_TxAGC_Flag_PathA_CCK;\r
172         \r
173         s1Byte                  KfreeOffset[MAX_RF_PATH];\r
174     \r
175         //--------------------------------------------------------------------//        \r
176         \r
177         //for IQK       \r
178         u4Byte  RegC04;\r
179         u4Byte  Reg874;\r
180         u4Byte  RegC08;\r
181         u4Byte  RegB68;\r
182         u4Byte  RegB6C;\r
183         u4Byte  Reg870;\r
184         u4Byte  Reg860;\r
185         u4Byte  Reg864;\r
186         \r
187         BOOLEAN bIQKInitialized;\r
188         BOOLEAN bLCKInProgress;\r
189         BOOLEAN bAntennaDetected;\r
190         BOOLEAN bNeedIQK;\r
191         BOOLEAN bIQKInProgress; \r
192         u1Byte  Delta_IQK;\r
193         u4Byte  ADDA_backup[IQK_ADDA_REG_NUM];\r
194         u4Byte  IQK_MAC_backup[IQK_MAC_REG_NUM];\r
195         u4Byte  IQK_BB_backup_recover[9];\r
196         u4Byte  IQK_BB_backup[IQK_BB_REG_NUM];  \r
197         u4Byte  TxIQC_8723B[2][3][2]; // { {S1: 0xc94, 0xc80, 0xc4c} , {S0: 0xc9c, 0xc88, 0xc4c}}\r
198         u4Byte  RxIQC_8723B[2][2][2]; // { {S1: 0xc14, 0xca0} ,           {S0: 0xc14, 0xca0}}\r
199 \r
200         // <James> IQK time measurement \r
201         u8Byte  IQK_StartTime;\r
202         u8Byte  IQK_ProgressingTime;\r
203 \r
204         //for APK\r
205         u4Byte  APKoutput[2][2]; //path A/B; output1_1a/output1_2a\r
206         u1Byte  bAPKdone;\r
207         u1Byte  bAPKThermalMeterIgnore;\r
208         \r
209         // DPK\r
210         BOOLEAN bDPKFail;       \r
211         u1Byte  bDPdone;\r
212         u1Byte  bDPPathAOK;\r
213         u1Byte  bDPPathBOK;\r
214 \r
215         u4Byte  TxLOK[2];\r
216         u4Byte  DpkTxAGC;\r
217         s4Byte  DpkGain;\r
218         u4Byte  DpkThermal[4];\r
219 }ODM_RF_CAL_T,*PODM_RF_CAL_T;\r
220 \r
221 \r
222 VOID    \r
223 ODM_TXPowerTrackingCheck(\r
224         IN      PVOID           pDM_VOID\r
225         );\r
226 \r
227 \r
228 VOID\r
229 odm_TXPowerTrackingInit(\r
230         IN      PVOID           pDM_VOID\r
231         );\r
232 \r
233 VOID\r
234 odm_TXPowerTrackingCheckAP(
235         IN      PVOID           pDM_VOID\r
236         );
237
238 VOID
239 odm_TXPowerTrackingThermalMeterInit(
240         IN      PVOID           pDM_VOID\r
241         );
242 \r
243 VOID
244 odm_TXPowerTrackingInit(
245         IN      PVOID           pDM_VOID\r
246         );
247
248 VOID
249 odm_TXPowerTrackingCheckMP(
250         IN      PVOID           pDM_VOID\r
251         );
252
253
254 VOID
255 odm_TXPowerTrackingCheckCE(
256         IN      PVOID           pDM_VOID\r
257         );
258
259 #if(DM_ODM_SUPPORT_TYPE & (ODM_WIN)) 
260
261 VOID 
262 odm_TXPowerTrackingCallbackThermalMeter92C(
263             IN PADAPTER Adapter
264             );
265
266 VOID
267 odm_TXPowerTrackingCallbackRXGainThermalMeter92D(
268         IN PADAPTER     Adapter
269         );
270
271 VOID
272 odm_TXPowerTrackingCallbackThermalMeter92D(
273             IN PADAPTER Adapter
274             );
275
276 VOID
277 odm_TXPowerTrackingDirectCall92C(
278             IN  PADAPTER                Adapter
279             );
280
281 VOID
282 odm_TXPowerTrackingThermalMeterCheck(
283         IN      PADAPTER                Adapter
284         );
285
286 #endif\r
287 \r
288 #endif\r