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.0"
\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
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
43 #define IQK_BB_REG_NUM 9
\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
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
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
58 extern u4Byte TxScalingTable_Jaguar[TXSCALE_TABLE_SIZE];
\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
64 #define dm_CheckTXPowerTracking ODM_TXPowerTrackingCheck
\r
66 typedef struct _IQK_MATRIX_REGS_SETTING{
\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
72 typedef struct ODM_RF_Calibration_Structure
\r
74 //for tx power tracking
\r
76 u4Byte RegA24; // for TempCCK
\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
87 u1Byte InternalPA5G[2]; //pathA / pathB
\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
102 BOOLEAN bReloadtxpowerindex;
\r
103 u1Byte bRfPiEnable;
\r
104 u4Byte TXPowerTrackingCallbackCnt; //cosa add for debug
\r
107 //------------------------- Tx power Tracking -------------------------//
\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
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
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_2GA_P[DELTA_SWINGIDX_SIZE];
\r
126 u1Byte DeltaSwingTableIdx_2GA_N[DELTA_SWINGIDX_SIZE];
\r
127 u1Byte DeltaSwingTableIdx_2GB_P[DELTA_SWINGIDX_SIZE];
\r
128 u1Byte DeltaSwingTableIdx_2GB_N[DELTA_SWINGIDX_SIZE];
\r
129 u1Byte DeltaSwingTableIdx_5GA_P[BAND_NUM][DELTA_SWINGIDX_SIZE];
\r
130 u1Byte DeltaSwingTableIdx_5GA_N[BAND_NUM][DELTA_SWINGIDX_SIZE];
\r
131 u1Byte DeltaSwingTableIdx_5GB_P[BAND_NUM][DELTA_SWINGIDX_SIZE];
\r
132 u1Byte DeltaSwingTableIdx_5GB_N[BAND_NUM][DELTA_SWINGIDX_SIZE];
\r
133 u1Byte DeltaSwingTableIdx_2GA_P_8188E[DELTA_SWINGIDX_SIZE];
\r
134 u1Byte DeltaSwingTableIdx_2GA_N_8188E[DELTA_SWINGIDX_SIZE];
\r
137 //--------------------------------------------------------------------//
\r
149 BOOLEAN bIQKInitialized;
\r
150 BOOLEAN bLCKInProgress;
\r
151 BOOLEAN bAntennaDetected;
\r
153 BOOLEAN bIQKInProgress;
\r
155 u4Byte ADDA_backup[IQK_ADDA_REG_NUM];
\r
156 u4Byte IQK_MAC_backup[IQK_MAC_REG_NUM];
\r
157 u4Byte IQK_BB_backup_recover[9];
\r
158 u4Byte IQK_BB_backup[IQK_BB_REG_NUM];
\r
159 u4Byte TxIQC_8723B[2][3][2]; // { {S1: 0xc94, 0xc80, 0xc4c} , {S0: 0xc9c, 0xc88, 0xc4c}}
\r
160 u4Byte RxIQC_8723B[2][2][2]; // { {S1: 0xc14, 0xca0} , {S0: 0xc14, 0xca0}}
\r
162 // <James> IQK time measurement
\r
163 u8Byte IQK_StartTime;
\r
164 u8Byte IQK_ProgressingTime;
\r
167 u4Byte APKoutput[2][2]; //path A/B; output1_1a/output1_2a
\r
169 u1Byte bAPKThermalMeterIgnore;
\r
179 }ODM_RF_CAL_T,*PODM_RF_CAL_T;
\r
183 ODM_TXPowerTrackingCheck(
\r
189 odm_TXPowerTrackingInit(
\r
194 odm_TXPowerTrackingCheckAP(
199 odm_TXPowerTrackingThermalMeterInit(
204 odm_TXPowerTrackingInit(
209 odm_TXPowerTrackingCheckMP(
215 odm_TXPowerTrackingCheckCE(
219 #if(DM_ODM_SUPPORT_TYPE & (ODM_WIN))
222 odm_TXPowerTrackingCallbackThermalMeter92C(
227 odm_TXPowerTrackingCallbackRXGainThermalMeter92D(
232 odm_TXPowerTrackingCallbackThermalMeter92D(
237 odm_TXPowerTrackingDirectCall92C(
242 odm_TXPowerTrackingThermalMeterCheck(