xref: /OK3568_Linux_fs/kernel/drivers/net/wireless/rockchip_wlan/rtl8723bs/hal/btc/halbtc8812a2ant.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /******************************************************************************
3  *
4  * Copyright(c) 2016 - 2017 Realtek Corporation.
5  *
6  * This program is free software; you can redistribute it and/or modify it
7  * under the terms of version 2 of the GNU General Public License as
8  * published by the Free Software Foundation.
9  *
10  * This program is distributed in the hope that it will be useful, but WITHOUT
11  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
13  * more details.
14  *
15  *****************************************************************************/
16 
17 #if (BT_SUPPORT == 1 && COEX_SUPPORT == 1)
18 
19 #if (RTL8812A_SUPPORT == 1)
20 
21 /* *******************************************
22  * The following is for 8812A 2Ant BT Co-exist definition
23  * ******************************************* */
24 #define	BT_AUTO_REPORT_ONLY_8812A_2ANT				0
25 
26 #define	BT_INFO_8812A_2ANT_B_FTP						BIT(7)
27 #define	BT_INFO_8812A_2ANT_B_A2DP					BIT(6)
28 #define	BT_INFO_8812A_2ANT_B_HID						BIT(5)
29 #define	BT_INFO_8812A_2ANT_B_SCO_BUSY				BIT(4)
30 #define	BT_INFO_8812A_2ANT_B_ACL_BUSY				BIT(3)
31 #define	BT_INFO_8812A_2ANT_B_INQ_PAGE				BIT(2)
32 #define	BT_INFO_8812A_2ANT_B_SCO_ESCO				BIT(1)
33 #define	BT_INFO_8812A_2ANT_B_CONNECTION				BIT(0)
34 
35 #define	BT_INFO_8812A_2ANT_A2DP_BASIC_RATE(_BT_INFO_EXT_)	\
36 		(((_BT_INFO_EXT_&BIT(0))) ? true : false)
37 
38 #define		BTC_RSSI_COEX_THRESH_TOL_8812A_2ANT		2
39 #define	NOISY_AP_NUM_THRESH_8812A						50
40 
41 enum bt_info_src_8812a_2ant {
42 	BT_INFO_SRC_8812A_2ANT_WIFI_FW			= 0x0,
43 	BT_INFO_SRC_8812A_2ANT_BT_RSP				= 0x1,
44 	BT_INFO_SRC_8812A_2ANT_BT_ACTIVE_SEND		= 0x2,
45 	BT_INFO_SRC_8812A_2ANT_MAX
46 };
47 
48 enum bt_8812a_2ant_bt_status {
49 	BT_8812A_2ANT_BT_STATUS_NON_CONNECTED_IDLE	= 0x0,
50 	BT_8812A_2ANT_BT_STATUS_CONNECTED_IDLE		= 0x1,
51 	BT_8812A_2ANT_BT_STATUS_INQ_PAGE				= 0x2,
52 	BT_8812A_2ANT_BT_STATUS_ACL_BUSY				= 0x3,
53 	BT_8812A_2ANT_BT_STATUS_SCO_BUSY				= 0x4,
54 	BT_8812A_2ANT_BT_STATUS_ACL_SCO_BUSY			= 0x5,
55 	BT_8812A_2ANT_BT_STATUS_MAX
56 };
57 
58 enum bt_8812a_2ant_coex_algo {
59 	BT_8812A_2ANT_COEX_ALGO_UNDEFINED		= 0x0,
60 	BT_8812A_2ANT_COEX_ALGO_SCO				= 0x1,
61 	BT_8812A_2ANT_COEX_ALGO_SCO_HID		= 0x2,
62 	BT_8812A_2ANT_COEX_ALGO_HID				= 0x3,
63 	BT_8812A_2ANT_COEX_ALGO_A2DP			= 0x4,
64 	BT_8812A_2ANT_COEX_ALGO_A2DP_PANHS		= 0x5,
65 	BT_8812A_2ANT_COEX_ALGO_PANEDR			= 0x6,
66 	BT_8812A_2ANT_COEX_ALGO_PANHS			= 0x7,
67 	BT_8812A_2ANT_COEX_ALGO_PANEDR_A2DP		= 0x8,
68 	BT_8812A_2ANT_COEX_ALGO_PANEDR_HID		= 0x9,
69 	BT_8812A_2ANT_COEX_ALGO_HID_A2DP_PANEDR	= 0xa,
70 	BT_8812A_2ANT_COEX_ALGO_HID_A2DP_PANHS	= 0xb,
71 	BT_8812A_2ANT_COEX_ALGO_HID_A2DP		= 0xc,
72 	BT_8812A_2ANT_COEX_ALGO_MAX				= 0xd
73 };
74 
75 struct coex_dm_8812a_2ant {
76 	/* fw mechanism */
77 	u8		pre_bt_dec_pwr_lvl;
78 	u8		cur_bt_dec_pwr_lvl;
79 	u8		pre_fw_dac_swing_lvl;
80 	u8		cur_fw_dac_swing_lvl;
81 	boolean		cur_ignore_wlan_act;
82 	boolean		pre_ignore_wlan_act;
83 	u8		pre_ps_tdma;
84 	u8		cur_ps_tdma;
85 	u8		ps_tdma_para[5];
86 	u8		ps_tdma_du_adj_type;
87 	boolean		auto_tdma_adjust;
88 	boolean		auto_tdma_adjust_low_rssi;
89 	boolean		pre_ps_tdma_on;
90 	boolean		cur_ps_tdma_on;
91 	boolean		pre_bt_auto_report;
92 	boolean		cur_bt_auto_report;
93 	u8		pre_lps;
94 	u8		cur_lps;
95 	u8		pre_rpwm;
96 	u8		cur_rpwm;
97 
98 	/* sw mechanism */
99 	boolean		pre_rf_rx_lpf_shrink;
100 	boolean		cur_rf_rx_lpf_shrink;
101 	u32		bt_rf_0x1e_backup;
102 	boolean	pre_low_penalty_ra;
103 	boolean		cur_low_penalty_ra;
104 	boolean		pre_dac_swing_on;
105 	u32		pre_dac_swing_lvl;
106 	boolean		cur_dac_swing_on;
107 	u32		cur_dac_swing_lvl;
108 	boolean		pre_adc_back_off;
109 	boolean		cur_adc_back_off;
110 	boolean	pre_agc_table_en;
111 	boolean		cur_agc_table_en;
112 	u32		pre_val0x6c0;
113 	u32		cur_val0x6c0;
114 	u32		pre_val0x6c4;
115 	u32		cur_val0x6c4;
116 	u32		pre_val0x6c8;
117 	u32		cur_val0x6c8;
118 	u8		pre_val0x6cc;
119 	u8		cur_val0x6cc;
120 	boolean		limited_dig;
121 	u32		backup_arfr_cnt1;	/* Auto Rate Fallback Retry cnt */
122 	u32		backup_arfr_cnt2;	/* Auto Rate Fallback Retry cnt */
123 	u16		backup_retry_limit;
124 	u8		backup_ampdu_max_time;
125 
126 	/* algorithm related */
127 	u8		pre_algorithm;
128 	u8		cur_algorithm;
129 	u8		bt_status;
130 	u8		wifi_chnl_info[3];
131 
132 	u32		pre_ra_mask;
133 	u32		cur_ra_mask;
134 	u8		cur_ra_mask_type;
135 	u8		pre_arfr_type;
136 	u8		cur_arfr_type;
137 	u8		pre_retry_limit_type;
138 	u8		cur_retry_limit_type;
139 	u8		pre_ampdu_time_type;
140 	u8		cur_ampdu_time_type;
141 
142 	boolean	cur_enable_pta;
143 	boolean	pre_enable_pta;
144 };
145 
146 struct coex_sta_8812a_2ant {
147 	boolean					bt_disabled;
148 	boolean					bt_link_exist;
149 	boolean					sco_exist;
150 	boolean					a2dp_exist;
151 	boolean					hid_exist;
152 	boolean					pan_exist;
153 	boolean					acl_busy;
154 
155 	boolean					under_lps;
156 	boolean					under_ips;
157 	u32					high_priority_tx;
158 	u32					high_priority_rx;
159 	u32					low_priority_tx;
160 	u32					low_priority_rx;
161 	u8					bt_rssi;
162 	u8					pre_bt_rssi_state;
163 	u8					pre_wifi_rssi_state[4];
164 	boolean					c2h_bt_info_req_sent;
165 	u8					bt_info_c2h[BT_INFO_SRC_8812A_2ANT_MAX][10];
166 	u32					bt_info_c2h_cnt[BT_INFO_SRC_8812A_2ANT_MAX];
167 	u32					bt_info_query_cnt;
168 	boolean					c2h_bt_inquiry_page;
169 	u8					bt_retry_cnt;
170 	u8					bt_info_ext;
171 	u8					scan_ap_num;
172 	boolean				pre_bt_disabled;
173 	u32					pre_bt_info_c2h_cnt_bt_rsp;
174 	u32					pre_bt_info_c2h_cnt_bt_send;
175 	boolean				force_lps_on;
176 	u32				bt_coex_supported_version;
177 
178 	u32				crc_ok_cck;
179 	u32				crc_ok_11g;
180 	u32				crc_ok_11n;
181 	u32				crc_ok_11n_vht;
182 
183 	u32				crc_err_cck;
184 	u32				crc_err_11g;
185 	u32				crc_err_11n;
186 	u32				crc_err_11n_vht;
187 };
188 
189 /* *******************************************
190  * The following is interface which will notify coex module.
191  * ******************************************* */
192 void ex_halbtc8812a2ant_power_on_setting(IN struct btc_coexist *btcoexist);
193 void ex_halbtc8812a2ant_init_hw_config(IN struct btc_coexist *btcoexist,
194 				       IN boolean wifi_only);
195 void ex_halbtc8812a2ant_init_coex_dm(IN struct btc_coexist *btcoexist);
196 void ex_halbtc8812a2ant_ips_notify(IN struct btc_coexist *btcoexist,
197 				   IN u8 type);
198 void ex_halbtc8812a2ant_lps_notify(IN struct btc_coexist *btcoexist,
199 				   IN u8 type);
200 void ex_halbtc8812a2ant_scan_notify(IN struct btc_coexist *btcoexist,
201 				    IN u8 type);
202 void ex_halbtc8812a2ant_connect_notify(IN struct btc_coexist *btcoexist,
203 				       IN u8 type);
204 void ex_halbtc8812a2ant_media_status_notify(IN struct btc_coexist *btcoexist,
205 		IN u8 type);
206 void ex_halbtc8812a2ant_specific_packet_notify(IN struct btc_coexist *btcoexist,
207 		IN u8 type);
208 void ex_halbtc8812a2ant_bt_info_notify(IN struct btc_coexist *btcoexist,
209 				       IN u8 *tmp_buf, IN u8 length);
210 void ex_halbtc8812a2ant_rf_status_notify(IN struct btc_coexist *btcoexist,
211 		IN u8 type);
212 
213 void ex_halbtc8812a2ant_halt_notify(IN struct btc_coexist *btcoexist);
214 void ex_halbtc8812a2ant_periodical(IN struct btc_coexist *btcoexist);
215 void ex_halbtc8812a2ant_display_coex_info(IN struct btc_coexist *btcoexist);
216 void ex_halbtc8812a2ant_dbg_control(IN struct btc_coexist *btcoexist,
217 				    IN u8 op_code, IN u8 op_len, IN u8 *pdata);
218 void ex_halbtc8812a2ant_pta_off_on_notify(IN struct btc_coexist *btcoexist,
219 		IN u8 bt_status);
220 
221 #else
222 #define	ex_halbtc8812a2ant_power_on_setting(btcoexist)
223 #define	ex_halbtc8812a2ant_init_hw_config(btcoexist, wifi_only)
224 #define	ex_halbtc8812a2ant_init_coex_dm(btcoexist)
225 #define	ex_halbtc8812a2ant_ips_notify(btcoexist, type)
226 #define	ex_halbtc8812a2ant_lps_notify(btcoexist, type)
227 #define	ex_halbtc8812a2ant_scan_notify(btcoexist, type)
228 #define	ex_halbtc8812a2ant_connect_notify(btcoexist, type)
229 #define	ex_halbtc8812a2ant_media_status_notify(btcoexist, type)
230 #define	ex_halbtc8812a2ant_specific_packet_notify(btcoexist, type)
231 #define	ex_halbtc8812a2ant_bt_info_notify(btcoexist, tmp_buf, length)
232 #define	ex_halbtc8812a2ant_rf_status_notify(btcoexist, type)
233 #define	ex_halbtc8812a2ant_halt_notify(btcoexist)
234 #define	ex_halbtc8812a2ant_periodical(btcoexist)
235 #define	ex_halbtc8812a2ant_display_coex_info(btcoexist)
236 #define	ex_halbtc8812a2ant_dbg_control(btcoexist, op_code, op_len, pdata)
237 #define ex_halbtc8812a2ant_pta_off_on_notify(btcoexist, bt_status)
238 
239 #endif
240 
241 #endif
242 
243