aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/staging/rtlwifi/phydm/phydm_powertracking_ce.h
blob: eb635de2d6939f1ed4462f219f63ce4d55e9d8a1 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
/* SPDX-License-Identifier: GPL-2.0 */
/******************************************************************************
 *
 * Copyright(c) 2007 - 2016  Realtek Corporation.
 *
 * 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