xref: /OK3568_Linux_fs/external/rkwifibt/drivers/rtl8188fu/include/hal_com_phycfg.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 /******************************************************************************
2  *
3  * Copyright(c) 2007 - 2017 Realtek Corporation.
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  *****************************************************************************/
15 #ifndef __HAL_COM_PHYCFG_H__
16 #define __HAL_COM_PHYCFG_H__
17 
18 #ifndef DBG_TX_POWER_IDX
19 #define DBG_TX_POWER_IDX 0
20 #endif
21 
22 #define		PathA                     			0x0	/* Useless */
23 #define		PathB			0x1
24 #define		PathC			0x2
25 #define		PathD			0x3
26 
27 typedef enum _RF_TX_NUM {
28 	RF_1TX = 0,
29 	RF_2TX,
30 	RF_3TX,
31 	RF_4TX,
32 	RF_MAX_TX_NUM,
33 	RF_TX_NUM_NONIMPLEMENT,
34 } RF_TX_NUM;
35 
36 enum txpwr_pg_mode {
37 	TXPWR_PG_WITH_PWR_IDX,
38 	TXPWR_PG_WITH_TSSI_OFFSET,
39 	TXPWR_PG_UNKNOWN, /* keep last */
40 };
41 
42 /*------------------------------Define structure----------------------------*/
43 typedef struct _BB_REGISTER_DEFINITION {
44 	u32 rfintfs;			/* set software control: */
45 	/*		0x870~0x877[8 bytes] */
46 
47 	u32 rfintfo; 			/* output data: */
48 	/*		0x860~0x86f [16 bytes] */
49 
50 	u32 rfintfe; 			/* output enable: */
51 	/*		0x860~0x86f [16 bytes] */
52 
53 	u32 rf3wireOffset;	/* LSSI data: */
54 	/*		0x840~0x84f [16 bytes] */
55 
56 	u32 rfHSSIPara2;	/* wire parameter control2 :  */
57 	/*		0x824~0x827,0x82c~0x82f, 0x834~0x837, 0x83c~0x83f [16 bytes] */
58 
59 	u32 rfLSSIReadBack;	/* LSSI RF readback data SI mode */
60 	/*		0x8a0~0x8af [16 bytes] */
61 
62 	u32 rfLSSIReadBackPi;	/* LSSI RF readback data PI mode 0x8b8-8bc for Path A and B */
63 
64 } BB_REGISTER_DEFINITION_T, *PBB_REGISTER_DEFINITION_T;
65 
66 
67 /* ---------------------------------------------------------------------- */
68 
69 extern const char *const _txpwr_pg_mode_str[];
70 #define txpwr_pg_mode_str(_mode) (((_mode) >= TXPWR_PG_UNKNOWN) ? _txpwr_pg_mode_str[TXPWR_PG_UNKNOWN] : _txpwr_pg_mode_str[(_mode)])
71 
72 u8 phy_get_target_txpwr(
73 		PADAPTER		Adapter,
74 		u8				Band,
75 		u8				RfPath,
76 		RATE_SECTION	RateSection
77 );
78 
79 void
80 PHY_GetRateValuesOfTxPowerByRate(
81 		PADAPTER pAdapter,
82 		u32 RegAddr,
83 		u32 BitMask,
84 		u32 Value,
85 		u8 *Rate,
86 		s8 *PwrByRateVal,
87 		u8 *RateNum
88 );
89 
90 u8
91 PHY_GetRateIndexOfTxPowerByRate(
92 		u8	Rate
93 );
94 
95 void
96 phy_set_tx_power_index_by_rate_section(
97 		PADAPTER		pAdapter,
98 		enum rf_path		RFPath,
99 		u8				Channel,
100 		u8				RateSection
101 );
102 
103 s8
104 _PHY_GetTxPowerByRate(
105 		PADAPTER	pAdapter,
106 		u8			Band,
107 		enum rf_path	RFPath,
108 		u8			RateIndex
109 );
110 
111 s8
112 PHY_GetTxPowerByRate(
113 		PADAPTER	pAdapter,
114 		u8			Band,
115 		enum rf_path	RFPath,
116 		RATE_SECTION rs,
117 		enum MGN_RATE rate
118 );
119 
120 void
121 PHY_SetTxPowerByRate(
122 		PADAPTER	pAdapter,
123 		u8			Band,
124 		enum rf_path	RFPath,
125 		u8			Rate,
126 		s8			Value
127 );
128 
129 void
130 phy_set_tx_power_level_by_path(
131 		PADAPTER	Adapter,
132 		u8			channel,
133 		u8			path
134 );
135 
136 void
137 PHY_InitTxPowerByRate(
138 		PADAPTER	pAdapter
139 );
140 
141 void
142 phy_store_tx_power_by_rate(
143 		PADAPTER	pAdapter,
144 		u32			Band,
145 		u32			RfPath,
146 		u32			TxNum,
147 		u32			RegAddr,
148 		u32			BitMask,
149 		u32			Data
150 );
151 
152 void
153 PHY_TxPowerByRateConfiguration(
154 	  PADAPTER			pAdapter
155 );
156 
157 bool phy_chk_ch_setting_consistency(_adapter *adapter, u8 ch);
158 
159 #ifdef CONFIG_TXPWR_PG_WITH_PWR_IDX
160 u8 phy_get_pg_txpwr_idx(_adapter *pAdapter
161 	, enum rf_path RFPath, RATE_SECTION rs, u8 ntx_idx
162 	, enum channel_width BandWidth, u8 band, u8 Channel);
163 #endif
164 
165 #if CONFIG_TXPWR_LIMIT
166 s8 phy_get_txpwr_lmt(_adapter *adapter
167 	, const char *regd_name
168 	, BAND_TYPE band, enum channel_width bw
169 	, u8 tlrs, u8 ntx_idx, u8 cch, u8 lock
170 );
171 
172 s8 phy_get_txpwr_lmt_diff(_adapter *adapter
173 	, const char *regd_name
174 	, BAND_TYPE band, enum channel_width bw
175 	, u8 rfpath, u8 rs, u8 tlrs, u8 ntx_idx, u8 cch, u8 lock
176 );
177 
178 s8 phy_get_txpwr_lmt_sub_chs(_adapter *adapter
179 	, const char *regd_name
180 	, BAND_TYPE band, enum channel_width bw
181 	, u8 rfpath, u8 rate, u8 ntx_idx, u8 cch, u8 opch
182 );
183 #else
184 #define phy_get_txpwr_lmt(adapter, regd_name, band, bw, tlrs, ntx_idx, cch, lock) (GET_HAL_SPEC(adapter)->txgi_max)
185 #define phy_get_txpwr_lmt_diff(adapter, regd_name, band, bw, rfpath, rs, tlrs, ntx_idx, cch, lock) (GET_HAL_SPEC(adapter)->txgi_max)
186 #define phy_get_txpwr_lmt_sub_chs(adapter, regd_name, band, bw, rfpath, rate, ntx_idx, cch, opch) (GET_HAL_SPEC(adapter)->txgi_max)
187 #endif /* CONFIG_TXPWR_LIMIT */
188 
189 void dump_txpwr_tpc_settings(void *sel, _adapter *adapter);
190 
191 s8 phy_get_txpwr_target(_adapter *adapter, u8 rfpath, RATE_SECTION rs, u8 rate, u8 ntx_idx
192 	, enum channel_width bw, BAND_TYPE band, u8 cch, u8 opch, struct txpwr_idx_comp *tic);
193 s8 phy_get_txpwr_amends(_adapter *adapter, u8 rfpath, RATE_SECTION rs, u8 rate, u8 ntx_idx
194 	, enum channel_width bw, BAND_TYPE band, u8 cch, struct txpwr_idx_comp *tic);
195 #ifdef CONFIG_TXPWR_PG_WITH_TSSI_OFFSET
196 s8 phy_get_tssi_txpwr_by_rate_ref(_adapter *adapter, enum rf_path path
197 	, enum channel_width bw, u8 cch, u8 opch);
198 #endif
199 u8 hal_com_get_txpwr_idx(_adapter *adapter, enum rf_path rfpath
200 	, RATE_SECTION rs, enum MGN_RATE rate, enum channel_width bw, BAND_TYPE band, u8 cch, u8 opch
201 	, struct txpwr_idx_comp *tic);
202 
203 s16 phy_get_txpwr_single_mbm(_adapter *adapter, u8 rfpath, RATE_SECTION rs, u8 rate
204 	, enum channel_width bw, u8 cch, u8 opch, struct txpwr_idx_comp *tic);
205 s16 phy_get_txpwr_total_mbm(_adapter *adapter, RATE_SECTION rs, u8 rate
206 	, enum channel_width bw, u8 cch, u8 opch, struct txpwr_idx_comp *tic);
207 
208 s16 phy_get_txpwr_single_max_mbm(_adapter *adapter, u8 rfpath
209 	, enum channel_width bw, u8 cch, u8 opch, u16 bmp_cck_ofdm, u32 bmp_ht, u64 bmp_vht);
210 s16 phy_get_txpwr_total_max_mbm(_adapter *adapter
211 	, enum channel_width bw, u8 cch, u8 opch, u16 bmp_cck_ofdm, u32 bmp_ht, u64 bmp_vht);
212 
213 s8
214 phy_get_tx_power_final_absolute_value(_adapter *adapter, u8 rfpath, u8 rate,
215 				      enum channel_width bw, u8 channel);
216 
217 s8
218 PHY_GetTxPowerTrackingOffset(
219 	PADAPTER	pAdapter,
220 	enum rf_path	RFPath,
221 	u8			Rate
222 );
223 
224 struct txpwr_idx_comp {
225 	u8 ntx_idx;
226 	s8 target;
227 	s8 base;
228 
229 	/* for target */
230 	s8 by_rate;
231 	s8 btc;
232 	s8 extra;
233 	s8 utarget;
234 	s8 limit;
235 	s8 ulimit;
236 	s8 tpc;
237 
238 	/* for amends */
239 	s8 tpt;
240 	s8 dpd;
241 };
242 
243 u8 phy_get_tx_power_index_ex(_adapter *adapter
244 	, enum rf_path rfpath, RATE_SECTION rs, enum MGN_RATE rate
245 	, enum channel_width bw, BAND_TYPE band, u8 cch, u8 opch);
246 
247 u8
248 phy_get_tx_power_index(
249 		PADAPTER			pAdapter,
250 		enum rf_path			RFPath,
251 		u8					Rate,
252 		enum channel_width	BandWidth,
253 		u8					Channel
254 );
255 
256 void
257 PHY_SetTxPowerIndex(
258 		PADAPTER		pAdapter,
259 		u32				PowerIndex,
260 		enum rf_path		RFPath,
261 		u8				Rate
262 );
263 
264 bool phy_is_txpwr_user_mbm_valid(_adapter *adapter, s16 mbm);
265 bool phy_is_txpwr_user_target_specified(_adapter *adapter);
266 
267 void dump_tx_power_index_inline(void *sel, _adapter *adapter, u8 rfpath
268 	, enum channel_width bw, u8 cch, enum MGN_RATE rate, u8 pwr_idx, struct txpwr_idx_comp *tic);
269 #ifdef CONFIG_PROC_DEBUG
270 void dump_tx_power_idx_title(void *sel, _adapter *adapter
271 	, enum channel_width bw, u8 cch, u8 opch);
272 void dump_tx_power_idx_by_path_rs(void *sel, _adapter *adapter, u8 rfpath
273 	, RATE_SECTION rs, enum channel_width bw, u8 cch, u8 opch);
274 void dump_tx_power_idx(void *sel, _adapter *adapter
275 	, enum channel_width bw, u8 cch, u8 opch);
276 void dump_txpwr_total_dbm_title(void *sel, _adapter *adapter
277 	, enum channel_width bw, u8 cch, u8 opch);
278 void dump_txpwr_total_dbm_by_rs(void *sel, _adapter *adapter, u8 rs
279 	, enum channel_width bw, u8 cch, u8 opch);
280 void dump_txpwr_total_dbm(void *sel, _adapter *adapter
281 	, enum channel_width bw, u8 cch, u8 opch);
282 #endif
283 
284 bool phy_is_tx_power_limit_needed(_adapter *adapter);
285 bool phy_is_tx_power_by_rate_needed(_adapter *adapter);
286 int phy_load_tx_power_by_rate(_adapter *adapter, u8 chk_file);
287 #if CONFIG_TXPWR_LIMIT
288 int phy_load_tx_power_limit(_adapter *adapter, u8 chk_file);
289 #endif
290 void phy_load_tx_power_ext_info(_adapter *adapter, u8 chk_file);
291 void phy_reload_tx_power_ext_info(_adapter *adapter);
292 void phy_reload_default_tx_power_ext_info(_adapter *adapter);
293 
294 const struct map_t *hal_pg_txpwr_def_info(_adapter *adapter);
295 
296 #ifdef CONFIG_EFUSE_CONFIG_FILE
297 int check_phy_efuse_tx_power_info_valid(_adapter *adapter);
298 #endif
299 
300 #ifdef CONFIG_TXPWR_PG_WITH_PWR_IDX
301 void dump_hal_txpwr_info_2g(void *sel, _adapter *adapter, u8 rfpath_num, u8 max_tx_cnt);
302 void dump_hal_txpwr_info_5g(void *sel, _adapter *adapter, u8 rfpath_num, u8 max_tx_cnt);
303 
304 void hal_load_txpwr_info(_adapter *adapter);
305 #endif
306 
307 #ifdef CONFIG_PROC_DEBUG
308 void dump_tx_power_ext_info(void *sel, _adapter *adapter);
309 void dump_target_tx_power(void *sel, _adapter *adapter);
310 void dump_tx_power_by_rate(void *sel, _adapter *adapter);
311 #endif
312 
313 int rtw_get_phy_file_path(_adapter *adapter, const char *file_name);
314 
315 #ifdef CONFIG_LOAD_PHY_PARA_FROM_FILE
316 #define MAC_FILE_FW_NIC			"FW_NIC.bin"
317 #define MAC_FILE_FW_WW_IMG		"FW_WoWLAN.bin"
318 #define PHY_FILE_MAC_REG		"MAC_REG.txt"
319 
320 #define PHY_FILE_AGC_TAB		"AGC_TAB.txt"
321 #define PHY_FILE_PHY_REG		"PHY_REG.txt"
322 #define PHY_FILE_PHY_REG_MP		"PHY_REG_MP.txt"
323 #define PHY_FILE_PHY_REG_PG		"PHY_REG_PG.txt"
324 
325 #define PHY_FILE_RADIO_A		"RadioA.txt"
326 #define PHY_FILE_RADIO_B		"RadioB.txt"
327 #define PHY_FILE_RADIO_C		"RadioC.txt"
328 #define PHY_FILE_RADIO_D		"RadioD.txt"
329 #define PHY_FILE_TXPWR_TRACK	"TxPowerTrack.txt"
330 #define PHY_FILE_TXPWR_LMT		"TXPWR_LMT.txt"
331 
332 #define PHY_FILE_WIFI_ANT_ISOLATION	"wifi_ant_isolation.txt"
333 
334 #define MAX_PARA_FILE_BUF_LEN	32768 /* 32k */
335 
336 #define LOAD_MAC_PARA_FILE				BIT0
337 #define LOAD_BB_PARA_FILE					BIT1
338 #define LOAD_BB_PG_PARA_FILE				BIT2
339 #define LOAD_BB_MP_PARA_FILE				BIT3
340 #define LOAD_RF_PARA_FILE					BIT4
341 #define LOAD_RF_TXPWR_TRACK_PARA_FILE	BIT5
342 #define LOAD_RF_TXPWR_LMT_PARA_FILE		BIT6
343 
344 int phy_ConfigMACWithParaFile(PADAPTER	Adapter, char	*pFileName);
345 int phy_ConfigBBWithParaFile(PADAPTER	Adapter, char	*pFileName, u32	ConfigType);
346 int phy_ConfigBBWithPgParaFile(PADAPTER	Adapter, const char *pFileName);
347 int phy_ConfigBBWithMpParaFile(PADAPTER	Adapter, char	*pFileName);
348 int PHY_ConfigRFWithParaFile(PADAPTER	Adapter, char	*pFileName, enum rf_path	eRFPath);
349 int PHY_ConfigRFWithTxPwrTrackParaFile(PADAPTER	Adapter, char	*pFileName);
350 #if CONFIG_TXPWR_LIMIT
351 int PHY_ConfigRFWithPowerLimitTableParaFile(PADAPTER	Adapter, const char *pFileName);
352 #endif
353 void phy_free_filebuf_mask(_adapter *padapter, u8 mask);
354 void phy_free_filebuf(_adapter *padapter);
355 #endif /* CONFIG_LOAD_PHY_PARA_FROM_FILE */
356 u8 phy_check_under_survey_ch(_adapter *adapter);
357 #endif /* __HAL_COMMON_H__ */
358