xref: /OK3568_Linux_fs/external/rkwifibt/drivers/rtl8821cs/hal/btc/halbtc8821c1ant.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /******************************************************************************
2*4882a593Smuzhiyun  *
3*4882a593Smuzhiyun  * Copyright(c) 2016 - 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 
16*4882a593Smuzhiyun #if (BT_SUPPORT == 1 && COEX_SUPPORT == 1)
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun #if (RTL8821C_SUPPORT == 1)
19*4882a593Smuzhiyun 
20*4882a593Smuzhiyun /* *******************************************
21*4882a593Smuzhiyun  * The following is for 8821C 1ANT BT Co-exist definition
22*4882a593Smuzhiyun  * ******************************************* */
23*4882a593Smuzhiyun #define	BT_8821C_1ANT_COEX_DBG					0
24*4882a593Smuzhiyun #define	BT_AUTO_REPORT_ONLY_8821C_1ANT				1
25*4882a593Smuzhiyun 
26*4882a593Smuzhiyun #define	BT_INFO_8821C_1ANT_B_FTP				BIT(7)
27*4882a593Smuzhiyun #define	BT_INFO_8821C_1ANT_B_A2DP				BIT(6)
28*4882a593Smuzhiyun #define	BT_INFO_8821C_1ANT_B_HID				BIT(5)
29*4882a593Smuzhiyun #define	BT_INFO_8821C_1ANT_B_SCO_BUSY				BIT(4)
30*4882a593Smuzhiyun #define	BT_INFO_8821C_1ANT_B_ACL_BUSY				BIT(3)
31*4882a593Smuzhiyun #define	BT_INFO_8821C_1ANT_B_INQ_PAGE				BIT(2)
32*4882a593Smuzhiyun #define	BT_INFO_8821C_1ANT_B_SCO_ESCO				BIT(1)
33*4882a593Smuzhiyun #define	BT_INFO_8821C_1ANT_B_CONNECTION				BIT(0)
34*4882a593Smuzhiyun 
35*4882a593Smuzhiyun #define	BTC_RSSI_COEX_THRESH_TOL_8821C_1ANT		2
36*4882a593Smuzhiyun 
37*4882a593Smuzhiyun #define  BT_8821C_1ANT_WIFI_NOISY_THRESH			30
38*4882a593Smuzhiyun #define  BT_8821C_1ANT_DEFAULT_ISOLATION			15
39*4882a593Smuzhiyun 
40*4882a593Smuzhiyun enum bt_8821c_1ant_signal_state {
41*4882a593Smuzhiyun 	BT_8821C_1ANT_GNT_SET_TO_LOW		= 0x0,
42*4882a593Smuzhiyun 	BT_8821C_1ANT_GNT_SET_TO_HIGH		= 0x1,
43*4882a593Smuzhiyun 	BT_8821C_1ANT_GNT_SET_BY_HW		= 0x2,
44*4882a593Smuzhiyun 	BT_8821C_1ANT_GNT_SET_MAX
45*4882a593Smuzhiyun };
46*4882a593Smuzhiyun 
47*4882a593Smuzhiyun enum bt_8821c_1ant_path_ctrl_owner {
48*4882a593Smuzhiyun 	BT_8821C_1ANT_PCO_BTSIDE		= 0x0,
49*4882a593Smuzhiyun 	BT_8821C_1ANT_PCO_WLSIDE		= 0x1,
50*4882a593Smuzhiyun 	BT_8821C_1ANT_PCO_MAX
51*4882a593Smuzhiyun };
52*4882a593Smuzhiyun 
53*4882a593Smuzhiyun enum bt_8821c_1ant_gnt_ctrl_type {
54*4882a593Smuzhiyun 	BT_8821C_1ANT_GNT_TYPE_CTRL_BY_PTA	= 0x0,
55*4882a593Smuzhiyun 	BT_8821C_1ANT_GNT_TYPE_CTRL_BY_SW	= 0x1,
56*4882a593Smuzhiyun 	BT_8821C_1ANT_GNT_TYPE_MAX
57*4882a593Smuzhiyun };
58*4882a593Smuzhiyun 
59*4882a593Smuzhiyun enum bt_8821c_1ant_gnt_ctrl_block {
60*4882a593Smuzhiyun 	BT_8821C_1ANT_GNT_BLOCK_RFC_BB		= 0x0,
61*4882a593Smuzhiyun 	BT_8821C_1ANT_GNT_BLOCK_RFC		= 0x1,
62*4882a593Smuzhiyun 	BT_8821C_1ANT_GNT_BLOCK_BB		= 0x2,
63*4882a593Smuzhiyun 	BT_8821C_1ANT_GNT_BLOCK_MAX
64*4882a593Smuzhiyun };
65*4882a593Smuzhiyun 
66*4882a593Smuzhiyun enum bt_8821c_1ant_lte_coex_table_type {
67*4882a593Smuzhiyun 	BT_8821C_1ANT_CTT_WL_VS_LTE		= 0x0,
68*4882a593Smuzhiyun 	BT_8821C_1ANT_CTT_BT_VS_LTE		= 0x1,
69*4882a593Smuzhiyun 	BT_8821C_1ANT_CTT_MAX
70*4882a593Smuzhiyun };
71*4882a593Smuzhiyun 
72*4882a593Smuzhiyun enum bt_8821c_1ant_lte_break_table_type {
73*4882a593Smuzhiyun 	BT_8821C_1ANT_LBTT_WL_BREAK_LTE		= 0x0,
74*4882a593Smuzhiyun 	BT_8821C_1ANT_LBTT_BT_BREAK_LTE		= 0x1,
75*4882a593Smuzhiyun 	BT_8821C_1ANT_LBTT_LTE_BREAK_WL		= 0x2,
76*4882a593Smuzhiyun 	BT_8821C_1ANT_LBTT_LTE_BREAK_BT		= 0x3,
77*4882a593Smuzhiyun 	BT_8821C_1ANT_LBTT_MAX
78*4882a593Smuzhiyun };
79*4882a593Smuzhiyun 
80*4882a593Smuzhiyun enum bt_info_src_8821c_1ant {
81*4882a593Smuzhiyun 	BT_8821C_1ANT_INFO_SRC_WIFI_FW		= 0x0,
82*4882a593Smuzhiyun 	BT_8821C_1ANT_INFO_SRC_BT_RSP		= 0x1,
83*4882a593Smuzhiyun 	BT_8821C_1ANT_INFO_SRC_BT_ACT		= 0x2,
84*4882a593Smuzhiyun 	BT_8821C_1ANT_INFO_SRC_MAX
85*4882a593Smuzhiyun };
86*4882a593Smuzhiyun 
87*4882a593Smuzhiyun enum bt_8821c_1ant_bt_status {
88*4882a593Smuzhiyun 	BT_8821C_1ANT_BSTATUS_NCON_IDLE		= 0x0,
89*4882a593Smuzhiyun 	BT_8821C_1ANT_BSTATUS_CON_IDLE		= 0x1,
90*4882a593Smuzhiyun 	BT_8821C_1ANT_BSTATUS_INQ_PAGE		= 0x2,
91*4882a593Smuzhiyun 	BT_8821C_1ANT_BSTATUS_ACL_BUSY		= 0x3,
92*4882a593Smuzhiyun 	BT_8821C_1ANT_BSTATUS_SCO_BUSY		= 0x4,
93*4882a593Smuzhiyun 	BT_8821C_1ANT_BSTATUS_ACL_SCO_BUSY	= 0x5,
94*4882a593Smuzhiyun 	BT_8821C_1ANT_BSTATUS_MAX
95*4882a593Smuzhiyun };
96*4882a593Smuzhiyun 
97*4882a593Smuzhiyun enum bt_8821c_1ant_wifi_status {
98*4882a593Smuzhiyun 	BT_8821C_1ANT_WSTATUS_NCON_IDLE		= 0x0,
99*4882a593Smuzhiyun 	BT_8821C_1ANT_WSTATUS_NCON_SCAN		= 0x1,
100*4882a593Smuzhiyun 	BT_8821C_1ANT_WSTATUS_CON_SCAN		= 0x2,
101*4882a593Smuzhiyun 	BT_8821C_1ANT_WSTATUS_CON_SPECPKT	= 0x3,
102*4882a593Smuzhiyun 	BT_8821C_1ANT_WSTATUS_CON_IDLE		= 0x4,
103*4882a593Smuzhiyun 	BT_8821C_1ANT_WSTATUS_CON_BUSY		= 0x5,
104*4882a593Smuzhiyun 	BT_8821C_1ANT_WSTATUS_MAX
105*4882a593Smuzhiyun };
106*4882a593Smuzhiyun 
107*4882a593Smuzhiyun enum bt_8821c_1ant_coex_algo {
108*4882a593Smuzhiyun 	BT_8821C_1ANT_COEX_UNDEFINED		= 0x0,
109*4882a593Smuzhiyun 	BT_8821C_1ANT_COEX_SCO			= 0x1,
110*4882a593Smuzhiyun 	BT_8821C_1ANT_COEX_HID			= 0x2,
111*4882a593Smuzhiyun 	BT_8821C_1ANT_COEX_A2DP			= 0x3,
112*4882a593Smuzhiyun 	BT_8821C_1ANT_COEX_A2DP_PANHS		= 0x4,
113*4882a593Smuzhiyun 	BT_8821C_1ANT_COEX_PAN			= 0x5,
114*4882a593Smuzhiyun 	BT_8821C_1ANT_COEX_PANHS		= 0x6,
115*4882a593Smuzhiyun 	BT_8821C_1ANT_COEX_PAN_A2DP		= 0x7,
116*4882a593Smuzhiyun 	BT_8821C_1ANT_COEX_PAN_HID		= 0x8,
117*4882a593Smuzhiyun 	BT_8821C_1ANT_COEX_HID_A2DP_PAN		= 0x9,
118*4882a593Smuzhiyun 	BT_8821C_1ANT_COEX_HID_A2DP		= 0xa,
119*4882a593Smuzhiyun 	BT_8821C_1ANT_COEX_MAX			= 0xb,
120*4882a593Smuzhiyun };
121*4882a593Smuzhiyun 
122*4882a593Smuzhiyun enum bt_8821c_1ant_ext_ant_switch_type {
123*4882a593Smuzhiyun 	BT_8821C_1ANT_USE_DPDT		= 0x0,
124*4882a593Smuzhiyun 	BT_8821C_1ANT_USE_SPDT		= 0x1,
125*4882a593Smuzhiyun 	BT_8821C_1ANT_SWITCH_NONE	= 0x2,
126*4882a593Smuzhiyun 	BT_8821C_1ANT_SWITCH_MAX
127*4882a593Smuzhiyun };
128*4882a593Smuzhiyun 
129*4882a593Smuzhiyun 
130*4882a593Smuzhiyun enum bt_8821c_1ant_ext_ant_switch_ctrl_type {
131*4882a593Smuzhiyun 	BT_8821C_1ANT_CTRL_BY_BBSW	= 0x0,
132*4882a593Smuzhiyun 	BT_8821C_1ANT_CTRL_BY_PTA	= 0x1,
133*4882a593Smuzhiyun 	BT_8821C_1ANT_CTRL_BY_ANTDIV	= 0x2,
134*4882a593Smuzhiyun 	BT_8821C_1ANT_CTRL_BY_MAC	= 0x3,
135*4882a593Smuzhiyun 	BT_8821C_1ANT_CTRL_BY_BT	= 0x4,
136*4882a593Smuzhiyun 	BT_8821C_1ANT_CTRL_BY_FW	= 0x5,
137*4882a593Smuzhiyun 	BT_8821C_1ANT_CTRL_MAX
138*4882a593Smuzhiyun };
139*4882a593Smuzhiyun 
140*4882a593Smuzhiyun enum bt_8821c_1ant_ext_ant_switch_pos_type {
141*4882a593Smuzhiyun 	BT_8821C_1ANT_TO_BT		= 0x0,
142*4882a593Smuzhiyun 	BT_8821C_1ANT_TO_WLG		= 0x1,
143*4882a593Smuzhiyun 	BT_8821C_1ANT_TO_WLA		= 0x2,
144*4882a593Smuzhiyun 	BT_8821C_1ANT_TO_NOCARE		= 0x3,
145*4882a593Smuzhiyun 	BT_8821C_1ANT_TO_MAX
146*4882a593Smuzhiyun };
147*4882a593Smuzhiyun 
148*4882a593Smuzhiyun enum bt_8821c_1ant_phase {
149*4882a593Smuzhiyun 	BT_8821C_1ANT_PHASE_INIT	= 0x0,
150*4882a593Smuzhiyun 	BT_8821C_1ANT_PHASE_WONLY	= 0x1,
151*4882a593Smuzhiyun 	BT_8821C_1ANT_PHASE_WOFF	= 0x2,
152*4882a593Smuzhiyun 	BT_8821C_1ANT_PHASE_2G		= 0x3,
153*4882a593Smuzhiyun 	BT_8821C_1ANT_PHASE_5G		= 0x4,
154*4882a593Smuzhiyun 	BT_8821C_1ANT_PHASE_BTMP	= 0x5,
155*4882a593Smuzhiyun 	BT_8821C_1ANT_PHASE_ANTDET	= 0x6,
156*4882a593Smuzhiyun 	BT_8821C_1ANT_PHASE_POWERON	= 0x7,
157*4882a593Smuzhiyun 	BT_8821C_1ANT_PHASE_MCC		= 0x8,
158*4882a593Smuzhiyun 	BT_8821C_1ANT_PHASE_MAX
159*4882a593Smuzhiyun };
160*4882a593Smuzhiyun 
161*4882a593Smuzhiyun enum bt_8821c_1ant_scoreboard {
162*4882a593Smuzhiyun 	BT_8821C_1ANT_SCBD_ACTIVE	= BIT(0),
163*4882a593Smuzhiyun 	BT_8821C_1ANT_SCBD_ONOFF	= BIT(1),
164*4882a593Smuzhiyun 	BT_8821C_1ANT_SCBD_SCAN		= BIT(2),
165*4882a593Smuzhiyun 	BT_8821C_1ANT_SCBD_UNDERTEST	= BIT(3),
166*4882a593Smuzhiyun 	BT_8821C_1ANT_SCBD_WLBUSY	= BIT(6),
167*4882a593Smuzhiyun 	BT_8821C_1ANT_SCBD_TDMA		= BIT(9),
168*4882a593Smuzhiyun 	BT_8821C_1ANT_SCBD_BTCQDDR	= BIT(10),
169*4882a593Smuzhiyun 	BT_8821C_1ANT_SCBD_ALL		= 0xffff
170*4882a593Smuzhiyun };
171*4882a593Smuzhiyun 
172*4882a593Smuzhiyun enum bt_8821c_1ant_RUNREASON {
173*4882a593Smuzhiyun 	BT_8821C_1ANT_RSN_2GSCANSTART	= 0x0,
174*4882a593Smuzhiyun 	BT_8821C_1ANT_RSN_5GSCANSTART	= 0x1,
175*4882a593Smuzhiyun 	BT_8821C_1ANT_RSN_SCANFINISH	= 0x2,
176*4882a593Smuzhiyun 	BT_8821C_1ANT_RSN_2GSWITCHBAND	= 0x3,
177*4882a593Smuzhiyun 	BT_8821C_1ANT_RSN_5GSWITCHBAND	= 0x4,
178*4882a593Smuzhiyun 	BT_8821C_1ANT_RSN_2GCONSTART	= 0x5,
179*4882a593Smuzhiyun 	BT_8821C_1ANT_RSN_5GCONSTART	= 0x6,
180*4882a593Smuzhiyun 	BT_8821C_1ANT_RSN_2GCONFINISH	= 0x7,
181*4882a593Smuzhiyun 	BT_8821C_1ANT_RSN_5GCONFINISH	= 0x8,
182*4882a593Smuzhiyun 	BT_8821C_1ANT_RSN_2GMEDIA	= 0x9,
183*4882a593Smuzhiyun 	BT_8821C_1ANT_RSN_5GMEDIA	= 0xa,
184*4882a593Smuzhiyun 	BT_8821C_1ANT_RSN_MEDIADISCON	= 0xb,
185*4882a593Smuzhiyun 	BT_8821C_1ANT_RSN_2GSPECIALPKT	= 0xc,
186*4882a593Smuzhiyun 	BT_8821C_1ANT_RSN_5GSPECIALPKT	= 0xd,
187*4882a593Smuzhiyun 	BT_8821C_1ANT_RSN_BTINFO	= 0xe,
188*4882a593Smuzhiyun 	BT_8821C_1ANT_RSN_PERIODICAL	= 0xf,
189*4882a593Smuzhiyun 	BT_8821C_1ANT_RSN_PNP		= 0x10,
190*4882a593Smuzhiyun 	BT_8821C_1ANT_RSN_LPS		= 0x11,
191*4882a593Smuzhiyun 	BT_8821C_1ANT_RSN_MAX
192*4882a593Smuzhiyun };
193*4882a593Smuzhiyun 
194*4882a593Smuzhiyun enum bt_8821c_1ant_WL_LINK_MODE {
195*4882a593Smuzhiyun 	BT_8821C_1ANT_WLINK_2G1PORT	= 0x0,
196*4882a593Smuzhiyun 	BT_8821C_1ANT_WLINK_2GMPORT	= 0x1,
197*4882a593Smuzhiyun 	BT_8821C_1ANT_WLINK_25GMPORT	= 0x2,
198*4882a593Smuzhiyun 	BT_8821C_1ANT_WLINK_5G		= 0x3,
199*4882a593Smuzhiyun 	BT_8821C_1ANT_WLINK_2GGO	= 0x4,
200*4882a593Smuzhiyun 	BT_8821C_1ANT_WLINK_BTMR	= 0x5,
201*4882a593Smuzhiyun 	BT_8821C_1ANT_WLINK_MAX
202*4882a593Smuzhiyun };
203*4882a593Smuzhiyun 
204*4882a593Smuzhiyun struct coex_dm_8821c_1ant {
205*4882a593Smuzhiyun 	/* hw setting */
206*4882a593Smuzhiyun 	u32		cur_ant_pos_type;
207*4882a593Smuzhiyun 
208*4882a593Smuzhiyun 	/* fw mechanism */
209*4882a593Smuzhiyun 	boolean		cur_ignore_wlan_act;
210*4882a593Smuzhiyun 
211*4882a593Smuzhiyun 	u8		cur_ps_tdma;
212*4882a593Smuzhiyun 	u8		ps_tdma_para[5];
213*4882a593Smuzhiyun 	boolean		cur_ps_tdma_on;
214*4882a593Smuzhiyun 
215*4882a593Smuzhiyun 	boolean		cur_bt_auto_report;
216*4882a593Smuzhiyun 	u8		cur_lps;
217*4882a593Smuzhiyun 	u8		cur_rpwm;
218*4882a593Smuzhiyun 
219*4882a593Smuzhiyun 	/* sw mechanism */
220*4882a593Smuzhiyun 	boolean		cur_low_penalty_ra;
221*4882a593Smuzhiyun 
222*4882a593Smuzhiyun 	u32		cur_val0x6c0;
223*4882a593Smuzhiyun 	u32		cur_val0x6c4;
224*4882a593Smuzhiyun 	u32		cur_val0x6c8;
225*4882a593Smuzhiyun 	u8		cur_val0x6cc;
226*4882a593Smuzhiyun 
227*4882a593Smuzhiyun 	/* algorithm related */
228*4882a593Smuzhiyun 	u8		cur_algorithm;
229*4882a593Smuzhiyun 	u8		bt_status;
230*4882a593Smuzhiyun 	u8		wifi_chnl_info[3];
231*4882a593Smuzhiyun 
232*4882a593Smuzhiyun 	u32		arp_cnt;
233*4882a593Smuzhiyun 
234*4882a593Smuzhiyun 	u32		cur_ext_ant_switch_status;
235*4882a593Smuzhiyun 	u32		setting_tdma;
236*4882a593Smuzhiyun };
237*4882a593Smuzhiyun 
238*4882a593Smuzhiyun struct coex_sta_8821c_1ant {
239*4882a593Smuzhiyun 	boolean	bt_disabled;
240*4882a593Smuzhiyun 	boolean	bt_link_exist;
241*4882a593Smuzhiyun 	boolean	sco_exist;
242*4882a593Smuzhiyun 	boolean	a2dp_exist;
243*4882a593Smuzhiyun 	boolean	hid_exist;
244*4882a593Smuzhiyun 	boolean	pan_exist;
245*4882a593Smuzhiyun 	boolean	msft_mr_exist;
246*4882a593Smuzhiyun 	boolean bt_a2dp_active;
247*4882a593Smuzhiyun 	u8	num_of_profile;
248*4882a593Smuzhiyun 
249*4882a593Smuzhiyun 	boolean	under_lps;
250*4882a593Smuzhiyun 	boolean	under_ips;
251*4882a593Smuzhiyun 	u32	specific_pkt_period_cnt;
252*4882a593Smuzhiyun 	u32	high_priority_tx;
253*4882a593Smuzhiyun 	u32	high_priority_rx;
254*4882a593Smuzhiyun 	u32	low_priority_tx;
255*4882a593Smuzhiyun 	u32	low_priority_rx;
256*4882a593Smuzhiyun 	boolean bt_ctr_ok;
257*4882a593Smuzhiyun 	boolean	is_hi_pri_rx_overhead;
258*4882a593Smuzhiyun 	s8	bt_rssi;
259*4882a593Smuzhiyun 	u8	pre_bt_rssi_state;
260*4882a593Smuzhiyun 	u8	pre_wifi_rssi_state[4];
261*4882a593Smuzhiyun 	u8	bt_info_c2h[BT_8821C_1ANT_INFO_SRC_MAX][BTC_BTINFO_LENGTH_MAX];
262*4882a593Smuzhiyun 	u32	bt_info_c2h_cnt[BT_8821C_1ANT_INFO_SRC_MAX];
263*4882a593Smuzhiyun 	boolean	bt_whck_test;
264*4882a593Smuzhiyun 	boolean	c2h_bt_inquiry_page;
265*4882a593Smuzhiyun 	boolean bt_inq_page_pre;
266*4882a593Smuzhiyun 	boolean bt_inq_page_remain;
267*4882a593Smuzhiyun 	boolean	c2h_bt_remote_name_req;
268*4882a593Smuzhiyun 	boolean	c2h_bt_page;
269*4882a593Smuzhiyun 	boolean bt_a2dp_active_pre;
270*4882a593Smuzhiyun 	boolean bt_a2dp_active_remain;
271*4882a593Smuzhiyun 
272*4882a593Smuzhiyun 	boolean	wifi_high_pri_task1;
273*4882a593Smuzhiyun 	boolean	wifi_high_pri_task2;
274*4882a593Smuzhiyun 
275*4882a593Smuzhiyun 	u8	bt_info_lb2;
276*4882a593Smuzhiyun 	u8	bt_info_lb3;
277*4882a593Smuzhiyun 	u8	bt_info_hb0;
278*4882a593Smuzhiyun 	u8	bt_info_hb1;
279*4882a593Smuzhiyun 	u8	bt_info_hb2;
280*4882a593Smuzhiyun 	u8	bt_info_hb3;
281*4882a593Smuzhiyun 
282*4882a593Smuzhiyun 	u32	pop_event_cnt;
283*4882a593Smuzhiyun 	u8	scan_ap_num;
284*4882a593Smuzhiyun 	u8	bt_retry_cnt;
285*4882a593Smuzhiyun 
286*4882a593Smuzhiyun 	u32	crc_ok_cck;
287*4882a593Smuzhiyun 	u32	crc_ok_11g;
288*4882a593Smuzhiyun 	u32	crc_ok_11n;
289*4882a593Smuzhiyun 	u32	crc_ok_11n_vht;
290*4882a593Smuzhiyun 
291*4882a593Smuzhiyun 	u32	crc_err_cck;
292*4882a593Smuzhiyun 	u32	crc_err_11g;
293*4882a593Smuzhiyun 	u32	crc_err_11n;
294*4882a593Smuzhiyun 	u32	crc_err_11n_vht;
295*4882a593Smuzhiyun 
296*4882a593Smuzhiyun 	boolean	cck_lock;
297*4882a593Smuzhiyun 	boolean	cck_lock_ever;
298*4882a593Smuzhiyun 	boolean	cck_lock_warn;
299*4882a593Smuzhiyun 
300*4882a593Smuzhiyun 	u8	coex_table_type;
301*4882a593Smuzhiyun 	boolean	force_lps_ctrl;
302*4882a593Smuzhiyun 	boolean	concurrent_rx_mode_on;
303*4882a593Smuzhiyun 	u16	score_board;
304*4882a593Smuzhiyun 	u8	isolation_btween_wb;   /* 0~ 50 */
305*4882a593Smuzhiyun 
306*4882a593Smuzhiyun 	u8	a2dp_bit_pool;
307*4882a593Smuzhiyun 	u8	kt_ver;
308*4882a593Smuzhiyun 	boolean	acl_busy;
309*4882a593Smuzhiyun 	boolean	bt_create_connection;
310*4882a593Smuzhiyun 
311*4882a593Smuzhiyun 	u32	bt_coex_supported_feature;
312*4882a593Smuzhiyun 	u32	bt_coex_supported_version;
313*4882a593Smuzhiyun 
314*4882a593Smuzhiyun 	u8	bt_ble_scan_type;
315*4882a593Smuzhiyun 	u32	bt_ble_scan_para[3];
316*4882a593Smuzhiyun 
317*4882a593Smuzhiyun 	boolean	run_time_state;
318*4882a593Smuzhiyun 	boolean	freeze_coexrun_by_btinfo;
319*4882a593Smuzhiyun 
320*4882a593Smuzhiyun 	boolean	is_A2DP_3M;
321*4882a593Smuzhiyun 	boolean	voice_over_HOGP;
322*4882a593Smuzhiyun 	boolean	bt_418_hid_exist;
323*4882a593Smuzhiyun 	boolean bt_ble_hid_exist;
324*4882a593Smuzhiyun 	u8	forbidden_slot;
325*4882a593Smuzhiyun 	u8	hid_busy_num;
326*4882a593Smuzhiyun 	u8	hid_pair_cnt;
327*4882a593Smuzhiyun 
328*4882a593Smuzhiyun 	u32	cnt_remote_name_req;
329*4882a593Smuzhiyun 	u32	cnt_setup_link;
330*4882a593Smuzhiyun 	u32	cnt_reinit;
331*4882a593Smuzhiyun 	u32	cnt_ign_wlan_act;
332*4882a593Smuzhiyun 	u32	cnt_page;
333*4882a593Smuzhiyun 	u32	cnt_role_switch;
334*4882a593Smuzhiyun 	u32	cnt_wl_fw_notify;
335*4882a593Smuzhiyun 
336*4882a593Smuzhiyun 	u16	bt_reg_vendor_ac;
337*4882a593Smuzhiyun 	u16	bt_reg_vendor_ae;
338*4882a593Smuzhiyun 
339*4882a593Smuzhiyun 	boolean	is_setup_link;
340*4882a593Smuzhiyun 	u8	wl_noisy_level;
341*4882a593Smuzhiyun 	u32	gnt_error_cnt;
342*4882a593Smuzhiyun 
343*4882a593Smuzhiyun 	u8	bt_afh_map[10];
344*4882a593Smuzhiyun 	u8	bt_relink_downcount;
345*4882a593Smuzhiyun 	u8	bt_inq_page_downcount;
346*4882a593Smuzhiyun 	u8	bt_a2dp_active_downcount;
347*4882a593Smuzhiyun 	boolean	is_tdma_btautoslot;
348*4882a593Smuzhiyun 
349*4882a593Smuzhiyun 	u8	switch_band_notify_to;
350*4882a593Smuzhiyun 
351*4882a593Smuzhiyun 	boolean	is_hid_low_pri_tx_overhead;
352*4882a593Smuzhiyun 	boolean	is_bt_multi_link;
353*4882a593Smuzhiyun 	boolean	is_bt_a2dp_sink;
354*4882a593Smuzhiyun 	boolean	is_set_ps_state_fail;
355*4882a593Smuzhiyun 	u8	cnt_set_ps_state_fail;
356*4882a593Smuzhiyun 
357*4882a593Smuzhiyun 	u8	wl_fw_dbg_info[10];
358*4882a593Smuzhiyun 	u8	wl_rx_rate;
359*4882a593Smuzhiyun 	u8	wl_tx_rate;
360*4882a593Smuzhiyun 	u8	wl_rts_rx_rate;
361*4882a593Smuzhiyun 	u8	wl_center_channel;
362*4882a593Smuzhiyun 	u8	wl_tx_macid;
363*4882a593Smuzhiyun 	u8	wl_tx_retry_ratio;
364*4882a593Smuzhiyun 
365*4882a593Smuzhiyun 	u16	score_board_WB;
366*4882a593Smuzhiyun 	boolean	is_hid_rcu;
367*4882a593Smuzhiyun 	u8	bt_a2dp_vendor_id;
368*4882a593Smuzhiyun 	u32	bt_a2dp_device_name;
369*4882a593Smuzhiyun 	u32	bt_a2dp_flush_time;
370*4882a593Smuzhiyun 	boolean	is_ble_scan_en;
371*4882a593Smuzhiyun 
372*4882a593Smuzhiyun 	boolean	is_bt_opp_exist;
373*4882a593Smuzhiyun 	boolean	gl_wifi_busy;
374*4882a593Smuzhiyun 	u8	connect_ap_period_cnt;
375*4882a593Smuzhiyun 
376*4882a593Smuzhiyun 	boolean	is_bt_reenable;
377*4882a593Smuzhiyun 	u8	cnt_bt_reenable;
378*4882a593Smuzhiyun 	boolean	is_wifi_linkscan_process;
379*4882a593Smuzhiyun 	u8	wl_coex_mode;
380*4882a593Smuzhiyun 	u8	wl_pnp_wakeup_downcnt;
381*4882a593Smuzhiyun 	u32	coex_run_cnt;
382*4882a593Smuzhiyun 	boolean	is_no_wl_5ms_extend;
383*4882a593Smuzhiyun 
384*4882a593Smuzhiyun 	u16	wl_0x42a_backup;
385*4882a593Smuzhiyun 	u32	wl_0x430_backup;
386*4882a593Smuzhiyun 	u32	wl_0x434_backup;
387*4882a593Smuzhiyun 	u8	wl_0x455_backup;
388*4882a593Smuzhiyun 
389*4882a593Smuzhiyun 	boolean	wl_tx_limit_en;
390*4882a593Smuzhiyun 	boolean	wl_ampdu_limit_en;
391*4882a593Smuzhiyun 	boolean	wl_rxagg_limit_en;
392*4882a593Smuzhiyun 	u8	wl_rxagg_size;
393*4882a593Smuzhiyun 	u8	coex_run_reason;
394*4882a593Smuzhiyun 
395*4882a593Smuzhiyun 	u8	tdma_timer_base;
396*4882a593Smuzhiyun 	boolean wl_slot_toggle;
397*4882a593Smuzhiyun 	boolean wl_slot_toggle_change; /* if toggle to no-toggle */
398*4882a593Smuzhiyun 	u8	wl_iot_peer;
399*4882a593Smuzhiyun };
400*4882a593Smuzhiyun 
401*4882a593Smuzhiyun 
402*4882a593Smuzhiyun #define  BT_8821C_1ANT_EXT_BAND_SWITCH_USE_DPDT	0
403*4882a593Smuzhiyun #define  BT_8821C_1ANT_EXT_BAND_SWITCH_USE_SPDT	1
404*4882a593Smuzhiyun 
405*4882a593Smuzhiyun struct rfe_type_8821c_1ant {
406*4882a593Smuzhiyun 	u8 rfe_module_type;
407*4882a593Smuzhiyun 	boolean ext_ant_switch_exist;
408*4882a593Smuzhiyun 	/* 0:DPDT, 1:SPDT */
409*4882a593Smuzhiyun 	u8 ext_ant_switch_type;
410*4882a593Smuzhiyun 	/*  iF 0: DPDT_P=0, DPDT_N=1 => BTG to Main, WL_A+G to Aux */
411*4882a593Smuzhiyun 	u8 ext_ant_switch_ctrl_polarity;
412*4882a593Smuzhiyun 
413*4882a593Smuzhiyun 	boolean ext_band_switch_exist;
414*4882a593Smuzhiyun 	/* 0:DPDT, 1:SPDT */
415*4882a593Smuzhiyun 	u8 ext_band_switch_type;
416*4882a593Smuzhiyun 	u8 ext_band_switch_ctrl_polarity;
417*4882a593Smuzhiyun 	boolean ant_at_main_port;
418*4882a593Smuzhiyun 
419*4882a593Smuzhiyun 	/*  If TRUE:  WLG at BTG, If FALSE: WLG at WLAG */
420*4882a593Smuzhiyun 	boolean wlg_locate_at_btg;
421*4882a593Smuzhiyun 
422*4882a593Smuzhiyun 	/* If diversity on */
423*4882a593Smuzhiyun 	boolean ext_ant_switch_diversity;
424*4882a593Smuzhiyun };
425*4882a593Smuzhiyun 
426*4882a593Smuzhiyun struct wifi_link_info_8821c_1ant {
427*4882a593Smuzhiyun 	u8	num_of_active_port;
428*4882a593Smuzhiyun 	u32	port_connect_status;
429*4882a593Smuzhiyun 	boolean	is_all_under_5g;
430*4882a593Smuzhiyun 	boolean	is_mcc_25g;
431*4882a593Smuzhiyun 	boolean	is_p2p_connected;
432*4882a593Smuzhiyun 	boolean is_connected;
433*4882a593Smuzhiyun };
434*4882a593Smuzhiyun 
435*4882a593Smuzhiyun /* *******************************************
436*4882a593Smuzhiyun  * The following is interface which will notify coex module.
437*4882a593Smuzhiyun  * ******************************************* */
438*4882a593Smuzhiyun void ex_halbtc8821c1ant_power_on_setting(struct btc_coexist *btc);
439*4882a593Smuzhiyun void ex_halbtc8821c1ant_pre_load_firmware(struct btc_coexist *btc);
440*4882a593Smuzhiyun void ex_halbtc8821c1ant_init_hw_config(struct btc_coexist *btc,
441*4882a593Smuzhiyun 				       boolean wifi_only);
442*4882a593Smuzhiyun void ex_halbtc8821c1ant_init_coex_dm(struct btc_coexist *btc);
443*4882a593Smuzhiyun void ex_halbtc8821c1ant_ips_notify(struct btc_coexist *btc,
444*4882a593Smuzhiyun 				   u8 type);
445*4882a593Smuzhiyun void ex_halbtc8821c1ant_lps_notify(struct btc_coexist *btc,
446*4882a593Smuzhiyun 				   u8 type);
447*4882a593Smuzhiyun void ex_halbtc8821c1ant_scan_notify(struct btc_coexist *btc,
448*4882a593Smuzhiyun 				    u8 type);
449*4882a593Smuzhiyun void ex_halbtc8821c1ant_switchband_notify(struct btc_coexist *btc,
450*4882a593Smuzhiyun 					  u8 type);
451*4882a593Smuzhiyun void ex_halbtc8821c1ant_connect_notify(struct btc_coexist *btc,
452*4882a593Smuzhiyun 				       u8 type);
453*4882a593Smuzhiyun void ex_halbtc8821c1ant_media_status_notify(struct btc_coexist *btc,
454*4882a593Smuzhiyun 					    u8 type);
455*4882a593Smuzhiyun void ex_halbtc8821c1ant_specific_packet_notify(struct btc_coexist *btc,
456*4882a593Smuzhiyun 					       u8 type);
457*4882a593Smuzhiyun void ex_halbtc8821c1ant_bt_info_notify(struct btc_coexist *btc,
458*4882a593Smuzhiyun 				       u8 *tmp_buf,  u8 length);
459*4882a593Smuzhiyun void ex_halbtc8821c1ant_wl_fwdbginfo_notify(struct btc_coexist *btc,
460*4882a593Smuzhiyun 					    u8 *tmp_buf, u8 length);
461*4882a593Smuzhiyun void ex_halbtc8821c1ant_rx_rate_change_notify(struct btc_coexist *btc,
462*4882a593Smuzhiyun 					      BOOLEAN is_data_frame,
463*4882a593Smuzhiyun 					      u8 btc_rate_id);
464*4882a593Smuzhiyun void ex_halbtc8821c1ant_tx_rate_change_notify(struct btc_coexist *btc,
465*4882a593Smuzhiyun 					      u8 tx_rate,
466*4882a593Smuzhiyun 					      u8 tx_retry_ratio, u8 macid);
467*4882a593Smuzhiyun void ex_halbtc8821c1ant_rf_status_notify(struct btc_coexist *btc,
468*4882a593Smuzhiyun 					 u8 type);
469*4882a593Smuzhiyun void ex_halbtc8821c1ant_halt_notify(struct btc_coexist *btc);
470*4882a593Smuzhiyun void ex_halbtc8821c1ant_pnp_notify(struct btc_coexist *btc,
471*4882a593Smuzhiyun 				   u8 pnp_state);
472*4882a593Smuzhiyun void ex_halbtc8821c1ant_coex_dm_reset(struct btc_coexist *btc);
473*4882a593Smuzhiyun void ex_halbtc8821c1ant_periodical(struct btc_coexist *btc);
474*4882a593Smuzhiyun void ex_halbtc8821c1ant_display_simple_coex_info(struct btc_coexist *btc);
475*4882a593Smuzhiyun void ex_halbtc8821c1ant_display_coex_info(struct btc_coexist *btc);
476*4882a593Smuzhiyun 
477*4882a593Smuzhiyun #else
478*4882a593Smuzhiyun #define ex_halbtc8821c1ant_power_on_setting(btc)
479*4882a593Smuzhiyun #define ex_halbtc8821c1ant_pre_load_firmware(btc)
480*4882a593Smuzhiyun #define ex_halbtc8821c1ant_init_hw_config(btc, wifi_only)
481*4882a593Smuzhiyun #define ex_halbtc8821c1ant_init_coex_dm(btc)
482*4882a593Smuzhiyun #define ex_halbtc8821c1ant_ips_notify(btc, type)
483*4882a593Smuzhiyun #define ex_halbtc8821c1ant_lps_notify(btc, type)
484*4882a593Smuzhiyun #define ex_halbtc8821c1ant_scan_notify(btc, type)
485*4882a593Smuzhiyun #define ex_halbtc8821c1ant_switchband_notify(btc, type)
486*4882a593Smuzhiyun #define ex_halbtc8821c1ant_connect_notify(btc, type)
487*4882a593Smuzhiyun #define ex_halbtc8821c1ant_media_status_notify(btc, type)
488*4882a593Smuzhiyun #define ex_halbtc8821c1ant_specific_packet_notify(btc, type)
489*4882a593Smuzhiyun #define ex_halbtc8821c1ant_bt_info_notify(btc, tmp_buf, length)
490*4882a593Smuzhiyun #define ex_halbtc8821c1ant_wl_fwdbginfo_notify(btc, tmp_buf, length)
491*4882a593Smuzhiyun #define ex_halbtc8821c1ant_rx_rate_change_notify(btc, is_data_frame,     \
492*4882a593Smuzhiyun 						 btc_rate_id)
493*4882a593Smuzhiyun #define ex_halbtc8821c1ant_tx_rate_change_notify(btcoexist, tx_rate,     \
494*4882a593Smuzhiyun 						tx_retry_ratio, macid)
495*4882a593Smuzhiyun #define ex_halbtc8821c1ant_rf_status_notify(btc, type)
496*4882a593Smuzhiyun #define ex_halbtc8821c1ant_halt_notify(btc)
497*4882a593Smuzhiyun #define ex_halbtc8821c1ant_pnp_notify(btc, pnp_state)
498*4882a593Smuzhiyun #define ex_halbtc8821c1ant_coex_dm_reset(btc)
499*4882a593Smuzhiyun #define ex_halbtc8821c1ant_periodical(btc)
500*4882a593Smuzhiyun #define ex_halbtc8821c1ant_display_simple_coex_info(btc)
501*4882a593Smuzhiyun #define ex_halbtc8821c1ant_display_coex_info(btc)
502*4882a593Smuzhiyun #endif
503*4882a593Smuzhiyun 
504*4882a593Smuzhiyun #endif
505*4882a593Smuzhiyun 
506*4882a593Smuzhiyun 
507