xref: /linux/drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtcoutsrc.h (revision 123068f2eb30ad4e05dc9d0732d8cc05a82e6983)
1aa45a673SLarry Finger /******************************************************************************
2aa45a673SLarry Finger  *
3aa45a673SLarry Finger  * Copyright(c) 2009-2012  Realtek Corporation.
4aa45a673SLarry Finger  *
5aa45a673SLarry Finger  * This program is free software; you can redistribute it and/or modify it
6aa45a673SLarry Finger  * under the terms of version 2 of the GNU General Public License as
7aa45a673SLarry Finger  * published by the Free Software Foundation.
8aa45a673SLarry Finger  *
9aa45a673SLarry Finger  * This program is distributed in the hope that it will be useful, but WITHOUT
10aa45a673SLarry Finger  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11aa45a673SLarry Finger  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
12aa45a673SLarry Finger  * more details.
13aa45a673SLarry Finger  *
14aa45a673SLarry Finger  * The full GNU General Public License is included in this distribution in the
15aa45a673SLarry Finger  * file called LICENSE.
16aa45a673SLarry Finger  *
17aa45a673SLarry Finger  * Contact Information:
18aa45a673SLarry Finger  * wlanfae <wlanfae@realtek.com>
19aa45a673SLarry Finger  * Realtek Corporation, No. 2, Innovation Road II, Hsinchu Science Park,
20aa45a673SLarry Finger  * Hsinchu 300, Taiwan.
21aa45a673SLarry Finger  *
22aa45a673SLarry Finger  * Larry Finger <Larry.Finger@lwfinger.net>
23aa45a673SLarry Finger  *
24aa45a673SLarry Finger  *****************************************************************************/
25aa45a673SLarry Finger #ifndef	__HALBTC_OUT_SRC_H__
26aa45a673SLarry Finger #define __HALBTC_OUT_SRC_H__
27aa45a673SLarry Finger 
28aa45a673SLarry Finger #include	"../wifi.h"
29aa45a673SLarry Finger 
30aa45a673SLarry Finger #define		NORMAL_EXEC				false
31aa45a673SLarry Finger #define		FORCE_EXEC				true
32aa45a673SLarry Finger 
333ceac0a7SPing-Ke Shih #define		BTC_RF_OFF				0x0
343ceac0a7SPing-Ke Shih #define		BTC_RF_ON				0x1
353ceac0a7SPing-Ke Shih 
36aa45a673SLarry Finger #define		BTC_RF_A				RF90_PATH_A
37aa45a673SLarry Finger #define		BTC_RF_B				RF90_PATH_B
38aa45a673SLarry Finger #define		BTC_RF_C				RF90_PATH_C
39aa45a673SLarry Finger #define		BTC_RF_D				RF90_PATH_D
40aa45a673SLarry Finger 
41aa45a673SLarry Finger #define		BTC_SMSP				SINGLEMAC_SINGLEPHY
42aa45a673SLarry Finger #define		BTC_DMDP				DUALMAC_DUALPHY
43aa45a673SLarry Finger #define		BTC_DMSP				DUALMAC_SINGLEPHY
44aa45a673SLarry Finger #define		BTC_MP_UNKNOWN				0xff
45aa45a673SLarry Finger 
46aa45a673SLarry Finger #define		IN
47aa45a673SLarry Finger #define		OUT
48aa45a673SLarry Finger 
49aa45a673SLarry Finger #define		BT_TMP_BUF_SIZE				100
50aa45a673SLarry Finger 
51aa45a673SLarry Finger #define		BT_COEX_ANT_TYPE_PG			0
52aa45a673SLarry Finger #define		BT_COEX_ANT_TYPE_ANTDIV			1
53aa45a673SLarry Finger #define		BT_COEX_ANT_TYPE_DETECTED		2
54aa45a673SLarry Finger 
55aa45a673SLarry Finger #define		BTC_MIMO_PS_STATIC			0
56aa45a673SLarry Finger #define		BTC_MIMO_PS_DYNAMIC			1
57aa45a673SLarry Finger 
58aa45a673SLarry Finger #define		BTC_RATE_DISABLE			0
59aa45a673SLarry Finger #define		BTC_RATE_ENABLE				1
60aa45a673SLarry Finger 
61e79fff28SLarry Finger /* single Antenna definition */
62e79fff28SLarry Finger #define		BTC_ANT_PATH_WIFI			0
63e79fff28SLarry Finger #define		BTC_ANT_PATH_BT				1
64e79fff28SLarry Finger #define		BTC_ANT_PATH_PTA			2
65e79fff28SLarry Finger /* dual Antenna definition */
66e79fff28SLarry Finger #define		BTC_ANT_WIFI_AT_MAIN			0
67e79fff28SLarry Finger #define		BTC_ANT_WIFI_AT_AUX			1
68e79fff28SLarry Finger /* coupler Antenna definition */
69e79fff28SLarry Finger #define		BTC_ANT_WIFI_AT_CPL_MAIN		0
70e79fff28SLarry Finger #define		BTC_ANT_WIFI_AT_CPL_AUX			1
71e79fff28SLarry Finger 
72588a290bSYan-Hsuan Chuang enum btc_bt_reg_type {
73588a290bSYan-Hsuan Chuang 	BTC_BT_REG_RF		= 0,
74588a290bSYan-Hsuan Chuang 	BTC_BT_REG_MODEM	= 1,
75588a290bSYan-Hsuan Chuang 	BTC_BT_REG_BLUEWIZE	= 2,
76588a290bSYan-Hsuan Chuang 	BTC_BT_REG_VENDOR	= 3,
77588a290bSYan-Hsuan Chuang 	BTC_BT_REG_LE		= 4,
78588a290bSYan-Hsuan Chuang 	BTC_BT_REG_MAX
79588a290bSYan-Hsuan Chuang };
80588a290bSYan-Hsuan Chuang 
81aa45a673SLarry Finger enum btc_chip_interface {
82aa45a673SLarry Finger 	BTC_INTF_UNKNOWN	= 0,
83aa45a673SLarry Finger 	BTC_INTF_PCI		= 1,
84aa45a673SLarry Finger 	BTC_INTF_USB		= 2,
85aa45a673SLarry Finger 	BTC_INTF_SDIO		= 3,
86aa45a673SLarry Finger 	BTC_INTF_GSPI		= 4,
87aa45a673SLarry Finger 	BTC_INTF_MAX
88aa45a673SLarry Finger };
89aa45a673SLarry Finger 
90ed364abfSLarry Finger enum btc_chip_type {
91aa45a673SLarry Finger 	BTC_CHIP_UNDEF		= 0,
92aa45a673SLarry Finger 	BTC_CHIP_CSR_BC4	= 1,
93aa45a673SLarry Finger 	BTC_CHIP_CSR_BC8	= 2,
94aa45a673SLarry Finger 	BTC_CHIP_RTL8723A	= 3,
95aa45a673SLarry Finger 	BTC_CHIP_RTL8821	= 4,
96aa45a673SLarry Finger 	BTC_CHIP_RTL8723B	= 5,
97aa45a673SLarry Finger 	BTC_CHIP_MAX
98aa45a673SLarry Finger };
99aa45a673SLarry Finger 
100ed364abfSLarry Finger enum btc_msg_type {
101aa45a673SLarry Finger 	BTC_MSG_INTERFACE	= 0x0,
102aa45a673SLarry Finger 	BTC_MSG_ALGORITHM	= 0x1,
103aa45a673SLarry Finger 	BTC_MSG_MAX
104aa45a673SLarry Finger };
105ed364abfSLarry Finger 
106aa45a673SLarry Finger /* following is for BTC_MSG_INTERFACE */
107aa45a673SLarry Finger #define		INTF_INIT				BIT0
108aa45a673SLarry Finger #define		INTF_NOTIFY				BIT2
109aa45a673SLarry Finger 
110aa45a673SLarry Finger /* following is for BTC_ALGORITHM */
111aa45a673SLarry Finger #define		ALGO_BT_RSSI_STATE			BIT0
112aa45a673SLarry Finger #define		ALGO_WIFI_RSSI_STATE			BIT1
113aa45a673SLarry Finger #define		ALGO_BT_MONITOR				BIT2
114aa45a673SLarry Finger #define		ALGO_TRACE				BIT3
115aa45a673SLarry Finger #define		ALGO_TRACE_FW				BIT4
116aa45a673SLarry Finger #define		ALGO_TRACE_FW_DETAIL			BIT5
117aa45a673SLarry Finger #define		ALGO_TRACE_FW_EXEC			BIT6
118aa45a673SLarry Finger #define		ALGO_TRACE_SW				BIT7
119aa45a673SLarry Finger #define		ALGO_TRACE_SW_DETAIL			BIT8
120aa45a673SLarry Finger #define		ALGO_TRACE_SW_EXEC			BIT9
121aa45a673SLarry Finger 
122ed364abfSLarry Finger /* following is for wifi link status */
123ed364abfSLarry Finger #define		WIFI_STA_CONNECTED			BIT0
124ed364abfSLarry Finger #define		WIFI_AP_CONNECTED			BIT1
125ed364abfSLarry Finger #define		WIFI_HS_CONNECTED			BIT2
126ed364abfSLarry Finger #define		WIFI_P2P_GO_CONNECTED			BIT3
127ed364abfSLarry Finger #define		WIFI_P2P_GC_CONNECTED			BIT4
128aa45a673SLarry Finger 
129e79fff28SLarry Finger #define	BTC_RSSI_HIGH(_rssi_)	\
130e79fff28SLarry Finger 	((_rssi_ == BTC_RSSI_STATE_HIGH ||	\
131e79fff28SLarry Finger 	  _rssi_ == BTC_RSSI_STATE_STAY_HIGH) ? true : false)
132e79fff28SLarry Finger #define	BTC_RSSI_MEDIUM(_rssi_)	\
133e79fff28SLarry Finger 	((_rssi_ == BTC_RSSI_STATE_MEDIUM ||	\
134e79fff28SLarry Finger 	  _rssi_ == BTC_RSSI_STATE_STAY_MEDIUM) ? true : false)
135e79fff28SLarry Finger #define	BTC_RSSI_LOW(_rssi_)	\
136e79fff28SLarry Finger 	((_rssi_ == BTC_RSSI_STATE_LOW ||	\
137e79fff28SLarry Finger 	  _rssi_ == BTC_RSSI_STATE_STAY_LOW) ? true : false)
138e79fff28SLarry Finger 
139aa45a673SLarry Finger enum btc_power_save_type {
140aa45a673SLarry Finger 	BTC_PS_WIFI_NATIVE = 0,
141aa45a673SLarry Finger 	BTC_PS_LPS_ON = 1,
142aa45a673SLarry Finger 	BTC_PS_LPS_OFF = 2,
143aa45a673SLarry Finger 	BTC_PS_LPS_MAX
144aa45a673SLarry Finger };
145aa45a673SLarry Finger 
146aa45a673SLarry Finger struct btc_board_info {
147aa45a673SLarry Finger 	/* The following is some board information */
148aa45a673SLarry Finger 	u8 bt_chip_type;
149aa45a673SLarry Finger 	u8 pg_ant_num;	/* pg ant number */
150aa45a673SLarry Finger 	u8 btdm_ant_num;	/* ant number for btdm */
151aa45a673SLarry Finger 	u8 btdm_ant_pos;
1524e6becc0SYan-Hsuan Chuang 	u8 single_ant_path; /* current used for 8723b only, 1=>s0,  0=>s1 */
1530199103eSYan-Hsuan Chuang 	bool tfbga_package;
154188b6b09SPing-Ke Shih 
155188b6b09SPing-Ke Shih 	u8 rfe_type;
156f243bca1SPing-Ke Shih 	u8 ant_div_cfg;
157a1ee1a09SPing-Ke Shih 	u8 customer_id;
158aa45a673SLarry Finger };
159aa45a673SLarry Finger 
160aa45a673SLarry Finger enum btc_dbg_opcode {
161aa45a673SLarry Finger 	BTC_DBG_SET_COEX_NORMAL = 0x0,
162aa45a673SLarry Finger 	BTC_DBG_SET_COEX_WIFI_ONLY = 0x1,
163aa45a673SLarry Finger 	BTC_DBG_SET_COEX_BT_ONLY = 0x2,
164aa45a673SLarry Finger 	BTC_DBG_MAX
165aa45a673SLarry Finger };
166aa45a673SLarry Finger 
167aa45a673SLarry Finger enum btc_rssi_state {
168aa45a673SLarry Finger 	BTC_RSSI_STATE_HIGH = 0x0,
169aa45a673SLarry Finger 	BTC_RSSI_STATE_MEDIUM = 0x1,
170aa45a673SLarry Finger 	BTC_RSSI_STATE_LOW = 0x2,
171aa45a673SLarry Finger 	BTC_RSSI_STATE_STAY_HIGH = 0x3,
172aa45a673SLarry Finger 	BTC_RSSI_STATE_STAY_MEDIUM = 0x4,
173aa45a673SLarry Finger 	BTC_RSSI_STATE_STAY_LOW = 0x5,
174aa45a673SLarry Finger 	BTC_RSSI_MAX
175aa45a673SLarry Finger };
176aa45a673SLarry Finger 
177aa45a673SLarry Finger enum btc_wifi_role {
178aa45a673SLarry Finger 	BTC_ROLE_STATION = 0x0,
179aa45a673SLarry Finger 	BTC_ROLE_AP = 0x1,
180aa45a673SLarry Finger 	BTC_ROLE_IBSS = 0x2,
181aa45a673SLarry Finger 	BTC_ROLE_HS_MODE = 0x3,
182aa45a673SLarry Finger 	BTC_ROLE_MAX
183aa45a673SLarry Finger };
184aa45a673SLarry Finger 
18508431b62SPing-Ke Shih enum btc_wireless_freq {
18608431b62SPing-Ke Shih 	BTC_FREQ_2_4G = 0x0,
18708431b62SPing-Ke Shih 	BTC_FREQ_5G = 0x1,
18808431b62SPing-Ke Shih 	BTC_FREQ_MAX
18908431b62SPing-Ke Shih };
19008431b62SPing-Ke Shih 
191aa45a673SLarry Finger enum btc_wifi_bw_mode {
192aa45a673SLarry Finger 	BTC_WIFI_BW_LEGACY = 0x0,
193aa45a673SLarry Finger 	BTC_WIFI_BW_HT20 = 0x1,
194aa45a673SLarry Finger 	BTC_WIFI_BW_HT40 = 0x2,
19566d0f9deSPing-Ke Shih 	BTC_WIFI_BW_HT80 = 0x3,
196aa45a673SLarry Finger 	BTC_WIFI_BW_MAX
197aa45a673SLarry Finger };
198aa45a673SLarry Finger 
199aa45a673SLarry Finger enum btc_wifi_traffic_dir {
200aa45a673SLarry Finger 	BTC_WIFI_TRAFFIC_TX = 0x0,
201aa45a673SLarry Finger 	BTC_WIFI_TRAFFIC_RX = 0x1,
202aa45a673SLarry Finger 	BTC_WIFI_TRAFFIC_MAX
203aa45a673SLarry Finger };
204aa45a673SLarry Finger 
205aa45a673SLarry Finger enum btc_wifi_pnp {
206aa45a673SLarry Finger 	BTC_WIFI_PNP_WAKE_UP = 0x0,
207aa45a673SLarry Finger 	BTC_WIFI_PNP_SLEEP = 0x1,
208aa45a673SLarry Finger 	BTC_WIFI_PNP_MAX
209aa45a673SLarry Finger };
210aa45a673SLarry Finger 
21186aeb825SYan-Hsuan Chuang enum btc_iot_peer {
21286aeb825SYan-Hsuan Chuang 	BTC_IOT_PEER_UNKNOWN = 0,
21386aeb825SYan-Hsuan Chuang 	BTC_IOT_PEER_REALTEK = 1,
21486aeb825SYan-Hsuan Chuang 	BTC_IOT_PEER_REALTEK_92SE = 2,
21586aeb825SYan-Hsuan Chuang 	BTC_IOT_PEER_BROADCOM = 3,
21686aeb825SYan-Hsuan Chuang 	BTC_IOT_PEER_RALINK = 4,
21786aeb825SYan-Hsuan Chuang 	BTC_IOT_PEER_ATHEROS = 5,
21886aeb825SYan-Hsuan Chuang 	BTC_IOT_PEER_CISCO = 6,
21986aeb825SYan-Hsuan Chuang 	BTC_IOT_PEER_MERU = 7,
22086aeb825SYan-Hsuan Chuang 	BTC_IOT_PEER_MARVELL = 8,
22186aeb825SYan-Hsuan Chuang 	BTC_IOT_PEER_REALTEK_SOFTAP = 9,
22286aeb825SYan-Hsuan Chuang 	BTC_IOT_PEER_SELF_SOFTAP = 10, /* Self is SoftAP */
22386aeb825SYan-Hsuan Chuang 	BTC_IOT_PEER_AIRGO = 11,
22486aeb825SYan-Hsuan Chuang 	BTC_IOT_PEER_REALTEK_JAGUAR_BCUTAP = 12,
22586aeb825SYan-Hsuan Chuang 	BTC_IOT_PEER_REALTEK_JAGUAR_CCUTAP = 13,
22686aeb825SYan-Hsuan Chuang 	BTC_IOT_PEER_MAX,
22786aeb825SYan-Hsuan Chuang };
22886aeb825SYan-Hsuan Chuang 
229c42ea613SYan-Hsuan Chuang /* for 8723b-d cut large current issue */
230c42ea613SYan-Hsuan Chuang enum bt_wifi_coex_state {
231c42ea613SYan-Hsuan Chuang 	BTC_WIFI_STAT_INIT,
232c42ea613SYan-Hsuan Chuang 	BTC_WIFI_STAT_IQK,
233c42ea613SYan-Hsuan Chuang 	BTC_WIFI_STAT_NORMAL_OFF,
234c42ea613SYan-Hsuan Chuang 	BTC_WIFI_STAT_MP_OFF,
235c42ea613SYan-Hsuan Chuang 	BTC_WIFI_STAT_NORMAL,
236c42ea613SYan-Hsuan Chuang 	BTC_WIFI_STAT_ANT_DIV,
237c42ea613SYan-Hsuan Chuang 	BTC_WIFI_STAT_MAX
238c42ea613SYan-Hsuan Chuang };
239c42ea613SYan-Hsuan Chuang 
240c42ea613SYan-Hsuan Chuang enum bt_ant_type {
241c42ea613SYan-Hsuan Chuang 	BTC_ANT_TYPE_0,
242c42ea613SYan-Hsuan Chuang 	BTC_ANT_TYPE_1,
243c42ea613SYan-Hsuan Chuang 	BTC_ANT_TYPE_2,
244c42ea613SYan-Hsuan Chuang 	BTC_ANT_TYPE_3,
245c42ea613SYan-Hsuan Chuang 	BTC_ANT_TYPE_4,
246c42ea613SYan-Hsuan Chuang 	BTC_ANT_TYPE_MAX
247c42ea613SYan-Hsuan Chuang };
248c42ea613SYan-Hsuan Chuang 
249aa45a673SLarry Finger enum btc_get_type {
250aa45a673SLarry Finger 	/* type bool */
251aa45a673SLarry Finger 	BTC_GET_BL_HS_OPERATION,
252aa45a673SLarry Finger 	BTC_GET_BL_HS_CONNECTING,
253aa45a673SLarry Finger 	BTC_GET_BL_WIFI_CONNECTED,
254*123068f2SPing-Ke Shih 	BTC_GET_BL_WIFI_DUAL_BAND_CONNECTED,
255aa45a673SLarry Finger 	BTC_GET_BL_WIFI_BUSY,
256aa45a673SLarry Finger 	BTC_GET_BL_WIFI_SCAN,
257aa45a673SLarry Finger 	BTC_GET_BL_WIFI_LINK,
258aa45a673SLarry Finger 	BTC_GET_BL_WIFI_DHCP,
259aa45a673SLarry Finger 	BTC_GET_BL_WIFI_SOFTAP_IDLE,
260aa45a673SLarry Finger 	BTC_GET_BL_WIFI_SOFTAP_LINKING,
261aa45a673SLarry Finger 	BTC_GET_BL_WIFI_IN_EARLY_SUSPEND,
262aa45a673SLarry Finger 	BTC_GET_BL_WIFI_ROAM,
263aa45a673SLarry Finger 	BTC_GET_BL_WIFI_4_WAY_PROGRESS,
264aa45a673SLarry Finger 	BTC_GET_BL_WIFI_UNDER_5G,
265aa45a673SLarry Finger 	BTC_GET_BL_WIFI_AP_MODE_ENABLE,
266aa45a673SLarry Finger 	BTC_GET_BL_WIFI_ENABLE_ENCRYPTION,
267aa45a673SLarry Finger 	BTC_GET_BL_WIFI_UNDER_B_MODE,
268aa45a673SLarry Finger 	BTC_GET_BL_EXT_SWITCH,
2697558668dSYan-Hsuan Chuang 	BTC_GET_BL_WIFI_IS_IN_MP_MODE,
270c42ea613SYan-Hsuan Chuang 	BTC_GET_BL_IS_ASUS_8723B,
271c42ea613SYan-Hsuan Chuang 	BTC_GET_BL_FW_READY,
272c42ea613SYan-Hsuan Chuang 	BTC_GET_BL_RF4CE_CONNECTED,
273aa45a673SLarry Finger 
274aa45a673SLarry Finger 	/* type s4Byte */
275aa45a673SLarry Finger 	BTC_GET_S4_WIFI_RSSI,
276aa45a673SLarry Finger 	BTC_GET_S4_HS_RSSI,
277aa45a673SLarry Finger 
278aa45a673SLarry Finger 	/* type u32 */
279aa45a673SLarry Finger 	BTC_GET_U4_WIFI_BW,
280aa45a673SLarry Finger 	BTC_GET_U4_WIFI_TRAFFIC_DIRECTION,
281aa45a673SLarry Finger 	BTC_GET_U4_WIFI_FW_VER,
282ed364abfSLarry Finger 	BTC_GET_U4_WIFI_LINK_STATUS,
283aa45a673SLarry Finger 	BTC_GET_U4_BT_PATCH_VER,
2841a281473SPing-Ke Shih 	BTC_GET_U4_VENDOR,
285c42ea613SYan-Hsuan Chuang 	BTC_GET_U4_SUPPORTED_VERSION,
286c42ea613SYan-Hsuan Chuang 	BTC_GET_U4_SUPPORTED_FEATURE,
287b2283dadSPing-Ke Shih 	BTC_GET_U4_BT_DEVICE_INFO,
288b2283dadSPing-Ke Shih 	BTC_GET_U4_BT_FORBIDDEN_SLOT_VAL,
289c42ea613SYan-Hsuan Chuang 	BTC_GET_U4_WIFI_IQK_TOTAL,
290c42ea613SYan-Hsuan Chuang 	BTC_GET_U4_WIFI_IQK_OK,
291c42ea613SYan-Hsuan Chuang 	BTC_GET_U4_WIFI_IQK_FAIL,
292aa45a673SLarry Finger 
293aa45a673SLarry Finger 	/* type u1Byte */
294aa45a673SLarry Finger 	BTC_GET_U1_WIFI_DOT11_CHNL,
295aa45a673SLarry Finger 	BTC_GET_U1_WIFI_CENTRAL_CHNL,
296aa45a673SLarry Finger 	BTC_GET_U1_WIFI_HS_CHNL,
297aa45a673SLarry Finger 	BTC_GET_U1_MAC_PHY_MODE,
298e79fff28SLarry Finger 	BTC_GET_U1_AP_NUM,
299c42ea613SYan-Hsuan Chuang 	BTC_GET_U1_ANT_TYPE,
30086aeb825SYan-Hsuan Chuang 	BTC_GET_U1_IOT_PEER,
301aa45a673SLarry Finger 
302aa45a673SLarry Finger 	/* for 1Ant */
303aa45a673SLarry Finger 	BTC_GET_U1_LPS_MODE,
304aa45a673SLarry Finger 	BTC_GET_BL_BT_SCO_BUSY,
305aa45a673SLarry Finger 
306aa45a673SLarry Finger 	/* for test mode */
307aa45a673SLarry Finger 	BTC_GET_DRIVER_TEST_CFG,
308aa45a673SLarry Finger 	BTC_GET_MAX
309aa45a673SLarry Finger };
310aa45a673SLarry Finger 
3111a281473SPing-Ke Shih enum btc_vendor {
3121a281473SPing-Ke Shih 	BTC_VENDOR_LENOVO,
3131a281473SPing-Ke Shih 	BTC_VENDOR_ASUS,
3141a281473SPing-Ke Shih 	BTC_VENDOR_OTHER
3151a281473SPing-Ke Shih };
3161a281473SPing-Ke Shih 
317aa45a673SLarry Finger enum btc_set_type {
318aa45a673SLarry Finger 	/* type bool */
319aa45a673SLarry Finger 	BTC_SET_BL_BT_DISABLE,
320aa45a673SLarry Finger 	BTC_SET_BL_BT_TRAFFIC_BUSY,
321aa45a673SLarry Finger 	BTC_SET_BL_BT_LIMITED_DIG,
322aa45a673SLarry Finger 	BTC_SET_BL_FORCE_TO_ROAM,
323aa45a673SLarry Finger 	BTC_SET_BL_TO_REJ_AP_AGG_PKT,
324aa45a673SLarry Finger 	BTC_SET_BL_BT_CTRL_AGG_SIZE,
325aa45a673SLarry Finger 	BTC_SET_BL_INC_SCAN_DEV_NUM,
326588a290bSYan-Hsuan Chuang 	BTC_SET_BL_BT_TX_RX_MASK,
327a8570896SYan-Hsuan Chuang 	BTC_SET_BL_MIRACAST_PLUS_BT,
328aa45a673SLarry Finger 
329aa45a673SLarry Finger 	/* type u1Byte */
330aa45a673SLarry Finger 	BTC_SET_U1_RSSI_ADJ_VAL_FOR_AGC_TABLE_ON,
331aa45a673SLarry Finger 	BTC_SET_UI_SCAN_SIG_COMPENSATION,
332aa45a673SLarry Finger 	BTC_SET_U1_AGG_BUF_SIZE,
333aa45a673SLarry Finger 
334aa45a673SLarry Finger 	/* type trigger some action */
335aa45a673SLarry Finger 	BTC_SET_ACT_GET_BT_RSSI,
336aa45a673SLarry Finger 	BTC_SET_ACT_AGGREGATE_CTRL,
3376f85c03bSPing-Ke Shih 	BTC_SET_ACT_ANTPOSREGRISTRY_CTRL,
338aa45a673SLarry Finger 
339aa45a673SLarry Finger 	/********* for 1Ant **********/
340aa45a673SLarry Finger 	/* type bool */
341aa45a673SLarry Finger 	BTC_SET_BL_BT_SCO_BUSY,
342aa45a673SLarry Finger 	/* type u1Byte */
343ed364abfSLarry Finger 	BTC_SET_U1_RSSI_ADJ_VAL_FOR_1ANT_COEX_TYPE,
344ed364abfSLarry Finger 	BTC_SET_U1_LPS_VAL,
345ed364abfSLarry Finger 	BTC_SET_U1_RPWM_VAL,
346aa45a673SLarry Finger 	BTC_SET_U1_1ANT_LPS,
347aa45a673SLarry Finger 	BTC_SET_U1_1ANT_RPWM,
348aa45a673SLarry Finger 	/* type trigger some action */
349aa45a673SLarry Finger 	BTC_SET_ACT_LEAVE_LPS,
350aa45a673SLarry Finger 	BTC_SET_ACT_ENTER_LPS,
351aa45a673SLarry Finger 	BTC_SET_ACT_NORMAL_LPS,
352aa45a673SLarry Finger 	BTC_SET_ACT_INC_FORCE_EXEC_PWR_CMD_CNT,
353aa45a673SLarry Finger 	BTC_SET_ACT_DISABLE_LOW_POWER,
354c6821613SYan-Hsuan Chuang 	BTC_SET_ACT_UPDATE_RAMASK,
355aa45a673SLarry Finger 	BTC_SET_ACT_SEND_MIMO_PS,
356aa45a673SLarry Finger 	/* BT Coex related */
357aa45a673SLarry Finger 	BTC_SET_ACT_CTRL_BT_INFO,
358aa45a673SLarry Finger 	BTC_SET_ACT_CTRL_BT_COEX,
359c42ea613SYan-Hsuan Chuang 	BTC_SET_ACT_CTRL_8723B_ANT,
360aa45a673SLarry Finger 	/***************************/
361aa45a673SLarry Finger 	BTC_SET_MAX
362aa45a673SLarry Finger };
363aa45a673SLarry Finger 
364aa45a673SLarry Finger enum btc_dbg_disp_type {
365aa45a673SLarry Finger 	BTC_DBG_DISP_COEX_STATISTICS = 0x0,
366aa45a673SLarry Finger 	BTC_DBG_DISP_BT_LINK_INFO = 0x1,
367aa45a673SLarry Finger 	BTC_DBG_DISP_BT_FW_VER = 0x2,
368aa45a673SLarry Finger 	BTC_DBG_DISP_FW_PWR_MODE_CMD = 0x3,
36908431b62SPing-Ke Shih 	BTC_DBG_DISP_WIFI_STATUS = 0x04,
370aa45a673SLarry Finger 	BTC_DBG_DISP_MAX
371aa45a673SLarry Finger };
372aa45a673SLarry Finger 
373aa45a673SLarry Finger enum btc_notify_type_ips {
374aa45a673SLarry Finger 	BTC_IPS_LEAVE = 0x0,
375aa45a673SLarry Finger 	BTC_IPS_ENTER = 0x1,
376aa45a673SLarry Finger 	BTC_IPS_MAX
377aa45a673SLarry Finger };
378aa45a673SLarry Finger 
379aa45a673SLarry Finger enum btc_notify_type_lps {
380aa45a673SLarry Finger 	BTC_LPS_DISABLE = 0x0,
381aa45a673SLarry Finger 	BTC_LPS_ENABLE = 0x1,
382aa45a673SLarry Finger 	BTC_LPS_MAX
383aa45a673SLarry Finger };
384aa45a673SLarry Finger 
385aa45a673SLarry Finger enum btc_notify_type_scan {
386aa45a673SLarry Finger 	BTC_SCAN_FINISH = 0x0,
387aa45a673SLarry Finger 	BTC_SCAN_START = 0x1,
388aa45a673SLarry Finger 	BTC_SCAN_MAX
389aa45a673SLarry Finger };
390aa45a673SLarry Finger 
39117bf8510SPing-Ke Shih enum btc_notify_type_switchband {
39217bf8510SPing-Ke Shih 	BTC_NOT_SWITCH = 0x0,
39317bf8510SPing-Ke Shih 	BTC_SWITCH_TO_24G = 0x1,
39417bf8510SPing-Ke Shih 	BTC_SWITCH_TO_5G = 0x2,
39517bf8510SPing-Ke Shih 	BTC_SWITCH_TO_24G_NOFORSCAN = 0x3,
39617bf8510SPing-Ke Shih 	BTC_SWITCH_MAX
39717bf8510SPing-Ke Shih };
39817bf8510SPing-Ke Shih 
399aa45a673SLarry Finger enum btc_notify_type_associate {
400aa45a673SLarry Finger 	BTC_ASSOCIATE_FINISH = 0x0,
401aa45a673SLarry Finger 	BTC_ASSOCIATE_START = 0x1,
402aa45a673SLarry Finger 	BTC_ASSOCIATE_MAX
403aa45a673SLarry Finger };
404aa45a673SLarry Finger 
405aa45a673SLarry Finger enum btc_notify_type_media_status {
406aa45a673SLarry Finger 	BTC_MEDIA_DISCONNECT = 0x0,
407aa45a673SLarry Finger 	BTC_MEDIA_CONNECT = 0x1,
408aa45a673SLarry Finger 	BTC_MEDIA_MAX
409aa45a673SLarry Finger };
410aa45a673SLarry Finger 
411aa45a673SLarry Finger enum btc_notify_type_special_packet {
412aa45a673SLarry Finger 	BTC_PACKET_UNKNOWN = 0x0,
413aa45a673SLarry Finger 	BTC_PACKET_DHCP = 0x1,
414aa45a673SLarry Finger 	BTC_PACKET_ARP = 0x2,
415aa45a673SLarry Finger 	BTC_PACKET_EAPOL = 0x3,
416aa45a673SLarry Finger 	BTC_PACKET_MAX
417aa45a673SLarry Finger };
418aa45a673SLarry Finger 
419ed364abfSLarry Finger enum hci_ext_bt_operation {
420ed364abfSLarry Finger 	HCI_BT_OP_NONE = 0x0,
421ed364abfSLarry Finger 	HCI_BT_OP_INQUIRY_START = 0x1,
422ed364abfSLarry Finger 	HCI_BT_OP_INQUIRY_FINISH = 0x2,
423ed364abfSLarry Finger 	HCI_BT_OP_PAGING_START = 0x3,
424ed364abfSLarry Finger 	HCI_BT_OP_PAGING_SUCCESS = 0x4,
425ed364abfSLarry Finger 	HCI_BT_OP_PAGING_UNSUCCESS = 0x5,
426ed364abfSLarry Finger 	HCI_BT_OP_PAIRING_START = 0x6,
427ed364abfSLarry Finger 	HCI_BT_OP_PAIRING_FINISH = 0x7,
428ed364abfSLarry Finger 	HCI_BT_OP_BT_DEV_ENABLE = 0x8,
429ed364abfSLarry Finger 	HCI_BT_OP_BT_DEV_DISABLE = 0x9,
430ed364abfSLarry Finger 	HCI_BT_OP_MAX
431ed364abfSLarry Finger };
432ed364abfSLarry Finger 
433aa45a673SLarry Finger enum btc_notify_type_stack_operation {
434aa45a673SLarry Finger 	BTC_STACK_OP_NONE = 0x0,
435aa45a673SLarry Finger 	BTC_STACK_OP_INQ_PAGE_PAIR_START = 0x1,
436aa45a673SLarry Finger 	BTC_STACK_OP_INQ_PAGE_PAIR_FINISH = 0x2,
437aa45a673SLarry Finger 	BTC_STACK_OP_MAX
438aa45a673SLarry Finger };
439aa45a673SLarry Finger 
440*123068f2SPing-Ke Shih enum {
441*123068f2SPing-Ke Shih 	BTC_MULTIPORT_SCC,
442*123068f2SPing-Ke Shih 	BTC_MULTIPORT_MCC_2CHANNEL,
443*123068f2SPing-Ke Shih 	BTC_MULTIPORT_MCC_2BAND,
444*123068f2SPing-Ke Shih 	BTC_MULTIPORT_MAX
445*123068f2SPing-Ke Shih };
446*123068f2SPing-Ke Shih 
447aa45a673SLarry Finger struct btc_bt_info {
448aa45a673SLarry Finger 	bool bt_disabled;
449aa45a673SLarry Finger 	u8 rssi_adjust_for_agc_table_on;
450aa45a673SLarry Finger 	u8 rssi_adjust_for_1ant_coex_type;
4510199103eSYan-Hsuan Chuang 	bool pre_bt_ctrl_agg_buf_size;
452aa45a673SLarry Finger 	bool bt_busy;
4530199103eSYan-Hsuan Chuang 	u8 pre_agg_buf_size;
454aa45a673SLarry Finger 	u8 agg_buf_size;
455aa45a673SLarry Finger 	bool limited_dig;
4560199103eSYan-Hsuan Chuang 	bool pre_reject_agg_pkt;
457aa45a673SLarry Finger 	bool reject_agg_pkt;
458ed364abfSLarry Finger 	bool bt_ctrl_buf_size;
459aa45a673SLarry Finger 	bool increase_scan_dev_num;
4600199103eSYan-Hsuan Chuang 	bool miracast_plus_bt;
4610199103eSYan-Hsuan Chuang 	bool bt_ctrl_agg_buf_size;
4620199103eSYan-Hsuan Chuang 	bool bt_tx_rx_mask;
463aa45a673SLarry Finger 	u16 bt_hci_ver;
464aa45a673SLarry Finger 	u16 bt_real_fw_ver;
465aa45a673SLarry Finger 	u8 bt_fw_ver;
466aa45a673SLarry Finger 
467ed364abfSLarry Finger 	bool bt_disable_low_pwr;
468ed364abfSLarry Finger 
469aa45a673SLarry Finger 	/* the following is for 1Ant solution */
470aa45a673SLarry Finger 	bool bt_ctrl_lps;
471aa45a673SLarry Finger 	bool bt_pwr_save_mode;
472aa45a673SLarry Finger 	bool bt_lps_on;
473aa45a673SLarry Finger 	bool force_to_roam;
474aa45a673SLarry Finger 	u8 force_exec_pwr_cmd_cnt;
475ed364abfSLarry Finger 	u8 lps_val;
476ed364abfSLarry Finger 	u8 rpwm_val;
477aa45a673SLarry Finger 	u32 ra_mask;
478b2283dadSPing-Ke Shih 
479b2283dadSPing-Ke Shih 	u32 afh_map_l;
480b2283dadSPing-Ke Shih 	u32 afh_map_m;
481b2283dadSPing-Ke Shih 	u16 afh_map_h;
482b2283dadSPing-Ke Shih 	u32 bt_supported_feature;
483b2283dadSPing-Ke Shih 	u32 bt_supported_version;
484b2283dadSPing-Ke Shih 	u32 bt_device_info;
485b2283dadSPing-Ke Shih 	u32 bt_forb_slot_val;
486b2283dadSPing-Ke Shih 	u8 bt_ant_det_val;
487b2283dadSPing-Ke Shih 	u8 bt_ble_scan_type;
488b2283dadSPing-Ke Shih 	u32 bt_ble_scan_para;
489aa45a673SLarry Finger };
490aa45a673SLarry Finger 
491aa45a673SLarry Finger struct btc_stack_info {
492aa45a673SLarry Finger 	bool profile_notified;
493aa45a673SLarry Finger 	u16 hci_version;	/* stack hci version */
494aa45a673SLarry Finger 	u8 num_of_link;
495aa45a673SLarry Finger 	bool bt_link_exist;
496aa45a673SLarry Finger 	bool sco_exist;
497aa45a673SLarry Finger 	bool acl_exist;
498aa45a673SLarry Finger 	bool a2dp_exist;
499aa45a673SLarry Finger 	bool hid_exist;
500aa45a673SLarry Finger 	u8 num_of_hid;
501aa45a673SLarry Finger 	bool pan_exist;
502aa45a673SLarry Finger 	bool unknown_acl_exist;
50308aba42fSArnd Bergmann 	s8 min_bt_rssi;
504aa45a673SLarry Finger };
505aa45a673SLarry Finger 
506aa45a673SLarry Finger struct btc_statistics {
507aa45a673SLarry Finger 	u32 cnt_bind;
508aa45a673SLarry Finger 	u32 cnt_init_hw_config;
509aa45a673SLarry Finger 	u32 cnt_init_coex_dm;
510aa45a673SLarry Finger 	u32 cnt_ips_notify;
511aa45a673SLarry Finger 	u32 cnt_lps_notify;
512aa45a673SLarry Finger 	u32 cnt_scan_notify;
513aa45a673SLarry Finger 	u32 cnt_connect_notify;
514aa45a673SLarry Finger 	u32 cnt_media_status_notify;
515aa45a673SLarry Finger 	u32 cnt_special_packet_notify;
516aa45a673SLarry Finger 	u32 cnt_bt_info_notify;
517aa45a673SLarry Finger 	u32 cnt_periodical;
518ed364abfSLarry Finger 	u32 cnt_coex_dm_switch;
519aa45a673SLarry Finger 	u32 cnt_stack_operation_notify;
520aa45a673SLarry Finger 	u32 cnt_dbg_ctrl;
5216fbbc82aSYan-Hsuan Chuang 	u32 cnt_pre_load_firmware;
52260f44100SYan-Hsuan Chuang 	u32 cnt_power_on;
523aa45a673SLarry Finger };
524aa45a673SLarry Finger 
525aa45a673SLarry Finger struct btc_bt_link_info {
526aa45a673SLarry Finger 	bool bt_link_exist;
52775717802SPing-Ke Shih 	bool bt_hi_pri_link_exist;
528aa45a673SLarry Finger 	bool sco_exist;
529aa45a673SLarry Finger 	bool sco_only;
530aa45a673SLarry Finger 	bool a2dp_exist;
531aa45a673SLarry Finger 	bool a2dp_only;
532aa45a673SLarry Finger 	bool hid_exist;
533aa45a673SLarry Finger 	bool hid_only;
534aa45a673SLarry Finger 	bool pan_exist;
535aa45a673SLarry Finger 	bool pan_only;
53661d80261SYan-Hsuan Chuang 	bool slave_role;
537aa45a673SLarry Finger };
538aa45a673SLarry Finger 
539aa45a673SLarry Finger enum btc_antenna_pos {
540aa45a673SLarry Finger 	BTC_ANTENNA_AT_MAIN_PORT = 0x1,
541aa45a673SLarry Finger 	BTC_ANTENNA_AT_AUX_PORT = 0x2,
542aa45a673SLarry Finger };
543aa45a673SLarry Finger 
544b2283dadSPing-Ke Shih enum btc_mp_h2c_op_code {
545b2283dadSPing-Ke Shih 	BT_OP_GET_BT_VERSION			= 0,
546b2283dadSPing-Ke Shih 	BT_OP_WRITE_REG_ADDR			= 12,
547b2283dadSPing-Ke Shih 	BT_OP_WRITE_REG_VALUE			= 13,
548b2283dadSPing-Ke Shih 	BT_OP_READ_REG				= 17,
549b2283dadSPing-Ke Shih 	BT_OP_GET_AFH_MAP_L			= 30,
550b2283dadSPing-Ke Shih 	BT_OP_GET_AFH_MAP_M			= 31,
551b2283dadSPing-Ke Shih 	BT_OP_GET_AFH_MAP_H			= 32,
552b2283dadSPing-Ke Shih 	BT_OP_GET_BT_COEX_SUPPORTED_FEATURE	= 42,
553b2283dadSPing-Ke Shih 	BT_OP_GET_BT_COEX_SUPPORTED_VERSION	= 43,
554b2283dadSPing-Ke Shih 	BT_OP_GET_BT_ANT_DET_VAL		= 44,
555b2283dadSPing-Ke Shih 	BT_OP_GET_BT_BLE_SCAN_PARA		= 45,
556b2283dadSPing-Ke Shih 	BT_OP_GET_BT_BLE_SCAN_TYPE		= 46,
557b2283dadSPing-Ke Shih 	BT_OP_GET_BT_DEVICE_INFO		= 48,
558b2283dadSPing-Ke Shih 	BT_OP_GET_BT_FORBIDDEN_SLOT_VAL		= 49,
559b2283dadSPing-Ke Shih 	BT_OP_MAX
560b2283dadSPing-Ke Shih };
561b2283dadSPing-Ke Shih 
562b2283dadSPing-Ke Shih enum btc_mp_h2c_req_num {
563b2283dadSPing-Ke Shih 	/* 4 bits only */
564b2283dadSPing-Ke Shih 	BT_SEQ_DONT_CARE			= 0,
565b2283dadSPing-Ke Shih 	BT_SEQ_GET_BT_VERSION			= 0xE,
566b2283dadSPing-Ke Shih 	BT_SEQ_GET_AFH_MAP_L			= 0x5,
567b2283dadSPing-Ke Shih 	BT_SEQ_GET_AFH_MAP_M			= 0x6,
568b2283dadSPing-Ke Shih 	BT_SEQ_GET_AFH_MAP_H			= 0x9,
569b2283dadSPing-Ke Shih 	BT_SEQ_GET_BT_COEX_SUPPORTED_FEATURE	= 0x7,
570b2283dadSPing-Ke Shih 	BT_SEQ_GET_BT_COEX_SUPPORTED_VERSION	= 0x8,
571b2283dadSPing-Ke Shih 	BT_SEQ_GET_BT_ANT_DET_VAL		= 0x2,
572b2283dadSPing-Ke Shih 	BT_SEQ_GET_BT_BLE_SCAN_PARA		= 0x3,
573b2283dadSPing-Ke Shih 	BT_SEQ_GET_BT_BLE_SCAN_TYPE		= 0x4,
574b2283dadSPing-Ke Shih 	BT_SEQ_GET_BT_DEVICE_INFO		= 0xA,
575b2283dadSPing-Ke Shih 	BT_SEQ_GET_BT_FORB_SLOT_VAL		= 0xB,
576b2283dadSPing-Ke Shih };
577b2283dadSPing-Ke Shih 
578aa45a673SLarry Finger struct btc_coexist {
579aa45a673SLarry Finger 	/* make sure only one adapter can bind the data context  */
580aa45a673SLarry Finger 	bool binded;
581aa45a673SLarry Finger 	/* default adapter */
582aa45a673SLarry Finger 	void *adapter;
583aa45a673SLarry Finger 	struct btc_board_info board_info;
584aa45a673SLarry Finger 	/* some bt info referenced by non-bt module */
585aa45a673SLarry Finger 	struct btc_bt_info bt_info;
586aa45a673SLarry Finger 	struct btc_stack_info stack_info;
587aa45a673SLarry Finger 	enum btc_chip_interface	chip_interface;
588aa45a673SLarry Finger 	struct btc_bt_link_info bt_link_info;
589aa45a673SLarry Finger 
590aef9ae46SLarry Finger 	/* boolean variables to replace BT_AUTO_REPORT_ONLY_XXXXY_ZANT
591aef9ae46SLarry Finger 	 * configuration parameters
592aef9ae46SLarry Finger 	 */
593aef9ae46SLarry Finger 	bool auto_report_1ant;
594aef9ae46SLarry Finger 	bool auto_report_2ant;
5958d73e53eSPing-Ke Shih 	bool dbg_mode_1ant;
5968d73e53eSPing-Ke Shih 	bool dbg_mode_2ant;
597aa45a673SLarry Finger 	bool initilized;
598aa45a673SLarry Finger 	bool stop_coex_dm;
599aa45a673SLarry Finger 	bool manual_control;
600aa45a673SLarry Finger 	struct btc_statistics statistics;
601aa45a673SLarry Finger 	u8 pwr_mode_val[10];
602aa45a673SLarry Finger 
603b2283dadSPing-Ke Shih 	struct completion bt_mp_comp;
604b2283dadSPing-Ke Shih 
605aa45a673SLarry Finger 	/* function pointers - io related */
6063afb7da4SLarry Finger 	u8 (*btc_read_1byte)(void *btc_context, u32 reg_addr);
6073afb7da4SLarry Finger 	void (*btc_write_1byte)(void *btc_context, u32 reg_addr, u32 data);
6083afb7da4SLarry Finger 	void (*btc_write_1byte_bitmask)(void *btc_context, u32 reg_addr,
6093afb7da4SLarry Finger 					u32 bit_mask, u8 data1b);
6103afb7da4SLarry Finger 	u16 (*btc_read_2byte)(void *btc_context, u32 reg_addr);
6113afb7da4SLarry Finger 	void (*btc_write_2byte)(void *btc_context, u32 reg_addr, u16 data);
6123afb7da4SLarry Finger 	u32 (*btc_read_4byte)(void *btc_context, u32 reg_addr);
6133afb7da4SLarry Finger 	void (*btc_write_4byte)(void *btc_context, u32 reg_addr, u32 data);
614aa45a673SLarry Finger 
6153afb7da4SLarry Finger 	void (*btc_write_local_reg_1byte)(void *btc_context, u32 reg_addr,
6163afb7da4SLarry Finger 					  u8 data);
6173afb7da4SLarry Finger 	void (*btc_set_bb_reg)(void *btc_context, u32 reg_addr,
6183afb7da4SLarry Finger 			       u32 bit_mask, u32 data);
6193afb7da4SLarry Finger 	u32 (*btc_get_bb_reg)(void *btc_context, u32 reg_addr,
6203afb7da4SLarry Finger 			      u32 bit_mask);
6213afb7da4SLarry Finger 	void (*btc_set_rf_reg)(void *btc_context, u8 rf_path, u32 reg_addr,
6223afb7da4SLarry Finger 			       u32 bit_mask, u32 data);
6233afb7da4SLarry Finger 	u32 (*btc_get_rf_reg)(void *btc_context, u8 rf_path,
6243afb7da4SLarry Finger 			      u32 reg_addr, u32 bit_mask);
625aa45a673SLarry Finger 
6263afb7da4SLarry Finger 	void (*btc_fill_h2c)(void *btc_context, u8 element_id,
6273afb7da4SLarry Finger 			     u32 cmd_len, u8 *cmd_buffer);
628aa45a673SLarry Finger 
6293afb7da4SLarry Finger 	void (*btc_disp_dbg_msg)(void *btcoexist, u8 disp_type,
6303afb7da4SLarry Finger 				 struct seq_file *m);
631aa45a673SLarry Finger 
6323afb7da4SLarry Finger 	bool (*btc_get)(void *btcoexist, u8 get_type, void *out_buf);
6333afb7da4SLarry Finger 	bool (*btc_set)(void *btcoexist, u8 set_type, void *in_buf);
634aa45a673SLarry Finger 
6353afb7da4SLarry Finger 	void (*btc_set_bt_reg)(void *btc_context, u8 reg_type, u32 offset,
6363afb7da4SLarry Finger 			       u32 value);
637b2283dadSPing-Ke Shih 	u32 (*btc_get_bt_coex_supported_feature)(void *btcoexist);
638b2283dadSPing-Ke Shih 	u32 (*btc_get_bt_coex_supported_version)(void *btcoexist);
639b2283dadSPing-Ke Shih 	u8 (*btc_get_ant_det_val_from_bt)(void *btcoexist);
640b2283dadSPing-Ke Shih 	u8 (*btc_get_ble_scan_type_from_bt)(void *btcoexist);
641b2283dadSPing-Ke Shih 	u32 (*btc_get_ble_scan_para_from_bt)(void *btcoexist, u8 scan_type);
642b2283dadSPing-Ke Shih 	bool (*btc_get_bt_afh_map_from_bt)(void *btcoexist, u8 map_type,
643b2283dadSPing-Ke Shih 					   u8 *afh_map);
644aa45a673SLarry Finger };
645aa45a673SLarry Finger 
646aa45a673SLarry Finger bool halbtc_is_wifi_uplink(struct rtl_priv *adapter);
647aa45a673SLarry Finger 
64840d9dd4fSPing-Ke Shih #define rtl_btc_coexist(rtlpriv)				\
64940d9dd4fSPing-Ke Shih 	((struct btc_coexist *)((rtlpriv)->btcoexist.btc_context))
6509177c336SPing-Ke Shih #define rtl_btc_wifi_only(rtlpriv)				\
6519177c336SPing-Ke Shih 	((struct wifi_only_cfg *)((rtlpriv)->btcoexist.wifi_only_context))
6529177c336SPing-Ke Shih 
6539177c336SPing-Ke Shih struct wifi_only_cfg;
654aa45a673SLarry Finger 
65540d9dd4fSPing-Ke Shih bool exhalbtc_initlize_variables(struct rtl_priv *rtlpriv);
6569177c336SPing-Ke Shih bool exhalbtc_initlize_variables_wifi_only(struct rtl_priv *rtlpriv);
65787d8a9f3SPing-Ke Shih bool exhalbtc_bind_bt_coex_withadapter(void *adapter);
658a44709bbSPing-Ke Shih void exhalbtc_power_on_setting(struct btc_coexist *btcoexist);
659f2f6026aSPing-Ke Shih void exhalbtc_pre_load_firmware(struct btc_coexist *btcoexist);
66043f5644aSPing-Ke Shih void exhalbtc_init_hw_config(struct btc_coexist *btcoexist, bool wifi_only);
6619177c336SPing-Ke Shih void exhalbtc_init_hw_config_wifi_only(struct wifi_only_cfg *wifionly_cfg);
662aa45a673SLarry Finger void exhalbtc_init_coex_dm(struct btc_coexist *btcoexist);
663aa45a673SLarry Finger void exhalbtc_ips_notify(struct btc_coexist *btcoexist, u8 type);
664aa45a673SLarry Finger void exhalbtc_lps_notify(struct btc_coexist *btcoexist, u8 type);
665aa45a673SLarry Finger void exhalbtc_scan_notify(struct btc_coexist *btcoexist, u8 type);
6669177c336SPing-Ke Shih void exhalbtc_scan_notify_wifi_only(struct wifi_only_cfg *wifionly_cfg,
6679177c336SPing-Ke Shih 				    u8 is_5g);
668aa45a673SLarry Finger void exhalbtc_connect_notify(struct btc_coexist *btcoexist, u8 action);
669aa45a673SLarry Finger void exhalbtc_mediastatus_notify(struct btc_coexist *btcoexist,
670ed364abfSLarry Finger 				 enum rt_media_status media_status);
671aa45a673SLarry Finger void exhalbtc_special_packet_notify(struct btc_coexist *btcoexist, u8 pkt_type);
672aa45a673SLarry Finger void exhalbtc_bt_info_notify(struct btc_coexist *btcoexist, u8 *tmp_buf,
673aa45a673SLarry Finger 			     u8 length);
674f2f6026aSPing-Ke Shih void exhalbtc_rf_status_notify(struct btc_coexist *btcoexist, u8 type);
675aa45a673SLarry Finger void exhalbtc_stack_operation_notify(struct btc_coexist *btcoexist, u8 type);
676aa45a673SLarry Finger void exhalbtc_halt_notify(struct btc_coexist *btcoexist);
677aa45a673SLarry Finger void exhalbtc_pnp_notify(struct btc_coexist *btcoexist, u8 pnp_state);
678ed364abfSLarry Finger void exhalbtc_coex_dm_switch(struct btc_coexist *btcoexist);
679aa45a673SLarry Finger void exhalbtc_periodical(struct btc_coexist *btcoexist);
680aa45a673SLarry Finger void exhalbtc_dbg_control(struct btc_coexist *btcoexist, u8 code, u8 len,
681aa45a673SLarry Finger 			  u8 *data);
682f2f6026aSPing-Ke Shih void exhalbtc_antenna_detection(struct btc_coexist *btcoexist, u32 cent_freq,
683f2f6026aSPing-Ke Shih 				u32 offset, u32 span, u32 seconds);
684aa45a673SLarry Finger void exhalbtc_stack_update_profile_info(void);
68540d9dd4fSPing-Ke Shih void exhalbtc_set_hci_version(struct btc_coexist *btcoexist, u16 hci_version);
68640d9dd4fSPing-Ke Shih void exhalbtc_set_bt_patch_version(struct btc_coexist *btcoexist,
68740d9dd4fSPing-Ke Shih 				   u16 bt_hci_version, u16 bt_patch_version);
68840d9dd4fSPing-Ke Shih void exhalbtc_update_min_bt_rssi(struct btc_coexist *btcoexist, s8 bt_rssi);
68940d9dd4fSPing-Ke Shih void exhalbtc_set_bt_exist(struct btc_coexist *btcoexist, bool bt_exist);
69040d9dd4fSPing-Ke Shih void exhalbtc_set_chip_type(struct btc_coexist *btcoexist, u8 chip_type);
691baa17022SLarry Finger void exhalbtc_set_ant_num(struct rtl_priv *rtlpriv, u8 type, u8 ant_num);
692610247f4SPing-Ke Shih void exhalbtc_display_bt_coex_info(struct btc_coexist *btcoexist,
693610247f4SPing-Ke Shih 				   struct seq_file *m);
69417bf8510SPing-Ke Shih void exhalbtc_switch_band_notify(struct btc_coexist *btcoexist, u8 type);
6959177c336SPing-Ke Shih void exhalbtc_switch_band_notify_wifi_only(struct wifi_only_cfg *wifionly_cfg,
6969177c336SPing-Ke Shih 					   u8 is_5g);
697aa45a673SLarry Finger void exhalbtc_signal_compensation(struct btc_coexist *btcoexist,
698aa45a673SLarry Finger 				  u8 *rssi_wifi, u8 *rssi_bt);
699aa45a673SLarry Finger void exhalbtc_lps_leave(struct btc_coexist *btcoexist);
700aa45a673SLarry Finger void exhalbtc_low_wifi_traffic_notify(struct btc_coexist *btcoexist);
70140d9dd4fSPing-Ke Shih void exhalbtc_set_single_ant_path(struct btc_coexist *btcoexist,
70240d9dd4fSPing-Ke Shih 				  u8 single_ant_path);
703d7297a86SPing-Ke Shih void halbtc_send_wifi_port_id_cmd(void *bt_context);
704d7297a86SPing-Ke Shih void halbtc_set_default_port_id_cmd(void *bt_context);
705aa45a673SLarry Finger 
7069177c336SPing-Ke Shih /* The following are used by wifi_only case */
7079177c336SPing-Ke Shih enum wifionly_chip_interface {
7089177c336SPing-Ke Shih 	WIFIONLY_INTF_UNKNOWN	= 0,
7099177c336SPing-Ke Shih 	WIFIONLY_INTF_PCI		= 1,
7109177c336SPing-Ke Shih 	WIFIONLY_INTF_USB		= 2,
7119177c336SPing-Ke Shih 	WIFIONLY_INTF_SDIO		= 3,
7129177c336SPing-Ke Shih 	WIFIONLY_INTF_MAX
7139177c336SPing-Ke Shih };
7149177c336SPing-Ke Shih 
7159177c336SPing-Ke Shih enum wifionly_customer_id {
7169177c336SPing-Ke Shih 	CUSTOMER_NORMAL			= 0,
7179177c336SPing-Ke Shih 	CUSTOMER_HP_1			= 1,
7189177c336SPing-Ke Shih };
7199177c336SPing-Ke Shih 
7209177c336SPing-Ke Shih struct wifi_only_haldata {
7219177c336SPing-Ke Shih 	u16		customer_id;
7229177c336SPing-Ke Shih 	u8		efuse_pg_antnum;
7239177c336SPing-Ke Shih 	u8		efuse_pg_antpath;
7249177c336SPing-Ke Shih 	u8		rfe_type;
7259177c336SPing-Ke Shih 	u8		ant_div_cfg;
7269177c336SPing-Ke Shih };
7279177c336SPing-Ke Shih 
7289177c336SPing-Ke Shih struct wifi_only_cfg {
7299177c336SPing-Ke Shih 	void				*adapter;
7309177c336SPing-Ke Shih 	struct wifi_only_haldata	haldata_info;
7319177c336SPing-Ke Shih 	enum wifionly_chip_interface	chip_interface;
7329177c336SPing-Ke Shih };
7339177c336SPing-Ke Shih 
7349177c336SPing-Ke Shih static inline
7359177c336SPing-Ke Shih void halwifionly_phy_set_bb_reg(struct wifi_only_cfg *wifi_conly_cfg,
7369177c336SPing-Ke Shih 				u32 regaddr, u32 bitmask, u32 data)
7379177c336SPing-Ke Shih {
7389177c336SPing-Ke Shih 	struct rtl_priv *rtlpriv = (struct rtl_priv *)wifi_conly_cfg->adapter;
7399177c336SPing-Ke Shih 
7409177c336SPing-Ke Shih 	rtl_set_bbreg(rtlpriv->hw, regaddr, bitmask, data);
7419177c336SPing-Ke Shih }
7429177c336SPing-Ke Shih 
743aa45a673SLarry Finger #endif
744