net: wireless: rockchip_wlan: add rtl8723cs support
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / rtl8723cs / hal / phydm / phydm_powertracking_ce.h
1 /******************************************************************************
2  *
3  * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
4  *
5  * This program is free software; you can redistribute it and/or modify it
6  * under the terms of version 2 of the GNU General Public License as
7  * published by the Free Software Foundation.
8  *
9  * This program is distributed in the hope that it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12  * more details.
13  *
14  * You should have received a copy of the GNU General Public License along with
15  * this program; if not, write to the Free Software Foundation, Inc.,
16  * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
17  *
18  *
19  ******************************************************************************/
20
21 #ifndef __PHYDMPOWERTRACKING_H__
22 #define    __PHYDMPOWERTRACKING_H__
23
24 #define POWRTRACKING_VERSION    "1.1"
25
26 #define         DPK_DELTA_MAPPING_NUM   13
27 #define         index_mapping_HP_NUM    15
28 #define OFDM_TABLE_SIZE 43
29 #define CCK_TABLE_SIZE                  33
30 #define CCK_TABLE_SIZE_88F      21
31 #define TXSCALE_TABLE_SIZE              37
32 #define CCK_TABLE_SIZE_8723D    41
33 /* JJ ADD 20161014 */
34 #define CCK_TABLE_SIZE_8710B    41
35
36 #define TXPWR_TRACK_TABLE_SIZE  30
37 #define DELTA_SWINGIDX_SIZE     30
38 #define DELTA_SWINTSSI_SIZE     61
39 #define BAND_NUM                                4
40
41 #define AVG_THERMAL_NUM         8
42 #define HP_THERMAL_NUM          8
43 #define IQK_MAC_REG_NUM         4
44 #define IQK_ADDA_REG_NUM                16
45 #define IQK_BB_REG_NUM_MAX      10
46
47 #define IQK_BB_REG_NUM          9
48
49
50
51 #define iqk_matrix_reg_num      8
52 #define IQK_MATRIX_SETTINGS_NUM (14+24+21) /* Channels_2_4G_NUM + Channels_5G_20M_NUM + Channels_5G */
53
54 extern  u32 ofdm_swing_table[OFDM_TABLE_SIZE];
55 extern  u8 cck_swing_table_ch1_ch13[CCK_TABLE_SIZE][8];
56 extern  u8 cck_swing_table_ch14[CCK_TABLE_SIZE][8];
57
58 extern  u32 ofdm_swing_table_new[OFDM_TABLE_SIZE];
59 extern  u8 cck_swing_table_ch1_ch13_new[CCK_TABLE_SIZE][8];
60 extern  u8 cck_swing_table_ch14_new[CCK_TABLE_SIZE][8];
61 extern  u8 cck_swing_table_ch1_ch14_88f[CCK_TABLE_SIZE_88F][16];
62 extern  u8 cck_swing_table_ch1_ch13_88f[CCK_TABLE_SIZE_88F][16];
63 extern  u8 cck_swing_table_ch14_88f[CCK_TABLE_SIZE_88F][16];
64 extern  u32 cck_swing_table_ch1_ch14_8723d[CCK_TABLE_SIZE_8723D];
65 /* JJ ADD 20161014 */
66 extern  u32 cck_swing_table_ch1_ch14_8710b[CCK_TABLE_SIZE_8710B];
67
68 extern  u32 tx_scaling_table_jaguar[TXSCALE_TABLE_SIZE];
69
70 /* <20121018, Kordan> In case fail to read TxPowerTrack.txt, we use the table of 88E as the default table. */
71 static u8 delta_swing_table_idx_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};
72 static u8 delta_swing_table_idx_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};
73
74 #define dm_check_txpowertracking        odm_txpowertracking_check
75
76 struct _IQK_MATRIX_REGS_SETTING {
77         boolean is_iqk_done;
78         s32             value[3][iqk_matrix_reg_num];
79         boolean is_bw_iqk_result_saved[3];
80 };
81
82 struct odm_rf_calibration_structure {
83         /* for tx power tracking */
84
85         u32     rega24; /* for TempCCK */
86         s32     rege94;
87         s32     rege9c;
88         s32     regeb4;
89         s32     regebc;
90
91         u8      tx_powercount;
92         boolean is_txpowertracking_init;
93         boolean is_txpowertracking;
94         u8      txpowertrack_control; /* for mp mode, turn off txpwrtracking as default */
95         u8      tm_trigger;
96         u8      internal_pa_5g[2];      /* pathA / pathB */
97
98         u8      thermal_meter[2];    /* thermal_meter, index 0 for RFIC0, and 1 for RFIC1 */
99         u8      thermal_value;
100         u8      thermal_value_lck;
101         u8      thermal_value_iqk;
102         s8      thermal_value_delta; /* delta of thermal_value and efuse thermal */
103         u8      thermal_value_dpk;
104         u8      thermal_value_avg[AVG_THERMAL_NUM];
105         u8      thermal_value_avg_index;
106         u8      thermal_value_rx_gain;
107         u8      thermal_value_crystal;
108         u8      thermal_value_dpk_store;
109         u8      thermal_value_dpk_track;
110         boolean txpowertracking_in_progress;
111
112         boolean is_reloadtxpowerindex;
113         u8      is_rf_pi_enable;
114         u32     txpowertracking_callback_cnt; /* cosa add for debug */
115
116
117         /* ------------------------- Tx power Tracking ------------------------- */
118         u8      is_cck_in_ch14;
119         u8      CCK_index;
120         u8      OFDM_index[MAX_RF_PATH];
121         s8      power_index_offset[MAX_RF_PATH];
122         s8      delta_power_index[MAX_RF_PATH];
123         s8      delta_power_index_last[MAX_RF_PATH];
124         boolean is_tx_power_changed;
125         s8      xtal_offset;
126         s8      xtal_offset_last;
127
128         u8      thermal_value_hp[HP_THERMAL_NUM];
129         u8      thermal_value_hp_index;
130         struct _IQK_MATRIX_REGS_SETTING iqk_matrix_reg_setting[IQK_MATRIX_SETTINGS_NUM];
131         u8      delta_lck;
132         s8  bb_swing_diff_2g, bb_swing_diff_5g; /* Unit: dB */
133         u8  delta_swing_table_idx_2g_cck_a_p[DELTA_SWINGIDX_SIZE];
134         u8  delta_swing_table_idx_2g_cck_a_n[DELTA_SWINGIDX_SIZE];
135         u8  delta_swing_table_idx_2g_cck_b_p[DELTA_SWINGIDX_SIZE];
136         u8  delta_swing_table_idx_2g_cck_b_n[DELTA_SWINGIDX_SIZE];
137         u8  delta_swing_table_idx_2g_cck_c_p[DELTA_SWINGIDX_SIZE];
138         u8  delta_swing_table_idx_2g_cck_c_n[DELTA_SWINGIDX_SIZE];
139         u8  delta_swing_table_idx_2g_cck_d_p[DELTA_SWINGIDX_SIZE];
140         u8  delta_swing_table_idx_2g_cck_d_n[DELTA_SWINGIDX_SIZE];
141         u8  delta_swing_table_idx_2ga_p[DELTA_SWINGIDX_SIZE];
142         u8  delta_swing_table_idx_2ga_n[DELTA_SWINGIDX_SIZE];
143         u8  delta_swing_table_idx_2gb_p[DELTA_SWINGIDX_SIZE];
144         u8  delta_swing_table_idx_2gb_n[DELTA_SWINGIDX_SIZE];
145         u8  delta_swing_table_idx_2gc_p[DELTA_SWINGIDX_SIZE];
146         u8  delta_swing_table_idx_2gc_n[DELTA_SWINGIDX_SIZE];
147         u8  delta_swing_table_idx_2gd_p[DELTA_SWINGIDX_SIZE];
148         u8  delta_swing_table_idx_2gd_n[DELTA_SWINGIDX_SIZE];
149         u8  delta_swing_table_idx_5ga_p[BAND_NUM][DELTA_SWINGIDX_SIZE];
150         u8  delta_swing_table_idx_5ga_n[BAND_NUM][DELTA_SWINGIDX_SIZE];
151         u8  delta_swing_table_idx_5gb_p[BAND_NUM][DELTA_SWINGIDX_SIZE];
152         u8  delta_swing_table_idx_5gb_n[BAND_NUM][DELTA_SWINGIDX_SIZE];
153         u8  delta_swing_table_idx_5gc_p[BAND_NUM][DELTA_SWINGIDX_SIZE];
154         u8  delta_swing_table_idx_5gc_n[BAND_NUM][DELTA_SWINGIDX_SIZE];
155         u8  delta_swing_table_idx_5gd_p[BAND_NUM][DELTA_SWINGIDX_SIZE];
156         u8  delta_swing_table_idx_5gd_n[BAND_NUM][DELTA_SWINGIDX_SIZE];
157         u8  delta_swing_tssi_table_2g_cck_a[DELTA_SWINTSSI_SIZE];
158         u8  delta_swing_tssi_table_2g_cck_b[DELTA_SWINTSSI_SIZE];
159         u8  delta_swing_tssi_table_2g_cck_c[DELTA_SWINTSSI_SIZE];
160         u8  delta_swing_tssi_table_2g_cck_d[DELTA_SWINTSSI_SIZE];
161         u8  delta_swing_tssi_table_2ga[DELTA_SWINTSSI_SIZE];
162         u8  delta_swing_tssi_table_2gb[DELTA_SWINTSSI_SIZE];
163         u8  delta_swing_tssi_table_2gc[DELTA_SWINTSSI_SIZE];
164         u8  delta_swing_tssi_table_2gd[DELTA_SWINTSSI_SIZE];
165         u8  delta_swing_tssi_table_5ga[BAND_NUM][DELTA_SWINTSSI_SIZE];
166         u8  delta_swing_tssi_table_5gb[BAND_NUM][DELTA_SWINTSSI_SIZE];
167         u8  delta_swing_tssi_table_5gc[BAND_NUM][DELTA_SWINTSSI_SIZE];
168         u8  delta_swing_tssi_table_5gd[BAND_NUM][DELTA_SWINTSSI_SIZE];
169         s8  delta_swing_table_xtal_p[DELTA_SWINGIDX_SIZE];
170         s8  delta_swing_table_xtal_n[DELTA_SWINGIDX_SIZE];
171         u8  delta_swing_table_idx_2ga_p_8188e[DELTA_SWINGIDX_SIZE];
172         u8  delta_swing_table_idx_2ga_n_8188e[DELTA_SWINGIDX_SIZE];
173
174         u8                      bb_swing_idx_ofdm[MAX_RF_PATH];
175         u8                      bb_swing_idx_ofdm_current;
176 #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN | ODM_CE))
177         u8                      bb_swing_idx_ofdm_base[MAX_RF_PATH];
178 #else
179         u8                      bb_swing_idx_ofdm_base;
180 #endif
181         boolean         default_bb_swing_index_flag;
182         boolean                 bb_swing_flag_ofdm;
183         u8                      bb_swing_idx_cck;
184         u8                      bb_swing_idx_cck_current;
185         u8                      bb_swing_idx_cck_base;
186         u8                      default_ofdm_index;
187         u8                      default_cck_index;
188         boolean                 bb_swing_flag_cck;
189
190         s8                      absolute_ofdm_swing_idx[MAX_RF_PATH];
191         s8                      remnant_ofdm_swing_idx[MAX_RF_PATH];
192         s8                      absolute_cck_swing_idx[MAX_RF_PATH];
193         s8                      remnant_cck_swing_idx;
194         s8                      modify_tx_agc_value;       /*Remnat compensate value at tx_agc */
195         boolean                 modify_tx_agc_flag_path_a;
196         boolean                 modify_tx_agc_flag_path_b;
197         boolean                 modify_tx_agc_flag_path_c;
198         boolean                 modify_tx_agc_flag_path_d;
199         boolean                 modify_tx_agc_flag_path_a_cck;
200
201         s8                      kfree_offset[MAX_RF_PATH];
202
203         /* -------------------------------------------------------------------- */
204
205         /* for IQK */
206         u32     regc04;
207         u32     reg874;
208         u32     regc08;
209         u32     regb68;
210         u32     regb6c;
211         u32     reg870;
212         u32     reg860;
213         u32     reg864;
214
215         boolean is_iqk_initialized;
216         boolean is_lck_in_progress;
217         boolean is_antenna_detected;
218         boolean is_need_iqk;
219         boolean is_iqk_in_progress;
220         boolean is_iqk_pa_off;
221         u8      delta_iqk;
222         u32     ADDA_backup[IQK_ADDA_REG_NUM];
223         u32     IQK_MAC_backup[IQK_MAC_REG_NUM];
224         u32     IQK_BB_backup_recover[9];
225         u32     IQK_BB_backup[IQK_BB_REG_NUM];
226         u32     tx_iqc_8723b[2][3][2]; /* { {S1: 0xc94, 0xc80, 0xc4c} , {S0: 0xc9c, 0xc88, 0xc4c}} */
227         u32     rx_iqc_8723b[2][2][2]; /* { {S1: 0xc14, 0xca0} ,           {S0: 0xc14, 0xca0}} */
228         u32     tx_iqc_8703b[3][2];     /* { {S1: 0xc94, 0xc80, 0xc4c} , {S0: 0xc9c, 0xc88, 0xc4c}}*/
229         u32     rx_iqc_8703b[2][2];     /* { {S1: 0xc14, 0xca0} ,           {S0: 0xc14, 0xca0}}*/
230         u32     tx_iqc_8723d[2][3][2];  /* { {S1: 0xc94, 0xc80, 0xc4c} , {S0: 0xc9c, 0xc88, 0xc4c}}*/
231         u32     rx_iqc_8723d[2][2][2];  /* { {S1: 0xc14, 0xca0} ,           {S0: 0xc14, 0xca0}}*/
232         /* JJ ADD 20161014 */
233         u32     tx_iqc_8710b[2][3][2];  /* { {S1: 0xc94, 0xc80, 0xc4c} , {S0: 0xc9c, 0xc88, 0xc4c}}*/
234         u32     rx_iqc_8710b[2][2][2];  /* { {S1: 0xc14, 0xca0} ,           {S0: 0xc14, 0xca0}}*/
235
236         u8      iqk_step;
237         u8      kcount;
238         u8      retry_count[4][2]; /* [4]: path ABCD, [2] TXK, RXK */
239         boolean is_mp_mode;
240
241
242
243         /* <James> IQK time measurement */
244         u64     iqk_start_time;
245         u64     iqk_progressing_time;
246         u64     iqk_total_progressing_time;
247
248         u32  lok_result;
249
250         /* for APK */
251         u32     ap_koutput[2][2]; /* path A/B; output1_1a/output1_2a */
252         u8      is_ap_kdone;
253         u8      is_apk_thermal_meter_ignore;
254
255         /* DPK */
256         boolean is_dpk_fail;
257         u8      is_dp_done;
258         u8      is_dp_path_aok;
259         u8      is_dp_path_bok;
260
261         u32     tx_lok[2];
262         u32  dpk_tx_agc;
263         s32  dpk_gain;
264         u32  dpk_thermal[4];
265         s8 modify_tx_agc_value_ofdm;
266         s8 modify_tx_agc_value_cck;
267
268         /*Add by Yuchen for Kfree Phydm*/
269         u8                      reg_rf_kfree_enable;    /*for registry*/
270         u8                      rf_kfree_enable;                /*for efuse enable check*/
271
272 };
273
274
275 void
276 odm_txpowertracking_check(
277         void            *p_dm_void
278 );
279
280
281 void
282 odm_txpowertracking_init(
283         void            *p_dm_void
284 );
285
286 void
287 odm_txpowertracking_check_ap(
288         void            *p_dm_void
289 );
290
291 void
292 odm_txpowertracking_thermal_meter_init(
293         void            *p_dm_void
294 );
295
296 void
297 odm_txpowertracking_init(
298         void            *p_dm_void
299 );
300
301 void
302 odm_txpowertracking_check_mp(
303         void            *p_dm_void
304 );
305
306
307 void
308 odm_txpowertracking_check_ce(
309         void            *p_dm_void
310 );
311
312 #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN))
313
314 void
315 odm_txpowertracking_callback_thermal_meter92c(
316         struct _ADAPTER *adapter
317 );
318
319 void
320 odm_txpowertracking_callback_rx_gain_thermal_meter92d(
321         struct _ADAPTER *adapter
322 );
323
324 void
325 odm_txpowertracking_callback_thermal_meter92d(
326         struct _ADAPTER *adapter
327 );
328
329 void
330 odm_txpowertracking_direct_call92c(
331         struct _ADAPTER         *adapter
332 );
333
334 void
335 odm_txpowertracking_thermal_meter_check(
336         struct _ADAPTER         *adapter
337 );
338
339 #endif
340
341 #endif