xref: /OK3568_Linux_fs/external/rkwifibt/drivers/rtl8821cs/hal/btc/halbtc8821c2ant.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 2Ant BT Co-exist definition
22*4882a593Smuzhiyun  * ******************************************* */
23*4882a593Smuzhiyun #define	BT_8821C_2ANT_COEX_DBG				0
24*4882a593Smuzhiyun #define	BT_AUTO_REPORT_ONLY_8821C_2ANT			1
25*4882a593Smuzhiyun 
26*4882a593Smuzhiyun #define	BT_INFO_8821C_2ANT_B_FTP			BIT(7)
27*4882a593Smuzhiyun #define	BT_INFO_8821C_2ANT_B_A2DP			BIT(6)
28*4882a593Smuzhiyun #define	BT_INFO_8821C_2ANT_B_HID			BIT(5)
29*4882a593Smuzhiyun #define	BT_INFO_8821C_2ANT_B_SCO_BUSY			BIT(4)
30*4882a593Smuzhiyun #define	BT_INFO_8821C_2ANT_B_ACL_BUSY			BIT(3)
31*4882a593Smuzhiyun #define	BT_INFO_8821C_2ANT_B_INQ_PAGE			BIT(2)
32*4882a593Smuzhiyun #define	BT_INFO_8821C_2ANT_B_SCO_ESCO			BIT(1)
33*4882a593Smuzhiyun #define	BT_INFO_8821C_2ANT_B_CONNECTION			BIT(0)
34*4882a593Smuzhiyun 
35*4882a593Smuzhiyun #define	BTC_RSSI_COEX_THRESH_TOL_8821C_2ANT		2
36*4882a593Smuzhiyun 
37*4882a593Smuzhiyun #define	BT_8821C_2ANT_WIFI_RSSI_COEXSWITCH_THRES1	80
38*4882a593Smuzhiyun #define	BT_8821C_2ANT_BT_RSSI_COEXSWITCH_THRES1		80
39*4882a593Smuzhiyun #define	BT_8821C_2ANT_WIFI_RSSI_COEXSWITCH_THRES2	80
40*4882a593Smuzhiyun #define	BT_8821C_2ANT_BT_RSSI_COEXSWITCH_THRES2		80
41*4882a593Smuzhiyun #define	BT_8821C_2ANT_DEFAULT_ISOLATION			15
42*4882a593Smuzhiyun #define   BT_8821C_2ANT_WIFI_MAX_TX_POWER			15
43*4882a593Smuzhiyun #define   BT_8821C_2ANT_BT_MAX_TX_POWER			3
44*4882a593Smuzhiyun #define   BT_8821C_2ANT_WIFI_SIR_THRES1			-15
45*4882a593Smuzhiyun #define   BT_8821C_2ANT_WIFI_SIR_THRES2			-30
46*4882a593Smuzhiyun #define   BT_8821C_2ANT_BT_SIR_THRES1			-15
47*4882a593Smuzhiyun #define   BT_8821C_2ANT_BT_SIR_THRES2			-30
48*4882a593Smuzhiyun 
49*4882a593Smuzhiyun enum bt_8821c_2ant_signal_state {
50*4882a593Smuzhiyun 	BT_8821C_2ANT_GNT_SET_TO_LOW	= 0x0,
51*4882a593Smuzhiyun 	BT_8821C_2ANT_GNT_SET_TO_HIGH	= 0x1,
52*4882a593Smuzhiyun 	BT_8821C_2ANT_GNT_SET_BY_HW	= 0x2,
53*4882a593Smuzhiyun 	BT_8821C_2ANT_GNT_SET_MAX
54*4882a593Smuzhiyun };
55*4882a593Smuzhiyun 
56*4882a593Smuzhiyun enum bt_8821c_2ant_path_ctrl_owner {
57*4882a593Smuzhiyun 	BT_8821C_2ANT_PCO_BTSIDE		= 0x0,
58*4882a593Smuzhiyun 	BT_8821C_2ANT_PCO_WLSIDE		= 0x1,
59*4882a593Smuzhiyun 	BT_8821C_2ANT_PCO_MAX
60*4882a593Smuzhiyun };
61*4882a593Smuzhiyun 
62*4882a593Smuzhiyun enum bt_8821c_2ant_gnt_ctrl_type {
63*4882a593Smuzhiyun 	BT_8821C_2ANT_GNT_TYPE_CTRL_BY_PTA	= 0x0,
64*4882a593Smuzhiyun 	BT_8821C_2ANT_GNT_TYPE_CTRL_BY_SW	= 0x1,
65*4882a593Smuzhiyun 	BT_8821C_2ANT_GNT_TYPE_MAX
66*4882a593Smuzhiyun };
67*4882a593Smuzhiyun 
68*4882a593Smuzhiyun enum bt_8821c_2ant_gnt_ctrl_block {
69*4882a593Smuzhiyun 	BT_8821C_2ANT_GNT_BLOCK_RFC_BB		= 0x0,
70*4882a593Smuzhiyun 	BT_8821C_2ANT_GNT_BLOCK_RFC		= 0x1,
71*4882a593Smuzhiyun 	BT_8821C_2ANT_GNT_BLOCK_BB		= 0x2,
72*4882a593Smuzhiyun 	BT_8821C_2ANT_GNT_BLOCK_MAX
73*4882a593Smuzhiyun };
74*4882a593Smuzhiyun 
75*4882a593Smuzhiyun enum bt_8821c_2ant_lte_coex_table_type {
76*4882a593Smuzhiyun 	BT_8821C_2ANT_CTT_WL_VS_LTE		= 0x0,
77*4882a593Smuzhiyun 	BT_8821C_2ANT_CTT_BT_VS_LTE		= 0x1,
78*4882a593Smuzhiyun 	BT_8821C_2ANT_CTT_MAX
79*4882a593Smuzhiyun };
80*4882a593Smuzhiyun 
81*4882a593Smuzhiyun enum bt_8821c_2ant_lte_break_table_type {
82*4882a593Smuzhiyun 	BT_8821C_2ANT_LBTT_WL_BREAK_LTE		= 0x0,
83*4882a593Smuzhiyun 	BT_8821C_2ANT_LBTT_BT_BREAK_LTE		= 0x1,
84*4882a593Smuzhiyun 	BT_8821C_2ANT_LBTT_LTE_BREAK_WL		= 0x2,
85*4882a593Smuzhiyun 	BT_8821C_2ANT_LBTT_LTE_BREAK_BT		= 0x3,
86*4882a593Smuzhiyun 	BT_8821C_2ANT_LBTT_MAX
87*4882a593Smuzhiyun };
88*4882a593Smuzhiyun 
89*4882a593Smuzhiyun enum bt_info_src_8821c_2ant {
90*4882a593Smuzhiyun 	BT_8821C_2ANT_INFO_SRC_WIFI_FW		= 0x0,
91*4882a593Smuzhiyun 	BT_8821C_2ANT_INFO_SRC_BT_RSP		= 0x1,
92*4882a593Smuzhiyun 	BT_8821C_2ANT_INFO_SRC_BT_ACT		= 0x2,
93*4882a593Smuzhiyun 	BT_8821C_2ANT_INFO_SRC_MAX
94*4882a593Smuzhiyun };
95*4882a593Smuzhiyun 
96*4882a593Smuzhiyun enum bt_8821c_2ant_bt_status {
97*4882a593Smuzhiyun 	BT_8821C_2ANT_BSTATUS_NCON_IDLE		= 0x0,
98*4882a593Smuzhiyun 	BT_8821C_2ANT_BSTATUS_CON_IDLE		= 0x1,
99*4882a593Smuzhiyun 	BT_8821C_2ANT_BSTATUS_INQ_PAGE		= 0x2,
100*4882a593Smuzhiyun 	BT_8821C_2ANT_BSTATUS_ACL_BUSY		= 0x3,
101*4882a593Smuzhiyun 	BT_8821C_2ANT_BSTATUS_SCO_BUSY		= 0x4,
102*4882a593Smuzhiyun 	BT_8821C_2ANT_BSTATUS_ACL_SCO_BUSY	= 0x5,
103*4882a593Smuzhiyun 	BT_8821C_2ANT_BSTATUS_MAX
104*4882a593Smuzhiyun };
105*4882a593Smuzhiyun 
106*4882a593Smuzhiyun enum bt_8821c_2ant_coex_algo {
107*4882a593Smuzhiyun 	BT_8821C_2ANT_COEX_UNDEFINED		= 0x0,
108*4882a593Smuzhiyun 	BT_8821C_2ANT_COEX_SCO			= 0x1,
109*4882a593Smuzhiyun 	BT_8821C_2ANT_COEX_HID			= 0x2,
110*4882a593Smuzhiyun 	BT_8821C_2ANT_COEX_A2DP			= 0x3,
111*4882a593Smuzhiyun 	BT_8821C_2ANT_COEX_A2DP_PANHS		= 0x4,
112*4882a593Smuzhiyun 	BT_8821C_2ANT_COEX_PAN			= 0x5,
113*4882a593Smuzhiyun 	BT_8821C_2ANT_COEX_PANHS		= 0x6,
114*4882a593Smuzhiyun 	BT_8821C_2ANT_COEX_PAN_A2DP		= 0x7,
115*4882a593Smuzhiyun 	BT_8821C_2ANT_COEX_PAN_HID		= 0x8,
116*4882a593Smuzhiyun 	BT_8821C_2ANT_COEX_HID_A2DP_PAN		= 0x9,
117*4882a593Smuzhiyun 	BT_8821C_2ANT_COEX_HID_A2DP		= 0xa,
118*4882a593Smuzhiyun 	BT_8821C_2ANT_COEX_NOPROFILEBUSY	= 0xb,
119*4882a593Smuzhiyun 	BT_8821C_2ANT_COEX_A2DPSINK		= 0xc,
120*4882a593Smuzhiyun 	BT_8821C_2ANT_COEX_MAX
121*4882a593Smuzhiyun };
122*4882a593Smuzhiyun 
123*4882a593Smuzhiyun enum bt_8821c_2ant_ext_ant_switch_type {
124*4882a593Smuzhiyun 	BT_8821C_2ANT_USE_DPDT		= 0x0,
125*4882a593Smuzhiyun 	BT_8821C_2ANT_USE_SPDT		= 0x1,
126*4882a593Smuzhiyun 	BT_8821C_2ANT_SWITCH_NONE	= 0x2,
127*4882a593Smuzhiyun 	BT_8821C_2ANT_SWITCH_MAX
128*4882a593Smuzhiyun };
129*4882a593Smuzhiyun 
130*4882a593Smuzhiyun enum bt_8821c_2ant_ext_ant_switch_ctrl_type {
131*4882a593Smuzhiyun 	BT_8821C_2ANT_CTRL_BY_BBSW	= 0x0,
132*4882a593Smuzhiyun 	BT_8821C_2ANT_CTRL_BY_PTA	= 0x1,
133*4882a593Smuzhiyun 	BT_8821C_2ANT_CTRL_BY_ANTDIV	= 0x2,
134*4882a593Smuzhiyun 	BT_8821C_2ANT_CTRL_BY_MAC	= 0x3,
135*4882a593Smuzhiyun 	BT_8821C_2ANT_CTRL_BY_BT	= 0x4,
136*4882a593Smuzhiyun 	BT_8821C_2ANT_CTRL_BY_FW	= 0x5,
137*4882a593Smuzhiyun 	BT_8821C_2ANT_CTRL_MAX
138*4882a593Smuzhiyun };
139*4882a593Smuzhiyun 
140*4882a593Smuzhiyun enum bt_8821c_2ant_ext_ant_switch_pos_type {
141*4882a593Smuzhiyun 	BT_8821C_2ANT_TO_BT		= 0x0,
142*4882a593Smuzhiyun 	BT_8821C_2ANT_TO_WLG		= 0x1,
143*4882a593Smuzhiyun 	BT_8821C_2ANT_TO_WLA		= 0x2,
144*4882a593Smuzhiyun 	BT_8821C_2ANT_TO_NOCARE		= 0x3,
145*4882a593Smuzhiyun 	BT_8821C_2ANT_TO_MAX
146*4882a593Smuzhiyun };
147*4882a593Smuzhiyun 
148*4882a593Smuzhiyun enum bt_8821c_2ant_phase {
149*4882a593Smuzhiyun 	BT_8821C_2ANT_PHASE_INIT		= 0x0,
150*4882a593Smuzhiyun 	BT_8821C_2ANT_PHASE_WONLY		= 0x1,
151*4882a593Smuzhiyun 	BT_8821C_2ANT_PHASE_WOFF		= 0x2,
152*4882a593Smuzhiyun 	BT_8821C_2ANT_PHASE_2G			= 0x3,
153*4882a593Smuzhiyun 	BT_8821C_2ANT_PHASE_5G			= 0x4,
154*4882a593Smuzhiyun 	BT_8821C_2ANT_PHASE_BTMP		= 0x5,
155*4882a593Smuzhiyun 	BT_8821C_2ANT_PHASE_ANTDET		= 0x6,
156*4882a593Smuzhiyun 	BT_8821C_2ANT_PHASE_POWERON		= 0x7,
157*4882a593Smuzhiyun 	BT_8821C_2ANT_PHASE_MAX
158*4882a593Smuzhiyun };
159*4882a593Smuzhiyun 
160*4882a593Smuzhiyun enum bt_8821c_2ant_scoreboard {
161*4882a593Smuzhiyun 	BT_8821C_2ANT_SCBD_ACTIVE		= BIT(0),
162*4882a593Smuzhiyun 	BT_8821C_2ANT_SCBD_ONOFF		= BIT(1),
163*4882a593Smuzhiyun 	BT_8821C_2ANT_SCBD_SCAN			= BIT(2),
164*4882a593Smuzhiyun 	BT_8821C_2ANT_SCBD_UNDERTEST		= BIT(3),
165*4882a593Smuzhiyun 	BT_8821C_2ANT_SCBD_RXGAIN		= BIT(4),
166*4882a593Smuzhiyun 	BT_8821C_2ANT_SCBD_WLBUSY		= BIT(6),
167*4882a593Smuzhiyun 	BT_8821C_2ANT_SCBD_TDMA			= BIT(9),
168*4882a593Smuzhiyun 	BT_8821C_2ANT_SCBD_BTCQDDR		= BIT(10),
169*4882a593Smuzhiyun 	BT_8821C_2ANT_SCBD_ALL			= 0xffff
170*4882a593Smuzhiyun };
171*4882a593Smuzhiyun 
172*4882a593Smuzhiyun enum bt_8821c_2ant_RUNREASON {
173*4882a593Smuzhiyun 	BT_8821C_2ANT_RSN_2GSCANSTART		= 0x0,
174*4882a593Smuzhiyun 	BT_8821C_2ANT_RSN_5GSCANSTART		= 0x1,
175*4882a593Smuzhiyun 	BT_8821C_2ANT_RSN_SCANFINISH		= 0x2,
176*4882a593Smuzhiyun 	BT_8821C_2ANT_RSN_2GSWITCHBAND		= 0x3,
177*4882a593Smuzhiyun 	BT_8821C_2ANT_RSN_5GSWITCHBAND		= 0x4,
178*4882a593Smuzhiyun 	BT_8821C_2ANT_RSN_2GCONSTART		= 0x5,
179*4882a593Smuzhiyun 	BT_8821C_2ANT_RSN_5GCONSTART		= 0x6,
180*4882a593Smuzhiyun 	BT_8821C_2ANT_RSN_2GCONFINISH		= 0x7,
181*4882a593Smuzhiyun 	BT_8821C_2ANT_RSN_5GCONFINISH		= 0x8,
182*4882a593Smuzhiyun 	BT_8821C_2ANT_RSN_2GMEDIA		= 0x9,
183*4882a593Smuzhiyun 	BT_8821C_2ANT_RSN_5GMEDIA		= 0xa,
184*4882a593Smuzhiyun 	BT_8821C_2ANT_RSN_MEDIADISCON		= 0xb,
185*4882a593Smuzhiyun 	BT_8821C_2ANT_RSN_2GSPECIALPKT		= 0xc,
186*4882a593Smuzhiyun 	BT_8821C_2ANT_RSN_5GSPECIALPKT		= 0xd,
187*4882a593Smuzhiyun 	BT_8821C_2ANT_RSN_BTINFO		= 0xe,
188*4882a593Smuzhiyun 	BT_8821C_2ANT_RSN_PERIODICAL		= 0xf,
189*4882a593Smuzhiyun 	BT_8821C_2ANT_RSN_PNP			= 0x10,
190*4882a593Smuzhiyun 	BT_8821C_2ANT_RSN_LPS			= 0x11,
191*4882a593Smuzhiyun 	BT_8821C_2ANT_RSN_MAX
192*4882a593Smuzhiyun };
193*4882a593Smuzhiyun 
194*4882a593Smuzhiyun enum bt_8821c_2ant_WL_LINK_MODE {
195*4882a593Smuzhiyun 	BT_8821C_2ANT_WLINK_2G1PORT		= 0x0,
196*4882a593Smuzhiyun 	BT_8821C_2ANT_WLINK_2GMPORT		= 0x1,
197*4882a593Smuzhiyun 	BT_8821C_2ANT_WLINK_25GMPORT		= 0x2,
198*4882a593Smuzhiyun 	BT_8821C_2ANT_WLINK_5G			= 0x3,
199*4882a593Smuzhiyun 	BT_8821C_2ANT_WLINK_2GGO		= 0x4,
200*4882a593Smuzhiyun 	BT_8821C_2ANT_WLINK_BTMR		= 0x5,
201*4882a593Smuzhiyun 	BT_8821C_2ANT_WLINK_MAX
202*4882a593Smuzhiyun };
203*4882a593Smuzhiyun 
204*4882a593Smuzhiyun struct coex_dm_8821c_2ant {
205*4882a593Smuzhiyun 	/* hw setting */
206*4882a593Smuzhiyun 	u32		cur_ant_pos_type;
207*4882a593Smuzhiyun 	/* fw mechanism */
208*4882a593Smuzhiyun 
209*4882a593Smuzhiyun 	u8		cur_bt_pwr_lvl;
210*4882a593Smuzhiyun 	u8		cur_wl_pwr_lvl;
211*4882a593Smuzhiyun 
212*4882a593Smuzhiyun 	boolean		cur_ignore_wlan_act;
213*4882a593Smuzhiyun 
214*4882a593Smuzhiyun 	u8		cur_ps_tdma;
215*4882a593Smuzhiyun 	u8		ps_tdma_para[5];
216*4882a593Smuzhiyun 	boolean		reset_tdma_adjust;
217*4882a593Smuzhiyun 	boolean		cur_ps_tdma_on;
218*4882a593Smuzhiyun 	boolean		cur_bt_auto_report;
219*4882a593Smuzhiyun 
220*4882a593Smuzhiyun 	/* sw mechanism */
221*4882a593Smuzhiyun 	boolean		cur_low_penalty_ra;
222*4882a593Smuzhiyun 
223*4882a593Smuzhiyun 	u32		cur_val0x6c0;
224*4882a593Smuzhiyun 	u32		cur_val0x6c4;
225*4882a593Smuzhiyun 	u32		cur_val0x6c8;
226*4882a593Smuzhiyun 	u8		cur_val0x6cc;
227*4882a593Smuzhiyun 
228*4882a593Smuzhiyun 	/* algorithm related */
229*4882a593Smuzhiyun 	u8		cur_algorithm;
230*4882a593Smuzhiyun 	u8		bt_status;
231*4882a593Smuzhiyun 	u8		wifi_chnl_info[3];
232*4882a593Smuzhiyun 
233*4882a593Smuzhiyun 	u8		cur_lps;
234*4882a593Smuzhiyun 	u8		cur_rpwm;
235*4882a593Smuzhiyun 
236*4882a593Smuzhiyun 	u32		arp_cnt;
237*4882a593Smuzhiyun 
238*4882a593Smuzhiyun 	u32		cur_ext_ant_switch_status;
239*4882a593Smuzhiyun 
240*4882a593Smuzhiyun 	u8		cur_antdiv_type;
241*4882a593Smuzhiyun 	u32		setting_tdma;
242*4882a593Smuzhiyun };
243*4882a593Smuzhiyun 
244*4882a593Smuzhiyun struct coex_sta_8821c_2ant {
245*4882a593Smuzhiyun 	boolean	bt_disabled;
246*4882a593Smuzhiyun 	boolean	bt_link_exist;
247*4882a593Smuzhiyun 	boolean	sco_exist;
248*4882a593Smuzhiyun 	boolean	a2dp_exist;
249*4882a593Smuzhiyun 	boolean	hid_exist;
250*4882a593Smuzhiyun 	boolean	pan_exist;
251*4882a593Smuzhiyun 	boolean	msft_mr_exist;
252*4882a593Smuzhiyun 	boolean bt_a2dp_active;
253*4882a593Smuzhiyun 
254*4882a593Smuzhiyun 	boolean	under_lps;
255*4882a593Smuzhiyun 	boolean	under_ips;
256*4882a593Smuzhiyun 	u32	high_priority_tx;
257*4882a593Smuzhiyun 	u32	high_priority_rx;
258*4882a593Smuzhiyun 	u32	low_priority_tx;
259*4882a593Smuzhiyun 	u32	low_priority_rx;
260*4882a593Smuzhiyun 	boolean bt_ctr_ok;
261*4882a593Smuzhiyun 	boolean	is_hi_pri_rx_overhead;
262*4882a593Smuzhiyun 	u8	bt_rssi;
263*4882a593Smuzhiyun 	u8	pre_bt_rssi_state;
264*4882a593Smuzhiyun 	u8	pre_wifi_rssi_state[4];
265*4882a593Smuzhiyun 	u8	bt_info_c2h[BT_8821C_2ANT_INFO_SRC_MAX][BTC_BTINFO_LENGTH_MAX];
266*4882a593Smuzhiyun 	u32	bt_info_c2h_cnt[BT_8821C_2ANT_INFO_SRC_MAX];
267*4882a593Smuzhiyun 	boolean	bt_whck_test;
268*4882a593Smuzhiyun 	boolean	c2h_bt_inquiry_page;
269*4882a593Smuzhiyun 	boolean bt_inq_page_pre;
270*4882a593Smuzhiyun 	boolean bt_inq_page_remain;
271*4882a593Smuzhiyun 	boolean	c2h_bt_remote_name_req;
272*4882a593Smuzhiyun 
273*4882a593Smuzhiyun 	u8	bt_info_lb2;
274*4882a593Smuzhiyun 	u8	bt_info_lb3;
275*4882a593Smuzhiyun 	u8	bt_info_hb0;
276*4882a593Smuzhiyun 	u8	bt_info_hb1;
277*4882a593Smuzhiyun 	u8	bt_info_hb2;
278*4882a593Smuzhiyun 	u8	bt_info_hb3;
279*4882a593Smuzhiyun 
280*4882a593Smuzhiyun 	u32	pop_event_cnt;
281*4882a593Smuzhiyun 	u8	scan_ap_num;
282*4882a593Smuzhiyun 	u8	bt_retry_cnt;
283*4882a593Smuzhiyun 
284*4882a593Smuzhiyun 	u32	crc_ok_cck;
285*4882a593Smuzhiyun 	u32	crc_ok_11g;
286*4882a593Smuzhiyun 	u32	crc_ok_11n;
287*4882a593Smuzhiyun 	u32	crc_ok_11n_vht;
288*4882a593Smuzhiyun 	u32	crc_err_cck;
289*4882a593Smuzhiyun 	u32	crc_err_11g;
290*4882a593Smuzhiyun 	u32	crc_err_11n;
291*4882a593Smuzhiyun 	u32	crc_err_11n_vht;
292*4882a593Smuzhiyun 	u32	cnt_crcok_max_in_10s;
293*4882a593Smuzhiyun 
294*4882a593Smuzhiyun 	boolean	cck_lock;
295*4882a593Smuzhiyun 	boolean	cck_lock_ever;
296*4882a593Smuzhiyun 	boolean	cck_lock_warn;
297*4882a593Smuzhiyun 
298*4882a593Smuzhiyun 	u8	coex_table_type;
299*4882a593Smuzhiyun 	boolean	force_lps_ctrl;
300*4882a593Smuzhiyun 
301*4882a593Smuzhiyun 	u8	dis_ver_info_cnt;
302*4882a593Smuzhiyun 
303*4882a593Smuzhiyun 	u8	a2dp_bit_pool;
304*4882a593Smuzhiyun 	u8	kt_ver;
305*4882a593Smuzhiyun 
306*4882a593Smuzhiyun 	boolean	concurrent_rx_mode_on;
307*4882a593Smuzhiyun 
308*4882a593Smuzhiyun 	u16	score_board;
309*4882a593Smuzhiyun 	u8	isolation_btween_wb;   /* 0~ 50 */
310*4882a593Smuzhiyun 	u8	wifi_coex_thres;
311*4882a593Smuzhiyun 	u8	bt_coex_thres;
312*4882a593Smuzhiyun 	u8	wifi_coex_thres2;
313*4882a593Smuzhiyun 	u8	bt_coex_thres2;
314*4882a593Smuzhiyun 
315*4882a593Smuzhiyun 	u8	num_of_profile;
316*4882a593Smuzhiyun 	boolean	acl_busy;
317*4882a593Smuzhiyun 	boolean	bt_create_connection;
318*4882a593Smuzhiyun 
319*4882a593Smuzhiyun 	boolean	wifi_high_pri_task1;
320*4882a593Smuzhiyun 	boolean	wifi_high_pri_task2;
321*4882a593Smuzhiyun 
322*4882a593Smuzhiyun 	u32	specific_pkt_period_cnt;
323*4882a593Smuzhiyun 	u32	bt_coex_supported_feature;
324*4882a593Smuzhiyun 	u32	bt_coex_supported_version;
325*4882a593Smuzhiyun 
326*4882a593Smuzhiyun 	u8	bt_ble_scan_type;
327*4882a593Smuzhiyun 	u32	bt_ble_scan_para[3];
328*4882a593Smuzhiyun 
329*4882a593Smuzhiyun 	boolean	run_time_state;
330*4882a593Smuzhiyun 	boolean	freeze_coexrun_by_btinfo;
331*4882a593Smuzhiyun 
332*4882a593Smuzhiyun 	boolean	is_A2DP_3M;
333*4882a593Smuzhiyun 	boolean	voice_over_HOGP;
334*4882a593Smuzhiyun 	boolean	bt_418_hid_exist;
335*4882a593Smuzhiyun 	boolean	bt_ble_hid_exist;
336*4882a593Smuzhiyun 	u8	forbidden_slot;
337*4882a593Smuzhiyun 	u8	hid_busy_num;
338*4882a593Smuzhiyun 	u8	hid_pair_cnt;
339*4882a593Smuzhiyun 
340*4882a593Smuzhiyun 	u32	cnt_remote_name_req;
341*4882a593Smuzhiyun 	u32	cnt_setup_link;
342*4882a593Smuzhiyun 	u32	cnt_reinit;
343*4882a593Smuzhiyun 	u32	cnt_ign_wlan_act;
344*4882a593Smuzhiyun 	u32	cnt_page;
345*4882a593Smuzhiyun 	u32	cnt_role_switch;
346*4882a593Smuzhiyun 	u32	cnt_wl_fw_notify;
347*4882a593Smuzhiyun 
348*4882a593Smuzhiyun 	u16	bt_reg_vendor_ac;
349*4882a593Smuzhiyun 	u16	bt_reg_vendor_ae;
350*4882a593Smuzhiyun 
351*4882a593Smuzhiyun 	boolean	is_setup_link;
352*4882a593Smuzhiyun 	u8	wl_noisy_level;
353*4882a593Smuzhiyun 	u32	gnt_error_cnt;
354*4882a593Smuzhiyun 
355*4882a593Smuzhiyun 	u8	bt_afh_map[10];
356*4882a593Smuzhiyun 	u8	bt_relink_downcount;
357*4882a593Smuzhiyun 	u8	bt_inq_page_downcount;
358*4882a593Smuzhiyun 	boolean	is_tdma_btautoslot;
359*4882a593Smuzhiyun 
360*4882a593Smuzhiyun 	boolean	is_esco_mode;
361*4882a593Smuzhiyun 	u8	switch_band_notify_to;
362*4882a593Smuzhiyun 
363*4882a593Smuzhiyun 	boolean	is_hid_low_pri_tx_overhead;
364*4882a593Smuzhiyun 	boolean	is_bt_multi_link;
365*4882a593Smuzhiyun 	boolean	is_bt_a2dp_sink;
366*4882a593Smuzhiyun 	boolean	is_set_ps_state_fail;
367*4882a593Smuzhiyun 	u8	cnt_set_ps_state_fail;
368*4882a593Smuzhiyun 
369*4882a593Smuzhiyun 	u8	wl_fw_dbg_info[10];
370*4882a593Smuzhiyun 	u8	wl_rx_rate;
371*4882a593Smuzhiyun 	u8	wl_tx_rate;
372*4882a593Smuzhiyun 	u8	wl_rts_rx_rate;
373*4882a593Smuzhiyun 	u8	wl_center_channel;
374*4882a593Smuzhiyun 	u8	wl_tx_macid;
375*4882a593Smuzhiyun 	u8	wl_tx_retry_ratio;
376*4882a593Smuzhiyun 
377*4882a593Smuzhiyun 	u16	score_board_WB;
378*4882a593Smuzhiyun 	boolean	is_hid_rcu;
379*4882a593Smuzhiyun 	u8	bt_a2dp_vendor_id;
380*4882a593Smuzhiyun 	u32	bt_a2dp_device_name;
381*4882a593Smuzhiyun 	u32	bt_a2dp_flush_time;
382*4882a593Smuzhiyun 	boolean	is_ble_scan_en;
383*4882a593Smuzhiyun 
384*4882a593Smuzhiyun 	boolean	is_bt_opp_exist;
385*4882a593Smuzhiyun 	boolean	gl_wifi_busy;
386*4882a593Smuzhiyun 	u8	connect_ap_period_cnt;
387*4882a593Smuzhiyun 
388*4882a593Smuzhiyun 	boolean	is_bt_reenable;
389*4882a593Smuzhiyun 	u8	cnt_bt_reenable;
390*4882a593Smuzhiyun 	boolean	is_wifi_linkscan_process;
391*4882a593Smuzhiyun 	u8	wl_coex_mode;
392*4882a593Smuzhiyun 	u8	wl_pnp_wakeup_downcnt;
393*4882a593Smuzhiyun 	u32	coex_run_cnt;
394*4882a593Smuzhiyun 	boolean	is_no_wl_5ms_extend;
395*4882a593Smuzhiyun 
396*4882a593Smuzhiyun 	u16	wl_0x42a_backup;
397*4882a593Smuzhiyun 	u32	wl_0x430_backup;
398*4882a593Smuzhiyun 	u32	wl_0x434_backup;
399*4882a593Smuzhiyun 	u8	wl_0x455_backup;
400*4882a593Smuzhiyun 
401*4882a593Smuzhiyun 	boolean	wl_tx_limit_en;
402*4882a593Smuzhiyun 	boolean	wl_ampdu_limit_en;
403*4882a593Smuzhiyun 	boolean	wl_rxagg_limit_en;
404*4882a593Smuzhiyun 	u8	wl_rxagg_size;
405*4882a593Smuzhiyun 	u8	coex_run_reason;
406*4882a593Smuzhiyun 
407*4882a593Smuzhiyun 	u8	tdma_timer_base;
408*4882a593Smuzhiyun 	boolean wl_slot_toggle;
409*4882a593Smuzhiyun 	boolean wl_slot_toggle_change; /* if toggle to no-toggle */
410*4882a593Smuzhiyun 	u8	wl_iot_peer;
411*4882a593Smuzhiyun };
412*4882a593Smuzhiyun 
413*4882a593Smuzhiyun #define  BT_8821C_2ANT_EXT_BAND_SWITCH_USE_DPDT	0
414*4882a593Smuzhiyun #define  BT_8821C_2ANT_EXT_BAND_SWITCH_USE_SPDT	1
415*4882a593Smuzhiyun 
416*4882a593Smuzhiyun struct rfe_type_8821c_2ant {
417*4882a593Smuzhiyun 	u8		rfe_module_type;
418*4882a593Smuzhiyun 	boolean		ext_ant_switch_exist;
419*4882a593Smuzhiyun 	/* 0:DPDT, 1:SPDT */
420*4882a593Smuzhiyun 	u8		ext_ant_switch_type;
421*4882a593Smuzhiyun 	/*  iF 0: DPDT_P=0, DPDT_N=1 => BTG to Main, WL_A+G to Aux */
422*4882a593Smuzhiyun 	u8		ext_ant_switch_ctrl_polarity;
423*4882a593Smuzhiyun 
424*4882a593Smuzhiyun 	boolean		ext_band_switch_exist;
425*4882a593Smuzhiyun 	/* 0:DPDT, 1:SPDT */
426*4882a593Smuzhiyun 	u8		ext_band_switch_type;
427*4882a593Smuzhiyun 	u8		ext_band_switch_ctrl_polarity;
428*4882a593Smuzhiyun 
429*4882a593Smuzhiyun 	boolean		ant_at_main_port;
430*4882a593Smuzhiyun 
431*4882a593Smuzhiyun 	/*  If TRUE:  WLG at BTG, If FALSE: WLG at WLAG */
432*4882a593Smuzhiyun 	boolean		wlg_locate_at_btg;
433*4882a593Smuzhiyun 
434*4882a593Smuzhiyun 	/* If diversity on */
435*4882a593Smuzhiyun 	boolean		ext_ant_switch_diversity;
436*4882a593Smuzhiyun };
437*4882a593Smuzhiyun 
438*4882a593Smuzhiyun struct wifi_link_info_8821c_2ant {
439*4882a593Smuzhiyun 	u8	num_of_active_port;
440*4882a593Smuzhiyun 	u32	port_connect_status;
441*4882a593Smuzhiyun 	boolean	is_all_under_5g;
442*4882a593Smuzhiyun 	boolean	is_mcc_25g;
443*4882a593Smuzhiyun 	boolean	is_p2p_connected;
444*4882a593Smuzhiyun 	boolean is_connected;
445*4882a593Smuzhiyun };
446*4882a593Smuzhiyun 
447*4882a593Smuzhiyun /* *******************************************
448*4882a593Smuzhiyun  * The following is interface which will notify coex module.
449*4882a593Smuzhiyun  * ******************************************* */
450*4882a593Smuzhiyun void ex_halbtc8821c2ant_power_on_setting(struct btc_coexist *btc);
451*4882a593Smuzhiyun void ex_halbtc8821c2ant_pre_load_firmware(struct btc_coexist *btc);
452*4882a593Smuzhiyun void ex_halbtc8821c2ant_init_hw_config(struct btc_coexist *btc,
453*4882a593Smuzhiyun 				       boolean wifi_only);
454*4882a593Smuzhiyun void ex_halbtc8821c2ant_init_coex_dm(struct btc_coexist *btc);
455*4882a593Smuzhiyun void ex_halbtc8821c2ant_ips_notify(struct btc_coexist *btc,
456*4882a593Smuzhiyun 				   u8 type);
457*4882a593Smuzhiyun void ex_halbtc8821c2ant_lps_notify(struct btc_coexist *btc,
458*4882a593Smuzhiyun 				   u8 type);
459*4882a593Smuzhiyun void ex_halbtc8821c2ant_scan_notify(struct btc_coexist *btc,
460*4882a593Smuzhiyun 				    u8 type);
461*4882a593Smuzhiyun void ex_halbtc8821c2ant_switchband_notify(struct btc_coexist *btc,
462*4882a593Smuzhiyun 					  u8 type);
463*4882a593Smuzhiyun void ex_halbtc8821c2ant_connect_notify(struct btc_coexist *btc,
464*4882a593Smuzhiyun 				       u8 type);
465*4882a593Smuzhiyun void ex_halbtc8821c2ant_media_status_notify(struct btc_coexist *btc,
466*4882a593Smuzhiyun 					    u8 type);
467*4882a593Smuzhiyun void ex_halbtc8821c2ant_specific_packet_notify(struct btc_coexist *btc,
468*4882a593Smuzhiyun 					       u8 type);
469*4882a593Smuzhiyun void ex_halbtc8821c2ant_bt_info_notify(struct btc_coexist *btc,
470*4882a593Smuzhiyun 				       u8 *tmp_buf,  u8 length);
471*4882a593Smuzhiyun void ex_halbtc8821c2ant_wl_fwdbginfo_notify(struct btc_coexist *btc,
472*4882a593Smuzhiyun 					    u8 *tmp_buf, u8 length);
473*4882a593Smuzhiyun void ex_halbtc8821c2ant_rx_rate_change_notify(struct btc_coexist *btc,
474*4882a593Smuzhiyun 					      BOOLEAN is_data_frame,
475*4882a593Smuzhiyun 					      u8 btc_rate_id);
476*4882a593Smuzhiyun void ex_halbtc8821c2ant_tx_rate_change_notify(struct btc_coexist *btc,
477*4882a593Smuzhiyun 					      u8 tx_rate,
478*4882a593Smuzhiyun 					      u8 tx_retry_ratio, u8 macid);
479*4882a593Smuzhiyun void ex_halbtc8821c2ant_rf_status_notify(struct btc_coexist *btc,
480*4882a593Smuzhiyun 					 u8 type);
481*4882a593Smuzhiyun void ex_halbtc8821c2ant_halt_notify(struct btc_coexist *btc);
482*4882a593Smuzhiyun void ex_halbtc8821c2ant_pnp_notify(struct btc_coexist *btc,
483*4882a593Smuzhiyun 				   u8 pnp_state);
484*4882a593Smuzhiyun void ex_halbtc8821c2ant_periodical(struct btc_coexist *btc);
485*4882a593Smuzhiyun void ex_halbtc8821c2ant_display_simple_coex_info(struct btc_coexist *btc);
486*4882a593Smuzhiyun void ex_halbtc8821c2ant_display_coex_info(struct btc_coexist *btc);
487*4882a593Smuzhiyun 
488*4882a593Smuzhiyun #else
489*4882a593Smuzhiyun #define ex_halbtc8821c2ant_power_on_setting(btc)
490*4882a593Smuzhiyun #define ex_halbtc8821c2ant_pre_load_firmware(btc)
491*4882a593Smuzhiyun #define ex_halbtc8821c2ant_init_hw_config(btc, wifi_only)
492*4882a593Smuzhiyun #define ex_halbtc8821c2ant_init_coex_dm(btc)
493*4882a593Smuzhiyun #define ex_halbtc8821c2ant_ips_notify(btc, type)
494*4882a593Smuzhiyun #define ex_halbtc8821c2ant_lps_notify(btc, type)
495*4882a593Smuzhiyun #define ex_halbtc8821c2ant_scan_notify(btc, type)
496*4882a593Smuzhiyun #define ex_halbtc8821c2ant_switchband_notify(btc, type)
497*4882a593Smuzhiyun #define ex_halbtc8821c2ant_connect_notify(btc, type)
498*4882a593Smuzhiyun #define ex_halbtc8821c2ant_media_status_notify(btc, type)
499*4882a593Smuzhiyun #define ex_halbtc8821c2ant_specific_packet_notify(btc, type)
500*4882a593Smuzhiyun #define ex_halbtc8821c2ant_bt_info_notify(btc, tmp_buf, length)
501*4882a593Smuzhiyun #define ex_halbtc8821c2ant_wl_fwdbginfo_notify(btc, tmp_buf, length)
502*4882a593Smuzhiyun #define ex_halbtc8821c2ant_rx_rate_change_notify(btc, is_data_frame,     \
503*4882a593Smuzhiyun 						 btc_rate_id)
504*4882a593Smuzhiyun #define ex_halbtc8821c2ant_tx_rate_change_notify(btcoexist, tx_rate,     \
505*4882a593Smuzhiyun 						tx_retry_ratio, macid)
506*4882a593Smuzhiyun #define ex_halbtc8821c2ant_rf_status_notify(btc, type)
507*4882a593Smuzhiyun #define ex_halbtc8821c2ant_halt_notify(btc)
508*4882a593Smuzhiyun #define ex_halbtc8821c2ant_pnp_notify(btc, pnp_state)
509*4882a593Smuzhiyun #define ex_halbtc8821c2ant_periodical(btc)
510*4882a593Smuzhiyun #define ex_halbtc8821c2ant_display_simple_coex_info(btc)
511*4882a593Smuzhiyun #define ex_halbtc8821c2ant_display_coex_info(btc)
512*4882a593Smuzhiyun #endif
513*4882a593Smuzhiyun 
514*4882a593Smuzhiyun #endif
515*4882a593Smuzhiyun 
516*4882a593Smuzhiyun 
517