root/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/hal_btc.h
/* SPDX-License-Identifier: GPL-2.0 */
/* Copyright(c) 2009-2012  Realtek Corporation.*/

#ifndef __RTL8723E_HAL_BTC_H__
#define __RTL8723E_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
/* < 1200 */
#define BT_TXRX_CNT_LEVEL_0                     0
/* >= 1200 && < 1400 */
#define BT_TXRX_CNT_LEVEL_1                     1
/* >= 1400 */
#define BT_TXRX_CNT_LEVEL_2                     2
#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 rtl8723e_c2h_evt_v0 {
        C2H_V0_DBG = 0,
        C2H_V0_TSF = 1,
        C2H_V0_AP_RPT_RSP = 2,
        /* The FW notify the report of the specific tx packet. */
        C2H_V0_CCX_TX_RPT = 3,
        C2H_V0_BT_RSSI = 4,
        C2H_V0_BT_OP_MODE = 5,
        C2H_V0_HW_INFO_EXCH = 10,
        C2H_V0_C2H_H2C_TEST = 11,
        C2H_V0_BT_INFO = 12,
        MAX_C2HEVENT
};

void rtl8723e_dm_bt_fw_coex_all_off_8723a(struct ieee80211_hw *hw);
void rtl8723e_dm_bt_sw_coex_all_off_8723a(struct ieee80211_hw *hw);
void rtl8723e_dm_bt_hw_coex_all_off_8723a(struct ieee80211_hw *hw);
void rtl8723e_dm_bt_coexist_8723(struct ieee80211_hw *hw);
void rtl8723e_dm_bt_set_bt_dm(struct ieee80211_hw *hw,
                              struct btdm_8723 *p_btdm);
void rtl_8723e_c2h_command_handle(struct ieee80211_hw *hw);
void rtl_8723e_bt_wifi_media_status_notify(struct ieee80211_hw *hw,
                                        bool mstatus);
void rtl8723e_dm_bt_turn_off_bt_coexist_before_enter_lps(
                                struct ieee80211_hw *hw);

#endif