xref: /OK3568_Linux_fs/kernel/drivers/net/wireless/rockchip_wlan/rtl8189es/include/hal_intf.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 /******************************************************************************
2  *
3  * Copyright(c) 2007 - 2012 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 #ifndef __HAL_INTF_H__
21 #define __HAL_INTF_H__
22 
23 
24 enum RTL871X_HCI_TYPE {
25 	RTW_PCIE	= BIT0,
26 	RTW_USB 	= BIT1,
27 	RTW_SDIO 	= BIT2,
28 	RTW_GSPI	= BIT3,
29 };
30 
31 enum _CHIP_TYPE {
32 
33 	NULL_CHIP_TYPE,
34 	RTL8188E,
35 	RTL8192E,
36 	RTL8812,
37 	RTL8821, //RTL8811
38 	RTL8723B,
39 	RTL8814A,
40 	RTL8703B,
41 	RTL8188F,
42 	MAX_CHIP_TYPE
43 };
44 
45 
46 typedef enum _HW_VARIABLES{
47 	HW_VAR_MEDIA_STATUS,
48 	HW_VAR_MEDIA_STATUS1,
49 	HW_VAR_SET_OPMODE,
50 	HW_VAR_MAC_ADDR,
51 	HW_VAR_BSSID,
52 	HW_VAR_INIT_RTS_RATE,
53 	HW_VAR_BASIC_RATE,
54 	HW_VAR_TXPAUSE,
55 	HW_VAR_BCN_FUNC,
56 	HW_VAR_CORRECT_TSF,
57 	HW_VAR_CHECK_BSSID,
58 	HW_VAR_MLME_DISCONNECT,
59 	HW_VAR_MLME_SITESURVEY,
60 	HW_VAR_MLME_JOIN,
61 	HW_VAR_ON_RCR_AM,
62        HW_VAR_OFF_RCR_AM,
63 	HW_VAR_BEACON_INTERVAL,
64 	HW_VAR_SLOT_TIME,
65 	HW_VAR_RESP_SIFS,
66 	HW_VAR_ACK_PREAMBLE,
67 	HW_VAR_SEC_CFG,
68 	HW_VAR_SEC_DK_CFG,
69 	HW_VAR_BCN_VALID,
70 	HW_VAR_RF_TYPE,
71 	/* PHYDM odm->SupportAbility */
72 	HW_VAR_CAM_EMPTY_ENTRY,
73 	HW_VAR_CAM_INVALID_ALL,
74 	HW_VAR_CAM_WRITE,
75 	HW_VAR_CAM_READ,
76 	HW_VAR_AC_PARAM_VO,
77 	HW_VAR_AC_PARAM_VI,
78 	HW_VAR_AC_PARAM_BE,
79 	HW_VAR_AC_PARAM_BK,
80 	HW_VAR_ACM_CTRL,
81 	HW_VAR_AMPDU_MIN_SPACE,
82 	HW_VAR_AMPDU_FACTOR,
83 	HW_VAR_RXDMA_AGG_PG_TH,
84 	HW_VAR_SET_RPWM,
85 	HW_VAR_CPWM,
86 	HW_VAR_H2C_FW_PWRMODE,
87 	HW_VAR_H2C_PS_TUNE_PARAM,
88 	HW_VAR_H2C_FW_JOINBSSRPT,
89 	HW_VAR_FWLPS_RF_ON,
90 	HW_VAR_H2C_FW_P2P_PS_OFFLOAD,
91 	HW_VAR_TDLS_WRCR,
92 	HW_VAR_TDLS_RS_RCR,
93 	HW_VAR_TRIGGER_GPIO_0,
94 	HW_VAR_BT_SET_COEXIST,
95 	HW_VAR_BT_ISSUE_DELBA,
96 	HW_VAR_CURRENT_ANTENNA,
97 	HW_VAR_ANTENNA_DIVERSITY_LINK,
98 	HW_VAR_ANTENNA_DIVERSITY_SELECT,
99 	HW_VAR_SWITCH_EPHY_WoWLAN,
100 	HW_VAR_EFUSE_USAGE,
101 	HW_VAR_EFUSE_BYTES,
102 	HW_VAR_EFUSE_BT_USAGE,
103 	HW_VAR_EFUSE_BT_BYTES,
104 	HW_VAR_FIFO_CLEARN_UP,
105 	HW_VAR_RESTORE_HW_SEQ,
106 	HW_VAR_CHECK_TXBUF,
107 	HW_VAR_PCIE_STOP_TX_DMA,
108 	HW_VAR_APFM_ON_MAC, //Auto FSM to Turn On, include clock, isolation, power control for MAC only
109 	HW_VAR_HCI_SUS_STATE,
110 	// The valid upper nav range for the HW updating, if the true value is larger than the upper range, the HW won't update it.
111 	// Unit in microsecond. 0 means disable this function.
112 #if defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN)
113 	HW_VAR_WOWLAN,
114 	HW_VAR_WAKEUP_REASON,
115 	HW_VAR_RPWM_TOG,
116 #endif
117 #ifdef CONFIG_GPIO_WAKEUP
118 	HW_SET_GPIO_WL_CTRL,
119 #endif
120 	HW_VAR_SYS_CLKR,
121 	HW_VAR_NAV_UPPER,
122 	HW_VAR_C2H_HANDLE,
123 	HW_VAR_RPT_TIMER_SETTING,
124 	HW_VAR_TX_RPT_MAX_MACID,
125 	HW_VAR_H2C_MEDIA_STATUS_RPT,
126 	HW_VAR_CHK_HI_QUEUE_EMPTY,
127 	HW_VAR_DL_BCN_SEL,
128 	HW_VAR_AMPDU_MAX_TIME,
129 	HW_VAR_WIRELESS_MODE,
130 	HW_VAR_USB_MODE,
131 	HW_VAR_PORT_SWITCH,
132 	HW_VAR_DO_IQK,
133 	HW_VAR_DM_IN_LPS,
134 	HW_VAR_SET_REQ_FW_PS,
135 	HW_VAR_FW_PS_STATE,
136 	HW_VAR_SOUNDING_ENTER,
137 	HW_VAR_SOUNDING_LEAVE,
138 	HW_VAR_SOUNDING_RATE,
139 	HW_VAR_SOUNDING_STATUS,
140 	HW_VAR_SOUNDING_FW_NDPA,
141 	HW_VAR_SOUNDING_CLK,
142 	HW_VAR_DL_RSVD_PAGE,
143 	HW_VAR_MACID_SLEEP,
144 	HW_VAR_MACID_WAKEUP,
145 	HW_VAR_DUMP_MAC_QUEUE_INFO,
146 	HW_VAR_ASIX_IOT,
147 	HW_VAR_E2500_IOT,
148 }HW_VARIABLES;
149 
150 typedef enum _HAL_DEF_VARIABLE{
151 	HAL_DEF_UNDERCORATEDSMOOTHEDPWDB,
152 	HAL_DEF_IS_SUPPORT_ANT_DIV,
153 	HAL_DEF_CURRENT_ANTENNA,
154 	HAL_DEF_DRVINFO_SZ,
155 	HAL_DEF_MAX_RECVBUF_SZ,
156 	HAL_DEF_RX_PACKET_OFFSET,
157 	HAL_DEF_RX_DMA_SZ_WOW,
158 	HAL_DEF_RX_DMA_SZ,
159 	HAL_DEF_RX_PAGE_SIZE,
160 	HAL_DEF_DBG_DUMP_RXPKT,//for dbg
161 	HAL_DEF_RA_DECISION_RATE,
162 	HAL_DEF_RA_SGI,
163 	HAL_DEF_PT_PWR_STATUS,
164 	HAL_DEF_TX_LDPC, 				// LDPC support
165 	HAL_DEF_RX_LDPC, 				// LDPC support
166 	HAL_DEF_TX_STBC, 				// TX STBC support
167 	HAL_DEF_RX_STBC, 				// RX STBC support
168 	HAL_DEF_EXPLICIT_BEAMFORMER,// Explicit  Compressed Steering Capable
169 	HAL_DEF_EXPLICIT_BEAMFORMEE,// Explicit Compressed Beamforming Feedback Capable
170 	HW_VAR_MAX_RX_AMPDU_FACTOR,
171 	HW_DEF_RA_INFO_DUMP,
172 	HAL_DEF_DBG_DUMP_TXPKT,
173 
174 	HAL_DEF_TX_PAGE_SIZE,
175 	HAL_DEF_TX_PAGE_BOUNDARY,
176 	HAL_DEF_TX_PAGE_BOUNDARY_WOWLAN,
177 	HAL_DEF_ANT_DETECT,//to do for 8723a
178 	HAL_DEF_PCI_SUUPORT_L1_BACKDOOR, // Determine if the L1 Backdoor setting is turned on.
179 	HAL_DEF_PCI_AMD_L1_SUPPORT,
180 	HAL_DEF_PCI_ASPM_OSC, // Support for ASPM OSC, added by Roger, 2013.03.27.
181 	HAL_DEF_MACID_SLEEP, // Support for MACID sleep
182 	HAL_DEF_DBG_DIS_PWT, //disable Tx power training or not.
183 	HAL_DEF_EFUSE_USAGE,	/* Get current EFUSE utilization. 2008.12.19. Added by Roger. */
184 	HAL_DEF_EFUSE_BYTES,
185 }HAL_DEF_VARIABLE;
186 
187 typedef enum _HAL_ODM_VARIABLE{
188 	HAL_ODM_STA_INFO,
189 	HAL_ODM_P2P_STATE,
190 	HAL_ODM_WIFI_DISPLAY_STATE,
191 	HAL_ODM_NOISE_MONITOR,
192 	HAL_ODM_REGULATION,
193 	HAL_ODM_INITIAL_GAIN,
194 	HAL_ODM_FA_CNT_DUMP,
195 	HAL_ODM_DBG_FLAG,
196 	HAL_ODM_DBG_LEVEL,
197 	HAL_ODM_RX_INFO_DUMP,
198 
199 #ifdef CONFIG_AUTO_CHNL_SEL_NHM
200 	HAL_ODM_AUTO_CHNL_SEL,
201 #endif
202 }HAL_ODM_VARIABLE;
203 
204 typedef enum _HAL_INTF_PS_FUNC{
205 	HAL_USB_SELECT_SUSPEND,
206 	HAL_MAX_ID,
207 }HAL_INTF_PS_FUNC;
208 
209 typedef s32 (*c2h_id_filter)(u8 *c2h_evt);
210 
211 struct hal_ops {
212 	/*** initialize section ***/
213 	void	(*read_chip_version)(_adapter *padapter);
214 	void	(*init_default_value)(_adapter *padapter);
215 	void	(*intf_chip_configure)(_adapter *padapter);
216 	void	(*read_adapter_info)(_adapter *padapter);
217 	u32	(*hal_power_on)(_adapter *padapter);
218 	void	(*hal_power_off)(_adapter *padapter);
219 	u32	(*hal_init)(_adapter *padapter);
220 	u32	(*hal_deinit)(_adapter *padapter);
221 	void	(*dm_init)(_adapter *padapter);
222 	void	(*dm_deinit)(_adapter *padapter);
223 
224 	/*** xmit section ***/
225 	s32	(*init_xmit_priv)(_adapter *padapter);
226 	void	(*free_xmit_priv)(_adapter *padapter);
227 	s32	(*hal_xmit)(_adapter *padapter, struct xmit_frame *pxmitframe);
228 	/*
229 	 * mgnt_xmit should be implemented to run in interrupt context
230 	 */
231 	s32 (*mgnt_xmit)(_adapter *padapter, struct xmit_frame *pmgntframe);
232 	s32	(*hal_xmitframe_enqueue)(_adapter *padapter, struct xmit_frame *pxmitframe);
233 #ifdef CONFIG_XMIT_THREAD_MODE
234 	s32 (*xmit_thread_handler)(_adapter *padapter);
235 #endif
236 	void	(*run_thread)(_adapter *padapter);
237 	void	(*cancel_thread)(_adapter *padapter);
238 
239 	/*** recv section ***/
240 	s32	(*init_recv_priv)(_adapter *padapter);
241 	void	(*free_recv_priv)(_adapter *padapter);
242 #if defined(CONFIG_USB_HCI)||defined(CONFIG_PCI_HCI)
243 	u32	(*inirp_init)(_adapter *padapter);
244 	u32	(*inirp_deinit)(_adapter *padapter);
245 #endif
246 	/*** interrupt hdl section ***/
247 	void	(*enable_interrupt)(_adapter *padapter);
248 	void	(*disable_interrupt)(_adapter *padapter);
249 	u8	(*check_ips_status)(_adapter *padapter);
250 #if defined(CONFIG_PCI_HCI)
251 	s32	(*interrupt_handler)(_adapter *padapter);
252 #endif
253 
254 #if defined(CONFIG_USB_HCI) && defined(CONFIG_SUPPORT_USB_INT)
255 	void	(*interrupt_handler)(_adapter *padapter, u16 pkt_len, u8 *pbuf);
256 #endif
257 
258 #if defined(CONFIG_PCI_HCI)
259 	void	(*irp_reset)(_adapter *padapter);
260 #endif
261 
262 	/*** DM section ***/
263 
264 	void	(*InitSwLeds)(_adapter *padapter);
265 	void	(*DeInitSwLeds)(_adapter *padapter);
266 
267 
268 	void	(*set_bwmode_handler)(_adapter *padapter, CHANNEL_WIDTH Bandwidth, u8 Offset);
269 	void	(*set_channel_handler)(_adapter *padapter, u8 channel);
270 	void	(*set_chnl_bw_handler)(_adapter *padapter, u8 channel, CHANNEL_WIDTH Bandwidth, u8 Offset40, u8 Offset80);
271 
272 	void	(*set_tx_power_level_handler)(_adapter *padapter, u8 channel);
273 	void	(*get_tx_power_level_handler)(_adapter *padapter, s32 *powerlevel);
274 
275 	void	(*hal_dm_watchdog)(_adapter *padapter);
276 #ifdef CONFIG_LPS_LCLK_WD_TIMER
277 	void	(*hal_dm_watchdog_in_lps)(_adapter *padapter);
278 #endif
279 
280 	void	(*SetHwRegHandler)(_adapter *padapter, u8	variable,u8* val);
281 	void	(*GetHwRegHandler)(_adapter *padapter, u8	variable,u8* val);
282 
283 #ifdef CONFIG_C2H_PACKET_EN
284 	void	(*SetHwRegHandlerWithBuf)(_adapter *padapter, u8 variable, u8 * pbuf, int len);
285 #endif
286 
287 	u8	(*GetHalDefVarHandler)(_adapter *padapter, HAL_DEF_VARIABLE eVariable, PVOID pValue);
288 	u8	(*SetHalDefVarHandler)(_adapter *padapter, HAL_DEF_VARIABLE eVariable, PVOID pValue);
289 
290 	void	(*GetHalODMVarHandler)(_adapter *padapter, HAL_ODM_VARIABLE eVariable, PVOID pValue1,PVOID pValue2);
291 	void	(*SetHalODMVarHandler)(_adapter *padapter, HAL_ODM_VARIABLE eVariable, PVOID pValue1,BOOLEAN bSet);
292 
293 	void	(*UpdateRAMaskHandler)(_adapter *padapter, u32 mac_id, u8 rssi_level);
294 	void	(*SetBeaconRelatedRegistersHandler)(_adapter *padapter);
295 
296 	void	(*Add_RateATid)(_adapter *padapter, u64 bitmap, u8 *arg, u8 rssi_level);
297 
298 
299 #ifdef CONFIG_ANTENNA_DIVERSITY
300 	u8	(*AntDivBeforeLinkHandler)(_adapter *padapter);
301 	void	(*AntDivCompareHandler)(_adapter *padapter, WLAN_BSSID_EX *dst, WLAN_BSSID_EX *src);
302 #endif
303 	u8	(*interface_ps_func)(_adapter *padapter,HAL_INTF_PS_FUNC efunc_id, u8* val);
304 
305 
306 	u32	(*read_bbreg)(_adapter *padapter, u32 RegAddr, u32 BitMask);
307 	void	(*write_bbreg)(_adapter *padapter, u32 RegAddr, u32 BitMask, u32 Data);
308 	u32	(*read_rfreg)(_adapter *padapter, u8 eRFPath, u32 RegAddr, u32 BitMask);
309 	void	(*write_rfreg)(_adapter *padapter, u8 eRFPath, u32 RegAddr, u32 BitMask, u32 Data);
310 
311 #ifdef CONFIG_HOSTAPD_MLME
312 	s32	(*hostap_mgnt_xmit_entry)(_adapter *padapter, _pkt *pkt);
313 #endif
314 
315 	void (*EfusePowerSwitch)(_adapter *padapter, u8 bWrite, u8 PwrState);
316 	void (*BTEfusePowerSwitch)(_adapter *padapter, u8 bWrite, u8 PwrState);
317 	void (*ReadEFuse)(_adapter *padapter, u8 efuseType, u16 _offset, u16 _size_byte, u8 *pbuf, BOOLEAN bPseudoTest);
318 	void (*EFUSEGetEfuseDefinition)(_adapter *padapter, u8 efuseType, u8 type, void *pOut, BOOLEAN bPseudoTest);
319 	u16	(*EfuseGetCurrentSize)(_adapter *padapter, u8 efuseType, BOOLEAN bPseudoTest);
320 	int 	(*Efuse_PgPacketRead)(_adapter *padapter, u8 offset, u8 *data, BOOLEAN bPseudoTest);
321 	int 	(*Efuse_PgPacketWrite)(_adapter *padapter, u8 offset, u8 word_en, u8 *data, BOOLEAN bPseudoTest);
322 	u8	(*Efuse_WordEnableDataWrite)(_adapter *padapter, u16 efuse_addr, u8 word_en, u8 *data, BOOLEAN bPseudoTest);
323 	BOOLEAN	(*Efuse_PgPacketWrite_BT)(_adapter *padapter, u8 offset, u8 word_en, u8 *data, BOOLEAN bPseudoTest);
324 
325 #ifdef DBG_CONFIG_ERROR_DETECT
326 	void (*sreset_init_value)(_adapter *padapter);
327 	void (*sreset_reset_value)(_adapter *padapter);
328 	void (*silentreset)(_adapter *padapter);
329 	void (*sreset_xmit_status_check)(_adapter *padapter);
330 	void (*sreset_linked_status_check) (_adapter *padapter);
331 	u8 (*sreset_get_wifi_status)(_adapter *padapter);
332 	bool (*sreset_inprogress)(_adapter *padapter);
333 #endif
334 
335 #ifdef CONFIG_IOL
336 	int (*IOL_exec_cmds_sync)(_adapter *padapter, struct xmit_frame *xmit_frame, u32 max_wating_ms, u32 bndy_cnt);
337 #endif
338 
339 	void (*hal_notch_filter)(_adapter * adapter, bool enable);
340 	s32 (*c2h_handler)(_adapter *padapter, u8 *c2h_evt);
341 	c2h_id_filter c2h_id_filter_ccx;
342 	s32 (*fill_h2c_cmd)(PADAPTER, u8 ElementID, u32 CmdLen, u8 *pCmdBuffer);
343 	void (*fill_fake_txdesc)(PADAPTER, u8 *pDesc, u32 BufferLen,
344 			u8 IsPsPoll, u8 IsBTQosNull, u8 bDataFrame);
345 
346 #if defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN)
347 	void (*hal_set_wowlan_fw)(_adapter *adapter, u8 sleep);
348 	void (*clear_interrupt)(_adapter *padapter);
349 #endif
350 	u8 (*hal_get_tx_buff_rsvd_page_num)(_adapter *adapter, bool wowlan);
351 #ifdef CONFIG_GPIO_API
352 	void (*update_hisr_hsisr_ind)(PADAPTER padapter, u32 flag);
353 #endif
354 };
355 
356 typedef	enum _RT_EEPROM_TYPE{
357 	EEPROM_93C46,
358 	EEPROM_93C56,
359 	EEPROM_BOOT_EFUSE,
360 }RT_EEPROM_TYPE,*PRT_EEPROM_TYPE;
361 
362 
363 
364 #define RF_CHANGE_BY_INIT	0
365 #define RF_CHANGE_BY_IPS 	BIT28
366 #define RF_CHANGE_BY_PS 	BIT29
367 #define RF_CHANGE_BY_HW 	BIT30
368 #define RF_CHANGE_BY_SW 	BIT31
369 
370 typedef enum _HARDWARE_TYPE{
371 	HARDWARE_TYPE_RTL8188EE,
372 	HARDWARE_TYPE_RTL8188EU,
373 	HARDWARE_TYPE_RTL8188ES,
374 //	NEW_GENERATION_IC
375 	HARDWARE_TYPE_RTL8192EE,
376 	HARDWARE_TYPE_RTL8192EU,
377 	HARDWARE_TYPE_RTL8192ES,
378 	HARDWARE_TYPE_RTL8812E,
379 	HARDWARE_TYPE_RTL8812AU,
380 	HARDWARE_TYPE_RTL8811AU,
381 	HARDWARE_TYPE_RTL8821E,
382 	HARDWARE_TYPE_RTL8821U,
383 	HARDWARE_TYPE_RTL8821S,
384 	HARDWARE_TYPE_RTL8723BE,
385 	HARDWARE_TYPE_RTL8723BU,
386 	HARDWARE_TYPE_RTL8723BS,
387 	HARDWARE_TYPE_RTL8814AE,
388 	HARDWARE_TYPE_RTL8814AU,
389 	HARDWARE_TYPE_RTL8814AS,
390 	HARDWARE_TYPE_RTL8821BE,
391 	HARDWARE_TYPE_RTL8821BU,
392 	HARDWARE_TYPE_RTL8821BS,
393 	HARDWARE_TYPE_RTL8822BE,
394 	HARDWARE_TYPE_RTL8822BU,
395 	HARDWARE_TYPE_RTL8822BS,
396 	HARDWARE_TYPE_RTL8703BE,
397 	HARDWARE_TYPE_RTL8703BU,
398 	HARDWARE_TYPE_RTL8703BS,
399 	HARDWARE_TYPE_RTL8188FE,
400 	HARDWARE_TYPE_RTL8188FU,
401 	HARDWARE_TYPE_RTL8188FS,
402 	HARDWARE_TYPE_MAX,
403 }HARDWARE_TYPE;
404 
405 #define IS_NEW_GENERATION_IC(_Adapter)	(rtw_get_hw_type(_Adapter) >= HARDWARE_TYPE_RTL8192EE)
406 //
407 // RTL8188E Series
408 //
409 #define IS_HARDWARE_TYPE_8188EE(_Adapter)	(rtw_get_hw_type(_Adapter) == HARDWARE_TYPE_RTL8188EE)
410 #define IS_HARDWARE_TYPE_8188EU(_Adapter)	(rtw_get_hw_type(_Adapter) == HARDWARE_TYPE_RTL8188EU)
411 #define IS_HARDWARE_TYPE_8188ES(_Adapter)	(rtw_get_hw_type(_Adapter) == HARDWARE_TYPE_RTL8188ES)
412 #define	IS_HARDWARE_TYPE_8188E(_Adapter)	\
413 (IS_HARDWARE_TYPE_8188EE(_Adapter) || IS_HARDWARE_TYPE_8188EU(_Adapter) || IS_HARDWARE_TYPE_8188ES(_Adapter))
414 
415 // RTL8812 Series
416 #define IS_HARDWARE_TYPE_8812E(_Adapter)		(rtw_get_hw_type(_Adapter) == HARDWARE_TYPE_RTL8812E)
417 #define IS_HARDWARE_TYPE_8812AU(_Adapter)	(rtw_get_hw_type(_Adapter) == HARDWARE_TYPE_RTL8812AU)
418 #define IS_HARDWARE_TYPE_8812(_Adapter)			\
419 (IS_HARDWARE_TYPE_8812E(_Adapter) || IS_HARDWARE_TYPE_8812AU(_Adapter))
420 
421 // RTL8821 Series
422 #define IS_HARDWARE_TYPE_8821E(_Adapter)		(rtw_get_hw_type(_Adapter) == HARDWARE_TYPE_RTL8821E)
423 #define IS_HARDWARE_TYPE_8811AU(_Adapter)		(rtw_get_hw_type(_Adapter) == HARDWARE_TYPE_RTL8811AU)
424 #define IS_HARDWARE_TYPE_8821U(_Adapter)		(rtw_get_hw_type(_Adapter) == HARDWARE_TYPE_RTL8821U ||	\
425 													rtw_get_hw_type(_Adapter) == HARDWARE_TYPE_RTL8811AU)
426 #define IS_HARDWARE_TYPE_8821S(_Adapter)		(rtw_get_hw_type(_Adapter) == HARDWARE_TYPE_RTL8821S)
427 #define IS_HARDWARE_TYPE_8821(_Adapter)			\
428 (IS_HARDWARE_TYPE_8821E(_Adapter) || IS_HARDWARE_TYPE_8821U(_Adapter)|| IS_HARDWARE_TYPE_8821S(_Adapter))
429 
430 #define IS_HARDWARE_TYPE_JAGUAR(_Adapter)		\
431 (IS_HARDWARE_TYPE_8812(_Adapter) || IS_HARDWARE_TYPE_8821(_Adapter))
432 
433 //RTL8192E Series
434 #define IS_HARDWARE_TYPE_8192EE(_Adapter)		(rtw_get_hw_type(_Adapter) == HARDWARE_TYPE_RTL8192EE)
435 #define IS_HARDWARE_TYPE_8192EU(_Adapter)		(rtw_get_hw_type(_Adapter) == HARDWARE_TYPE_RTL8192EU)
436 #define IS_HARDWARE_TYPE_8192ES(_Adapter)		(rtw_get_hw_type(_Adapter) == HARDWARE_TYPE_RTL8192ES)
437 
438 #define IS_HARDWARE_TYPE_8192E(_Adapter)		\
439 (IS_HARDWARE_TYPE_8192EE(_Adapter) || IS_HARDWARE_TYPE_8192EU(_Adapter) ||IS_HARDWARE_TYPE_8192ES(_Adapter))
440 
441 #define IS_HARDWARE_TYPE_8723BE(_Adapter)		(rtw_get_hw_type(_Adapter) == HARDWARE_TYPE_RTL8723BE)
442 #define IS_HARDWARE_TYPE_8723BU(_Adapter)		(rtw_get_hw_type(_Adapter) == HARDWARE_TYPE_RTL8723BU)
443 #define IS_HARDWARE_TYPE_8723BS(_Adapter)		(rtw_get_hw_type(_Adapter) == HARDWARE_TYPE_RTL8723BS)
444 
445 #define IS_HARDWARE_TYPE_8723B(_Adapter) \
446 	(IS_HARDWARE_TYPE_8723BE(_Adapter) || IS_HARDWARE_TYPE_8723BU(_Adapter) ||IS_HARDWARE_TYPE_8723BS(_Adapter))
447 
448 /* RTL8814A Series */
449 #define IS_HARDWARE_TYPE_8814AE(_Adapter)		(rtw_get_hw_type(_Adapter) == HARDWARE_TYPE_RTL8814AE)
450 #define IS_HARDWARE_TYPE_8814AU(_Adapter)		(rtw_get_hw_type(_Adapter) == HARDWARE_TYPE_RTL8814AU)
451 #define IS_HARDWARE_TYPE_8814AS(_Adapter)		(rtw_get_hw_type(_Adapter) == HARDWARE_TYPE_RTL8814AS)
452 
453 #define IS_HARDWARE_TYPE_8814A(_Adapter)		\
454 (IS_HARDWARE_TYPE_8814AE(_Adapter) || IS_HARDWARE_TYPE_8814AU(_Adapter) || IS_HARDWARE_TYPE_8814AS(_Adapter))
455 
456 #define IS_HARDWARE_TYPE_JAGUAR2(_Adapter)		\
457 (IS_HARDWARE_TYPE_8814A(_Adapter) || IS_HARDWARE_TYPE_8821B(_Adapter) || IS_HARDWARE_TYPE_8822B(_Adapter))
458 
459 #define IS_HARDWARE_TYPE_JAGUAR_AND_JAGUAR2(_Adapter)		\
460 (IS_HARDWARE_TYPE_JAGUAR(_Adapter) || IS_HARDWARE_TYPE_JAGUAR2(_Adapter))
461 
462 /* RTL8703B Series */
463 #define IS_HARDWARE_TYPE_8703BE(_Adapter)		(rtw_get_hw_type(_Adapter) == HARDWARE_TYPE_RTL8703BE)
464 #define IS_HARDWARE_TYPE_8703BS(_Adapter)		(rtw_get_hw_type(_Adapter) == HARDWARE_TYPE_RTL8703BS)
465 #define IS_HARDWARE_TYPE_8703BU(_Adapter)		(rtw_get_hw_type(_Adapter) == HARDWARE_TYPE_RTL8703BU)
466 #define	IS_HARDWARE_TYPE_8703B(_Adapter)			\
467 (IS_HARDWARE_TYPE_8703BE(_Adapter) || IS_HARDWARE_TYPE_8703BU(_Adapter) || IS_HARDWARE_TYPE_8703BS(_Adapter))
468 
469 /* RTL8188F Series */
470 #define IS_HARDWARE_TYPE_8188FE(_Adapter)		(rtw_get_hw_type(_Adapter) == HARDWARE_TYPE_RTL8188FE)
471 #define IS_HARDWARE_TYPE_8188FS(_Adapter)		(rtw_get_hw_type(_Adapter) == HARDWARE_TYPE_RTL8188FS)
472 #define IS_HARDWARE_TYPE_8188FU(_Adapter)		(rtw_get_hw_type(_Adapter) == HARDWARE_TYPE_RTL8188FU)
473 #define	IS_HARDWARE_TYPE_8188F(_Adapter)			\
474 (IS_HARDWARE_TYPE_8188FE(_Adapter) || IS_HARDWARE_TYPE_8188FU(_Adapter) || IS_HARDWARE_TYPE_8188FS(_Adapter))
475 
476 #define IS_HARDWARE_TYPE_8821BE(_Adapter)		(rtw_get_hw_type(_Adapter) == HARDWARE_TYPE_RTL8821BE)
477 #define IS_HARDWARE_TYPE_8821BU(_Adapter)		(rtw_get_hw_type(_Adapter) == HARDWARE_TYPE_RTL8821BU)
478 #define IS_HARDWARE_TYPE_8821BS(_Adapter)		(rtw_get_hw_type(_Adapter) == HARDWARE_TYPE_RTL8821BS)
479 
480 #define IS_HARDWARE_TYPE_8821B(_Adapter)		\
481 (IS_HARDWARE_TYPE_8821BE(_Adapter) || IS_HARDWARE_TYPE_8821BU(_Adapter) || IS_HARDWARE_TYPE_8821BS(_Adapter))
482 
483 #define IS_HARDWARE_TYPE_8822BE(_Adapter)		(rtw_get_hw_type(_Adapter) == HARDWARE_TYPE_RTL8822BE)
484 #define IS_HARDWARE_TYPE_8822BU(_Adapter)		(rtw_get_hw_type(_Adapter) == HARDWARE_TYPE_RTL8822BU)
485 #define IS_HARDWARE_TYPE_8822BS(_Adapter)		(rtw_get_hw_type(_Adapter) == HARDWARE_TYPE_RTL8822BS)
486 #define IS_HARDWARE_TYPE_8822B(_Adapter)		\
487 (IS_HARDWARE_TYPE_8822BE(_Adapter) || IS_HARDWARE_TYPE_8822BU(_Adapter) || IS_HARDWARE_TYPE_8822BS(_Adapter))
488 
489 
490 
491 typedef enum _wowlan_subcode {
492 	WOWLAN_ENABLE			= 0,
493 	WOWLAN_DISABLE			= 1,
494 	WOWLAN_AP_ENABLE		= 2,
495 	WOWLAN_AP_DISABLE		= 3,
496 	WOWLAN_PATTERN_CLEAN		= 4
497 } wowlan_subcode;
498 
499 struct wowlan_ioctl_param{
500 	unsigned int subcode;
501 	unsigned int subcode_value;
502 	unsigned int wakeup_reason;
503 };
504 
505 #define Rx_Pairwisekey			0x01
506 #define Rx_GTK					0x02
507 #define Rx_DisAssoc				0x04
508 #define Rx_DeAuth				0x08
509 #define Rx_ARPReq				0x09
510 #define FWDecisionDisconnect	0x10
511 #define Rx_MagicPkt				0x21
512 #define Rx_UnicastPkt			0x22
513 #define Rx_PatternPkt			0x23
514 #define	RX_PNOWakeUp			0x55
515 #define	AP_WakeUp			0x66
516 
517 u8 rtw_hal_data_init(_adapter *padapter);
518 void rtw_hal_data_deinit(_adapter *padapter);
519 
520 void rtw_hal_def_value_init(_adapter *padapter);
521 
522 void	rtw_hal_free_data(_adapter *padapter);
523 
524 void rtw_hal_dm_init(_adapter *padapter);
525 void rtw_hal_dm_deinit(_adapter *padapter);
526 void rtw_hal_sw_led_init(_adapter *padapter);
527 void rtw_hal_sw_led_deinit(_adapter *padapter);
528 
529 u32 rtw_hal_power_on(_adapter *padapter);
530 void rtw_hal_power_off(_adapter *padapter);
531 
532 uint rtw_hal_init(_adapter *padapter);
533 uint rtw_hal_deinit(_adapter *padapter);
534 void rtw_hal_stop(_adapter *padapter);
535 void rtw_hal_set_hwreg(PADAPTER padapter, u8 variable, u8 *val);
536 void rtw_hal_get_hwreg(PADAPTER padapter, u8 variable, u8 *val);
537 
538 #ifdef CONFIG_C2H_PACKET_EN
539 void rtw_hal_set_hwreg_with_buf(_adapter *padapter, u8 variable, u8 *pbuf, int len);
540 #endif
541 
542 void rtw_hal_chip_configure(_adapter *padapter);
543 void rtw_hal_read_chip_info(_adapter *padapter);
544 void rtw_hal_read_chip_version(_adapter *padapter);
545 
546 u8 rtw_hal_set_def_var(_adapter *padapter, HAL_DEF_VARIABLE eVariable, PVOID pValue);
547 u8 rtw_hal_get_def_var(_adapter *padapter, HAL_DEF_VARIABLE eVariable, PVOID pValue);
548 
549 void rtw_hal_set_odm_var(_adapter *padapter, HAL_ODM_VARIABLE eVariable, PVOID pValue1,BOOLEAN bSet);
550 void	rtw_hal_get_odm_var(_adapter *padapter, HAL_ODM_VARIABLE eVariable, PVOID pValue1,PVOID pValue2);
551 
552 void rtw_hal_enable_interrupt(_adapter *padapter);
553 void rtw_hal_disable_interrupt(_adapter *padapter);
554 
555 u8 rtw_hal_check_ips_status(_adapter *padapter);
556 
557 #if defined(CONFIG_USB_HCI)||defined(CONFIG_PCI_HCI)
558 u32	rtw_hal_inirp_init(_adapter *padapter);
559 u32	rtw_hal_inirp_deinit(_adapter *padapter);
560 #endif
561 
562 #if defined(CONFIG_PCI_HCI)
563 void	rtw_hal_irp_reset(_adapter *padapter);
564 #endif
565 
566 u8	rtw_hal_intf_ps_func(_adapter *padapter,HAL_INTF_PS_FUNC efunc_id, u8* val);
567 
568 s32	rtw_hal_xmitframe_enqueue(_adapter *padapter, struct xmit_frame *pxmitframe);
569 s32	rtw_hal_xmit(_adapter *padapter, struct xmit_frame *pxmitframe);
570 s32	rtw_hal_mgnt_xmit(_adapter *padapter, struct xmit_frame *pmgntframe);
571 
572 s32	rtw_hal_init_xmit_priv(_adapter *padapter);
573 void	rtw_hal_free_xmit_priv(_adapter *padapter);
574 
575 s32	rtw_hal_init_recv_priv(_adapter *padapter);
576 void	rtw_hal_free_recv_priv(_adapter *padapter);
577 
578 void rtw_hal_update_ra_mask(struct sta_info *psta, u8 rssi_level);
579 void	rtw_hal_add_ra_tid(_adapter *padapter, u64 bitmap, u8 *arg, u8 rssi_level);
580 
581 void	rtw_hal_start_thread(_adapter *padapter);
582 void	rtw_hal_stop_thread(_adapter *padapter);
583 
584 void rtw_hal_bcn_related_reg_setting(_adapter *padapter);
585 
586 u32	rtw_hal_read_bbreg(_adapter *padapter, u32 RegAddr, u32 BitMask);
587 void	rtw_hal_write_bbreg(_adapter *padapter, u32 RegAddr, u32 BitMask, u32 Data);
588 u32	rtw_hal_read_rfreg(_adapter *padapter, u32 eRFPath, u32 RegAddr, u32 BitMask);
589 void	rtw_hal_write_rfreg(_adapter *padapter, u32 eRFPath, u32 RegAddr, u32 BitMask, u32 Data);
590 
591 #define PHY_QueryBBReg(Adapter, RegAddr, BitMask) rtw_hal_read_bbreg((Adapter), (RegAddr), (BitMask))
592 #define PHY_SetBBReg(Adapter, RegAddr, BitMask, Data) rtw_hal_write_bbreg((Adapter), (RegAddr), (BitMask), (Data))
593 #define PHY_QueryRFReg(Adapter, eRFPath, RegAddr, BitMask) rtw_hal_read_rfreg((Adapter), (eRFPath), (RegAddr), (BitMask))
594 #define PHY_SetRFReg(Adapter, eRFPath, RegAddr, BitMask, Data) rtw_hal_write_rfreg((Adapter), (eRFPath), (RegAddr), (BitMask), (Data))
595 
596 #define PHY_SetMacReg	PHY_SetBBReg
597 #define PHY_QueryMacReg PHY_QueryBBReg
598 
599 #if defined(CONFIG_PCI_HCI)
600 s32	rtw_hal_interrupt_handler(_adapter *padapter);
601 #endif
602 #if  defined(CONFIG_USB_HCI) && defined(CONFIG_SUPPORT_USB_INT)
603 void	rtw_hal_interrupt_handler(_adapter *padapter, u16 pkt_len, u8 *pbuf);
604 #endif
605 
606 void	rtw_hal_set_bwmode(_adapter *padapter, CHANNEL_WIDTH Bandwidth, u8 Offset);
607 void	rtw_hal_set_chan(_adapter *padapter, u8 channel);
608 void	rtw_hal_set_chnl_bw(_adapter *padapter, u8 channel, CHANNEL_WIDTH Bandwidth, u8 Offset40, u8 Offset80);
609 void	rtw_hal_dm_watchdog(_adapter *padapter);
610 void	rtw_hal_dm_watchdog_in_lps(_adapter *padapter);
611 
612 void	rtw_hal_set_tx_power_level(_adapter *padapter, u8 channel);
613 void	rtw_hal_get_tx_power_level(_adapter *padapter, s32 *powerlevel);
614 
615 #ifdef CONFIG_ANTENNA_DIVERSITY
616 u8	rtw_hal_antdiv_before_linked(_adapter *padapter);
617 void	rtw_hal_antdiv_rssi_compared(_adapter *padapter, WLAN_BSSID_EX *dst, WLAN_BSSID_EX *src);
618 #endif
619 
620 #ifdef CONFIG_HOSTAPD_MLME
621 s32	rtw_hal_hostap_mgnt_xmit_entry(_adapter *padapter, _pkt *pkt);
622 #endif
623 
624 #ifdef DBG_CONFIG_ERROR_DETECT
625 void rtw_hal_sreset_init(_adapter *padapter);
626 void rtw_hal_sreset_reset(_adapter *padapter);
627 void rtw_hal_sreset_reset_value(_adapter *padapter);
628 void rtw_hal_sreset_xmit_status_check(_adapter *padapter);
629 void rtw_hal_sreset_linked_status_check (_adapter *padapter);
630 u8   rtw_hal_sreset_get_wifi_status(_adapter *padapter);
631 bool rtw_hal_sreset_inprogress(_adapter *padapter);
632 #endif
633 
634 #ifdef CONFIG_IOL
635 int rtw_hal_iol_cmd(ADAPTER *adapter, struct xmit_frame *xmit_frame, u32 max_wating_ms, u32 bndy_cnt);
636 #endif
637 
638 #ifdef CONFIG_XMIT_THREAD_MODE
639 s32 rtw_hal_xmit_thread_handler(_adapter *padapter);
640 #endif
641 
642 void rtw_hal_notch_filter(_adapter * adapter, bool enable);
643 
644 bool rtw_hal_c2h_valid(_adapter *adapter, u8 *buf);
645 s32 rtw_hal_c2h_evt_read(_adapter *adapter, u8 *buf);
646 s32 rtw_hal_c2h_handler(_adapter *adapter, u8 *c2h_evt);
647 c2h_id_filter rtw_hal_c2h_id_filter_ccx(_adapter *adapter);
648 
649 s32 rtw_hal_is_disable_sw_channel_plan(PADAPTER padapter);
650 
651 s32 rtw_hal_macid_sleep(PADAPTER padapter, u8 macid);
652 s32 rtw_hal_macid_wakeup(PADAPTER padapter, u8 macid);
653 
654 s32 rtw_hal_fill_h2c_cmd(PADAPTER padapter, u8 ElementID, u32 CmdLen, u8 *pCmdBuffer);
655 void rtw_hal_fill_fake_txdesc(_adapter *padapter, u8 *pDesc, u32 BufferLen,
656 		u8 IsPsPoll, u8 IsBTQosNull, u8 bDataFrame);
657 u8 rtw_hal_get_txbuff_rsvd_page_num(_adapter *adapter, bool wowlan);
658 
659 #ifdef CONFIG_GPIO_API
660 void rtw_hal_update_hisr_hsisr_ind(_adapter *padapter, u32 flag);
661 #endif
662 
663 #if defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN)
664 void rtw_hal_clear_interrupt(_adapter *padapter);
665 void rtw_hal_set_wowlan_fw(_adapter *padapter, u8 sleep);
666 #endif
667 u8 rtw_hal_ops_check(_adapter *padapter);
668 
669 #endif //__HAL_INTF_H__
670 
671