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_BTC_H__
26#define __RTL8723E_HAL_BTC_H__
27
28#include "../wifi.h"
29#include "btc.h"
30#include "hal_bt_coexist.h"
31
32#define	BT_TXRX_CNT_THRES_1			1200
33#define	BT_TXRX_CNT_THRES_2			1400
34#define	BT_TXRX_CNT_THRES_3			3000
35/* < 1200 */
36#define	BT_TXRX_CNT_LEVEL_0			0
37/* >= 1200 && < 1400 */
38#define	BT_TXRX_CNT_LEVEL_1			1
39/* >= 1400 */
40#define	BT_TXRX_CNT_LEVEL_2			2
41#define	BT_TXRX_CNT_LEVEL_3			3
42
43#define	BT_COEX_DISABLE			0
44#define	BT_Q_PKT_OFF			0
45#define	BT_Q_PKT_ON			1
46
47#define	BT_TX_PWR_OFF			0
48#define	BT_TX_PWR_ON			1
49
50/* TDMA mode definition */
51#define	TDMA_2ANT			0
52#define	TDMA_1ANT			1
53#define	TDMA_NAV_OFF			0
54#define	TDMA_NAV_ON			1
55#define	TDMA_DAC_SWING_OFF		0
56#define	TDMA_DAC_SWING_ON		1
57
58/* PTA mode related definition */
59#define	BT_PTA_MODE_OFF		0
60#define	BT_PTA_MODE_ON		1
61
62/* Penalty Tx Rate Adaptive */
63#define	BT_TX_RATE_ADAPTIVE_NORMAL	0
64#define	BT_TX_RATE_ADAPTIVE_LOW_PENALTY	1
65
66/* RF Corner */
67#define	BT_RF_RX_LPF_CORNER_RESUME	0
68#define	BT_RF_RX_LPF_CORNER_SHRINK	1
69
70#define C2H_EVT_HOST_CLOSE		0x00
71#define C2H_EVT_FW_CLOSE		0xFF
72
73enum bt_traffic_mode {
74	BT_MOTOR_EXT_BE = 0x00,
75	BT_MOTOR_EXT_GUL = 0x01,
76	BT_MOTOR_EXT_GUB = 0x02,
77	BT_MOTOR_EXT_GULB = 0x03
78};
79
80enum bt_traffic_mode_profile {
81	BT_PROFILE_NONE,
82	BT_PROFILE_A2DP,
83	BT_PROFILE_PAN,
84	BT_PROFILE_HID,
85	BT_PROFILE_SCO
86};
87
88/*
89enum hci_ext_bt_operation {
90	HCI_BT_OP_NONE = 0x0,
91	HCI_BT_OP_INQUIRE_START	= 0x1,
92	HCI_BT_OP_INQUIRE_FINISH = 0x2,
93	HCI_BT_OP_PAGING_START = 0x3,
94	HCI_BT_OP_PAGING_SUCCESS = 0x4,
95	HCI_BT_OP_PAGING_UNSUCCESS = 0x5,
96	HCI_BT_OP_PAIRING_START = 0x6,
97	HCI_BT_OP_PAIRING_FINISH = 0x7,
98	HCI_BT_OP_BT_DEV_ENABLE = 0x8,
99	HCI_BT_OP_BT_DEV_DISABLE = 0x9,
100	HCI_BT_OP_MAX,
101};
102*/
103
104enum bt_spec {
105	BT_SPEC_1_0_b = 0x00,
106	BT_SPEC_1_1 = 0x01,
107	BT_SPEC_1_2 = 0x02,
108	BT_SPEC_2_0_EDR = 0x03,
109	BT_SPEC_2_1_EDR = 0x04,
110	BT_SPEC_3_0_HS = 0x05,
111	BT_SPEC_4_0 = 0x06
112};
113
114struct c2h_evt_hdr {
115	u8 cmd_id;
116	u8 cmd_len;
117	u8 cmd_seq;
118};
119
120enum bt_state {
121	BT_INFO_STATE_DISABLED = 0,
122	BT_INFO_STATE_NO_CONNECTION = 1,
123	BT_INFO_STATE_CONNECT_IDLE = 2,
124	BT_INFO_STATE_INQ_OR_PAG = 3,
125	BT_INFO_STATE_ACL_ONLY_BUSY = 4,
126	BT_INFO_STATE_SCO_ONLY_BUSY = 5,
127	BT_INFO_STATE_ACL_SCO_BUSY = 6,
128	BT_INFO_STATE_HID_BUSY = 7,
129	BT_INFO_STATE_HID_SCO_BUSY = 8,
130	BT_INFO_STATE_MAX = 7
131};
132
133enum rtl8723e_c2h_evt {
134	C2H_DBG = 0,
135	C2H_TSF = 1,
136	C2H_AP_RPT_RSP = 2,
137	/* The FW notify the report of the specific tx packet. */
138	C2H_CCX_TX_RPT = 3,
139	C2H_BT_RSSI = 4,
140	C2H_BT_OP_MODE = 5,
141	C2H_HW_INFO_EXCH = 10,
142	C2H_C2H_H2C_TEST = 11,
143	BT_INFO = 12,
144	MAX_C2HEVENT
145};
146
147void rtl8723e_dm_bt_fw_coex_all_off_8723a(struct ieee80211_hw *hw);
148void rtl8723e_dm_bt_sw_coex_all_off_8723a(struct ieee80211_hw *hw);
149void rtl8723e_dm_bt_hw_coex_all_off_8723a(struct ieee80211_hw *hw);
150void rtl8723e_dm_bt_coexist_8723(struct ieee80211_hw *hw);
151void rtl8723e_dm_bt_set_bt_dm(struct ieee80211_hw *hw,
152			      struct btdm_8723 *p_btdm);
153void rtl_8723e_c2h_command_handle(struct ieee80211_hw *hw);
154void rtl_8723e_bt_wifi_media_status_notify(struct ieee80211_hw *hw,
155					bool mstatus);
156void rtl8723e_dm_bt_turn_off_bt_coexist_before_enter_lps(
157				struct ieee80211_hw *hw);
158
159#endif
160