| /****************************************************************************** |
| * |
| * Copyright(c) 2007 - 2016 Realtek Corporation. |
| * |
| * 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. |
| * |
| * The full GNU General Public License is included in this distribution in the |
| * file called LICENSE. |
| * |
| * Contact Information: |
| * wlanfae <wlanfae@realtek.com> |
| * Realtek Corporation, No. 2, Innovation Road II, Hsinchu Science Park, |
| * Hsinchu 300, Taiwan. |
| * |
| * Larry Finger <Larry.Finger@lwfinger.net> |
| * |
| *****************************************************************************/ |
| |
| #ifndef __PHYDMPOWERTRACKING_H__ |
| #define __PHYDMPOWERTRACKING_H__ |
| |
| #define POWRTRACKING_VERSION "1.1" |
| |
| #define DPK_DELTA_MAPPING_NUM 13 |
| #define index_mapping_HP_NUM 15 |
| #define OFDM_TABLE_SIZE 43 |
| #define CCK_TABLE_SIZE 33 |
| #define CCK_TABLE_SIZE_88F 21 |
| #define TXSCALE_TABLE_SIZE 37 |
| #define CCK_TABLE_SIZE_8723D 41 |
| /* JJ ADD 20161014 */ |
| #define CCK_TABLE_SIZE_8710B 41 |
| |
| #define TXPWR_TRACK_TABLE_SIZE 30 |
| #define DELTA_SWINGIDX_SIZE 30 |
| #define DELTA_SWINTSSI_SIZE 61 |
| #define BAND_NUM 4 |
| |
| #define AVG_THERMAL_NUM 8 |
| #define HP_THERMAL_NUM 8 |
| #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 iqk_matrix_reg_num 8 |
| |
| extern u32 ofdm_swing_table[OFDM_TABLE_SIZE]; |
| extern u8 cck_swing_table_ch1_ch13[CCK_TABLE_SIZE][8]; |
| extern u8 cck_swing_table_ch14[CCK_TABLE_SIZE][8]; |
| |
| extern u32 ofdm_swing_table_new[OFDM_TABLE_SIZE]; |
| extern u8 cck_swing_table_ch1_ch13_new[CCK_TABLE_SIZE][8]; |
| extern u8 cck_swing_table_ch14_new[CCK_TABLE_SIZE][8]; |
| extern u8 cck_swing_table_ch1_ch14_88f[CCK_TABLE_SIZE_88F][16]; |
| extern u8 cck_swing_table_ch1_ch13_88f[CCK_TABLE_SIZE_88F][16]; |
| extern u8 cck_swing_table_ch14_88f[CCK_TABLE_SIZE_88F][16]; |
| extern u32 cck_swing_table_ch1_ch14_8723d[CCK_TABLE_SIZE_8723D]; |
| /* JJ ADD 20161014 */ |
| extern u32 cck_swing_table_ch1_ch14_8710b[CCK_TABLE_SIZE_8710B]; |
| |
| extern u32 tx_scaling_table_jaguar[TXSCALE_TABLE_SIZE]; |
| |
| /* <20121018, Kordan> In case fail to read TxPowerTrack.txt, |
| * we use the table of 88E as the default table. |
| */ |
| |
| #define dm_check_txpowertracking odm_txpowertracking_check |
| |
| struct iqk_matrix_regs_setting { |
| bool is_iqk_done; |
| s32 value[3][iqk_matrix_reg_num]; |
| bool is_bw_iqk_result_saved[3]; |
| }; |
| |
| struct dm_rf_calibration_struct { |
| /* for tx power tracking */ |
| |
| u32 rega24; /* for TempCCK */ |
| s32 rege94; |
| s32 rege9c; |
| s32 regeb4; |
| s32 regebc; |
| |
| u8 tx_powercount; |
| bool is_txpowertracking_init; |
| bool is_txpowertracking; |
| /* for mp mode, turn off txpwrtracking as default */ |
| u8 txpowertrack_control; |
| u8 tm_trigger; |
| u8 internal_pa_5g[2]; /* pathA / pathB */ |
| |
| u8 thermal_meter |
| [2]; /* thermal_meter, index 0 for RFIC0, and 1 for RFIC1 */ |
| u8 thermal_value; |
| u8 thermal_value_lck; |
| u8 thermal_value_iqk; |
| s8 thermal_value_delta; /* delta of thermal_value and efuse thermal */ |
| u8 thermal_value_dpk; |
| u8 thermal_value_avg[AVG_THERMAL_NUM]; |
| u8 thermal_value_avg_index; |
| u8 thermal_value_rx_gain; |
| u8 thermal_value_crystal; |
| u8 thermal_value_dpk_store; |
| u8 thermal_value_dpk_track; |
| bool txpowertracking_in_progress; |
| |
| bool is_reloadtxpowerindex; |
| u8 is_rf_pi_enable; |
| u32 txpowertracking_callback_cnt; /* cosa add for debug */ |
| |
| /* ---------------------- Tx power Tracking ------------------------- */ |
| u8 is_cck_in_ch14; |
| u8 CCK_index; |
| u8 OFDM_index[MAX_RF_PATH]; |
| s8 power_index_offset[MAX_RF_PATH]; |
| s8 delta_power_index[MAX_RF_PATH]; |
| s8 delta_power_index_last[MAX_RF_PATH]; |
| bool is_tx_power_changed; |
| s8 xtal_offset; |
| s8 xtal_offset_last; |
| |
| u8 thermal_value_hp[HP_THERMAL_NUM]; |
| u8 thermal_value_hp_index; |
| struct iqk_matrix_regs_setting |
| iqk_matrix_reg_setting[IQK_MATRIX_SETTINGS_NUM]; |
| u8 delta_lck; |
| s8 bb_swing_diff_2g, bb_swing_diff_5g; /* Unit: dB */ |
| u8 delta_swing_table_idx_2g_cck_a_p[DELTA_SWINGIDX_SIZE]; |
| u8 delta_swing_table_idx_2g_cck_a_n[DELTA_SWINGIDX_SIZE]; |
| u8 delta_swing_table_idx_2g_cck_b_p[DELTA_SWINGIDX_SIZE]; |
| u8 delta_swing_table_idx_2g_cck_b_n[DELTA_SWINGIDX_SIZE]; |
| u8 delta_swing_table_idx_2g_cck_c_p[DELTA_SWINGIDX_SIZE]; |
| u8 delta_swing_table_idx_2g_cck_c_n[DELTA_SWINGIDX_SIZE]; |
| u8 delta_swing_table_idx_2g_cck_d_p[DELTA_SWINGIDX_SIZE]; |
| u8 delta_swing_table_idx_2g_cck_d_n[DELTA_SWINGIDX_SIZE]; |
| u8 delta_swing_table_idx_2ga_p[DELTA_SWINGIDX_SIZE]; |
| u8 delta_swing_table_idx_2ga_n[DELTA_SWINGIDX_SIZE]; |
| u8 delta_swing_table_idx_2gb_p[DELTA_SWINGIDX_SIZE]; |
| u8 delta_swing_table_idx_2gb_n[DELTA_SWINGIDX_SIZE]; |
| u8 delta_swing_table_idx_2gc_p[DELTA_SWINGIDX_SIZE]; |
| u8 delta_swing_table_idx_2gc_n[DELTA_SWINGIDX_SIZE]; |
| u8 delta_swing_table_idx_2gd_p[DELTA_SWINGIDX_SIZE]; |
| u8 delta_swing_table_idx_2gd_n[DELTA_SWINGIDX_SIZE]; |
| u8 delta_swing_table_idx_5ga_p[BAND_NUM][DELTA_SWINGIDX_SIZE]; |
| u8 delta_swing_table_idx_5ga_n[BAND_NUM][DELTA_SWINGIDX_SIZE]; |
| u8 delta_swing_table_idx_5gb_p[BAND_NUM][DELTA_SWINGIDX_SIZE]; |
| u8 delta_swing_table_idx_5gb_n[BAND_NUM][DELTA_SWINGIDX_SIZE]; |
| u8 delta_swing_table_idx_5gc_p[BAND_NUM][DELTA_SWINGIDX_SIZE]; |
| u8 delta_swing_table_idx_5gc_n[BAND_NUM][DELTA_SWINGIDX_SIZE]; |
| u8 delta_swing_table_idx_5gd_p[BAND_NUM][DELTA_SWINGIDX_SIZE]; |
| u8 delta_swing_table_idx_5gd_n[BAND_NUM][DELTA_SWINGIDX_SIZE]; |
| u8 delta_swing_tssi_table_2g_cck_a[DELTA_SWINTSSI_SIZE]; |
| u8 delta_swing_tssi_table_2g_cck_b[DELTA_SWINTSSI_SIZE]; |
| u8 delta_swing_tssi_table_2g_cck_c[DELTA_SWINTSSI_SIZE]; |
| u8 delta_swing_tssi_table_2g_cck_d[DELTA_SWINTSSI_SIZE]; |
| u8 delta_swing_tssi_table_2ga[DELTA_SWINTSSI_SIZE]; |
| u8 delta_swing_tssi_table_2gb[DELTA_SWINTSSI_SIZE]; |
| u8 delta_swing_tssi_table_2gc[DELTA_SWINTSSI_SIZE]; |
| u8 delta_swing_tssi_table_2gd[DELTA_SWINTSSI_SIZE]; |
| u8 delta_swing_tssi_table_5ga[BAND_NUM][DELTA_SWINTSSI_SIZE]; |
| u8 delta_swing_tssi_table_5gb[BAND_NUM][DELTA_SWINTSSI_SIZE]; |
| u8 delta_swing_tssi_table_5gc[BAND_NUM][DELTA_SWINTSSI_SIZE]; |
| u8 delta_swing_tssi_table_5gd[BAND_NUM][DELTA_SWINTSSI_SIZE]; |
| s8 delta_swing_table_xtal_p[DELTA_SWINGIDX_SIZE]; |
| s8 delta_swing_table_xtal_n[DELTA_SWINGIDX_SIZE]; |
| u8 delta_swing_table_idx_2ga_p_8188e[DELTA_SWINGIDX_SIZE]; |
| u8 delta_swing_table_idx_2ga_n_8188e[DELTA_SWINGIDX_SIZE]; |
| |
| u8 bb_swing_idx_ofdm[MAX_RF_PATH]; |
| u8 bb_swing_idx_ofdm_current; |
| u8 bb_swing_idx_ofdm_base[MAX_RF_PATH]; |
| bool default_bb_swing_index_flag; |
| bool bb_swing_flag_ofdm; |
| u8 bb_swing_idx_cck; |
| u8 bb_swing_idx_cck_current; |
| u8 bb_swing_idx_cck_base; |
| u8 default_ofdm_index; |
| u8 default_cck_index; |
| bool bb_swing_flag_cck; |
| |
| s8 absolute_ofdm_swing_idx[MAX_RF_PATH]; |
| s8 remnant_ofdm_swing_idx[MAX_RF_PATH]; |
| s8 absolute_cck_swing_idx[MAX_RF_PATH]; |
| s8 remnant_cck_swing_idx; |
| s8 modify_tx_agc_value; /*Remnat compensate value at tx_agc */ |
| bool modify_tx_agc_flag_path_a; |
| bool modify_tx_agc_flag_path_b; |
| bool modify_tx_agc_flag_path_c; |
| bool modify_tx_agc_flag_path_d; |
| bool modify_tx_agc_flag_path_a_cck; |
| |
| s8 kfree_offset[MAX_RF_PATH]; |
| |
| /* ------------------------------------------------------------------ */ |
| |
| /* for IQK */ |
| u32 regc04; |
| u32 reg874; |
| u32 regc08; |
| u32 regb68; |
| u32 regb6c; |
| u32 reg870; |
| u32 reg860; |
| u32 reg864; |
| |
| bool is_iqk_initialized; |
| bool is_lck_in_progress; |
| bool is_antenna_detected; |
| bool is_need_iqk; |
| bool is_iqk_in_progress; |
| bool is_iqk_pa_off; |
| u8 delta_iqk; |
| u32 ADDA_backup[IQK_ADDA_REG_NUM]; |
| u32 IQK_MAC_backup[IQK_MAC_REG_NUM]; |
| u32 IQK_BB_backup_recover[9]; |
| /* { {S1: 0xc94, 0xc80, 0xc4c} , {S0: 0xc9c, 0xc88, 0xc4c}} */ |
| u32 IQK_BB_backup[IQK_BB_REG_NUM]; |
| u32 tx_iqc_8723b[2][3][2]; |
| /* { {S1: 0xc14, 0xca0} , {S0: 0xc14, 0xca0}} */ |
| u32 rx_iqc_8723b[2][2][2]; |
| /* { {S1: 0xc94, 0xc80, 0xc4c} , {S0: 0xc9c, 0xc88, 0xc4c}}*/ |
| u32 tx_iqc_8703b[3][2]; |
| /* { {S1: 0xc14, 0xca0} , {S0: 0xc14, 0xca0}}*/ |
| u32 rx_iqc_8703b[2][2]; |
| /* { {S1: 0xc94, 0xc80, 0xc4c} , {S0: 0xc9c, 0xc88, 0xc4c}}*/ |
| u32 tx_iqc_8723d[2][3][2]; |
| /* { {S1: 0xc14, 0xca0} , {S0: 0xc14, 0xca0}}*/ |
| u32 rx_iqc_8723d[2][2][2]; |
| /* JJ ADD 20161014 */ |
| /* { {S1: 0xc94, 0xc80, 0xc4c} , {S0: 0xc9c, 0xc88, 0xc4c}}*/ |
| u32 tx_iqc_8710b[2][3][2]; |
| /* { {S1: 0xc14, 0xca0} , {S0: 0xc14, 0xca0}}*/ |
| u32 rx_iqc_8710b[2][2][2]; |
| |
| u8 iqk_step; |
| u8 kcount; |
| u8 retry_count[4][2]; /* [4]: path ABCD, [2] TXK, RXK */ |
| bool is_mp_mode; |
| |
| /* <James> IQK time measurement */ |
| u64 iqk_start_time; |
| u64 iqk_progressing_time; |
| u64 iqk_total_progressing_time; |
| |
| u32 lok_result; |
| |
| /* for APK */ |
| u32 ap_koutput[2][2]; /* path A/B; output1_1a/output1_2a */ |
| u8 is_ap_kdone; |
| u8 is_apk_thermal_meter_ignore; |
| |
| /* DPK */ |
| bool is_dpk_fail; |
| u8 is_dp_done; |
| u8 is_dp_path_aok; |
| u8 is_dp_path_bok; |
| |
| u32 tx_lok[2]; |
| u32 dpk_tx_agc; |
| s32 dpk_gain; |
| u32 dpk_thermal[4]; |
| s8 modify_tx_agc_value_ofdm; |
| s8 modify_tx_agc_value_cck; |
| |
| /*Add by Yuchen for Kfree Phydm*/ |
| u8 reg_rf_kfree_enable; /*for registry*/ |
| u8 rf_kfree_enable; /*for efuse enable check*/ |
| }; |
| |
| void odm_txpowertracking_check(void *dm_void); |
| |
| void odm_txpowertracking_init(void *dm_void); |
| |
| void odm_txpowertracking_check_ap(void *dm_void); |
| |
| void odm_txpowertracking_thermal_meter_init(void *dm_void); |
| |
| void odm_txpowertracking_init(void *dm_void); |
| |
| void odm_txpowertracking_check_mp(void *dm_void); |
| |
| void odm_txpowertracking_check_ce(void *dm_void); |
| |
| #endif |