1 /* SPDX-License-Identifier: GPL-2.0 */
2 /* Copyright(c) 2012 Realtek Corporation.*/
4 /*===========================================
5 * The following is for 8821A 1ANT BT Co-exist definition
6 *===========================================
8 #define BT_INFO_8821A_1ANT_B_FTP BIT7
9 #define BT_INFO_8821A_1ANT_B_A2DP BIT6
10 #define BT_INFO_8821A_1ANT_B_HID BIT5
11 #define BT_INFO_8821A_1ANT_B_SCO_BUSY BIT4
12 #define BT_INFO_8821A_1ANT_B_ACL_BUSY BIT3
13 #define BT_INFO_8821A_1ANT_B_INQ_PAGE BIT2
14 #define BT_INFO_8821A_1ANT_B_SCO_ESCO BIT1
15 #define BT_INFO_8821A_1ANT_B_CONNECTION BIT0
17 #define BT_INFO_8821A_1ANT_A2DP_BASIC_RATE(_BT_INFO_EXT_) \
18 (((_BT_INFO_EXT_&BIT0)) ? true : false)
20 #define BTC_RSSI_COEX_THRESH_TOL_8821A_1ANT 2
22 enum _BT_INFO_SRC_8821A_1ANT
{
23 BT_INFO_SRC_8821A_1ANT_WIFI_FW
= 0x0,
24 BT_INFO_SRC_8821A_1ANT_BT_RSP
= 0x1,
25 BT_INFO_SRC_8821A_1ANT_BT_ACTIVE_SEND
= 0x2,
26 BT_INFO_SRC_8821A_1ANT_MAX
29 enum _BT_8821A_1ANT_BT_STATUS
{
30 BT_8821A_1ANT_BT_STATUS_NON_CONNECTED_IDLE
= 0x0,
31 BT_8821A_1ANT_BT_STATUS_CONNECTED_IDLE
= 0x1,
32 BT_8821A_1ANT_BT_STATUS_INQ_PAGE
= 0x2,
33 BT_8821A_1ANT_BT_STATUS_ACL_BUSY
= 0x3,
34 BT_8821A_1ANT_BT_STATUS_SCO_BUSY
= 0x4,
35 BT_8821A_1ANT_BT_STATUS_ACL_SCO_BUSY
= 0x5,
36 BT_8821A_1ANT_BT_STATUS_MAX
39 enum _BT_8821A_1ANT_WIFI_STATUS
{
40 BT_8821A_1ANT_WIFI_STATUS_NON_CONNECTED_IDLE
= 0x0,
41 BT_8821A_1ANT_WIFI_STATUS_NON_CONNECTED_ASSO_AUTH_SCAN
= 0x1,
42 BT_8821A_1ANT_WIFI_STATUS_CONNECTED_SCAN
= 0x2,
43 BT_8821A_1ANT_WIFI_STATUS_CONNECTED_SPECIAL_PKT
= 0x3,
44 BT_8821A_1ANT_WIFI_STATUS_CONNECTED_IDLE
= 0x4,
45 BT_8821A_1ANT_WIFI_STATUS_CONNECTED_BUSY
= 0x5,
46 BT_8821A_1ANT_WIFI_STATUS_MAX
49 enum BT_8821A_1ANT_COEX_ALGO
{
50 BT_8821A_1ANT_COEX_ALGO_UNDEFINED
= 0x0,
51 BT_8821A_1ANT_COEX_ALGO_SCO
= 0x1,
52 BT_8821A_1ANT_COEX_ALGO_HID
= 0x2,
53 BT_8821A_1ANT_COEX_ALGO_A2DP
= 0x3,
54 BT_8821A_1ANT_COEX_ALGO_A2DP_PANHS
= 0x4,
55 BT_8821A_1ANT_COEX_ALGO_PANEDR
= 0x5,
56 BT_8821A_1ANT_COEX_ALGO_PANHS
= 0x6,
57 BT_8821A_1ANT_COEX_ALGO_PANEDR_A2DP
= 0x7,
58 BT_8821A_1ANT_COEX_ALGO_PANEDR_HID
= 0x8,
59 BT_8821A_1ANT_COEX_ALGO_HID_A2DP_PANEDR
= 0x9,
60 BT_8821A_1ANT_COEX_ALGO_HID_A2DP
= 0xa,
61 BT_8821A_1ANT_COEX_ALGO_MAX
= 0xb,
64 struct coex_dm_8821a_1ant
{
66 bool cur_ignore_wlan_act
;
67 bool pre_ignore_wlan_act
;
72 bool auto_tdma_adjust
;
75 bool pre_bt_auto_report
;
76 bool cur_bt_auto_report
;
83 bool pre_low_penalty_ra
;
84 bool cur_low_penalty_ra
;
93 /* Auto Rate Fallback Retry cnt */
95 /* Auto Rate Fallback Retry cnt */
97 u16 backup_retry_limit
;
98 u8 backup_ampdu_max_time
;
100 /* algorithm related */
104 u8 wifi_chnl_info
[3];
110 u8 pre_retry_limit_type
;
111 u8 cur_retry_limit_type
;
112 u8 pre_ampdu_time_type
;
113 u8 cur_ampdu_time_type
;
119 struct coex_sta_8821a_1ant
{
129 u32 special_pkt_period_cnt
;
130 u32 high_priority_tx
;
131 u32 high_priority_rx
;
136 u8 pre_bt_rssi_state
;
137 u8 pre_wifi_rssi_state
[4];
138 bool c2h_bt_info_req_sent
;
139 u8 bt_info_c2h
[BT_INFO_SRC_8821A_1ANT_MAX
][10];
140 u32 bt_info_c2h_cnt
[BT_INFO_SRC_8821A_1ANT_MAX
];
141 bool c2h_bt_inquiry_page
;
142 bool wifi_is_high_pri_task
;
147 /*===========================================
148 * The following is interface which will notify coex module.
149 *===========================================
151 void ex_btc8821a1ant_init_hwconfig(struct btc_coexist
*btcoexist
,
153 void ex_btc8821a1ant_init_coex_dm(struct btc_coexist
*btcoexist
);
154 void ex_btc8821a1ant_ips_notify(struct btc_coexist
*btcoexist
, u8 type
);
155 void ex_btc8821a1ant_lps_notify(struct btc_coexist
*btcoexist
, u8 type
);
156 void ex_btc8821a1ant_scan_notify(struct btc_coexist
*btcoexist
, u8 type
);
157 void ex_btc8821a1ant_connect_notify(struct btc_coexist
*btcoexist
, u8 type
);
158 void ex_btc8821a1ant_media_status_notify(struct btc_coexist
*btcoexist
,
160 void ex_btc8821a1ant_special_packet_notify(struct btc_coexist
*btcoexist
,
162 void ex_btc8821a1ant_bt_info_notify(struct btc_coexist
*btcoexist
,
163 u8
*tmpbuf
, u8 length
);
164 void ex_btc8821a1ant_halt_notify(struct btc_coexist
*btcoexist
);
165 void ex_btc8821a1ant_pnp_notify(struct btc_coexist
*btcoexist
, u8 pnpstate
);
166 void ex_btc8821a1ant_periodical(struct btc_coexist
*btcoexist
);
167 void ex_btc8821a1ant_display_coex_info(struct btc_coexist
*btcoexist
,
169 void ex_btc8821a1ant_dbg_control(struct btc_coexist
*btcoexist
, u8 op_code
,
170 u8 op_len
, u8
*data
);
171 void ex_btc8821a1ant_pnp_notify(struct btc_coexist
*btcoexist
, u8 pnp_state
);