/******************************************************************************
 *
 * Copyright(c) 2009-2010  Realtek Corporation.
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of version 2 of the GNU General Public License as
 * published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
 * more details.
 *
 * You should have received a copy of the GNU General Public License along with
 * this program; if not, write to the Free Software Foundation, Inc.,
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
 *
 * The full GNU General Public License is included in this distribution in the
 * file called LICENSE.
 *
 * Contact Information:
 * wlanfae <wlanfae@realtek.com>
 * Realtek Corporation, No. 2, Innovation Road II, Hsinchu Science Park,
 * Hsinchu 300, Taiwan.
 * Larry Finger <Larry.Finger@lwfinger.net>
 *
 *****************************************************************************/

#ifndef __RTL8821AE_HAL_BTC_H__
#define __RTL8821AE_HAL_BTC_H__

#include "../wifi.h"
#include "btc.h"
#include "hal_bt_coexist.h"

#define	BT_TXRX_CNT_THRES_1				1200
#define	BT_TXRX_CNT_THRES_2				1400
#define	BT_TXRX_CNT_THRES_3				3000
#define	BT_TXRX_CNT_LEVEL_0				0	// < 1200
#define	BT_TXRX_CNT_LEVEL_1				1	// >= 1200 && < 1400
#define	BT_TXRX_CNT_LEVEL_2				2	// >= 1400
#define	BT_TXRX_CNT_LEVEL_3				3



#define	BT_COEX_DISABLE		0
#define	BT_Q_PKT_OFF		0
#define	BT_Q_PKT_ON			1

#define	BT_TX_PWR_OFF		0
#define	BT_TX_PWR_ON		1

/* TDMA mode definition */
#define	TDMA_2ANT			0
#define	TDMA_1ANT			1
#define	TDMA_NAV_OFF		0
#define	TDMA_NAV_ON			1
#define	TDMA_DAC_SWING_OFF	0
#define	TDMA_DAC_SWING_ON	1

/* PTA mode related definition */
#define	BT_PTA_MODE_OFF		0
#define	BT_PTA_MODE_ON		1

/* Penalty Tx Rate Adaptive */
#define	BT_TX_RATE_ADAPTIVE_NORMAL	0
#define	BT_TX_RATE_ADAPTIVE_LOW_PENALTY	1

/* RF Corner */
#define	BT_RF_RX_LPF_CORNER_RESUME	0
#define	BT_RF_RX_LPF_CORNER_SHRINK	1

#define C2H_EVT_HOST_CLOSE		0x00
#define C2H_EVT_FW_CLOSE		0xFF

enum bt_traffic_mode {
	BT_MOTOR_EXT_BE = 0x00,
	BT_MOTOR_EXT_GUL = 0x01,
	BT_MOTOR_EXT_GUB = 0x02,
	BT_MOTOR_EXT_GULB = 0x03
};

enum bt_traffic_mode_profile {
	BT_PROFILE_NONE,
	BT_PROFILE_A2DP,
	BT_PROFILE_PAN,
	BT_PROFILE_HID,
	BT_PROFILE_SCO
};

enum hci_ext_bt_operation {
	HCI_BT_OP_NONE = 0x0,
	HCI_BT_OP_INQUIRE_START	= 0x1,
	HCI_BT_OP_INQUIRE_FINISH = 0x2,
	HCI_BT_OP_PAGING_START = 0x3,
	HCI_BT_OP_PAGING_SUCCESS = 0x4,
	HCI_BT_OP_PAGING_UNSUCCESS = 0x5,
	HCI_BT_OP_PAIRING_START = 0x6,
	HCI_BT_OP_PAIRING_FINISH = 0x7,
	HCI_BT_OP_BT_DEV_ENABLE = 0x8,
	HCI_BT_OP_BT_DEV_DISABLE = 0x9,
	HCI_BT_OP_MAX,
};

enum bt_spec {
	BT_SPEC_1_0_b = 0x00,
	BT_SPEC_1_1 = 0x01,
	BT_SPEC_1_2 = 0x02,
	BT_SPEC_2_0_EDR = 0x03,
	BT_SPEC_2_1_EDR = 0x04,
	BT_SPEC_3_0_HS = 0x05,
	BT_SPEC_4_0 = 0x06
};

struct c2h_evt_hdr {
        u8 cmd_id;
        u8 cmd_len;
        u8 cmd_seq;
};

enum bt_state{
	BT_INFO_STATE_DISABLED = 0,
	BT_INFO_STATE_NO_CONNECTION = 1,
	BT_INFO_STATE_CONNECT_IDLE = 2,
	BT_INFO_STATE_INQ_OR_PAG = 3,
	BT_INFO_STATE_ACL_ONLY_BUSY = 4,
	BT_INFO_STATE_SCO_ONLY_BUSY = 5,
	BT_INFO_STATE_ACL_SCO_BUSY = 6,
	BT_INFO_STATE_HID_BUSY = 7,
	BT_INFO_STATE_HID_SCO_BUSY = 8,
	BT_INFO_STATE_MAX = 7
};

enum rtl8723be_c2h_evt {
	C2H_DBG = 0,
	C2H_TSF = 1,
	C2H_AP_RPT_RSP = 2,
	C2H_CCX_TX_RPT = 3,	// The FW notify the report of the specific tx packet.
	C2H_BT_RSSI = 4,
	C2H_BT_OP_MODE = 5,
	C2H_HW_INFO_EXCH = 10,
	C2H_C2H_H2C_TEST = 11,
	BT_INFO = 9,
	MAX_C2HEVENT
};



void rtl8821ae_dm_bt_fw_coex_all_off_8723a(struct ieee80211_hw *hw);
void rtl8821ae_dm_bt_sw_coex_all_off_8723a(struct ieee80211_hw *hw);
void rtl8821ae_dm_bt_hw_coex_all_off_8723a(struct ieee80211_hw *hw);
void rtl8821ae_dm_bt_coexist(struct ieee80211_hw *hw);
void rtl8821ae_dm_bt_set_bt_dm(struct ieee80211_hw *hw, struct btdm_8821ae *p_btdm);
void rtl_8821ae_c2h_command_handle(struct ieee80211_hw * hw);
void rtl_8821ae_bt_wifi_media_status_notify(struct ieee80211_hw * hw, bool mstatus);
void rtl8821ae_dm_bt_turn_off_bt_coexist_before_enter_lps(struct ieee80211_hw *hw);



#endif
