1 /******************************************************************************
2  *
3  * Copyright(c) 2009-2012  Realtek Corporation.
4  *
5  * This program is free software; you can redistribute it and/or modify it
6  * under the terms of version 2 of the GNU General Public License as
7  * published by the Free Software Foundation.
8  *
9  * This program is distributed in the hope that it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
12  * more details.
13  *
14  * The full GNU General Public License is included in this distribution in the
15  * file called LICENSE.
16  *
17  * Contact Information:
18  * wlanfae <wlanfae@realtek.com>
19  * Realtek Corporation, No. 2, Innovation Road II, Hsinchu Science Park,
20  * Hsinchu 300, Taiwan.
21  * Larry Finger <Larry.Finger@lwfinger.net>
22  *
23  *****************************************************************************/
24 
25 #ifndef __RTL8723E_HAL_BT_COEXIST_H__
26 #define __RTL8723E_HAL_BT_COEXIST_H__
27 
28 #include "../wifi.h"
29 
30 /* The reg define is for 8723 */
31 #define	REG_HIGH_PRIORITY_TXRX			0x770
32 #define	REG_LOW_PRIORITY_TXRX			0x774
33 
34 #define BT_FW_COEX_THRESH_TOL			6
35 #define BT_FW_COEX_THRESH_20			20
36 #define BT_FW_COEX_THRESH_23			23
37 #define BT_FW_COEX_THRESH_25			25
38 #define BT_FW_COEX_THRESH_30			30
39 #define BT_FW_COEX_THRESH_35			35
40 #define BT_FW_COEX_THRESH_40			40
41 #define BT_FW_COEX_THRESH_45			45
42 #define BT_FW_COEX_THRESH_47			47
43 #define BT_FW_COEX_THRESH_50			50
44 #define BT_FW_COEX_THRESH_55			55
45 
46 #define BT_COEX_STATE_BT30			BIT(0)
47 #define BT_COEX_STATE_WIFI_HT20			BIT(1)
48 #define BT_COEX_STATE_WIFI_HT40			BIT(2)
49 #define BT_COEX_STATE_WIFI_LEGACY		BIT(3)
50 
51 #define BT_COEX_STATE_WIFI_RSSI_LOW		BIT(4)
52 #define BT_COEX_STATE_WIFI_RSSI_MEDIUM	BIT(5)
53 #define BT_COEX_STATE_WIFI_RSSI_HIGH	BIT(6)
54 #define BT_COEX_STATE_DEC_BT_POWER		BIT(7)
55 
56 #define BT_COEX_STATE_WIFI_IDLE			BIT(8)
57 #define BT_COEX_STATE_WIFI_UPLINK		BIT(9)
58 #define BT_COEX_STATE_WIFI_DOWNLINK		BIT(10)
59 
60 #define BT_COEX_STATE_BT_INQ_PAGE		BIT(11)
61 #define BT_COEX_STATE_BT_IDLE			BIT(12)
62 #define BT_COEX_STATE_BT_UPLINK			BIT(13)
63 #define BT_COEX_STATE_BT_DOWNLINK		BIT(14)
64 
65 #define BT_COEX_STATE_HOLD_FOR_BT_OPERATION	BIT(15)
66 #define BT_COEX_STATE_BT_RSSI_LOW		BIT(19)
67 
68 #define BT_COEX_STATE_PROFILE_HID		BIT(20)
69 #define BT_COEX_STATE_PROFILE_A2DP		BIT(21)
70 #define BT_COEX_STATE_PROFILE_PAN		BIT(22)
71 #define BT_COEX_STATE_PROFILE_SCO		BIT(23)
72 
73 #define BT_COEX_STATE_WIFI_RSSI_1_LOW		BIT(24)
74 #define BT_COEX_STATE_WIFI_RSSI_1_MEDIUM	BIT(25)
75 #define BT_COEX_STATE_WIFI_RSSI_1_HIGH		BIT(26)
76 
77 #define BT_COEX_STATE_BTINFO_COMMON			BIT(30)
78 #define BT_COEX_STATE_BTINFO_B_HID_SCOESCO	BIT(31)
79 #define BT_COEX_STATE_BTINFO_B_FTP_A2DP		BIT(29)
80 
81 #define BT_COEX_STATE_BT_CNT_LEVEL_0		BIT(0)
82 #define BT_COEX_STATE_BT_CNT_LEVEL_1		BIT(1)
83 #define BT_COEX_STATE_BT_CNT_LEVEL_2		BIT(2)
84 #define BT_COEX_STATE_BT_CNT_LEVEL_3		BIT(3)
85 
86 #define BT_RSSI_STATE_HIGH			0
87 #define BT_RSSI_STATE_MEDIUM			1
88 #define BT_RSSI_STATE_LOW			2
89 #define BT_RSSI_STATE_STAY_HIGH			3
90 #define BT_RSSI_STATE_STAY_MEDIUM		4
91 #define BT_RSSI_STATE_STAY_LOW			5
92 
93 #define	BT_AGCTABLE_OFF				0
94 #define	BT_AGCTABLE_ON				1
95 #define	BT_BB_BACKOFF_OFF			0
96 #define	BT_BB_BACKOFF_ON			1
97 #define	BT_FW_NAV_OFF				0
98 #define	BT_FW_NAV_ON				1
99 
100 #define	BT_COEX_MECH_NONE			0
101 #define	BT_COEX_MECH_SCO			1
102 #define	BT_COEX_MECH_HID			2
103 #define	BT_COEX_MECH_A2DP			3
104 #define	BT_COEX_MECH_PAN			4
105 #define	BT_COEX_MECH_HID_A2DP			5
106 #define	BT_COEX_MECH_HID_PAN			6
107 #define	BT_COEX_MECH_PAN_A2DP			7
108 #define	BT_COEX_MECH_HID_SCO_ESCO		8
109 #define	BT_COEX_MECH_FTP_A2DP			9
110 #define	BT_COEX_MECH_COMMON			10
111 #define	BT_COEX_MECH_MAX			11
112 
113 #define	BT_DBG_PROFILE_NONE			0
114 #define	BT_DBG_PROFILE_SCO			1
115 #define	BT_DBG_PROFILE_HID			2
116 #define	BT_DBG_PROFILE_A2DP			3
117 #define	BT_DBG_PROFILE_PAN			4
118 #define	BT_DBG_PROFILE_HID_A2DP			5
119 #define	BT_DBG_PROFILE_HID_PAN			6
120 #define	BT_DBG_PROFILE_PAN_A2DP			7
121 #define	BT_DBG_PROFILE_MAX			9
122 
123 #define	BTINFO_B_FTP				BIT(7)
124 #define	BTINFO_B_A2DP				BIT(6)
125 #define	BTINFO_B_HID				BIT(5)
126 #define	BTINFO_B_SCO_BUSY			BIT(4)
127 #define	BTINFO_B_ACL_BUSY			BIT(3)
128 #define	BTINFO_B_INQ_PAGE			BIT(2)
129 #define	BTINFO_B_SCO_ESCO			BIT(1)
130 #define	BTINFO_B_CONNECTION			BIT(0)
131 
132 void rtl8723e_btdm_coex_all_off(struct ieee80211_hw *hw);
133 void rtl8723e_dm_bt_fw_coex_all_off(struct ieee80211_hw *hw);
134 
135 void rtl8723e_dm_bt_sw_coex_all_off(struct ieee80211_hw *hw);
136 void rtl8723e_dm_bt_hw_coex_all_off(struct ieee80211_hw *hw);
137 long rtl8723e_dm_bt_get_rx_ss(struct ieee80211_hw *hw);
138 void rtl8723e_dm_bt_balance(struct ieee80211_hw *hw,
139 			    bool balance_on, u8 ms0, u8 ms1);
140 void rtl8723e_dm_bt_agc_table(struct ieee80211_hw *hw, u8 tyep);
141 void rtl8723e_dm_bt_bb_back_off_level(struct ieee80211_hw *hw, u8 type);
142 u8 rtl8723e_dm_bt_check_coex_rssi_state(struct ieee80211_hw *hw,
143 					u8 level_num, u8 rssi_thresh,
144 					u8 rssi_thresh1);
145 u8 rtl8723e_dm_bt_check_coex_rssi_state1(struct ieee80211_hw *hw,
146 					 u8 level_num, u8 rssi_thresh,
147 					 u8 rssi_thresh1);
148 void _rtl8723_dm_bt_check_wifi_state(struct ieee80211_hw *hw);
149 void rtl8723e_dm_bt_reject_ap_aggregated_packet(struct ieee80211_hw *hw,
150 						bool b_reject);
151 bool rtl8723e_dm_bt_is_coexist_state_changed(struct ieee80211_hw *hw);
152 bool rtl8723e_dm_bt_is_wifi_up_link(struct ieee80211_hw *hw);
153 
154 #endif
155