1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25#ifndef __HALBTC_OUT_SRC_H__
26#define __HALBTC_OUT_SRC_H__
27
28#include "../wifi.h"
29
30#define BTC_COEX_OFFLOAD 0
31
32#define NORMAL_EXEC false
33#define FORCE_EXEC true
34
35#define BTC_RF_OFF 0x0
36#define BTC_RF_ON 0x1
37
38#define BTC_RF_A RF90_PATH_A
39#define BTC_RF_B RF90_PATH_B
40#define BTC_RF_C RF90_PATH_C
41#define BTC_RF_D RF90_PATH_D
42
43#define BTC_SMSP SINGLEMAC_SINGLEPHY
44#define BTC_DMDP DUALMAC_DUALPHY
45#define BTC_DMSP DUALMAC_SINGLEPHY
46#define BTC_MP_UNKNOWN 0xff
47
48#define IN
49#define OUT
50
51#define BT_TMP_BUF_SIZE 100
52
53#define BT_COEX_ANT_TYPE_PG 0
54#define BT_COEX_ANT_TYPE_ANTDIV 1
55#define BT_COEX_ANT_TYPE_DETECTED 2
56
57#define BTC_MIMO_PS_STATIC 0
58#define BTC_MIMO_PS_DYNAMIC 1
59
60#define BTC_RATE_DISABLE 0
61#define BTC_RATE_ENABLE 1
62
63
64#define BTC_ANT_PATH_WIFI 0
65#define BTC_ANT_PATH_BT 1
66#define BTC_ANT_PATH_PTA 2
67#define BTC_ANT_PATH_WIFI5G 3
68#define BTC_ANT_PATH_AUTO 4
69
70#define BTC_ANT_WIFI_AT_MAIN 0
71#define BTC_ANT_WIFI_AT_AUX 1
72#define BTC_ANT_WIFI_AT_DIVERSITY 2
73
74#define BTC_ANT_WIFI_AT_CPL_MAIN 0
75#define BTC_ANT_WIFI_AT_CPL_AUX 1
76
77enum btc_bt_reg_type {
78 BTC_BT_REG_RF = 0,
79 BTC_BT_REG_MODEM = 1,
80 BTC_BT_REG_BLUEWIZE = 2,
81 BTC_BT_REG_VENDOR = 3,
82 BTC_BT_REG_LE = 4,
83 BTC_BT_REG_MAX
84};
85
86enum btc_chip_interface {
87 BTC_INTF_UNKNOWN = 0,
88 BTC_INTF_PCI = 1,
89 BTC_INTF_USB = 2,
90 BTC_INTF_SDIO = 3,
91 BTC_INTF_GSPI = 4,
92 BTC_INTF_MAX
93};
94
95enum btc_chip_type {
96 BTC_CHIP_UNDEF = 0,
97 BTC_CHIP_CSR_BC4 = 1,
98 BTC_CHIP_CSR_BC8 = 2,
99 BTC_CHIP_RTL8723A = 3,
100 BTC_CHIP_RTL8821 = 4,
101 BTC_CHIP_RTL8723B = 5,
102 BTC_CHIP_MAX
103};
104
105enum btc_msg_type {
106 BTC_MSG_INTERFACE = 0x0,
107 BTC_MSG_ALGORITHM = 0x1,
108 BTC_MSG_MAX
109};
110
111
112#define INTF_INIT BIT0
113#define INTF_NOTIFY BIT2
114
115
116#define ALGO_BT_RSSI_STATE BIT0
117#define ALGO_WIFI_RSSI_STATE BIT1
118#define ALGO_BT_MONITOR BIT2
119#define ALGO_TRACE BIT3
120#define ALGO_TRACE_FW BIT4
121#define ALGO_TRACE_FW_DETAIL BIT5
122#define ALGO_TRACE_FW_EXEC BIT6
123#define ALGO_TRACE_SW BIT7
124#define ALGO_TRACE_SW_DETAIL BIT8
125#define ALGO_TRACE_SW_EXEC BIT9
126
127
128#define WIFI_STA_CONNECTED BIT0
129#define WIFI_AP_CONNECTED BIT1
130#define WIFI_HS_CONNECTED BIT2
131#define WIFI_P2P_GO_CONNECTED BIT3
132#define WIFI_P2P_GC_CONNECTED BIT4
133
134#define BTC_RSSI_HIGH(_rssi_) \
135 ((_rssi_ == BTC_RSSI_STATE_HIGH || \
136 _rssi_ == BTC_RSSI_STATE_STAY_HIGH) ? true : false)
137#define BTC_RSSI_MEDIUM(_rssi_) \
138 ((_rssi_ == BTC_RSSI_STATE_MEDIUM || \
139 _rssi_ == BTC_RSSI_STATE_STAY_MEDIUM) ? true : false)
140#define BTC_RSSI_LOW(_rssi_) \
141 ((_rssi_ == BTC_RSSI_STATE_LOW || \
142 _rssi_ == BTC_RSSI_STATE_STAY_LOW) ? true : false)
143
144enum btc_power_save_type {
145 BTC_PS_WIFI_NATIVE = 0,
146 BTC_PS_LPS_ON = 1,
147 BTC_PS_LPS_OFF = 2,
148 BTC_PS_LPS_MAX
149};
150
151struct btc_board_info {
152
153 u8 bt_chip_type;
154 u8 pg_ant_num;
155 u8 btdm_ant_num;
156 u8 btdm_ant_num_by_ant_det;
157 u8 btdm_ant_pos;
158 u8 single_ant_path;
159 bool tfbga_package;
160 bool btdm_ant_det_finish;
161
162 u8 rfe_type;
163 u8 ant_div_cfg;
164};
165
166enum btc_dbg_opcode {
167 BTC_DBG_SET_COEX_NORMAL = 0x0,
168 BTC_DBG_SET_COEX_WIFI_ONLY = 0x1,
169 BTC_DBG_SET_COEX_BT_ONLY = 0x2,
170 BTC_DBG_MAX
171};
172
173enum btc_rssi_state {
174 BTC_RSSI_STATE_HIGH = 0x0,
175 BTC_RSSI_STATE_MEDIUM = 0x1,
176 BTC_RSSI_STATE_LOW = 0x2,
177 BTC_RSSI_STATE_STAY_HIGH = 0x3,
178 BTC_RSSI_STATE_STAY_MEDIUM = 0x4,
179 BTC_RSSI_STATE_STAY_LOW = 0x5,
180 BTC_RSSI_MAX
181};
182
183enum btc_wifi_role {
184 BTC_ROLE_STATION = 0x0,
185 BTC_ROLE_AP = 0x1,
186 BTC_ROLE_IBSS = 0x2,
187 BTC_ROLE_HS_MODE = 0x3,
188 BTC_ROLE_MAX
189};
190
191enum btc_wireless_freq {
192 BTC_FREQ_2_4G = 0x0,
193 BTC_FREQ_5G = 0x1,
194 BTC_FREQ_MAX
195};
196
197enum btc_wifi_bw_mode {
198 BTC_WIFI_BW_LEGACY = 0x0,
199 BTC_WIFI_BW_HT20 = 0x1,
200 BTC_WIFI_BW_HT40 = 0x2,
201 BTC_WIFI_BW_HT80 = 0x3,
202 BTC_WIFI_BW_MAX
203};
204
205enum btc_wifi_traffic_dir {
206 BTC_WIFI_TRAFFIC_TX = 0x0,
207 BTC_WIFI_TRAFFIC_RX = 0x1,
208 BTC_WIFI_TRAFFIC_MAX
209};
210
211enum btc_wifi_pnp {
212 BTC_WIFI_PNP_WAKE_UP = 0x0,
213 BTC_WIFI_PNP_SLEEP = 0x1,
214 BTC_WIFI_PNP_SLEEP_KEEP_ANT = 0x2,
215 BTC_WIFI_PNP_MAX
216};
217
218enum btc_iot_peer {
219 BTC_IOT_PEER_UNKNOWN = 0,
220 BTC_IOT_PEER_REALTEK = 1,
221 BTC_IOT_PEER_REALTEK_92SE = 2,
222 BTC_IOT_PEER_BROADCOM = 3,
223 BTC_IOT_PEER_RALINK = 4,
224 BTC_IOT_PEER_ATHEROS = 5,
225 BTC_IOT_PEER_CISCO = 6,
226 BTC_IOT_PEER_MERU = 7,
227 BTC_IOT_PEER_MARVELL = 8,
228 BTC_IOT_PEER_REALTEK_SOFTAP = 9,
229 BTC_IOT_PEER_SELF_SOFTAP = 10,
230 BTC_IOT_PEER_AIRGO = 11,
231 BTC_IOT_PEER_REALTEK_JAGUAR_BCUTAP = 12,
232 BTC_IOT_PEER_REALTEK_JAGUAR_CCUTAP = 13,
233 BTC_IOT_PEER_MAX,
234};
235
236
237enum bt_wifi_coex_state {
238 BTC_WIFI_STAT_INIT,
239 BTC_WIFI_STAT_IQK,
240 BTC_WIFI_STAT_NORMAL_OFF,
241 BTC_WIFI_STAT_MP_OFF,
242 BTC_WIFI_STAT_NORMAL,
243 BTC_WIFI_STAT_ANT_DIV,
244 BTC_WIFI_STAT_MAX
245};
246
247enum bt_ant_type {
248 BTC_ANT_TYPE_0,
249 BTC_ANT_TYPE_1,
250 BTC_ANT_TYPE_2,
251 BTC_ANT_TYPE_3,
252 BTC_ANT_TYPE_4,
253 BTC_ANT_TYPE_MAX
254};
255
256enum btc_get_type {
257
258 BTC_GET_BL_HS_OPERATION,
259 BTC_GET_BL_HS_CONNECTING,
260 BTC_GET_BL_WIFI_CONNECTED,
261 BTC_GET_BL_WIFI_BUSY,
262 BTC_GET_BL_WIFI_SCAN,
263 BTC_GET_BL_WIFI_LINK,
264 BTC_GET_BL_WIFI_DHCP,
265 BTC_GET_BL_WIFI_SOFTAP_IDLE,
266 BTC_GET_BL_WIFI_SOFTAP_LINKING,
267 BTC_GET_BL_WIFI_IN_EARLY_SUSPEND,
268 BTC_GET_BL_WIFI_ROAM,
269 BTC_GET_BL_WIFI_4_WAY_PROGRESS,
270 BTC_GET_BL_WIFI_UNDER_5G,
271 BTC_GET_BL_WIFI_AP_MODE_ENABLE,
272 BTC_GET_BL_WIFI_ENABLE_ENCRYPTION,
273 BTC_GET_BL_WIFI_UNDER_B_MODE,
274 BTC_GET_BL_EXT_SWITCH,
275 BTC_GET_BL_WIFI_IS_IN_MP_MODE,
276 BTC_GET_BL_IS_ASUS_8723B,
277 BTC_GET_BL_FW_READY,
278 BTC_GET_BL_RF4CE_CONNECTED,
279
280
281 BTC_GET_S4_WIFI_RSSI,
282 BTC_GET_S4_HS_RSSI,
283
284
285 BTC_GET_U4_WIFI_BW,
286 BTC_GET_U4_WIFI_TRAFFIC_DIRECTION,
287 BTC_GET_U4_WIFI_FW_VER,
288 BTC_GET_U4_WIFI_LINK_STATUS,
289 BTC_GET_U4_BT_PATCH_VER,
290 BTC_GET_U4_VENDOR,
291 BTC_GET_U4_SUPPORTED_VERSION,
292 BTC_GET_U4_SUPPORTED_FEATURE,
293 BTC_GET_U4_WIFI_IQK_TOTAL,
294 BTC_GET_U4_WIFI_IQK_OK,
295 BTC_GET_U4_WIFI_IQK_FAIL,
296
297
298 BTC_GET_U1_WIFI_DOT11_CHNL,
299 BTC_GET_U1_WIFI_CENTRAL_CHNL,
300 BTC_GET_U1_WIFI_HS_CHNL,
301 BTC_GET_U1_MAC_PHY_MODE,
302 BTC_GET_U1_AP_NUM,
303 BTC_GET_U1_ANT_TYPE,
304 BTC_GET_U1_IOT_PEER,
305
306
307 BTC_GET_U1_LPS_MODE,
308 BTC_GET_BL_BT_SCO_BUSY,
309
310
311 BTC_GET_DRIVER_TEST_CFG,
312 BTC_GET_MAX
313};
314
315enum btc_vendor {
316 BTC_VENDOR_LENOVO,
317 BTC_VENDOR_ASUS,
318 BTC_VENDOR_OTHER
319};
320
321enum btc_set_type {
322
323 BTC_SET_BL_BT_DISABLE,
324 BTC_SET_BL_BT_ENABLE_DISABLE_CHANGE,
325 BTC_SET_BL_BT_TRAFFIC_BUSY,
326 BTC_SET_BL_BT_LIMITED_DIG,
327 BTC_SET_BL_FORCE_TO_ROAM,
328 BTC_SET_BL_TO_REJ_AP_AGG_PKT,
329 BTC_SET_BL_BT_CTRL_AGG_SIZE,
330 BTC_SET_BL_INC_SCAN_DEV_NUM,
331 BTC_SET_BL_BT_TX_RX_MASK,
332 BTC_SET_BL_MIRACAST_PLUS_BT,
333
334
335 BTC_SET_U1_RSSI_ADJ_VAL_FOR_AGC_TABLE_ON,
336 BTC_SET_UI_SCAN_SIG_COMPENSATION,
337 BTC_SET_U1_AGG_BUF_SIZE,
338
339
340 BTC_SET_ACT_GET_BT_RSSI,
341 BTC_SET_ACT_AGGREGATE_CTRL,
342 BTC_SET_ACT_ANTPOSREGRISTRY_CTRL,
343
344
345
346 BTC_SET_BL_BT_SCO_BUSY,
347
348 BTC_SET_U1_RSSI_ADJ_VAL_FOR_1ANT_COEX_TYPE,
349 BTC_SET_U1_LPS_VAL,
350 BTC_SET_U1_RPWM_VAL,
351 BTC_SET_U1_1ANT_LPS,
352 BTC_SET_U1_1ANT_RPWM,
353
354 BTC_SET_ACT_LEAVE_LPS,
355 BTC_SET_ACT_ENTER_LPS,
356 BTC_SET_ACT_NORMAL_LPS,
357 BTC_SET_ACT_INC_FORCE_EXEC_PWR_CMD_CNT,
358 BTC_SET_ACT_DISABLE_LOW_POWER,
359 BTC_SET_ACT_UPDATE_RAMASK,
360 BTC_SET_ACT_SEND_MIMO_PS,
361
362 BTC_SET_ACT_CTRL_BT_INFO,
363 BTC_SET_ACT_CTRL_BT_COEX,
364 BTC_SET_ACT_CTRL_8723B_ANT,
365
366 BTC_SET_MAX
367};
368
369enum btc_dbg_disp_type {
370 BTC_DBG_DISP_COEX_STATISTICS = 0x0,
371 BTC_DBG_DISP_BT_LINK_INFO = 0x1,
372 BTC_DBG_DISP_BT_FW_VER = 0x2,
373 BTC_DBG_DISP_FW_PWR_MODE_CMD = 0x3,
374 BTC_DBG_DISP_WIFI_STATUS = 0x04,
375 BTC_DBG_DISP_MAX
376};
377
378enum btc_notify_type_ips {
379 BTC_IPS_LEAVE = 0x0,
380 BTC_IPS_ENTER = 0x1,
381 BTC_IPS_MAX
382};
383
384enum btc_notify_type_lps {
385 BTC_LPS_DISABLE = 0x0,
386 BTC_LPS_ENABLE = 0x1,
387 BTC_LPS_MAX
388};
389
390enum btc_notify_type_scan {
391 BTC_SCAN_FINISH = 0x0,
392 BTC_SCAN_START = 0x1,
393 BTC_SCAN_START_2G = 0x2,
394 BTC_SCAN_MAX
395};
396
397enum btc_notify_type_switchband {
398 BTC_NOT_SWITCH = 0x0,
399 BTC_SWITCH_TO_24G = 0x1,
400 BTC_SWITCH_TO_5G = 0x2,
401 BTC_SWITCH_TO_24G_NOFORSCAN = 0x3,
402 BTC_SWITCH_MAX
403};
404
405enum btc_notify_type_associate {
406 BTC_ASSOCIATE_FINISH = 0x0,
407 BTC_ASSOCIATE_START = 0x1,
408 BTC_ASSOCIATE_5G_FINISH = 0x2,
409 BTC_ASSOCIATE_5G_START = 0x3,
410 BTC_ASSOCIATE_MAX
411};
412
413enum btc_notify_type_media_status {
414 BTC_MEDIA_DISCONNECT = 0x0,
415 BTC_MEDIA_CONNECT = 0x1,
416 BTC_MEDIA_MAX
417};
418
419enum btc_notify_type_special_packet {
420 BTC_PACKET_UNKNOWN = 0x0,
421 BTC_PACKET_DHCP = 0x1,
422 BTC_PACKET_ARP = 0x2,
423 BTC_PACKET_EAPOL = 0x3,
424 BTC_PACKET_MAX
425};
426
427enum hci_ext_bt_operation {
428 HCI_BT_OP_NONE = 0x0,
429 HCI_BT_OP_INQUIRY_START = 0x1,
430 HCI_BT_OP_INQUIRY_FINISH = 0x2,
431 HCI_BT_OP_PAGING_START = 0x3,
432 HCI_BT_OP_PAGING_SUCCESS = 0x4,
433 HCI_BT_OP_PAGING_UNSUCCESS = 0x5,
434 HCI_BT_OP_PAIRING_START = 0x6,
435 HCI_BT_OP_PAIRING_FINISH = 0x7,
436 HCI_BT_OP_BT_DEV_ENABLE = 0x8,
437 HCI_BT_OP_BT_DEV_DISABLE = 0x9,
438 HCI_BT_OP_MAX
439};
440
441enum btc_notify_type_stack_operation {
442 BTC_STACK_OP_NONE = 0x0,
443 BTC_STACK_OP_INQ_PAGE_PAIR_START = 0x1,
444 BTC_STACK_OP_INQ_PAGE_PAIR_FINISH = 0x2,
445 BTC_STACK_OP_MAX
446};
447
448typedef u8 (*bfp_btc_r1)(void *btc_context, u32 reg_addr);
449
450typedef u16 (*bfp_btc_r2)(void *btc_context, u32 reg_addr);
451
452typedef u32 (*bfp_btc_r4)(void *btc_context, u32 reg_addr);
453
454typedef void (*bfp_btc_w1)(void *btc_context, u32 reg_addr, u32 data);
455
456typedef void (*bfp_btc_w1_bit_mak)(void *btc_context, u32 reg_addr,
457 u32 bit_mask, u8 data1b);
458
459typedef void (*bfp_btc_w2)(void *btc_context, u32 reg_addr, u16 data);
460
461typedef void (*bfp_btc_w4)(void *btc_context, u32 reg_addr, u32 data);
462
463typedef void (*bfp_btc_local_reg_w1)(void *btc_context, u32 reg_addr, u8 data);
464typedef void (*bfp_btc_wr_1byte_bit_mask)(void *btc_context, u32 reg_addr,
465 u8 bit_mask, u8 data);
466
467typedef void (*bfp_btc_set_bb_reg)(void *btc_context, u32 reg_addr,
468 u32 bit_mask, u32 data);
469
470typedef u32 (*bfp_btc_get_bb_reg)(void *btc_context, u32 reg_addr,
471 u32 bit_mask);
472
473typedef void (*bfp_btc_set_rf_reg)(void *btc_context, u8 rf_path, u32 reg_addr,
474 u32 bit_mask, u32 data);
475
476typedef u32 (*bfp_btc_get_rf_reg)(void *btc_context, u8 rf_path,
477 u32 reg_addr, u32 bit_mask);
478
479typedef void (*bfp_btc_fill_h2c)(void *btc_context, u8 element_id,
480 u32 cmd_len, u8 *cmd_buffer);
481
482typedef bool (*bfp_btc_get)(void *btcoexist, u8 get_type, void *out_buf);
483
484typedef bool (*bfp_btc_set)(void *btcoexist, u8 set_type, void *in_buf);
485
486typedef u32 (*bfp_btc_get_bt_coex_supported_feature)(void *btcoexist);
487
488typedef u32 (*bfp_btc_get_bt_coex_supported_version)(void *btcoexist);
489
490typedef u32 (*bfp_btc_get_bt_phydm_version)(void *btcoexist);
491
492typedef void (*bfp_btc_phydm_modify_ra_pcr_threshold)(void *btcoexist,
493 u8 ra_offset_direction,
494 u8 ra_threshold_offset);
495
496typedef u32 (*bfp_btc_phydm_query_phy_counter)(void *btcoexist,
497 const char *info_type);
498
499typedef u8 (*bfp_btc_get_ant_det_val_from_bt)(void *btcoexist);
500
501typedef u8 (*bfp_btc_get_ble_scan_type_from_bt)(void *btcoexist);
502
503typedef u32 (*bfp_btc_get_ble_scan_para_from_bt)(void *btcoexist, u8 scan_type);
504
505typedef bool (*bfp_btc_get_bt_afh_map_from_bt)(void *btcoexist, u8 map_type,
506 u8 *afh_map);
507
508typedef void (*bfp_btc_set_bt_reg)(void *btc_context, u8 reg_type, u32 offset,
509 u32 value);
510typedef u32 (*bfp_btc_get_bt_reg)(void *btc_context, u8 reg_type, u32 offset);
511
512typedef void (*bfp_btc_disp_dbg_msg)(void *btcoexist, u8 disp_type,
513 struct seq_file *m);
514
515struct btc_bt_info {
516 bool bt_disabled;
517 u8 rssi_adjust_for_agc_table_on;
518 u8 rssi_adjust_for_1ant_coex_type;
519 bool pre_bt_ctrl_agg_buf_size;
520 bool bt_busy;
521 u8 pre_agg_buf_size;
522 u8 agg_buf_size;
523 bool limited_dig;
524 bool pre_reject_agg_pkt;
525 bool reject_agg_pkt;
526 bool bt_ctrl_buf_size;
527 bool increase_scan_dev_num;
528 bool miracast_plus_bt;
529 bool bt_ctrl_agg_buf_size;
530 bool bt_tx_rx_mask;
531 u16 bt_hci_ver;
532 u16 bt_real_fw_ver;
533 u8 bt_fw_ver;
534 u32 bt_get_fw_ver;
535
536 bool bt_disable_low_pwr;
537
538
539 bool bt_ctrl_lps;
540 bool bt_pwr_save_mode;
541 bool bt_lps_on;
542 bool force_to_roam;
543 u8 force_exec_pwr_cmd_cnt;
544 u8 lps_val;
545 u8 rpwm_val;
546 u32 ra_mask;
547
548 u32 afh_map_l;
549 u32 afh_map_m;
550 u16 afh_map_h;
551 u32 bt_supported_feature;
552 u32 bt_supported_version;
553 u8 bt_ant_det_val;
554 u8 bt_ble_scan_type;
555 u32 bt_ble_scan_para;
556};
557
558struct btc_stack_info {
559 bool profile_notified;
560 u16 hci_version;
561 u8 num_of_link;
562 bool bt_link_exist;
563 bool sco_exist;
564 bool acl_exist;
565 bool a2dp_exist;
566 bool hid_exist;
567 u8 num_of_hid;
568 bool pan_exist;
569 bool unknown_acl_exist;
570 s8 min_bt_rssi;
571};
572
573struct btc_statistics {
574 u32 cnt_bind;
575 u32 cnt_init_hw_config;
576 u32 cnt_init_coex_dm;
577 u32 cnt_ips_notify;
578 u32 cnt_lps_notify;
579 u32 cnt_scan_notify;
580 u32 cnt_connect_notify;
581 u32 cnt_media_status_notify;
582 u32 cnt_special_packet_notify;
583 u32 cnt_bt_info_notify;
584 u32 cnt_periodical;
585 u32 cnt_coex_dm_switch;
586 u32 cnt_stack_operation_notify;
587 u32 cnt_dbg_ctrl;
588 u32 cnt_pre_load_firmware;
589 u32 cnt_power_on;
590};
591
592struct btc_bt_link_info {
593 bool bt_link_exist;
594 bool bt_hi_pri_link_exist;
595 bool sco_exist;
596 bool sco_only;
597 bool a2dp_exist;
598 bool a2dp_only;
599 bool hid_exist;
600 bool hid_only;
601 bool pan_exist;
602 bool pan_only;
603 bool slave_role;
604 bool acl_busy;
605};
606
607enum btc_antenna_pos {
608 BTC_ANTENNA_AT_MAIN_PORT = 0x1,
609 BTC_ANTENNA_AT_AUX_PORT = 0x2,
610};
611
612enum btc_mp_h2c_op_code {
613 BT_OP_GET_BT_VERSION = 0,
614 BT_OP_WRITE_REG_ADDR = 12,
615 BT_OP_WRITE_REG_VALUE = 13,
616 BT_OP_READ_REG = 17,
617 BT_OP_GET_AFH_MAP_L = 30,
618 BT_OP_GET_AFH_MAP_M = 31,
619 BT_OP_GET_AFH_MAP_H = 32,
620 BT_OP_GET_BT_COEX_SUPPORTED_FEATURE = 42,
621 BT_OP_GET_BT_COEX_SUPPORTED_VERSION = 43,
622 BT_OP_GET_BT_ANT_DET_VAL = 44,
623 BT_OP_GET_BT_BLE_SCAN_PARA = 45,
624 BT_OP_GET_BT_BLE_SCAN_TYPE = 46,
625 BT_OP_MAX
626};
627
628enum btc_mp_h2c_req_num {
629
630 BT_SEQ_DONT_CARE = 0,
631 BT_SEQ_GET_BT_VERSION = 0xE,
632 BT_SEQ_GET_AFH_MAP_L = 0x5,
633 BT_SEQ_GET_AFH_MAP_M = 0x6,
634 BT_SEQ_GET_AFH_MAP_H = 0x9,
635 BT_SEQ_GET_BT_COEX_SUPPORTED_FEATURE = 0x7,
636 BT_SEQ_GET_BT_COEX_SUPPORTED_VERSION = 0x8,
637 BT_SEQ_GET_BT_ANT_DET_VAL = 0x2,
638 BT_SEQ_GET_BT_BLE_SCAN_PARA = 0x3,
639 BT_SEQ_GET_BT_BLE_SCAN_TYPE = 0x4,
640};
641
642struct btc_coexist {
643
644 bool binded;
645
646 void *adapter;
647 struct btc_board_info board_info;
648
649 struct btc_bt_info bt_info;
650 struct btc_stack_info stack_info;
651 enum btc_chip_interface chip_interface;
652 struct btc_bt_link_info bt_link_info;
653
654
655
656
657 bool auto_report_1ant;
658 bool auto_report_2ant;
659 bool dbg_mode_1ant;
660 bool dbg_mode_2ant;
661 bool initilized;
662 bool stop_coex_dm;
663 bool manual_control;
664 struct btc_statistics statistics;
665 u8 pwr_mode_val[10];
666
667 struct completion bt_mp_comp;
668
669
670 bfp_btc_r1 btc_read_1byte;
671 bfp_btc_w1 btc_write_1byte;
672 bfp_btc_w1_bit_mak btc_write_1byte_bitmask;
673 bfp_btc_r2 btc_read_2byte;
674 bfp_btc_w2 btc_write_2byte;
675 bfp_btc_r4 btc_read_4byte;
676 bfp_btc_w4 btc_write_4byte;
677 bfp_btc_local_reg_w1 btc_write_local_reg_1byte;
678
679 bfp_btc_set_bb_reg btc_set_bb_reg;
680 bfp_btc_get_bb_reg btc_get_bb_reg;
681
682 bfp_btc_set_rf_reg btc_set_rf_reg;
683 bfp_btc_get_rf_reg btc_get_rf_reg;
684
685 bfp_btc_fill_h2c btc_fill_h2c;
686
687 bfp_btc_disp_dbg_msg btc_disp_dbg_msg;
688
689 bfp_btc_get btc_get;
690 bfp_btc_set btc_set;
691
692 bfp_btc_set_bt_reg btc_set_bt_reg;
693 bfp_btc_get_bt_reg btc_get_bt_reg;
694
695 bfp_btc_get_bt_coex_supported_feature btc_get_bt_coex_supported_feature;
696 bfp_btc_get_bt_coex_supported_version btc_get_bt_coex_supported_version;
697 bfp_btc_get_bt_phydm_version btc_get_bt_phydm_version;
698 bfp_btc_phydm_modify_ra_pcr_threshold btc_phydm_modify_ra_pcr_threshold;
699 bfp_btc_phydm_query_phy_counter btc_phydm_query_phy_counter;
700 bfp_btc_get_ant_det_val_from_bt btc_get_ant_det_val_from_bt;
701 bfp_btc_get_ble_scan_type_from_bt btc_get_ble_scan_type_from_bt;
702 bfp_btc_get_ble_scan_para_from_bt btc_get_ble_scan_para_from_bt;
703 bfp_btc_get_bt_afh_map_from_bt btc_get_bt_afh_map_from_bt;
704
705};
706
707bool halbtc_is_wifi_uplink(struct rtl_priv *adapter);
708
709#define rtl_btc_coexist(rtlpriv) \
710 ((struct btc_coexist *)((rtlpriv)->btcoexist.btc_context))
711#define rtl_btc_wifi_only(rtlpriv) \
712 ((struct wifi_only_cfg *)((rtlpriv)->btcoexist.wifi_only_context))
713
714struct wifi_only_cfg;
715
716bool exhalbtc_initlize_variables(struct rtl_priv *rtlpriv);
717bool exhalbtc_initlize_variables_wifi_only(struct rtl_priv *rtlpriv);
718bool exhalbtc_bind_bt_coex_withadapter(void *adapter);
719void exhalbtc_power_on_setting(struct btc_coexist *btcoexist);
720void exhalbtc_pre_load_firmware(struct btc_coexist *btcoexist);
721void exhalbtc_init_hw_config(struct btc_coexist *btcoexist, bool wifi_only);
722void exhalbtc_init_hw_config_wifi_only(struct wifi_only_cfg *wifionly_cfg);
723void exhalbtc_init_coex_dm(struct btc_coexist *btcoexist);
724void exhalbtc_ips_notify(struct btc_coexist *btcoexist, u8 type);
725void exhalbtc_lps_notify(struct btc_coexist *btcoexist, u8 type);
726void exhalbtc_scan_notify(struct btc_coexist *btcoexist, u8 type);
727void exhalbtc_scan_notify_wifi_only(struct wifi_only_cfg *wifionly_cfg,
728 u8 is_5g);
729void exhalbtc_connect_notify(struct btc_coexist *btcoexist, u8 action);
730void exhalbtc_mediastatus_notify(struct btc_coexist *btcoexist,
731 enum rt_media_status media_status);
732void exhalbtc_special_packet_notify(struct btc_coexist *btcoexist, u8 pkt_type);
733void exhalbtc_bt_info_notify(struct btc_coexist *btcoexist, u8 *tmp_buf,
734 u8 length);
735void exhalbtc_rf_status_notify(struct btc_coexist *btcoexist, u8 type);
736void exhalbtc_stack_operation_notify(struct btc_coexist *btcoexist, u8 type);
737void exhalbtc_halt_notify(struct btc_coexist *btcoexist);
738void exhalbtc_pnp_notify(struct btc_coexist *btcoexist, u8 pnp_state);
739void exhalbtc_coex_dm_switch(struct btc_coexist *btcoexist);
740void exhalbtc_periodical(struct btc_coexist *btcoexist);
741void exhalbtc_dbg_control(struct btc_coexist *btcoexist, u8 code, u8 len,
742 u8 *data);
743void exhalbtc_antenna_detection(struct btc_coexist *btcoexist, u32 cent_freq,
744 u32 offset, u32 span, u32 seconds);
745void exhalbtc_stack_update_profile_info(void);
746void exhalbtc_set_hci_version(struct btc_coexist *btcoexist, u16 hci_version);
747void exhalbtc_set_bt_patch_version(struct btc_coexist *btcoexist,
748 u16 bt_hci_version, u16 bt_patch_version);
749void exhalbtc_update_min_bt_rssi(struct btc_coexist *btcoexist, s8 bt_rssi);
750void exhalbtc_set_bt_exist(struct btc_coexist *btcoexist, bool bt_exist);
751void exhalbtc_set_chip_type(struct btc_coexist *btcoexist, u8 chip_type);
752void exhalbtc_set_ant_num(struct rtl_priv *rtlpriv, u8 type, u8 ant_num);
753void exhalbtc_display_bt_coex_info(struct btc_coexist *btcoexist,
754 struct seq_file *m);
755void exhalbtc_switch_band_notify(struct btc_coexist *btcoexist, u8 type);
756void exhalbtc_switch_band_notify_wifi_only(struct wifi_only_cfg *wifionly_cfg,
757 u8 is_5g);
758void exhalbtc_signal_compensation(struct btc_coexist *btcoexist,
759 u8 *rssi_wifi, u8 *rssi_bt);
760void exhalbtc_lps_leave(struct btc_coexist *btcoexist);
761void exhalbtc_low_wifi_traffic_notify(struct btc_coexist *btcoexist);
762void exhalbtc_set_single_ant_path(struct btc_coexist *btcoexist,
763 u8 single_ant_path);
764
765
766enum wifionly_chip_interface {
767 WIFIONLY_INTF_UNKNOWN = 0,
768 WIFIONLY_INTF_PCI = 1,
769 WIFIONLY_INTF_USB = 2,
770 WIFIONLY_INTF_SDIO = 3,
771 WIFIONLY_INTF_MAX
772};
773
774enum wifionly_customer_id {
775 CUSTOMER_NORMAL = 0,
776 CUSTOMER_HP_1 = 1,
777};
778
779struct wifi_only_haldata {
780 u16 customer_id;
781 u8 efuse_pg_antnum;
782 u8 efuse_pg_antpath;
783 u8 rfe_type;
784 u8 ant_div_cfg;
785};
786
787struct wifi_only_cfg {
788 void *adapter;
789 struct wifi_only_haldata haldata_info;
790 enum wifionly_chip_interface chip_interface;
791};
792
793static inline
794void halwifionly_phy_set_bb_reg(struct wifi_only_cfg *wifi_conly_cfg,
795 u32 regaddr, u32 bitmask, u32 data)
796{
797 struct rtl_priv *rtlpriv = (struct rtl_priv *)wifi_conly_cfg->adapter;
798
799 rtl_set_bbreg(rtlpriv->hw, regaddr, bitmask, data);
800}
801
802#endif
803