148fa0b4dSLarry Finger /* SPDX-License-Identifier: GPL-2.0 */
248fa0b4dSLarry Finger /* Copyright(c) 2009-2012  Realtek Corporation.*/
3f1d2b4d3SLarry Finger 
4f1d2b4d3SLarry Finger #ifndef __RTL8723E_HAL_BT_COEXIST_H__
5f1d2b4d3SLarry Finger #define __RTL8723E_HAL_BT_COEXIST_H__
6f1d2b4d3SLarry Finger 
7f1d2b4d3SLarry Finger #include "../wifi.h"
8f1d2b4d3SLarry Finger 
9f1d2b4d3SLarry Finger /* The reg define is for 8723 */
10f1d2b4d3SLarry Finger #define	REG_HIGH_PRIORITY_TXRX			0x770
11f1d2b4d3SLarry Finger #define	REG_LOW_PRIORITY_TXRX			0x774
12f1d2b4d3SLarry Finger 
13f1d2b4d3SLarry Finger #define BT_FW_COEX_THRESH_TOL			6
14f1d2b4d3SLarry Finger #define BT_FW_COEX_THRESH_20			20
15f1d2b4d3SLarry Finger #define BT_FW_COEX_THRESH_23			23
16f1d2b4d3SLarry Finger #define BT_FW_COEX_THRESH_25			25
17f1d2b4d3SLarry Finger #define BT_FW_COEX_THRESH_30			30
18f1d2b4d3SLarry Finger #define BT_FW_COEX_THRESH_35			35
19f1d2b4d3SLarry Finger #define BT_FW_COEX_THRESH_40			40
20f1d2b4d3SLarry Finger #define BT_FW_COEX_THRESH_45			45
21f1d2b4d3SLarry Finger #define BT_FW_COEX_THRESH_47			47
22f1d2b4d3SLarry Finger #define BT_FW_COEX_THRESH_50			50
23f1d2b4d3SLarry Finger #define BT_FW_COEX_THRESH_55			55
24f1d2b4d3SLarry Finger 
25f1d2b4d3SLarry Finger #define BT_COEX_STATE_BT30			BIT(0)
26f1d2b4d3SLarry Finger #define BT_COEX_STATE_WIFI_HT20			BIT(1)
27f1d2b4d3SLarry Finger #define BT_COEX_STATE_WIFI_HT40			BIT(2)
28f1d2b4d3SLarry Finger #define BT_COEX_STATE_WIFI_LEGACY		BIT(3)
29f1d2b4d3SLarry Finger 
30f1d2b4d3SLarry Finger #define BT_COEX_STATE_WIFI_RSSI_LOW		BIT(4)
31f1d2b4d3SLarry Finger #define BT_COEX_STATE_WIFI_RSSI_MEDIUM	BIT(5)
32f1d2b4d3SLarry Finger #define BT_COEX_STATE_WIFI_RSSI_HIGH	BIT(6)
33f1d2b4d3SLarry Finger #define BT_COEX_STATE_DEC_BT_POWER		BIT(7)
34f1d2b4d3SLarry Finger 
35f1d2b4d3SLarry Finger #define BT_COEX_STATE_WIFI_IDLE			BIT(8)
36f1d2b4d3SLarry Finger #define BT_COEX_STATE_WIFI_UPLINK		BIT(9)
37f1d2b4d3SLarry Finger #define BT_COEX_STATE_WIFI_DOWNLINK		BIT(10)
38f1d2b4d3SLarry Finger 
39f1d2b4d3SLarry Finger #define BT_COEX_STATE_BT_INQ_PAGE		BIT(11)
40f1d2b4d3SLarry Finger #define BT_COEX_STATE_BT_IDLE			BIT(12)
41f1d2b4d3SLarry Finger #define BT_COEX_STATE_BT_UPLINK			BIT(13)
42f1d2b4d3SLarry Finger #define BT_COEX_STATE_BT_DOWNLINK		BIT(14)
43f1d2b4d3SLarry Finger 
44f1d2b4d3SLarry Finger #define BT_COEX_STATE_HOLD_FOR_BT_OPERATION	BIT(15)
45f1d2b4d3SLarry Finger #define BT_COEX_STATE_BT_RSSI_LOW		BIT(19)
46f1d2b4d3SLarry Finger 
47f1d2b4d3SLarry Finger #define BT_COEX_STATE_PROFILE_HID		BIT(20)
48f1d2b4d3SLarry Finger #define BT_COEX_STATE_PROFILE_A2DP		BIT(21)
49f1d2b4d3SLarry Finger #define BT_COEX_STATE_PROFILE_PAN		BIT(22)
50f1d2b4d3SLarry Finger #define BT_COEX_STATE_PROFILE_SCO		BIT(23)
51f1d2b4d3SLarry Finger 
52f1d2b4d3SLarry Finger #define BT_COEX_STATE_WIFI_RSSI_1_LOW		BIT(24)
53f1d2b4d3SLarry Finger #define BT_COEX_STATE_WIFI_RSSI_1_MEDIUM	BIT(25)
54f1d2b4d3SLarry Finger #define BT_COEX_STATE_WIFI_RSSI_1_HIGH		BIT(26)
55f1d2b4d3SLarry Finger 
56f1d2b4d3SLarry Finger #define BT_COEX_STATE_BTINFO_COMMON			BIT(30)
57f1d2b4d3SLarry Finger #define BT_COEX_STATE_BTINFO_B_HID_SCOESCO	BIT(31)
58f1d2b4d3SLarry Finger #define BT_COEX_STATE_BTINFO_B_FTP_A2DP		BIT(29)
59f1d2b4d3SLarry Finger 
60f1d2b4d3SLarry Finger #define BT_COEX_STATE_BT_CNT_LEVEL_0		BIT(0)
61f1d2b4d3SLarry Finger #define BT_COEX_STATE_BT_CNT_LEVEL_1		BIT(1)
62f1d2b4d3SLarry Finger #define BT_COEX_STATE_BT_CNT_LEVEL_2		BIT(2)
63f1d2b4d3SLarry Finger #define BT_COEX_STATE_BT_CNT_LEVEL_3		BIT(3)
64f1d2b4d3SLarry Finger 
65f1d2b4d3SLarry Finger #define BT_RSSI_STATE_HIGH			0
66f1d2b4d3SLarry Finger #define BT_RSSI_STATE_MEDIUM			1
67f1d2b4d3SLarry Finger #define BT_RSSI_STATE_LOW			2
68f1d2b4d3SLarry Finger #define BT_RSSI_STATE_STAY_HIGH			3
69f1d2b4d3SLarry Finger #define BT_RSSI_STATE_STAY_MEDIUM		4
70f1d2b4d3SLarry Finger #define BT_RSSI_STATE_STAY_LOW			5
71f1d2b4d3SLarry Finger 
72f1d2b4d3SLarry Finger #define	BT_AGCTABLE_OFF				0
73f1d2b4d3SLarry Finger #define	BT_AGCTABLE_ON				1
74f1d2b4d3SLarry Finger #define	BT_BB_BACKOFF_OFF			0
75f1d2b4d3SLarry Finger #define	BT_BB_BACKOFF_ON			1
76f1d2b4d3SLarry Finger #define	BT_FW_NAV_OFF				0
77f1d2b4d3SLarry Finger #define	BT_FW_NAV_ON				1
78f1d2b4d3SLarry Finger 
79f1d2b4d3SLarry Finger #define	BT_COEX_MECH_NONE			0
80f1d2b4d3SLarry Finger #define	BT_COEX_MECH_SCO			1
81f1d2b4d3SLarry Finger #define	BT_COEX_MECH_HID			2
82f1d2b4d3SLarry Finger #define	BT_COEX_MECH_A2DP			3
83f1d2b4d3SLarry Finger #define	BT_COEX_MECH_PAN			4
84f1d2b4d3SLarry Finger #define	BT_COEX_MECH_HID_A2DP			5
85f1d2b4d3SLarry Finger #define	BT_COEX_MECH_HID_PAN			6
86f1d2b4d3SLarry Finger #define	BT_COEX_MECH_PAN_A2DP			7
87f1d2b4d3SLarry Finger #define	BT_COEX_MECH_HID_SCO_ESCO		8
88f1d2b4d3SLarry Finger #define	BT_COEX_MECH_FTP_A2DP			9
89f1d2b4d3SLarry Finger #define	BT_COEX_MECH_COMMON			10
90f1d2b4d3SLarry Finger #define	BT_COEX_MECH_MAX			11
91f1d2b4d3SLarry Finger 
92f1d2b4d3SLarry Finger #define	BT_DBG_PROFILE_NONE			0
93f1d2b4d3SLarry Finger #define	BT_DBG_PROFILE_SCO			1
94f1d2b4d3SLarry Finger #define	BT_DBG_PROFILE_HID			2
95f1d2b4d3SLarry Finger #define	BT_DBG_PROFILE_A2DP			3
96f1d2b4d3SLarry Finger #define	BT_DBG_PROFILE_PAN			4
97f1d2b4d3SLarry Finger #define	BT_DBG_PROFILE_HID_A2DP			5
98f1d2b4d3SLarry Finger #define	BT_DBG_PROFILE_HID_PAN			6
99f1d2b4d3SLarry Finger #define	BT_DBG_PROFILE_PAN_A2DP			7
100f1d2b4d3SLarry Finger #define	BT_DBG_PROFILE_MAX			9
101f1d2b4d3SLarry Finger 
102f1d2b4d3SLarry Finger #define	BTINFO_B_FTP				BIT(7)
103f1d2b4d3SLarry Finger #define	BTINFO_B_A2DP				BIT(6)
104f1d2b4d3SLarry Finger #define	BTINFO_B_HID				BIT(5)
105f1d2b4d3SLarry Finger #define	BTINFO_B_SCO_BUSY			BIT(4)
106f1d2b4d3SLarry Finger #define	BTINFO_B_ACL_BUSY			BIT(3)
107f1d2b4d3SLarry Finger #define	BTINFO_B_INQ_PAGE			BIT(2)
108f1d2b4d3SLarry Finger #define	BTINFO_B_SCO_ESCO			BIT(1)
109f1d2b4d3SLarry Finger #define	BTINFO_B_CONNECTION			BIT(0)
110f1d2b4d3SLarry Finger 
111f1d2b4d3SLarry Finger void rtl8723e_btdm_coex_all_off(struct ieee80211_hw *hw);
112f1d2b4d3SLarry Finger void rtl8723e_dm_bt_fw_coex_all_off(struct ieee80211_hw *hw);
113f1d2b4d3SLarry Finger 
114f1d2b4d3SLarry Finger void rtl8723e_dm_bt_sw_coex_all_off(struct ieee80211_hw *hw);
115f1d2b4d3SLarry Finger void rtl8723e_dm_bt_hw_coex_all_off(struct ieee80211_hw *hw);
116f1d2b4d3SLarry Finger long rtl8723e_dm_bt_get_rx_ss(struct ieee80211_hw *hw);
117f1d2b4d3SLarry Finger void rtl8723e_dm_bt_balance(struct ieee80211_hw *hw,
118f1d2b4d3SLarry Finger 			    bool balance_on, u8 ms0, u8 ms1);
119*cb689109SKonstantin Ryabitsev void rtl8723e_dm_bt_agc_table(struct ieee80211_hw *hw, u8 type);
120f1d2b4d3SLarry Finger void rtl8723e_dm_bt_bb_back_off_level(struct ieee80211_hw *hw, u8 type);
121f1d2b4d3SLarry Finger u8 rtl8723e_dm_bt_check_coex_rssi_state(struct ieee80211_hw *hw,
122f1d2b4d3SLarry Finger 					u8 level_num, u8 rssi_thresh,
123f1d2b4d3SLarry Finger 					u8 rssi_thresh1);
124f1d2b4d3SLarry Finger u8 rtl8723e_dm_bt_check_coex_rssi_state1(struct ieee80211_hw *hw,
125f1d2b4d3SLarry Finger 					 u8 level_num, u8 rssi_thresh,
126f1d2b4d3SLarry Finger 					 u8 rssi_thresh1);
127f1d2b4d3SLarry Finger void _rtl8723_dm_bt_check_wifi_state(struct ieee80211_hw *hw);
128f1d2b4d3SLarry Finger void rtl8723e_dm_bt_reject_ap_aggregated_packet(struct ieee80211_hw *hw,
129f1d2b4d3SLarry Finger 						bool b_reject);
130f1d2b4d3SLarry Finger bool rtl8723e_dm_bt_is_coexist_state_changed(struct ieee80211_hw *hw);
131f1d2b4d3SLarry Finger bool rtl8723e_dm_bt_is_wifi_up_link(struct ieee80211_hw *hw);
132f1d2b4d3SLarry Finger 
133f1d2b4d3SLarry Finger #endif
134