xref: /openbmc/linux/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/hal_btc.h (revision 597473720f4dc69749542bfcfed4a927a43d935e)
1*48fa0b4dSLarry Finger /* SPDX-License-Identifier: GPL-2.0 */
2*48fa0b4dSLarry Finger /* Copyright(c) 2009-2012  Realtek Corporation.*/
3f1d2b4d3SLarry Finger 
4f1d2b4d3SLarry Finger #ifndef __RTL8723E_HAL_BTC_H__
5f1d2b4d3SLarry Finger #define __RTL8723E_HAL_BTC_H__
6f1d2b4d3SLarry Finger 
7f1d2b4d3SLarry Finger #include "../wifi.h"
8f1d2b4d3SLarry Finger #include "btc.h"
9f1d2b4d3SLarry Finger #include "hal_bt_coexist.h"
10f1d2b4d3SLarry Finger 
11f1d2b4d3SLarry Finger #define	BT_TXRX_CNT_THRES_1			1200
12f1d2b4d3SLarry Finger #define	BT_TXRX_CNT_THRES_2			1400
13f1d2b4d3SLarry Finger #define	BT_TXRX_CNT_THRES_3			3000
14f1d2b4d3SLarry Finger /* < 1200 */
15f1d2b4d3SLarry Finger #define	BT_TXRX_CNT_LEVEL_0			0
16f1d2b4d3SLarry Finger /* >= 1200 && < 1400 */
17f1d2b4d3SLarry Finger #define	BT_TXRX_CNT_LEVEL_1			1
18f1d2b4d3SLarry Finger /* >= 1400 */
19f1d2b4d3SLarry Finger #define	BT_TXRX_CNT_LEVEL_2			2
20f1d2b4d3SLarry Finger #define	BT_TXRX_CNT_LEVEL_3			3
21f1d2b4d3SLarry Finger 
22f1d2b4d3SLarry Finger #define	BT_COEX_DISABLE			0
23f1d2b4d3SLarry Finger #define	BT_Q_PKT_OFF			0
24f1d2b4d3SLarry Finger #define	BT_Q_PKT_ON			1
25f1d2b4d3SLarry Finger 
26f1d2b4d3SLarry Finger #define	BT_TX_PWR_OFF			0
27f1d2b4d3SLarry Finger #define	BT_TX_PWR_ON			1
28f1d2b4d3SLarry Finger 
29f1d2b4d3SLarry Finger /* TDMA mode definition */
30f1d2b4d3SLarry Finger #define	TDMA_2ANT			0
31f1d2b4d3SLarry Finger #define	TDMA_1ANT			1
32f1d2b4d3SLarry Finger #define	TDMA_NAV_OFF			0
33f1d2b4d3SLarry Finger #define	TDMA_NAV_ON			1
34f1d2b4d3SLarry Finger #define	TDMA_DAC_SWING_OFF		0
35f1d2b4d3SLarry Finger #define	TDMA_DAC_SWING_ON		1
36f1d2b4d3SLarry Finger 
37f1d2b4d3SLarry Finger /* PTA mode related definition */
38f1d2b4d3SLarry Finger #define	BT_PTA_MODE_OFF		0
39f1d2b4d3SLarry Finger #define	BT_PTA_MODE_ON		1
40f1d2b4d3SLarry Finger 
41f1d2b4d3SLarry Finger /* Penalty Tx Rate Adaptive */
42f1d2b4d3SLarry Finger #define	BT_TX_RATE_ADAPTIVE_NORMAL	0
43f1d2b4d3SLarry Finger #define	BT_TX_RATE_ADAPTIVE_LOW_PENALTY	1
44f1d2b4d3SLarry Finger 
45f1d2b4d3SLarry Finger /* RF Corner */
46f1d2b4d3SLarry Finger #define	BT_RF_RX_LPF_CORNER_RESUME	0
47f1d2b4d3SLarry Finger #define	BT_RF_RX_LPF_CORNER_SHRINK	1
48f1d2b4d3SLarry Finger 
49f1d2b4d3SLarry Finger #define C2H_EVT_HOST_CLOSE		0x00
50f1d2b4d3SLarry Finger #define C2H_EVT_FW_CLOSE		0xFF
51f1d2b4d3SLarry Finger 
52f1d2b4d3SLarry Finger enum bt_traffic_mode {
53f1d2b4d3SLarry Finger 	BT_MOTOR_EXT_BE = 0x00,
54f1d2b4d3SLarry Finger 	BT_MOTOR_EXT_GUL = 0x01,
55f1d2b4d3SLarry Finger 	BT_MOTOR_EXT_GUB = 0x02,
56f1d2b4d3SLarry Finger 	BT_MOTOR_EXT_GULB = 0x03
57f1d2b4d3SLarry Finger };
58f1d2b4d3SLarry Finger 
59f1d2b4d3SLarry Finger enum bt_traffic_mode_profile {
60f1d2b4d3SLarry Finger 	BT_PROFILE_NONE,
61f1d2b4d3SLarry Finger 	BT_PROFILE_A2DP,
62f1d2b4d3SLarry Finger 	BT_PROFILE_PAN,
63f1d2b4d3SLarry Finger 	BT_PROFILE_HID,
64f1d2b4d3SLarry Finger 	BT_PROFILE_SCO
65f1d2b4d3SLarry Finger };
66f1d2b4d3SLarry Finger 
67f1d2b4d3SLarry Finger /*
68f1d2b4d3SLarry Finger enum hci_ext_bt_operation {
69f1d2b4d3SLarry Finger 	HCI_BT_OP_NONE = 0x0,
70f1d2b4d3SLarry Finger 	HCI_BT_OP_INQUIRE_START	= 0x1,
71f1d2b4d3SLarry Finger 	HCI_BT_OP_INQUIRE_FINISH = 0x2,
72f1d2b4d3SLarry Finger 	HCI_BT_OP_PAGING_START = 0x3,
73f1d2b4d3SLarry Finger 	HCI_BT_OP_PAGING_SUCCESS = 0x4,
74f1d2b4d3SLarry Finger 	HCI_BT_OP_PAGING_UNSUCCESS = 0x5,
75f1d2b4d3SLarry Finger 	HCI_BT_OP_PAIRING_START = 0x6,
76f1d2b4d3SLarry Finger 	HCI_BT_OP_PAIRING_FINISH = 0x7,
77f1d2b4d3SLarry Finger 	HCI_BT_OP_BT_DEV_ENABLE = 0x8,
78f1d2b4d3SLarry Finger 	HCI_BT_OP_BT_DEV_DISABLE = 0x9,
79f1d2b4d3SLarry Finger 	HCI_BT_OP_MAX,
80f1d2b4d3SLarry Finger };
81f1d2b4d3SLarry Finger */
82f1d2b4d3SLarry Finger 
83f1d2b4d3SLarry Finger enum bt_spec {
84f1d2b4d3SLarry Finger 	BT_SPEC_1_0_b = 0x00,
85f1d2b4d3SLarry Finger 	BT_SPEC_1_1 = 0x01,
86f1d2b4d3SLarry Finger 	BT_SPEC_1_2 = 0x02,
87f1d2b4d3SLarry Finger 	BT_SPEC_2_0_EDR = 0x03,
88f1d2b4d3SLarry Finger 	BT_SPEC_2_1_EDR = 0x04,
89f1d2b4d3SLarry Finger 	BT_SPEC_3_0_HS = 0x05,
90f1d2b4d3SLarry Finger 	BT_SPEC_4_0 = 0x06
91f1d2b4d3SLarry Finger };
92f1d2b4d3SLarry Finger 
93f1d2b4d3SLarry Finger struct c2h_evt_hdr {
94f1d2b4d3SLarry Finger 	u8 cmd_id;
95f1d2b4d3SLarry Finger 	u8 cmd_len;
96f1d2b4d3SLarry Finger 	u8 cmd_seq;
97f1d2b4d3SLarry Finger };
98f1d2b4d3SLarry Finger 
99f1d2b4d3SLarry Finger enum bt_state {
100f1d2b4d3SLarry Finger 	BT_INFO_STATE_DISABLED = 0,
101f1d2b4d3SLarry Finger 	BT_INFO_STATE_NO_CONNECTION = 1,
102f1d2b4d3SLarry Finger 	BT_INFO_STATE_CONNECT_IDLE = 2,
103f1d2b4d3SLarry Finger 	BT_INFO_STATE_INQ_OR_PAG = 3,
104f1d2b4d3SLarry Finger 	BT_INFO_STATE_ACL_ONLY_BUSY = 4,
105f1d2b4d3SLarry Finger 	BT_INFO_STATE_SCO_ONLY_BUSY = 5,
106f1d2b4d3SLarry Finger 	BT_INFO_STATE_ACL_SCO_BUSY = 6,
107f1d2b4d3SLarry Finger 	BT_INFO_STATE_HID_BUSY = 7,
108f1d2b4d3SLarry Finger 	BT_INFO_STATE_HID_SCO_BUSY = 8,
109f1d2b4d3SLarry Finger 	BT_INFO_STATE_MAX = 7
110f1d2b4d3SLarry Finger };
111f1d2b4d3SLarry Finger 
11224915597SPing-Ke Shih enum rtl8723e_c2h_evt_v0 {
11324915597SPing-Ke Shih 	C2H_V0_DBG = 0,
11424915597SPing-Ke Shih 	C2H_V0_TSF = 1,
11524915597SPing-Ke Shih 	C2H_V0_AP_RPT_RSP = 2,
116f1d2b4d3SLarry Finger 	/* The FW notify the report of the specific tx packet. */
11724915597SPing-Ke Shih 	C2H_V0_CCX_TX_RPT = 3,
11824915597SPing-Ke Shih 	C2H_V0_BT_RSSI = 4,
11924915597SPing-Ke Shih 	C2H_V0_BT_OP_MODE = 5,
12024915597SPing-Ke Shih 	C2H_V0_HW_INFO_EXCH = 10,
12124915597SPing-Ke Shih 	C2H_V0_C2H_H2C_TEST = 11,
12224915597SPing-Ke Shih 	C2H_V0_BT_INFO = 12,
123f1d2b4d3SLarry Finger 	MAX_C2HEVENT
124f1d2b4d3SLarry Finger };
125f1d2b4d3SLarry Finger 
126f1d2b4d3SLarry Finger void rtl8723e_dm_bt_fw_coex_all_off_8723a(struct ieee80211_hw *hw);
127f1d2b4d3SLarry Finger void rtl8723e_dm_bt_sw_coex_all_off_8723a(struct ieee80211_hw *hw);
128f1d2b4d3SLarry Finger void rtl8723e_dm_bt_hw_coex_all_off_8723a(struct ieee80211_hw *hw);
129f1d2b4d3SLarry Finger void rtl8723e_dm_bt_coexist_8723(struct ieee80211_hw *hw);
130f1d2b4d3SLarry Finger void rtl8723e_dm_bt_set_bt_dm(struct ieee80211_hw *hw,
131f1d2b4d3SLarry Finger 			      struct btdm_8723 *p_btdm);
132f1d2b4d3SLarry Finger void rtl_8723e_c2h_command_handle(struct ieee80211_hw *hw);
133f1d2b4d3SLarry Finger void rtl_8723e_bt_wifi_media_status_notify(struct ieee80211_hw *hw,
134f1d2b4d3SLarry Finger 					bool mstatus);
135f1d2b4d3SLarry Finger void rtl8723e_dm_bt_turn_off_bt_coexist_before_enter_lps(
136f1d2b4d3SLarry Finger 				struct ieee80211_hw *hw);
137f1d2b4d3SLarry Finger 
138f1d2b4d3SLarry Finger #endif
139