--- /dev/null
+/******************************************************************************\r
+ *\r
+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.\r
+ * \r
+ * This program is free software; you can redistribute it and/or modify it\r
+ * under the terms of version 2 of the GNU General Public License as\r
+ * published by the Free Software Foundation.\r
+ *\r
+ * This program is distributed in the hope that it will be useful, but WITHOUT\r
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\r
+ * more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License along with\r
+ * this program; if not, write to the Free Software Foundation, Inc.,\r
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
+ *\r
+ *\r
+ ******************************************************************************/\r
+ \r
+#ifndef __PHYDMPOWERTRACKING_H__\r
+#define __PHYDMPOWERTRACKING_H__\r
+\r
+#define POWRTRACKING_VERSION "1.1"\r
+\r
+#define DPK_DELTA_MAPPING_NUM 13\r
+#define index_mapping_HP_NUM 15 \r
+#define OFDM_TABLE_SIZE 43\r
+#define CCK_TABLE_SIZE 33\r
+#define CCK_TABLE_SIZE_88F 21\r
+#define TXSCALE_TABLE_SIZE 37\r
+#define TXPWR_TRACK_TABLE_SIZE 30\r
+#define DELTA_SWINGIDX_SIZE 30\r
+#define BAND_NUM 4\r
+\r
+#define AVG_THERMAL_NUM 8\r
+#define HP_THERMAL_NUM 8\r
+#define IQK_MAC_REG_NUM 4\r
+#define IQK_ADDA_REG_NUM 16\r
+#define IQK_BB_REG_NUM_MAX 10\r
+\r
+#define IQK_BB_REG_NUM 9\r
+\r
+\r
+\r
+#define IQK_Matrix_REG_NUM 8\r
+#define IQK_Matrix_Settings_NUM 14+24+21 // Channels_2_4G_NUM + Channels_5G_20M_NUM + Channels_5G\r
+\r
+extern u4Byte OFDMSwingTable[OFDM_TABLE_SIZE];\r
+extern u1Byte CCKSwingTable_Ch1_Ch13[CCK_TABLE_SIZE][8];\r
+extern u1Byte CCKSwingTable_Ch14 [CCK_TABLE_SIZE][8];\r
+\r
+extern u4Byte OFDMSwingTable_New[OFDM_TABLE_SIZE];\r
+extern u1Byte CCKSwingTable_Ch1_Ch13_New[CCK_TABLE_SIZE][8];\r
+extern u1Byte CCKSwingTable_Ch14_New [CCK_TABLE_SIZE][8];\r
+extern u1Byte CCKSwingTable_Ch1_Ch14_88F[CCK_TABLE_SIZE_88F][16];\r
+\r
+\r
+extern u4Byte TxScalingTable_Jaguar[TXSCALE_TABLE_SIZE];\r
+\r
+// <20121018, Kordan> In case fail to read TxPowerTrack.txt, we use the table of 88E as the default table.\r
+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
+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
+\r
+#define dm_CheckTXPowerTracking ODM_TXPowerTrackingCheck\r
+\r
+typedef struct _IQK_MATRIX_REGS_SETTING{\r
+ BOOLEAN bIQKDone;\r
+ s4Byte Value[3][IQK_Matrix_REG_NUM];\r
+ BOOLEAN bBWIqkResultSaved[3]; \r
+}IQK_MATRIX_REGS_SETTING,*PIQK_MATRIX_REGS_SETTING;\r
+\r
+typedef struct ODM_RF_Calibration_Structure\r
+{\r
+ //for tx power tracking\r
+ \r
+ u4Byte RegA24; // for TempCCK\r
+ s4Byte RegE94;\r
+ s4Byte RegE9C;\r
+ s4Byte RegEB4;\r
+ s4Byte RegEBC; \r
+\r
+ u1Byte TXPowercount;\r
+ BOOLEAN bTXPowerTrackingInit; \r
+ BOOLEAN bTXPowerTracking;\r
+ u1Byte TxPowerTrackControl; //for mp mode, turn off txpwrtracking as default\r
+ u1Byte TM_Trigger;\r
+ u1Byte InternalPA5G[2]; //pathA / pathB\r
+ \r
+ u1Byte ThermalMeter[2]; // ThermalMeter, index 0 for RFIC0, and 1 for RFIC1\r
+ u1Byte ThermalValue;\r
+ u1Byte ThermalValue_LCK;\r
+ u1Byte ThermalValue_IQK;\r
+ u1Byte ThermalValue_DPK; \r
+ u1Byte ThermalValue_AVG[AVG_THERMAL_NUM];\r
+ u1Byte ThermalValue_AVG_index; \r
+ u1Byte ThermalValue_RxGain;\r
+ u1Byte ThermalValue_Crystal;\r
+ u1Byte ThermalValue_DPKstore;\r
+ u1Byte ThermalValue_DPKtrack;\r
+ BOOLEAN TxPowerTrackingInProgress;\r
+ \r
+ BOOLEAN bReloadtxpowerindex; \r
+ u1Byte bRfPiEnable;\r
+ u4Byte TXPowerTrackingCallbackCnt; //cosa add for debug\r
+\r
+\r
+ //------------------------- Tx power Tracking -------------------------//\r
+ u1Byte bCCKinCH14;\r
+ u1Byte CCK_index;\r
+ u1Byte OFDM_index[MAX_RF_PATH];\r
+ s1Byte PowerIndexOffset[MAX_RF_PATH];\r
+ s1Byte DeltaPowerIndex[MAX_RF_PATH];\r
+ s1Byte DeltaPowerIndexLast[MAX_RF_PATH]; \r
+ BOOLEAN bTxPowerChanged;\r
+ \r
+ u1Byte ThermalValue_HP[HP_THERMAL_NUM];\r
+ u1Byte ThermalValue_HP_index;\r
+ IQK_MATRIX_REGS_SETTING IQKMatrixRegSetting[IQK_Matrix_Settings_NUM];\r
+ u1Byte Delta_LCK;\r
+ s1Byte BBSwingDiff2G, BBSwingDiff5G; // Unit: dB\r
+ u1Byte DeltaSwingTableIdx_2GCCKA_P[DELTA_SWINGIDX_SIZE];\r
+ u1Byte DeltaSwingTableIdx_2GCCKA_N[DELTA_SWINGIDX_SIZE];\r
+ u1Byte DeltaSwingTableIdx_2GCCKB_P[DELTA_SWINGIDX_SIZE];\r
+ u1Byte DeltaSwingTableIdx_2GCCKB_N[DELTA_SWINGIDX_SIZE];\r
+ u1Byte DeltaSwingTableIdx_2GCCKC_P[DELTA_SWINGIDX_SIZE];\r
+ u1Byte DeltaSwingTableIdx_2GCCKC_N[DELTA_SWINGIDX_SIZE];\r
+ u1Byte DeltaSwingTableIdx_2GCCKD_P[DELTA_SWINGIDX_SIZE];\r
+ u1Byte DeltaSwingTableIdx_2GCCKD_N[DELTA_SWINGIDX_SIZE];\r
+ u1Byte DeltaSwingTableIdx_2GA_P[DELTA_SWINGIDX_SIZE];\r
+ u1Byte DeltaSwingTableIdx_2GA_N[DELTA_SWINGIDX_SIZE];\r
+ u1Byte DeltaSwingTableIdx_2GB_P[DELTA_SWINGIDX_SIZE];\r
+ u1Byte DeltaSwingTableIdx_2GB_N[DELTA_SWINGIDX_SIZE];\r
+ u1Byte DeltaSwingTableIdx_2GC_P[DELTA_SWINGIDX_SIZE];\r
+ u1Byte DeltaSwingTableIdx_2GC_N[DELTA_SWINGIDX_SIZE];\r
+ u1Byte DeltaSwingTableIdx_2GD_P[DELTA_SWINGIDX_SIZE];\r
+ u1Byte DeltaSwingTableIdx_2GD_N[DELTA_SWINGIDX_SIZE];\r
+ u1Byte DeltaSwingTableIdx_5GA_P[BAND_NUM][DELTA_SWINGIDX_SIZE];\r
+ u1Byte DeltaSwingTableIdx_5GA_N[BAND_NUM][DELTA_SWINGIDX_SIZE];\r
+ u1Byte DeltaSwingTableIdx_5GB_P[BAND_NUM][DELTA_SWINGIDX_SIZE];\r
+ u1Byte DeltaSwingTableIdx_5GB_N[BAND_NUM][DELTA_SWINGIDX_SIZE];\r
+ u1Byte DeltaSwingTableIdx_5GC_P[BAND_NUM][DELTA_SWINGIDX_SIZE];\r
+ u1Byte DeltaSwingTableIdx_5GC_N[BAND_NUM][DELTA_SWINGIDX_SIZE];\r
+ u1Byte DeltaSwingTableIdx_5GD_P[BAND_NUM][DELTA_SWINGIDX_SIZE];\r
+ u1Byte DeltaSwingTableIdx_5GD_N[BAND_NUM][DELTA_SWINGIDX_SIZE];\r
+ u1Byte DeltaSwingTableIdx_2GA_P_8188E[DELTA_SWINGIDX_SIZE];\r
+ u1Byte DeltaSwingTableIdx_2GA_N_8188E[DELTA_SWINGIDX_SIZE];\r
+ \r
+ u1Byte BbSwingIdxOfdm[MAX_RF_PATH];\r
+ u1Byte BbSwingIdxOfdmCurrent;\r
+#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE)) \r
+ u1Byte BbSwingIdxOfdmBase[MAX_RF_PATH];\r
+#else\r
+ u1Byte BbSwingIdxOfdmBase;\r
+#endif\r
+ BOOLEAN BbSwingFlagOfdm;\r
+ u1Byte BbSwingIdxCck;\r
+ u1Byte BbSwingIdxCckCurrent;\r
+ u1Byte BbSwingIdxCckBase;\r
+ u1Byte DefaultOfdmIndex;\r
+ u1Byte DefaultCckIndex; \r
+ BOOLEAN BbSwingFlagCck;\r
+ \r
+ s1Byte Absolute_OFDMSwingIdx[MAX_RF_PATH]; \r
+ s1Byte Remnant_OFDMSwingIdx[MAX_RF_PATH]; \r
+ s1Byte Remnant_CCKSwingIdx;\r
+ s1Byte Modify_TxAGC_Value; /*Remnat compensate value at TxAGC */\r
+ BOOLEAN Modify_TxAGC_Flag_PathA;\r
+ BOOLEAN Modify_TxAGC_Flag_PathB;\r
+ BOOLEAN Modify_TxAGC_Flag_PathC;\r
+ BOOLEAN Modify_TxAGC_Flag_PathD;\r
+ BOOLEAN Modify_TxAGC_Flag_PathA_CCK;\r
+ \r
+ s1Byte KfreeOffset[MAX_RF_PATH];\r
+ \r
+ //--------------------------------------------------------------------// \r
+ \r
+ //for IQK \r
+ u4Byte RegC04;\r
+ u4Byte Reg874;\r
+ u4Byte RegC08;\r
+ u4Byte RegB68;\r
+ u4Byte RegB6C;\r
+ u4Byte Reg870;\r
+ u4Byte Reg860;\r
+ u4Byte Reg864;\r
+ \r
+ BOOLEAN bIQKInitialized;\r
+ BOOLEAN bLCKInProgress;\r
+ BOOLEAN bAntennaDetected;\r
+ BOOLEAN bNeedIQK;\r
+ BOOLEAN bIQKInProgress; \r
+ u1Byte Delta_IQK;\r
+ u4Byte ADDA_backup[IQK_ADDA_REG_NUM];\r
+ u4Byte IQK_MAC_backup[IQK_MAC_REG_NUM];\r
+ u4Byte IQK_BB_backup_recover[9];\r
+ u4Byte IQK_BB_backup[IQK_BB_REG_NUM]; \r
+ u4Byte TxIQC_8723B[2][3][2]; // { {S1: 0xc94, 0xc80, 0xc4c} , {S0: 0xc9c, 0xc88, 0xc4c}}\r
+ u4Byte RxIQC_8723B[2][2][2]; // { {S1: 0xc14, 0xca0} , {S0: 0xc14, 0xca0}}\r
+ u4Byte TxIQC_8703B[3][2]; /* { {S1: 0xc94, 0xc80, 0xc4c} , {S0: 0xc9c, 0xc88, 0xc4c}}*/\r
+ u4Byte RxIQC_8703B[2][2]; /* { {S1: 0xc14, 0xca0} , {S0: 0xc14, 0xca0}}*/\r
+\r
+ \r
+\r
+ // <James> IQK time measurement \r
+ u8Byte IQK_StartTime;\r
+ u8Byte IQK_ProgressingTime;\r
+ u4Byte LOK_Result;\r
+\r
+ //for APK\r
+ u4Byte APKoutput[2][2]; //path A/B; output1_1a/output1_2a\r
+ u1Byte bAPKdone;\r
+ u1Byte bAPKThermalMeterIgnore;\r
+ \r
+ // DPK\r
+ BOOLEAN bDPKFail; \r
+ u1Byte bDPdone;\r
+ u1Byte bDPPathAOK;\r
+ u1Byte bDPPathBOK;\r
+\r
+ u4Byte TxLOK[2];\r
+ u4Byte DpkTxAGC;\r
+ s4Byte DpkGain;\r
+ u4Byte DpkThermal[4];\r
+ s1Byte Modify_TxAGC_Value_OFDM;\r
+ s1Byte Modify_TxAGC_Value_CCK;\r
+}ODM_RF_CAL_T,*PODM_RF_CAL_T;\r
+\r
+\r
+VOID \r
+ODM_TXPowerTrackingCheck(\r
+ IN PVOID pDM_VOID\r
+ );\r
+\r
+\r
+VOID\r
+odm_TXPowerTrackingInit(\r
+ IN PVOID pDM_VOID\r
+ );\r
+\r
+VOID\r
+odm_TXPowerTrackingCheckAP(\r
+ IN PVOID pDM_VOID\r
+ );\r
+\r
+VOID\r
+odm_TXPowerTrackingThermalMeterInit(\r
+ IN PVOID pDM_VOID\r
+ );\r
+\r
+VOID\r
+odm_TXPowerTrackingInit(\r
+ IN PVOID pDM_VOID\r
+ );\r
+\r
+VOID\r
+odm_TXPowerTrackingCheckMP(\r
+ IN PVOID pDM_VOID\r
+ );\r
+\r
+\r
+VOID\r
+odm_TXPowerTrackingCheckCE(\r
+ IN PVOID pDM_VOID\r
+ );\r
+\r
+#if(DM_ODM_SUPPORT_TYPE & (ODM_WIN)) \r
+\r
+VOID \r
+odm_TXPowerTrackingCallbackThermalMeter92C(\r
+ IN PADAPTER Adapter\r
+ );\r
+\r
+VOID\r
+odm_TXPowerTrackingCallbackRXGainThermalMeter92D(\r
+ IN PADAPTER Adapter\r
+ );\r
+\r
+VOID\r
+odm_TXPowerTrackingCallbackThermalMeter92D(\r
+ IN PADAPTER Adapter\r
+ );\r
+\r
+VOID\r
+odm_TXPowerTrackingDirectCall92C(\r
+ IN PADAPTER Adapter\r
+ );\r
+\r
+VOID\r
+odm_TXPowerTrackingThermalMeterCheck(\r
+ IN PADAPTER Adapter\r
+ );\r
+\r
+#endif\r
+\r
+#endif\r