xref: /OK3568_Linux_fs/external/rkwifibt/drivers/rtl8723ds/include/hal_data.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /******************************************************************************
2*4882a593Smuzhiyun  *
3*4882a593Smuzhiyun  * Copyright(c) 2007 - 2017 Realtek Corporation.
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * This program is free software; you can redistribute it and/or modify it
6*4882a593Smuzhiyun  * under the terms of version 2 of the GNU General Public License as
7*4882a593Smuzhiyun  * published by the Free Software Foundation.
8*4882a593Smuzhiyun  *
9*4882a593Smuzhiyun  * This program is distributed in the hope that it will be useful, but WITHOUT
10*4882a593Smuzhiyun  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11*4882a593Smuzhiyun  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12*4882a593Smuzhiyun  * more details.
13*4882a593Smuzhiyun  *
14*4882a593Smuzhiyun  *****************************************************************************/
15*4882a593Smuzhiyun #ifndef __HAL_DATA_H__
16*4882a593Smuzhiyun #define __HAL_DATA_H__
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun #if 1/* def  CONFIG_SINGLE_IMG */
19*4882a593Smuzhiyun 
20*4882a593Smuzhiyun #include "../hal/phydm/phydm_precomp.h"
21*4882a593Smuzhiyun #ifdef CONFIG_BT_COEXIST
22*4882a593Smuzhiyun 	#include <hal_btcoex.h>
23*4882a593Smuzhiyun #endif
24*4882a593Smuzhiyun 	#include <hal_btcoex_wifionly.h>
25*4882a593Smuzhiyun 
26*4882a593Smuzhiyun #ifdef CONFIG_SDIO_HCI
27*4882a593Smuzhiyun 	#include <hal_sdio.h>
28*4882a593Smuzhiyun #endif
29*4882a593Smuzhiyun #ifdef CONFIG_GSPI_HCI
30*4882a593Smuzhiyun 	#include <hal_gspi.h>
31*4882a593Smuzhiyun #endif
32*4882a593Smuzhiyun 
33*4882a593Smuzhiyun #if defined(CONFIG_RTW_ACS) || defined(CONFIG_BACKGROUND_NOISE_MONITOR)
34*4882a593Smuzhiyun #include "../hal/hal_dm_acs.h"
35*4882a593Smuzhiyun #endif
36*4882a593Smuzhiyun 
37*4882a593Smuzhiyun /*
38*4882a593Smuzhiyun  * <Roger_Notes> For RTL8723 WiFi/BT/GPS multi-function configuration. 2010.10.06.
39*4882a593Smuzhiyun  *   */
40*4882a593Smuzhiyun typedef enum _RT_MULTI_FUNC {
41*4882a593Smuzhiyun 	RT_MULTI_FUNC_NONE	= 0x00,
42*4882a593Smuzhiyun 	RT_MULTI_FUNC_WIFI	= 0x01,
43*4882a593Smuzhiyun 	RT_MULTI_FUNC_BT		= 0x02,
44*4882a593Smuzhiyun 	RT_MULTI_FUNC_GPS	= 0x04,
45*4882a593Smuzhiyun } RT_MULTI_FUNC, *PRT_MULTI_FUNC;
46*4882a593Smuzhiyun /*
47*4882a593Smuzhiyun  * <Roger_Notes> For RTL8723 WiFi PDn/GPIO polarity control configuration. 2010.10.08.
48*4882a593Smuzhiyun  *   */
49*4882a593Smuzhiyun typedef enum _RT_POLARITY_CTL {
50*4882a593Smuzhiyun 	RT_POLARITY_LOW_ACT	= 0,
51*4882a593Smuzhiyun 	RT_POLARITY_HIGH_ACT	= 1,
52*4882a593Smuzhiyun } RT_POLARITY_CTL, *PRT_POLARITY_CTL;
53*4882a593Smuzhiyun 
54*4882a593Smuzhiyun /* For RTL8723 regulator mode. by tynli. 2011.01.14. */
55*4882a593Smuzhiyun typedef enum _RT_REGULATOR_MODE {
56*4882a593Smuzhiyun 	RT_SWITCHING_REGULATOR	= 0,
57*4882a593Smuzhiyun 	RT_LDO_REGULATOR			= 1,
58*4882a593Smuzhiyun } RT_REGULATOR_MODE, *PRT_REGULATOR_MODE;
59*4882a593Smuzhiyun 
60*4882a593Smuzhiyun /*
61*4882a593Smuzhiyun  * Interface type.
62*4882a593Smuzhiyun  *   */
63*4882a593Smuzhiyun typedef	enum _INTERFACE_SELECT_PCIE {
64*4882a593Smuzhiyun 	INTF_SEL0_SOLO_MINICARD			= 0,		/* WiFi solo-mCard */
65*4882a593Smuzhiyun 	INTF_SEL1_BT_COMBO_MINICARD		= 1,		/* WiFi+BT combo-mCard */
66*4882a593Smuzhiyun 	INTF_SEL2_PCIe						= 2,		/* PCIe Card */
67*4882a593Smuzhiyun } INTERFACE_SELECT_PCIE, *PINTERFACE_SELECT_PCIE;
68*4882a593Smuzhiyun 
69*4882a593Smuzhiyun 
70*4882a593Smuzhiyun typedef	enum _INTERFACE_SELECT_USB {
71*4882a593Smuzhiyun 	INTF_SEL0_USB 				= 0,		/* USB */
72*4882a593Smuzhiyun 	INTF_SEL1_USB_High_Power  	= 1,		/* USB with high power PA */
73*4882a593Smuzhiyun 	INTF_SEL2_MINICARD		  	= 2,		/* Minicard */
74*4882a593Smuzhiyun 	INTF_SEL3_USB_Solo 		= 3,		/* USB solo-Slim module */
75*4882a593Smuzhiyun 	INTF_SEL4_USB_Combo		= 4,		/* USB Combo-Slim module */
76*4882a593Smuzhiyun 	INTF_SEL5_USB_Combo_MF	= 5,		/* USB WiFi+BT Multi-Function Combo, i.e., Proprietary layout(AS-VAU) which is the same as SDIO card */
77*4882a593Smuzhiyun } INTERFACE_SELECT_USB, *PINTERFACE_SELECT_USB;
78*4882a593Smuzhiyun 
79*4882a593Smuzhiyun typedef enum _RT_AMPDU_BRUST_MODE {
80*4882a593Smuzhiyun 	RT_AMPDU_BRUST_NONE		= 0,
81*4882a593Smuzhiyun 	RT_AMPDU_BRUST_92D		= 1,
82*4882a593Smuzhiyun 	RT_AMPDU_BRUST_88E		= 2,
83*4882a593Smuzhiyun 	RT_AMPDU_BRUST_8812_4	= 3,
84*4882a593Smuzhiyun 	RT_AMPDU_BRUST_8812_8	= 4,
85*4882a593Smuzhiyun 	RT_AMPDU_BRUST_8812_12	= 5,
86*4882a593Smuzhiyun 	RT_AMPDU_BRUST_8812_15	= 6,
87*4882a593Smuzhiyun 	RT_AMPDU_BRUST_8723B		= 7,
88*4882a593Smuzhiyun } RT_AMPDU_BRUST, *PRT_AMPDU_BRUST_MODE;
89*4882a593Smuzhiyun 
90*4882a593Smuzhiyun /* Tx Power Limit Table Size */
91*4882a593Smuzhiyun #define MAX_REGULATION_NUM						4
92*4882a593Smuzhiyun #define MAX_RF_PATH_NUM_IN_POWER_LIMIT_TABLE	4
93*4882a593Smuzhiyun #define MAX_2_4G_BANDWIDTH_NUM					2
94*4882a593Smuzhiyun #define MAX_RATE_SECTION_NUM						10
95*4882a593Smuzhiyun #define MAX_5G_BANDWIDTH_NUM						4
96*4882a593Smuzhiyun 
97*4882a593Smuzhiyun #define NUM_OF_TARGET_TXPWR_2G	10 /* CCK:1, OFDM:1, HT:4, VHT:4 */
98*4882a593Smuzhiyun #define NUM_OF_TARGET_TXPWR_5G	9 /* OFDM:1, HT:4, VHT:4 */
99*4882a593Smuzhiyun 
100*4882a593Smuzhiyun #ifdef RTW_RX_AGGREGATION
101*4882a593Smuzhiyun typedef enum _RX_AGG_MODE {
102*4882a593Smuzhiyun 	RX_AGG_DISABLE,
103*4882a593Smuzhiyun 	RX_AGG_DMA,
104*4882a593Smuzhiyun 	RX_AGG_USB,
105*4882a593Smuzhiyun 	RX_AGG_MIX
106*4882a593Smuzhiyun } RX_AGG_MODE;
107*4882a593Smuzhiyun 
108*4882a593Smuzhiyun /* #define MAX_RX_DMA_BUFFER_SIZE	10240 */		/* 10K for 8192C RX DMA buffer */
109*4882a593Smuzhiyun 
110*4882a593Smuzhiyun #endif /* RTW_RX_AGGREGATION */
111*4882a593Smuzhiyun 
112*4882a593Smuzhiyun /* E-Fuse */
113*4882a593Smuzhiyun #ifdef CONFIG_RTL8188E
114*4882a593Smuzhiyun 	#define EFUSE_MAP_SIZE	512
115*4882a593Smuzhiyun #endif
116*4882a593Smuzhiyun #if defined(CONFIG_RTL8812A) || defined(CONFIG_RTL8821A) || defined(CONFIG_RTL8814A)
117*4882a593Smuzhiyun 	#define EFUSE_MAP_SIZE	512
118*4882a593Smuzhiyun #endif
119*4882a593Smuzhiyun #ifdef CONFIG_RTL8192E
120*4882a593Smuzhiyun 	#define EFUSE_MAP_SIZE	512
121*4882a593Smuzhiyun #endif
122*4882a593Smuzhiyun #ifdef CONFIG_RTL8723B
123*4882a593Smuzhiyun 	#define EFUSE_MAP_SIZE	512
124*4882a593Smuzhiyun #endif
125*4882a593Smuzhiyun #ifdef CONFIG_RTL8814A
126*4882a593Smuzhiyun 	#define EFUSE_MAP_SIZE	512
127*4882a593Smuzhiyun #endif
128*4882a593Smuzhiyun #ifdef CONFIG_RTL8703B
129*4882a593Smuzhiyun 	#define EFUSE_MAP_SIZE	512
130*4882a593Smuzhiyun #endif
131*4882a593Smuzhiyun #ifdef CONFIG_RTL8723D
132*4882a593Smuzhiyun 	#define EFUSE_MAP_SIZE	512
133*4882a593Smuzhiyun #endif
134*4882a593Smuzhiyun #ifdef CONFIG_RTL8188F
135*4882a593Smuzhiyun 	#define EFUSE_MAP_SIZE	512
136*4882a593Smuzhiyun #endif
137*4882a593Smuzhiyun #ifdef CONFIG_RTL8188GTV
138*4882a593Smuzhiyun 	#define EFUSE_MAP_SIZE	512
139*4882a593Smuzhiyun #endif
140*4882a593Smuzhiyun #ifdef CONFIG_RTL8710B
141*4882a593Smuzhiyun 	#define EFUSE_MAP_SIZE	512
142*4882a593Smuzhiyun #endif
143*4882a593Smuzhiyun #ifdef CONFIG_RTL8192F
144*4882a593Smuzhiyun 	#define EFUSE_MAP_SIZE	512
145*4882a593Smuzhiyun #endif
146*4882a593Smuzhiyun 
147*4882a593Smuzhiyun #if defined(CONFIG_RTL8814A) || defined(CONFIG_RTL8822B) || defined(CONFIG_RTL8821C) || defined(CONFIG_RTL8814B)
148*4882a593Smuzhiyun 	#define EFUSE_MAX_SIZE	1024
149*4882a593Smuzhiyun #elif defined(CONFIG_RTL8188E) || defined(CONFIG_RTL8188F) || defined(CONFIG_RTL8188GTV) || defined(CONFIG_RTL8703B) || defined(CONFIG_RTL8710B)
150*4882a593Smuzhiyun 	#define EFUSE_MAX_SIZE	256
151*4882a593Smuzhiyun #else
152*4882a593Smuzhiyun 	#define EFUSE_MAX_SIZE	512
153*4882a593Smuzhiyun #endif
154*4882a593Smuzhiyun /* end of E-Fuse */
155*4882a593Smuzhiyun 
156*4882a593Smuzhiyun #define Mac_OFDM_OK			0x00000000
157*4882a593Smuzhiyun #define Mac_OFDM_Fail		0x10000000
158*4882a593Smuzhiyun #define Mac_OFDM_FasleAlarm	0x20000000
159*4882a593Smuzhiyun #define Mac_CCK_OK			0x30000000
160*4882a593Smuzhiyun #define Mac_CCK_Fail		0x40000000
161*4882a593Smuzhiyun #define Mac_CCK_FasleAlarm	0x50000000
162*4882a593Smuzhiyun #define Mac_HT_OK			0x60000000
163*4882a593Smuzhiyun #define Mac_HT_Fail			0x70000000
164*4882a593Smuzhiyun #define Mac_HT_FasleAlarm	0x90000000
165*4882a593Smuzhiyun #define Mac_DropPacket		0xA0000000
166*4882a593Smuzhiyun 
167*4882a593Smuzhiyun #ifdef CONFIG_RF_POWER_TRIM
168*4882a593Smuzhiyun #if defined(CONFIG_RTL8723B)
169*4882a593Smuzhiyun 	#define REG_RF_BB_GAIN_OFFSET	0x7f
170*4882a593Smuzhiyun 	#define RF_GAIN_OFFSET_MASK		0xfffff
171*4882a593Smuzhiyun #elif defined(CONFIG_RTL8188E)
172*4882a593Smuzhiyun 	#define REG_RF_BB_GAIN_OFFSET	0x55
173*4882a593Smuzhiyun 	#define RF_GAIN_OFFSET_MASK		0xfffff
174*4882a593Smuzhiyun #else
175*4882a593Smuzhiyun 	#define REG_RF_BB_GAIN_OFFSET	0x55
176*4882a593Smuzhiyun 	#define RF_GAIN_OFFSET_MASK		0xfffff
177*4882a593Smuzhiyun #endif /* CONFIG_RTL8723B */
178*4882a593Smuzhiyun #endif /*CONFIG_RF_POWER_TRIM*/
179*4882a593Smuzhiyun 
180*4882a593Smuzhiyun /* For store initial value of BB register */
181*4882a593Smuzhiyun typedef struct _BB_INIT_REGISTER {
182*4882a593Smuzhiyun 	u16	offset;
183*4882a593Smuzhiyun 	u32	value;
184*4882a593Smuzhiyun 
185*4882a593Smuzhiyun } BB_INIT_REGISTER, *PBB_INIT_REGISTER;
186*4882a593Smuzhiyun 
187*4882a593Smuzhiyun #define PAGE_SIZE_128	128
188*4882a593Smuzhiyun #define PAGE_SIZE_256	256
189*4882a593Smuzhiyun #define PAGE_SIZE_512	512
190*4882a593Smuzhiyun 
191*4882a593Smuzhiyun #define HCI_SUS_ENTER		0
192*4882a593Smuzhiyun #define HCI_SUS_LEAVING		1
193*4882a593Smuzhiyun #define HCI_SUS_LEAVE		2
194*4882a593Smuzhiyun #define HCI_SUS_ENTERING	3
195*4882a593Smuzhiyun #define HCI_SUS_ERR			4
196*4882a593Smuzhiyun 
197*4882a593Smuzhiyun #define EFUSE_FILE_UNUSED 0
198*4882a593Smuzhiyun #define EFUSE_FILE_FAILED 1
199*4882a593Smuzhiyun #define EFUSE_FILE_LOADED 2
200*4882a593Smuzhiyun 
201*4882a593Smuzhiyun #define MACADDR_FILE_UNUSED 0
202*4882a593Smuzhiyun #define MACADDR_FILE_FAILED 1
203*4882a593Smuzhiyun #define MACADDR_FILE_LOADED 2
204*4882a593Smuzhiyun 
205*4882a593Smuzhiyun #define MAX_IQK_INFO_BACKUP_CHNL_NUM	5
206*4882a593Smuzhiyun #define MAX_IQK_INFO_BACKUP_REG_NUM		10
207*4882a593Smuzhiyun 
208*4882a593Smuzhiyun struct kfree_data_t {
209*4882a593Smuzhiyun 	u8 flag;
210*4882a593Smuzhiyun 	s8 bb_gain[BB_GAIN_NUM][RF_PATH_MAX];
211*4882a593Smuzhiyun 
212*4882a593Smuzhiyun #if CONFIG_IEEE80211_BAND_5GHZ
213*4882a593Smuzhiyun 	s8 pa_bias_5g[RF_PATH_MAX];
214*4882a593Smuzhiyun 	s8 pad_bias_5g[RF_PATH_MAX];
215*4882a593Smuzhiyun #endif
216*4882a593Smuzhiyun 	s8 thermal;
217*4882a593Smuzhiyun };
218*4882a593Smuzhiyun 
219*4882a593Smuzhiyun bool kfree_data_is_bb_gain_empty(struct kfree_data_t *data);
220*4882a593Smuzhiyun 
221*4882a593Smuzhiyun struct hal_spec_t {
222*4882a593Smuzhiyun 	char *ic_name;
223*4882a593Smuzhiyun 	u8 macid_num;
224*4882a593Smuzhiyun 
225*4882a593Smuzhiyun 	u8 sec_cam_ent_num;
226*4882a593Smuzhiyun 	u8 sec_cap;
227*4882a593Smuzhiyun 	u8 wow_cap;
228*4882a593Smuzhiyun 	u8 macid_cap;
229*4882a593Smuzhiyun 	u16 macid_txrpt;
230*4882a593Smuzhiyun 	u8 macid_txrpt_pgsz;
231*4882a593Smuzhiyun 
232*4882a593Smuzhiyun 	u8 rfpath_num_2g:4;	/* used for tx power index path */
233*4882a593Smuzhiyun 	u8 rfpath_num_5g:4;	/* used for tx power index path */
234*4882a593Smuzhiyun 	u8 rf_reg_path_num;
235*4882a593Smuzhiyun 	u8 rf_reg_path_avail_num;
236*4882a593Smuzhiyun 	u8 rf_reg_trx_path_bmp; /* [7:4]TX path bmp, [0:3]RX path bmp */
237*4882a593Smuzhiyun 	u8 max_tx_cnt;
238*4882a593Smuzhiyun 
239*4882a593Smuzhiyun 	u8 tx_nss_num:4;
240*4882a593Smuzhiyun 	u8 rx_nss_num:4;
241*4882a593Smuzhiyun 
242*4882a593Smuzhiyun 	u8 band_cap;	/* value of BAND_CAP_XXX */
243*4882a593Smuzhiyun 	u8 bw_cap;		/* value of BW_CAP_XXX */
244*4882a593Smuzhiyun 	u8 port_num;
245*4882a593Smuzhiyun 	u8 proto_cap;	/* value of PROTO_CAP_XXX */
246*4882a593Smuzhiyun 
247*4882a593Smuzhiyun 	u8 txgi_max; /* maximum tx power gain index */
248*4882a593Smuzhiyun 	u8 txgi_pdbm; /* tx power gain index per dBm */
249*4882a593Smuzhiyun 
250*4882a593Smuzhiyun 	u8 wl_func;		/* value of WL_FUNC_XXX */
251*4882a593Smuzhiyun 
252*4882a593Smuzhiyun 	u8 tx_aclt_unit_factor; /* how many 32us */
253*4882a593Smuzhiyun 
254*4882a593Smuzhiyun 	u8 rx_tsf_filter:1;
255*4882a593Smuzhiyun 
256*4882a593Smuzhiyun 	u8 pg_txpwr_saddr; /* starting address of PG tx power info */
257*4882a593Smuzhiyun 	u8 pg_txgi_diff_factor; /* PG tx power gain index diff to tx power gain index */
258*4882a593Smuzhiyun 
259*4882a593Smuzhiyun 	u8 hci_type;	/* value of HCI Type */
260*4882a593Smuzhiyun };
261*4882a593Smuzhiyun 
262*4882a593Smuzhiyun #define HAL_SPEC_CHK_RF_PATH_2G(_spec, _path) ((_spec)->rfpath_num_2g > (_path))
263*4882a593Smuzhiyun #define HAL_SPEC_CHK_RF_PATH_5G(_spec, _path) ((_spec)->rfpath_num_5g > (_path))
264*4882a593Smuzhiyun #define HAL_SPEC_CHK_RF_PATH(_spec, _band, _path) ( \
265*4882a593Smuzhiyun 	_band == BAND_ON_2_4G ? HAL_SPEC_CHK_RF_PATH_2G(_spec, _path) : \
266*4882a593Smuzhiyun 	_band == BAND_ON_5G ? HAL_SPEC_CHK_RF_PATH_5G(_spec, _path) : 0)
267*4882a593Smuzhiyun 
268*4882a593Smuzhiyun #ifdef CONFIG_PHY_CAPABILITY_QUERY
269*4882a593Smuzhiyun struct phy_spec_t {
270*4882a593Smuzhiyun 	u32 trx_cap;
271*4882a593Smuzhiyun 	u32 stbc_cap;
272*4882a593Smuzhiyun 	u32 ldpc_cap;
273*4882a593Smuzhiyun 	u32 txbf_param;
274*4882a593Smuzhiyun 	u32 txbf_cap;
275*4882a593Smuzhiyun };
276*4882a593Smuzhiyun #endif
277*4882a593Smuzhiyun struct hal_iqk_reg_backup {
278*4882a593Smuzhiyun 	u8 central_chnl;
279*4882a593Smuzhiyun 	u8 bw_mode;
280*4882a593Smuzhiyun 	u32 reg_backup[MAX_RF_PATH][MAX_IQK_INFO_BACKUP_REG_NUM];
281*4882a593Smuzhiyun };
282*4882a593Smuzhiyun 
283*4882a593Smuzhiyun 
284*4882a593Smuzhiyun typedef struct hal_p2p_ps_para {
285*4882a593Smuzhiyun 	/*DW0*/
286*4882a593Smuzhiyun 	u8  offload_en:1;
287*4882a593Smuzhiyun 	u8  role:1;
288*4882a593Smuzhiyun 	u8  ctwindow_en:1;
289*4882a593Smuzhiyun 	u8  noa_en:1;
290*4882a593Smuzhiyun 	u8  noa_sel:1;
291*4882a593Smuzhiyun 	u8  all_sta_sleep:1;
292*4882a593Smuzhiyun 	u8  discovery:1;
293*4882a593Smuzhiyun 	u8  disable_close_rf:1;
294*4882a593Smuzhiyun 	u8  p2p_port_id;
295*4882a593Smuzhiyun 	u8  p2p_group;
296*4882a593Smuzhiyun 	u8  p2p_macid;
297*4882a593Smuzhiyun 
298*4882a593Smuzhiyun 	/*DW1*/
299*4882a593Smuzhiyun 	u8 ctwindow_length;
300*4882a593Smuzhiyun 	u8 rsvd3;
301*4882a593Smuzhiyun 	u8 rsvd4;
302*4882a593Smuzhiyun 	u8 rsvd5;
303*4882a593Smuzhiyun 
304*4882a593Smuzhiyun 	/*DW2*/
305*4882a593Smuzhiyun 	u32 noa_duration_para;
306*4882a593Smuzhiyun 
307*4882a593Smuzhiyun 	/*DW3*/
308*4882a593Smuzhiyun 	u32 noa_interval_para;
309*4882a593Smuzhiyun 
310*4882a593Smuzhiyun 	/*DW4*/
311*4882a593Smuzhiyun 	u32 noa_start_time_para;
312*4882a593Smuzhiyun 
313*4882a593Smuzhiyun 	/*DW5*/
314*4882a593Smuzhiyun 	u32 noa_count_para;
315*4882a593Smuzhiyun } HAL_P2P_PS_PARA, *PHAL_P2P_PS_PARA;
316*4882a593Smuzhiyun 
317*4882a593Smuzhiyun #define TXPWR_LMT_RS_CCK	0
318*4882a593Smuzhiyun #define TXPWR_LMT_RS_OFDM	1
319*4882a593Smuzhiyun #define TXPWR_LMT_RS_HT		2
320*4882a593Smuzhiyun #define TXPWR_LMT_RS_VHT	3
321*4882a593Smuzhiyun #define TXPWR_LMT_RS_NUM	4
322*4882a593Smuzhiyun 
323*4882a593Smuzhiyun #define TXPWR_LMT_RS_NUM_2G	4 /* CCK, OFDM, HT, VHT */
324*4882a593Smuzhiyun #define TXPWR_LMT_RS_NUM_5G	3 /* OFDM, HT, VHT */
325*4882a593Smuzhiyun 
326*4882a593Smuzhiyun #if CONFIG_TXPWR_LIMIT
327*4882a593Smuzhiyun extern const char *const _txpwr_lmt_rs_str[];
328*4882a593Smuzhiyun #define txpwr_lmt_rs_str(rs) (((rs) >= TXPWR_LMT_RS_NUM) ? _txpwr_lmt_rs_str[TXPWR_LMT_RS_NUM] : _txpwr_lmt_rs_str[(rs)])
329*4882a593Smuzhiyun 
330*4882a593Smuzhiyun struct txpwr_lmt_ent {
331*4882a593Smuzhiyun 	_list list;
332*4882a593Smuzhiyun 
333*4882a593Smuzhiyun 	s8 lmt_2g[MAX_2_4G_BANDWIDTH_NUM]
334*4882a593Smuzhiyun 		[TXPWR_LMT_RS_NUM_2G]
335*4882a593Smuzhiyun 		[CENTER_CH_2G_NUM]
336*4882a593Smuzhiyun 		[MAX_TX_COUNT];
337*4882a593Smuzhiyun 
338*4882a593Smuzhiyun #if CONFIG_IEEE80211_BAND_5GHZ
339*4882a593Smuzhiyun 	s8 lmt_5g[MAX_5G_BANDWIDTH_NUM]
340*4882a593Smuzhiyun 		[TXPWR_LMT_RS_NUM_5G]
341*4882a593Smuzhiyun 		[CENTER_CH_5G_ALL_NUM]
342*4882a593Smuzhiyun 		[MAX_TX_COUNT];
343*4882a593Smuzhiyun #endif
344*4882a593Smuzhiyun 
345*4882a593Smuzhiyun 	char name[0];
346*4882a593Smuzhiyun };
347*4882a593Smuzhiyun #endif /* CONFIG_TXPWR_LIMIT */
348*4882a593Smuzhiyun 
349*4882a593Smuzhiyun typedef struct hal_com_data {
350*4882a593Smuzhiyun 	HAL_VERSION			version_id;
351*4882a593Smuzhiyun 	RT_MULTI_FUNC		MultiFunc; /* For multi-function consideration. */
352*4882a593Smuzhiyun 	RT_POLARITY_CTL		PolarityCtl; /* For Wifi PDn Polarity control. */
353*4882a593Smuzhiyun 	RT_REGULATOR_MODE	RegulatorMode; /* switching regulator or LDO */
354*4882a593Smuzhiyun 	u8	hw_init_completed;
355*4882a593Smuzhiyun 	/****** FW related ******/
356*4882a593Smuzhiyun 	u32 firmware_size;
357*4882a593Smuzhiyun 	u16 firmware_version;
358*4882a593Smuzhiyun 	u16	FirmwareVersionRev;
359*4882a593Smuzhiyun 	u16 firmware_sub_version;
360*4882a593Smuzhiyun 	u16	FirmwareSignature;
361*4882a593Smuzhiyun 	u8	RegFWOffload;
362*4882a593Smuzhiyun 	u8	bFWReady;
363*4882a593Smuzhiyun 	u8	bBTFWReady;
364*4882a593Smuzhiyun 	u8	fw_ractrl;
365*4882a593Smuzhiyun 	u8	LastHMEBoxNum;	/* H2C - for host message to fw */
366*4882a593Smuzhiyun #ifdef CONFIG_LPS_1T1R
367*4882a593Smuzhiyun 	u8 lps_1t1r;
368*4882a593Smuzhiyun #endif
369*4882a593Smuzhiyun 
370*4882a593Smuzhiyun 	/****** current WIFI_PHY values ******/
371*4882a593Smuzhiyun 	WIRELESS_MODE	CurrentWirelessMode;
372*4882a593Smuzhiyun 	enum channel_width current_channel_bw;
373*4882a593Smuzhiyun 	BAND_TYPE		current_band_type;	/* 0:2.4G, 1:5G */
374*4882a593Smuzhiyun 	u8				current_channel;
375*4882a593Smuzhiyun 	u8				cch_20;
376*4882a593Smuzhiyun 	u8				cch_40;
377*4882a593Smuzhiyun 	u8				cch_80;
378*4882a593Smuzhiyun 	u8				CurrentCenterFrequencyIndex1;
379*4882a593Smuzhiyun 	u8				nCur40MhzPrimeSC;	/* Control channel sub-carrier */
380*4882a593Smuzhiyun 	u8				nCur80MhzPrimeSC;   /* used for primary 40MHz of 80MHz mode */
381*4882a593Smuzhiyun 	BOOLEAN		bSwChnlAndSetBWInProgress;
382*4882a593Smuzhiyun 	u8				bDisableSWChannelPlan; /* flag of disable software change channel plan	 */
383*4882a593Smuzhiyun 	u16				BasicRateSet;
384*4882a593Smuzhiyun 	u32				ReceiveConfig;
385*4882a593Smuzhiyun #ifdef CONFIG_WIFI_MONITOR
386*4882a593Smuzhiyun 	struct mon_reg_backup		mon_backup; /* used for switching back from monitor mode */
387*4882a593Smuzhiyun #endif /* CONFIG_WIFI_MONITOR */
388*4882a593Smuzhiyun 	u8				rx_tsf_addr_filter_config; /* for 8822B/8821C USE */
389*4882a593Smuzhiyun 	BOOLEAN			bSwChnl;
390*4882a593Smuzhiyun 	BOOLEAN			bSetChnlBW;
391*4882a593Smuzhiyun 	BOOLEAN			bSWToBW40M;
392*4882a593Smuzhiyun 	BOOLEAN			bSWToBW80M;
393*4882a593Smuzhiyun 	BOOLEAN			bChnlBWInitialized;
394*4882a593Smuzhiyun 
395*4882a593Smuzhiyun #ifdef CONFIG_RTW_ACS
396*4882a593Smuzhiyun 	struct auto_chan_sel acs;
397*4882a593Smuzhiyun #endif
398*4882a593Smuzhiyun #ifdef CONFIG_BCN_RECOVERY
399*4882a593Smuzhiyun 	u8 issue_bcn_fail;
400*4882a593Smuzhiyun #endif /*CONFIG_BCN_RECOVERY*/
401*4882a593Smuzhiyun 
402*4882a593Smuzhiyun 	/****** rf_ctrl *****/
403*4882a593Smuzhiyun 	u8	rf_chip;
404*4882a593Smuzhiyun 
405*4882a593Smuzhiyun 	u8 trx_path_bmp; /* [7:4]TX path bmp, [0:3]RX path bmp */
406*4882a593Smuzhiyun 	u8	rf_type;	/*enum rf_type , is RF_PATH - GET_HAL_RFPATH*/
407*4882a593Smuzhiyun 	u8	NumTotalRFPath; /*GET_HAL_RFPATH_NUM*/
408*4882a593Smuzhiyun 	u8 max_tx_cnt;
409*4882a593Smuzhiyun 	u8	tx_nss; /*tx Spatial Streams - GET_HAL_TX_NSS*/
410*4882a593Smuzhiyun 	u8	rx_nss; /*rx Spatial Streams - GET_HAL_RX_NSS*/
411*4882a593Smuzhiyun 	u8 txpath_cap_num_nss[4]; /* capable path num for NSS TX, [0] for 1SS, [3] for 4SS */
412*4882a593Smuzhiyun 
413*4882a593Smuzhiyun 	u8	PackageType;
414*4882a593Smuzhiyun 	u8	antenna_test;
415*4882a593Smuzhiyun 
416*4882a593Smuzhiyun 	/* runtime TRX path setting */
417*4882a593Smuzhiyun 	enum bb_path txpath; /* TX path bmp */
418*4882a593Smuzhiyun 	enum bb_path rxpath; /* RX path bmp */
419*4882a593Smuzhiyun 	enum bb_path txpath_nss[4]; /* path bmp for NSS TX, [0] for 1SS, [3] for 4SS */
420*4882a593Smuzhiyun 	u8 txpath_num_nss[4]; /* path num for NSS TX, [0] for 1SS, [3] for 4SS */
421*4882a593Smuzhiyun 
422*4882a593Smuzhiyun 	/****** Debug ******/
423*4882a593Smuzhiyun 	u16	ForcedDataRate;	/* Force Data Rate. 0: Auto, 0x02: 1M ~ 0x6C: 54M. */
424*4882a593Smuzhiyun 	u8	bDumpRxPkt;
425*4882a593Smuzhiyun 	u8	bDumpTxPkt;
426*4882a593Smuzhiyun 	u8	dis_turboedca; /* 1: disable turboedca,
427*4882a593Smuzhiyun 						  2: disable turboedca and setting EDCA parameter based on the input parameter*/
428*4882a593Smuzhiyun 	u32 edca_param_mode;
429*4882a593Smuzhiyun 
430*4882a593Smuzhiyun 	/****** EEPROM setting.******/
431*4882a593Smuzhiyun 	u8	bautoload_fail_flag;
432*4882a593Smuzhiyun 	u8	efuse_file_status;
433*4882a593Smuzhiyun 	u8	macaddr_file_status;
434*4882a593Smuzhiyun 	u8	EepromOrEfuse;
435*4882a593Smuzhiyun 	u8	efuse_eeprom_data[EEPROM_MAX_SIZE]; /*92C:256bytes, 88E:512bytes, we use union set (512bytes)*/
436*4882a593Smuzhiyun 	u8	InterfaceSel; /* board type kept in eFuse */
437*4882a593Smuzhiyun 	u16	CustomerID;
438*4882a593Smuzhiyun 
439*4882a593Smuzhiyun 	u16	EEPROMVID;
440*4882a593Smuzhiyun 	u16	EEPROMSVID;
441*4882a593Smuzhiyun #ifdef CONFIG_USB_HCI
442*4882a593Smuzhiyun 	u8	EEPROMUsbSwitch;
443*4882a593Smuzhiyun 	u16	EEPROMPID;
444*4882a593Smuzhiyun 	u16	EEPROMSDID;
445*4882a593Smuzhiyun #endif
446*4882a593Smuzhiyun #ifdef CONFIG_PCI_HCI
447*4882a593Smuzhiyun 	u16	EEPROMDID;
448*4882a593Smuzhiyun 	u16	EEPROMSMID;
449*4882a593Smuzhiyun #endif
450*4882a593Smuzhiyun 
451*4882a593Smuzhiyun 	u8	EEPROMCustomerID;
452*4882a593Smuzhiyun 	u8	EEPROMSubCustomerID;
453*4882a593Smuzhiyun 	u8	EEPROMVersion;
454*4882a593Smuzhiyun 	u8	EEPROMRegulatory;
455*4882a593Smuzhiyun 	u8	eeprom_thermal_meter;
456*4882a593Smuzhiyun 	u8	EEPROMBluetoothCoexist;
457*4882a593Smuzhiyun 	u8	EEPROMBluetoothType;
458*4882a593Smuzhiyun 	u8	EEPROMBluetoothAntNum;
459*4882a593Smuzhiyun 	u8	EEPROMBluetoothAntIsolation;
460*4882a593Smuzhiyun 	u8	EEPROMBluetoothRadioShared;
461*4882a593Smuzhiyun 	u8	EEPROMMACAddr[ETH_ALEN];
462*4882a593Smuzhiyun 
463*4882a593Smuzhiyun 	u8 eeprom_trx_path_bmp; /* [7:4]TX path bmp, [0:3]RX path bmp. 0x00:not specified */
464*4882a593Smuzhiyun 	u8 eeprom_max_tx_cnt; /* 0: not specified */
465*4882a593Smuzhiyun 
466*4882a593Smuzhiyun 	u8	tx_bbswing_24G;
467*4882a593Smuzhiyun 	u8	tx_bbswing_5G;
468*4882a593Smuzhiyun 	u8	efuse0x3d7;	/* efuse[0x3D7] */
469*4882a593Smuzhiyun 	u8	efuse0x3d8;	/* efuse[0x3D8] */
470*4882a593Smuzhiyun 
471*4882a593Smuzhiyun #ifdef CONFIG_RF_POWER_TRIM
472*4882a593Smuzhiyun 	u8	EEPROMRFGainOffset;
473*4882a593Smuzhiyun 	u8	EEPROMRFGainVal;
474*4882a593Smuzhiyun 	struct kfree_data_t kfree_data;
475*4882a593Smuzhiyun #endif /*CONFIG_RF_POWER_TRIM*/
476*4882a593Smuzhiyun 
477*4882a593Smuzhiyun #ifdef CONFIG_RTL8814A
478*4882a593Smuzhiyun 	u32	BackUp_BB_REG_4_2nd_CCA[3];
479*4882a593Smuzhiyun #endif
480*4882a593Smuzhiyun #if defined(CONFIG_RTL8723B) || defined(CONFIG_RTL8703B) || \
481*4882a593Smuzhiyun 	defined(CONFIG_RTL8723D) || \
482*4882a593Smuzhiyun 	defined(CONFIG_RTL8192F)
483*4882a593Smuzhiyun 
484*4882a593Smuzhiyun 	u8	adjuseVoltageVal;
485*4882a593Smuzhiyun 	u8	need_restore;
486*4882a593Smuzhiyun #endif
487*4882a593Smuzhiyun 	u8	EfuseUsedPercentage;
488*4882a593Smuzhiyun 	u16	EfuseUsedBytes;
489*4882a593Smuzhiyun 	/*u8		EfuseMap[2][HWSET_MAX_SIZE_JAGUAR];*/
490*4882a593Smuzhiyun 	EFUSE_HAL	EfuseHal;
491*4882a593Smuzhiyun 
492*4882a593Smuzhiyun 	u8 txpwr_pg_mode; /* enum txpwr_pg_mode */
493*4882a593Smuzhiyun 
494*4882a593Smuzhiyun 	/*---------------------------------------------------------------------------------*/
495*4882a593Smuzhiyun #ifdef CONFIG_TXPWR_PG_WITH_PWR_IDX
496*4882a593Smuzhiyun 	/* 2.4G TX power info for target TX power*/
497*4882a593Smuzhiyun 	u8	Index24G_CCK_Base[MAX_RF_PATH][CENTER_CH_2G_NUM];
498*4882a593Smuzhiyun 	u8	Index24G_BW40_Base[MAX_RF_PATH][CENTER_CH_2G_NUM];
499*4882a593Smuzhiyun 	s8	CCK_24G_Diff[MAX_RF_PATH][MAX_TX_COUNT];
500*4882a593Smuzhiyun 	s8	OFDM_24G_Diff[MAX_RF_PATH][MAX_TX_COUNT];
501*4882a593Smuzhiyun 	s8	BW20_24G_Diff[MAX_RF_PATH][MAX_TX_COUNT];
502*4882a593Smuzhiyun 	s8	BW40_24G_Diff[MAX_RF_PATH][MAX_TX_COUNT];
503*4882a593Smuzhiyun 
504*4882a593Smuzhiyun 	/* 5G TX power info for target TX power*/
505*4882a593Smuzhiyun #if CONFIG_IEEE80211_BAND_5GHZ
506*4882a593Smuzhiyun 	u8	Index5G_BW40_Base[MAX_RF_PATH][CENTER_CH_5G_ALL_NUM];
507*4882a593Smuzhiyun 	u8	Index5G_BW80_Base[MAX_RF_PATH][CENTER_CH_5G_80M_NUM];
508*4882a593Smuzhiyun 	s8	OFDM_5G_Diff[MAX_RF_PATH][MAX_TX_COUNT];
509*4882a593Smuzhiyun 	s8	BW20_5G_Diff[MAX_RF_PATH][MAX_TX_COUNT];
510*4882a593Smuzhiyun 	s8	BW40_5G_Diff[MAX_RF_PATH][MAX_TX_COUNT];
511*4882a593Smuzhiyun 	s8	BW80_5G_Diff[MAX_RF_PATH][MAX_TX_COUNT];
512*4882a593Smuzhiyun #endif
513*4882a593Smuzhiyun #endif /* CONFIG_TXPWR_PG_WITH_PWR_IDX */
514*4882a593Smuzhiyun 
515*4882a593Smuzhiyun 	u8 txpwr_by_rate_undefined_band_path[TX_PWR_BY_RATE_NUM_BAND]
516*4882a593Smuzhiyun 		[TX_PWR_BY_RATE_NUM_RF];
517*4882a593Smuzhiyun 
518*4882a593Smuzhiyun 	s8	TxPwrByRate[TX_PWR_BY_RATE_NUM_BAND]
519*4882a593Smuzhiyun 		[TX_PWR_BY_RATE_NUM_RF]
520*4882a593Smuzhiyun 		[TX_PWR_BY_RATE_NUM_RATE];
521*4882a593Smuzhiyun 
522*4882a593Smuzhiyun 	/* Store the target power for each rate section and rf path */
523*4882a593Smuzhiyun 	u8	target_txpwr_2g[TX_PWR_BY_RATE_NUM_RF]
524*4882a593Smuzhiyun 		[NUM_OF_TARGET_TXPWR_2G];
525*4882a593Smuzhiyun 	u8	target_txpwr_5g[TX_PWR_BY_RATE_NUM_RF]
526*4882a593Smuzhiyun 		[NUM_OF_TARGET_TXPWR_5G];
527*4882a593Smuzhiyun 
528*4882a593Smuzhiyun 	bool set_entire_txpwr;
529*4882a593Smuzhiyun 
530*4882a593Smuzhiyun #if defined(CONFIG_RTL8821C) || defined(CONFIG_RTL8822B) || defined(CONFIG_RTL8822C) || defined(CONFIG_RTL8814B) \
531*4882a593Smuzhiyun     || defined(CONFIG_RTL8723F)
532*4882a593Smuzhiyun 	u32 txagc_set_buf;
533*4882a593Smuzhiyun #endif
534*4882a593Smuzhiyun 
535*4882a593Smuzhiyun #ifdef CONFIG_FW_OFFLOAD_SET_TXPWR_IDX
536*4882a593Smuzhiyun 	u8 txpwr_idx_offload_buf[3]; /* for CCK, OFDM, HT1SS */
537*4882a593Smuzhiyun 	struct submit_ctx txpwr_idx_offload_sctx;
538*4882a593Smuzhiyun #endif
539*4882a593Smuzhiyun 
540*4882a593Smuzhiyun 	u8	txpwr_by_rate_loaded:1;
541*4882a593Smuzhiyun 	u8	txpwr_by_rate_from_file:1;
542*4882a593Smuzhiyun 	u8	txpwr_limit_loaded:1;
543*4882a593Smuzhiyun 	u8	txpwr_limit_from_file:1;
544*4882a593Smuzhiyun 
545*4882a593Smuzhiyun 	/* Read/write are allow for following hardware information variables	 */
546*4882a593Smuzhiyun 	u8	crystal_cap;
547*4882a593Smuzhiyun 
548*4882a593Smuzhiyun 	u8	PAType_2G;
549*4882a593Smuzhiyun 	u8	PAType_5G;
550*4882a593Smuzhiyun 	u8	LNAType_2G;
551*4882a593Smuzhiyun 	u8	LNAType_5G;
552*4882a593Smuzhiyun 	u8	ExternalPA_2G;
553*4882a593Smuzhiyun 	u8	ExternalLNA_2G;
554*4882a593Smuzhiyun 	u8	external_pa_5g;
555*4882a593Smuzhiyun 	u8	external_lna_5g;
556*4882a593Smuzhiyun 	u16	TypeGLNA;
557*4882a593Smuzhiyun 	u16	TypeGPA;
558*4882a593Smuzhiyun 	u16	TypeALNA;
559*4882a593Smuzhiyun 	u16	TypeAPA;
560*4882a593Smuzhiyun 	u16	rfe_type;
561*4882a593Smuzhiyun 
562*4882a593Smuzhiyun 	u8	bLedOpenDrain; /* Support Open-drain arrangement for controlling the LED. Added by Roger, 2009.10.16. */
563*4882a593Smuzhiyun 	u32	ac_param_be; /* Original parameter for BE, use for EDCA turbo.	*/
564*4882a593Smuzhiyun 	u8	is_turbo_edca;
565*4882a593Smuzhiyun 	u8	prv_traffic_idx;
566*4882a593Smuzhiyun 	BB_REGISTER_DEFINITION_T	PHYRegDef[MAX_RF_PATH];	/* Radio A/B/C/D */
567*4882a593Smuzhiyun 
568*4882a593Smuzhiyun 	u32	RfRegChnlVal[MAX_RF_PATH];
569*4882a593Smuzhiyun 
570*4882a593Smuzhiyun 	/* RDG enable */
571*4882a593Smuzhiyun 	BOOLEAN	 bRDGEnable;
572*4882a593Smuzhiyun 
573*4882a593Smuzhiyun 	#if defined (CONFIG_RTL8812A) || defined(CONFIG_RTL8821A)
574*4882a593Smuzhiyun 	u32 RegRRSR;
575*4882a593Smuzhiyun 	#endif
576*4882a593Smuzhiyun 
577*4882a593Smuzhiyun 	/****** antenna diversity ******/
578*4882a593Smuzhiyun 	u8	AntDivCfg;
579*4882a593Smuzhiyun 	u8	with_extenal_ant_switch;
580*4882a593Smuzhiyun 	u8	b_fix_tx_ant;
581*4882a593Smuzhiyun 	u8	AntDetection;
582*4882a593Smuzhiyun 	u8	TRxAntDivType;
583*4882a593Smuzhiyun 	u8	ant_path; /* for 8723B s0/s1 selection	 */
584*4882a593Smuzhiyun 	u32	antenna_tx_path;					/* Antenna path Tx */
585*4882a593Smuzhiyun 	u32	AntennaRxPath;					/* Antenna path Rx */
586*4882a593Smuzhiyun 	u8 sw_antdiv_bl_state;
587*4882a593Smuzhiyun 
588*4882a593Smuzhiyun 	/******** PHY DM & DM Section **********/
589*4882a593Smuzhiyun 	_lock		IQKSpinLock;
590*4882a593Smuzhiyun 	u8			INIDATA_RATE[MACID_NUM_SW_LIMIT];
591*4882a593Smuzhiyun 
592*4882a593Smuzhiyun 	struct dm_struct	 odmpriv;
593*4882a593Smuzhiyun 	u64			bk_rf_ability;
594*4882a593Smuzhiyun 	u8			bIQKInitialized;
595*4882a593Smuzhiyun 	u8			bNeedIQK;
596*4882a593Smuzhiyun 	u8			neediqk_24g;
597*4882a593Smuzhiyun 	u8			IQK_MP_Switch;
598*4882a593Smuzhiyun 	u8			bScanInProcess;
599*4882a593Smuzhiyun 	u8			phydm_init_result; /*BB and RF para match or not*/
600*4882a593Smuzhiyun 	/******** PHY DM & DM Section **********/
601*4882a593Smuzhiyun 
602*4882a593Smuzhiyun 
603*4882a593Smuzhiyun 
604*4882a593Smuzhiyun 	/* 2010/08/09 MH Add CU power down mode. */
605*4882a593Smuzhiyun 	BOOLEAN		pwrdown;
606*4882a593Smuzhiyun 
607*4882a593Smuzhiyun #ifdef CONFIG_P2P
608*4882a593Smuzhiyun #ifdef CONFIG_P2P_PS_NOA_USE_MACID_SLEEP
609*4882a593Smuzhiyun 	u16 p2p_ps_offload;
610*4882a593Smuzhiyun #else
611*4882a593Smuzhiyun 	u8	p2p_ps_offload;
612*4882a593Smuzhiyun #endif
613*4882a593Smuzhiyun #endif
614*4882a593Smuzhiyun 	/* Auto FSM to Turn On, include clock, isolation, power control for MAC only */
615*4882a593Smuzhiyun 	u8	bMacPwrCtrlOn;
616*4882a593Smuzhiyun 	u8 hci_sus_state;
617*4882a593Smuzhiyun 
618*4882a593Smuzhiyun 	u8	RegIQKFWOffload;
619*4882a593Smuzhiyun 	struct submit_ctx	iqk_sctx;
620*4882a593Smuzhiyun 	u8 ch_switch_offload;
621*4882a593Smuzhiyun 	struct submit_ctx chsw_sctx;
622*4882a593Smuzhiyun 
623*4882a593Smuzhiyun 	RT_AMPDU_BRUST		AMPDUBurstMode; /* 92C maybe not use, but for compile successfully */
624*4882a593Smuzhiyun 
625*4882a593Smuzhiyun 	u8	OutEpQueueSel;
626*4882a593Smuzhiyun 	u8	OutEpNumber;
627*4882a593Smuzhiyun 
628*4882a593Smuzhiyun #ifdef RTW_RX_AGGREGATION
629*4882a593Smuzhiyun 	RX_AGG_MODE rxagg_mode;
630*4882a593Smuzhiyun 
631*4882a593Smuzhiyun 	/* For RX Aggregation DMA Mode */
632*4882a593Smuzhiyun 	u8 rxagg_dma_size;
633*4882a593Smuzhiyun 	u8 rxagg_dma_timeout;
634*4882a593Smuzhiyun #endif /* RTW_RX_AGGREGATION */
635*4882a593Smuzhiyun 
636*4882a593Smuzhiyun 	bool intf_start;
637*4882a593Smuzhiyun 
638*4882a593Smuzhiyun #if defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
639*4882a593Smuzhiyun 	/*  */
640*4882a593Smuzhiyun 	/* For SDIO Interface HAL related */
641*4882a593Smuzhiyun 	/*  */
642*4882a593Smuzhiyun 
643*4882a593Smuzhiyun 	/*  */
644*4882a593Smuzhiyun 	/* SDIO ISR Related */
645*4882a593Smuzhiyun 	/*
646*4882a593Smuzhiyun 	*	u32			IntrMask[1];
647*4882a593Smuzhiyun 	*	u32			IntrMaskToSet[1];
648*4882a593Smuzhiyun 	*	LOG_INTERRUPT		InterruptLog; */
649*4882a593Smuzhiyun 	u32			sdio_himr;
650*4882a593Smuzhiyun 	u32			sdio_hisr;
651*4882a593Smuzhiyun #ifndef RTW_HALMAC
652*4882a593Smuzhiyun 	/*  */
653*4882a593Smuzhiyun 	/* SDIO Tx FIFO related. */
654*4882a593Smuzhiyun 	/*  */
655*4882a593Smuzhiyun 	/* HIQ, MID, LOW, PUB free pages; padapter->xmitpriv.free_txpg */
656*4882a593Smuzhiyun #ifdef CONFIG_RTL8192F
657*4882a593Smuzhiyun 	u16			SdioTxFIFOFreePage[SDIO_TX_FREE_PG_QUEUE];
658*4882a593Smuzhiyun #else
659*4882a593Smuzhiyun 	u8			SdioTxFIFOFreePage[SDIO_TX_FREE_PG_QUEUE];
660*4882a593Smuzhiyun #endif/*CONFIG_RTL8192F*/
661*4882a593Smuzhiyun #ifdef CONFIG_SDIO_TX_ENABLE_AVAL_INT
662*4882a593Smuzhiyun 	u8			sdio_avail_int_en_q;
663*4882a593Smuzhiyun #endif
664*4882a593Smuzhiyun 	_lock		SdioTxFIFOFreePageLock;
665*4882a593Smuzhiyun 	u8			SdioTxOQTMaxFreeSpace;
666*4882a593Smuzhiyun 	u8			SdioTxOQTFreeSpace;
667*4882a593Smuzhiyun #else /* RTW_HALMAC */
668*4882a593Smuzhiyun 	u16			SdioTxOQTFreeSpace;
669*4882a593Smuzhiyun #endif /* RTW_HALMAC */
670*4882a593Smuzhiyun 
671*4882a593Smuzhiyun 	/*  */
672*4882a593Smuzhiyun 	/* SDIO Rx FIFO related. */
673*4882a593Smuzhiyun 	/*  */
674*4882a593Smuzhiyun 	u8			SdioRxFIFOCnt;
675*4882a593Smuzhiyun #if defined (CONFIG_RTL8822C) || defined (CONFIG_RTL8192F)
676*4882a593Smuzhiyun 	u32			SdioRxFIFOSize;
677*4882a593Smuzhiyun #else
678*4882a593Smuzhiyun 	u16			SdioRxFIFOSize;
679*4882a593Smuzhiyun #endif
680*4882a593Smuzhiyun 
681*4882a593Smuzhiyun #ifndef RTW_HALMAC
682*4882a593Smuzhiyun 	u32			sdio_tx_max_len[SDIO_MAX_TX_QUEUE];/* H, N, L, used for sdio tx aggregation max length per queue */
683*4882a593Smuzhiyun #else
684*4882a593Smuzhiyun #ifdef CONFIG_RTL8821C
685*4882a593Smuzhiyun 	u16			tx_high_page;
686*4882a593Smuzhiyun 	u16			tx_low_page;
687*4882a593Smuzhiyun 	u16			tx_normal_page;
688*4882a593Smuzhiyun 	u16			tx_extra_page;
689*4882a593Smuzhiyun 	u16			tx_pub_page;
690*4882a593Smuzhiyun 	u8			max_oqt_size;
691*4882a593Smuzhiyun 	#ifdef XMIT_BUF_SIZE
692*4882a593Smuzhiyun 	u32			max_xmit_size_vovi;
693*4882a593Smuzhiyun 	u32			max_xmit_size_bebk;
694*4882a593Smuzhiyun 	#endif /*XMIT_BUF_SIZE*/
695*4882a593Smuzhiyun 	u16			max_xmit_page;
696*4882a593Smuzhiyun 	u16			max_xmit_page_vo;
697*4882a593Smuzhiyun 	u16			max_xmit_page_vi;
698*4882a593Smuzhiyun 	u16			max_xmit_page_be;
699*4882a593Smuzhiyun 	u16			max_xmit_page_bk;
700*4882a593Smuzhiyun 
701*4882a593Smuzhiyun #endif /*#ifdef CONFIG_RTL8821C*/
702*4882a593Smuzhiyun #endif /* !RTW_HALMAC */
703*4882a593Smuzhiyun #endif /* CONFIG_SDIO_HCI */
704*4882a593Smuzhiyun 
705*4882a593Smuzhiyun #ifdef CONFIG_USB_HCI
706*4882a593Smuzhiyun 
707*4882a593Smuzhiyun 	/* 2010/12/10 MH Add for USB aggreation mode dynamic shceme. */
708*4882a593Smuzhiyun 	BOOLEAN		UsbRxHighSpeedMode;
709*4882a593Smuzhiyun 	BOOLEAN		UsbTxVeryHighSpeedMode;
710*4882a593Smuzhiyun 	u32			UsbBulkOutSize;
711*4882a593Smuzhiyun 	BOOLEAN		bSupportUSB3;
712*4882a593Smuzhiyun 	u8			usb_intf_start;
713*4882a593Smuzhiyun 
714*4882a593Smuzhiyun 	/* Interrupt relatd register information. */
715*4882a593Smuzhiyun 	u32			IntArray[3];/* HISR0,HISR1,HSISR */
716*4882a593Smuzhiyun 	u32			IntrMask[3];
717*4882a593Smuzhiyun #ifdef CONFIG_USB_TX_AGGREGATION
718*4882a593Smuzhiyun 	u8			UsbTxAggMode;
719*4882a593Smuzhiyun 	u8			UsbTxAggDescNum;
720*4882a593Smuzhiyun #endif /* CONFIG_USB_TX_AGGREGATION */
721*4882a593Smuzhiyun 
722*4882a593Smuzhiyun #ifdef CONFIG_USB_RX_AGGREGATION
723*4882a593Smuzhiyun 	u16			HwRxPageSize;				/* Hardware setting */
724*4882a593Smuzhiyun 
725*4882a593Smuzhiyun 	/* For RX Aggregation USB Mode */
726*4882a593Smuzhiyun 	u8			rxagg_usb_size;
727*4882a593Smuzhiyun 	u8			rxagg_usb_timeout;
728*4882a593Smuzhiyun #endif/* CONFIG_USB_RX_AGGREGATION */
729*4882a593Smuzhiyun #endif /* CONFIG_USB_HCI */
730*4882a593Smuzhiyun 
731*4882a593Smuzhiyun 
732*4882a593Smuzhiyun #ifdef CONFIG_PCI_HCI
733*4882a593Smuzhiyun 	/*  */
734*4882a593Smuzhiyun 	/* EEPROM setting. */
735*4882a593Smuzhiyun 	/*  */
736*4882a593Smuzhiyun 	u32			TransmitConfig;
737*4882a593Smuzhiyun 	u32			IntrMaskToSet[2];
738*4882a593Smuzhiyun 	u32			IntArray[4];
739*4882a593Smuzhiyun 	u32			IntrMask[4];
740*4882a593Smuzhiyun 	u32			SysIntArray[1];
741*4882a593Smuzhiyun 	u32			SysIntrMask[1];
742*4882a593Smuzhiyun 	u32			IntrMaskReg[2];
743*4882a593Smuzhiyun 	u32			IntrMaskDefault[4];
744*4882a593Smuzhiyun 
745*4882a593Smuzhiyun 	u32			pci_backdoor_ctrl;
746*4882a593Smuzhiyun 
747*4882a593Smuzhiyun 	u8			bDefaultAntenna;
748*4882a593Smuzhiyun 
749*4882a593Smuzhiyun 	u8			bInterruptMigration;
750*4882a593Smuzhiyun 	u8			bDisableTxInt;
751*4882a593Smuzhiyun 
752*4882a593Smuzhiyun 	u16			RxTag;
753*4882a593Smuzhiyun #endif /* CONFIG_PCI_HCI */
754*4882a593Smuzhiyun 
755*4882a593Smuzhiyun 
756*4882a593Smuzhiyun #ifdef DBG_CONFIG_ERROR_DETECT
757*4882a593Smuzhiyun 	struct sreset_priv srestpriv;
758*4882a593Smuzhiyun #endif /* #ifdef DBG_CONFIG_ERROR_DETECT */
759*4882a593Smuzhiyun 
760*4882a593Smuzhiyun #ifdef CONFIG_BT_COEXIST
761*4882a593Smuzhiyun 	/* For bluetooth co-existance */
762*4882a593Smuzhiyun 	BT_COEXIST		bt_coexist;
763*4882a593Smuzhiyun #endif /* CONFIG_BT_COEXIST */
764*4882a593Smuzhiyun 
765*4882a593Smuzhiyun #if defined(CONFIG_RTL8723B) || defined(CONFIG_RTL8703B) \
766*4882a593Smuzhiyun 	|| defined(CONFIG_RTL8188F) || defined(CONFIG_RTL8188GTV) || defined(CONFIG_RTL8723D)|| defined(CONFIG_RTL8192F)
767*4882a593Smuzhiyun #ifndef CONFIG_PCI_HCI	/* mutual exclusive with PCI -- so they're SDIO and GSPI */
768*4882a593Smuzhiyun 	/* Interrupt relatd register information. */
769*4882a593Smuzhiyun 	u32			SysIntrStatus;
770*4882a593Smuzhiyun 	u32			SysIntrMask;
771*4882a593Smuzhiyun #endif
772*4882a593Smuzhiyun #endif /*endif CONFIG_RTL8723B	*/
773*4882a593Smuzhiyun 
774*4882a593Smuzhiyun #ifdef CONFIG_LOAD_PHY_PARA_FROM_FILE
775*4882a593Smuzhiyun 	char	para_file_buf[MAX_PARA_FILE_BUF_LEN];
776*4882a593Smuzhiyun 	char *mac_reg;
777*4882a593Smuzhiyun 	u32	mac_reg_len;
778*4882a593Smuzhiyun 	char *bb_phy_reg;
779*4882a593Smuzhiyun 	u32	bb_phy_reg_len;
780*4882a593Smuzhiyun 	char *bb_agc_tab;
781*4882a593Smuzhiyun 	u32	bb_agc_tab_len;
782*4882a593Smuzhiyun 	char *bb_phy_reg_pg;
783*4882a593Smuzhiyun 	u32	bb_phy_reg_pg_len;
784*4882a593Smuzhiyun 	char *bb_phy_reg_mp;
785*4882a593Smuzhiyun 	u32	bb_phy_reg_mp_len;
786*4882a593Smuzhiyun 	char *rf_radio_a;
787*4882a593Smuzhiyun 	u32	rf_radio_a_len;
788*4882a593Smuzhiyun 	char *rf_radio_b;
789*4882a593Smuzhiyun 	u32	rf_radio_b_len;
790*4882a593Smuzhiyun 	char *rf_tx_pwr_track;
791*4882a593Smuzhiyun 	u32	rf_tx_pwr_track_len;
792*4882a593Smuzhiyun 	char *rf_tx_pwr_lmt;
793*4882a593Smuzhiyun 	u32	rf_tx_pwr_lmt_len;
794*4882a593Smuzhiyun #endif
795*4882a593Smuzhiyun 
796*4882a593Smuzhiyun #ifdef CONFIG_BACKGROUND_NOISE_MONITOR
797*4882a593Smuzhiyun 	struct noise_monitor nm;
798*4882a593Smuzhiyun #endif
799*4882a593Smuzhiyun 
800*4882a593Smuzhiyun 	struct hal_spec_t hal_spec;
801*4882a593Smuzhiyun #ifdef CONFIG_PHY_CAPABILITY_QUERY
802*4882a593Smuzhiyun 	struct phy_spec_t phy_spec;
803*4882a593Smuzhiyun #endif
804*4882a593Smuzhiyun 	u8	RfKFreeEnable;
805*4882a593Smuzhiyun 	u8	RfKFree_ch_group;
806*4882a593Smuzhiyun 	BOOLEAN				bCCKinCH14;
807*4882a593Smuzhiyun 	BB_INIT_REGISTER	RegForRecover[5];
808*4882a593Smuzhiyun 
809*4882a593Smuzhiyun #if defined(CONFIG_PCI_HCI) && defined(RTL8814AE_SW_BCN)
810*4882a593Smuzhiyun 	BOOLEAN bCorrectBCN;
811*4882a593Smuzhiyun #endif
812*4882a593Smuzhiyun #ifdef CONFIG_RTL8814A
813*4882a593Smuzhiyun 	u32 RxGainOffset[4]; /*{2G, 5G_Low, 5G_Middle, G_High}*/
814*4882a593Smuzhiyun 	u8 BackUp_IG_REG_4_Chnl_Section[4]; /*{A,B,C,D}*/
815*4882a593Smuzhiyun #endif
816*4882a593Smuzhiyun 	struct hal_iqk_reg_backup iqk_reg_backup[MAX_IQK_INFO_BACKUP_CHNL_NUM];
817*4882a593Smuzhiyun 
818*4882a593Smuzhiyun #ifdef RTW_HALMAC
819*4882a593Smuzhiyun 	u16 drv_rsvd_page_number;
820*4882a593Smuzhiyun #endif
821*4882a593Smuzhiyun 
822*4882a593Smuzhiyun #ifdef CONFIG_BEAMFORMING
823*4882a593Smuzhiyun 	u8 backup_snd_ptcl_ctrl;
824*4882a593Smuzhiyun #ifdef RTW_BEAMFORMING_VERSION_2
825*4882a593Smuzhiyun 	struct beamforming_info beamforming_info;
826*4882a593Smuzhiyun #endif /* RTW_BEAMFORMING_VERSION_2 */
827*4882a593Smuzhiyun #endif /* CONFIG_BEAMFORMING */
828*4882a593Smuzhiyun 
829*4882a593Smuzhiyun 	u8 not_xmitframe_fw_dl; /*not use xmitframe to download fw*/
830*4882a593Smuzhiyun 	u8 phydm_op_mode;
831*4882a593Smuzhiyun 
832*4882a593Smuzhiyun 	u8 in_cta_test;
833*4882a593Smuzhiyun 
834*4882a593Smuzhiyun #ifdef CONFIG_RTW_LED
835*4882a593Smuzhiyun 	struct led_priv led;
836*4882a593Smuzhiyun #endif
837*4882a593Smuzhiyun 	/* for multi channel case (ex: MCC/TDLS) */
838*4882a593Smuzhiyun 	u8 multi_ch_switch_mode;
839*4882a593Smuzhiyun 
840*4882a593Smuzhiyun #ifdef CONFIG_RTL8814B
841*4882a593Smuzhiyun 	u8 dma_ch_map[32];	/* TXDESC qsel maximum size */
842*4882a593Smuzhiyun #endif
843*4882a593Smuzhiyun 
844*4882a593Smuzhiyun } HAL_DATA_COMMON, *PHAL_DATA_COMMON;
845*4882a593Smuzhiyun 
846*4882a593Smuzhiyun typedef struct hal_com_data HAL_DATA_TYPE, *PHAL_DATA_TYPE;
847*4882a593Smuzhiyun #define GET_HAL_DATA(__pAdapter)		((HAL_DATA_TYPE *)(((struct _ADAPTER*)__pAdapter)->HalData))
848*4882a593Smuzhiyun #define GET_HAL_SPEC(__pAdapter)			(&(GET_HAL_DATA((__pAdapter))->hal_spec))
849*4882a593Smuzhiyun #define adapter_to_led(adapter) (&(GET_HAL_DATA(adapter)->led))
850*4882a593Smuzhiyun 
851*4882a593Smuzhiyun #define RT_GetInterfaceSelection(_Adapter)		(GET_HAL_DATA(_Adapter)->InterfaceSel)
852*4882a593Smuzhiyun 
853*4882a593Smuzhiyun #define GET_KFREE_DATA(_adapter) (&(GET_HAL_DATA((_adapter))->kfree_data))
854*4882a593Smuzhiyun 
855*4882a593Smuzhiyun #define	SUPPORT_HW_RADIO_DETECT(Adapter)	(RT_GetInterfaceSelection(Adapter) == INTF_SEL2_MINICARD || \
856*4882a593Smuzhiyun 		RT_GetInterfaceSelection(Adapter) == INTF_SEL3_USB_Solo || \
857*4882a593Smuzhiyun 		RT_GetInterfaceSelection(Adapter) == INTF_SEL4_USB_Combo)
858*4882a593Smuzhiyun 
859*4882a593Smuzhiyun #define get_hal_mac_addr(adapter)				(GET_HAL_DATA(adapter)->EEPROMMACAddr)
860*4882a593Smuzhiyun #define is_boot_from_eeprom(adapter)			(GET_HAL_DATA(adapter)->EepromOrEfuse)
861*4882a593Smuzhiyun #define rtw_get_hw_init_completed(adapter)		(GET_HAL_DATA(adapter)->hw_init_completed)
862*4882a593Smuzhiyun #define rtw_set_hw_init_completed(adapter, cmp)	(GET_HAL_DATA(adapter)->hw_init_completed = cmp)
863*4882a593Smuzhiyun #define rtw_is_hw_init_completed(adapter)		(GET_HAL_DATA(adapter)->hw_init_completed == _TRUE)
864*4882a593Smuzhiyun 
865*4882a593Smuzhiyun /* refer to (hal_data->version_id.RFType / registrypriv->rf_path / 8814a from efuse or registrypriv)*/
866*4882a593Smuzhiyun #define GET_HAL_RFPATH(adapter)			(GET_HAL_DATA(adapter)->rf_type)
867*4882a593Smuzhiyun #define GET_HAL_RFPATH_NUM(adapter)		(GET_HAL_DATA(adapter)->NumTotalRFPath)
868*4882a593Smuzhiyun #define GET_HAL_TX_PATH_BMP(adapter)	((GET_HAL_DATA(adapter)->trx_path_bmp & 0xF0) >> 4)
869*4882a593Smuzhiyun #define GET_HAL_RX_PATH_BMP(adapter)	(GET_HAL_DATA(adapter)->trx_path_bmp & 0x0F)
870*4882a593Smuzhiyun 
871*4882a593Smuzhiyun /* refer to (registrypriv-> tx_nss,rx_nss / hal_spec->tx_nss_num,rx_nss_num)*/
872*4882a593Smuzhiyun #define GET_HAL_TX_NSS(adapter)			(GET_HAL_DATA(adapter)->tx_nss)
873*4882a593Smuzhiyun #define GET_HAL_RX_NSS(adapter)			(GET_HAL_DATA(adapter)->rx_nss)
874*4882a593Smuzhiyun 
875*4882a593Smuzhiyun #endif
876*4882a593Smuzhiyun 
877*4882a593Smuzhiyun #ifdef RTW_HALMAC
878*4882a593Smuzhiyun int rtw_halmac_deinit_adapter(struct dvobj_priv *);
879*4882a593Smuzhiyun #endif /* RTW_HALMAC */
880*4882a593Smuzhiyun 
881*4882a593Smuzhiyun #endif /* __HAL_DATA_H__ */
882