Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 /* Copyright(c) 2009-2012  Realtek Corporation.*/
0003 
0004 #ifndef __HALBTC_OUT_SRC_H__
0005 #define __HALBTC_OUT_SRC_H__
0006 
0007 #include    "../wifi.h"
0008 
0009 #define     NORMAL_EXEC             false
0010 #define     FORCE_EXEC              true
0011 
0012 #define     BTC_RF_OFF              0x0
0013 #define     BTC_RF_ON               0x1
0014 
0015 #define     BTC_RF_A                RF90_PATH_A
0016 #define     BTC_RF_B                RF90_PATH_B
0017 #define     BTC_RF_C                RF90_PATH_C
0018 #define     BTC_RF_D                RF90_PATH_D
0019 
0020 #define     BTC_SMSP                SINGLEMAC_SINGLEPHY
0021 #define     BTC_DMDP                DUALMAC_DUALPHY
0022 #define     BTC_DMSP                DUALMAC_SINGLEPHY
0023 #define     BTC_MP_UNKNOWN              0xff
0024 
0025 #define     IN
0026 #define     OUT
0027 
0028 #define     BT_TMP_BUF_SIZE             100
0029 
0030 #define     BT_COEX_ANT_TYPE_PG         0
0031 #define     BT_COEX_ANT_TYPE_ANTDIV         1
0032 #define     BT_COEX_ANT_TYPE_DETECTED       2
0033 
0034 #define     BTC_MIMO_PS_STATIC          0
0035 #define     BTC_MIMO_PS_DYNAMIC         1
0036 
0037 #define     BTC_RATE_DISABLE            0
0038 #define     BTC_RATE_ENABLE             1
0039 
0040 /* single Antenna definition */
0041 #define     BTC_ANT_PATH_WIFI           0
0042 #define     BTC_ANT_PATH_BT             1
0043 #define     BTC_ANT_PATH_PTA            2
0044 #define     BTC_ANT_PATH_WIFI5G         3
0045 #define     BTC_ANT_PATH_AUTO           4
0046 /* dual Antenna definition */
0047 #define     BTC_ANT_WIFI_AT_MAIN            0
0048 #define     BTC_ANT_WIFI_AT_AUX         1
0049 /* coupler Antenna definition */
0050 #define     BTC_ANT_WIFI_AT_CPL_MAIN        0
0051 #define     BTC_ANT_WIFI_AT_CPL_AUX         1
0052 
0053 enum btc_bt_reg_type {
0054     BTC_BT_REG_RF       = 0,
0055     BTC_BT_REG_MODEM    = 1,
0056     BTC_BT_REG_BLUEWIZE = 2,
0057     BTC_BT_REG_VENDOR   = 3,
0058     BTC_BT_REG_LE       = 4,
0059     BTC_BT_REG_MAX
0060 };
0061 
0062 enum btc_chip_interface {
0063     BTC_INTF_UNKNOWN    = 0,
0064     BTC_INTF_PCI        = 1,
0065     BTC_INTF_USB        = 2,
0066     BTC_INTF_SDIO       = 3,
0067     BTC_INTF_GSPI       = 4,
0068     BTC_INTF_MAX
0069 };
0070 
0071 enum btc_chip_type {
0072     BTC_CHIP_UNDEF      = 0,
0073     BTC_CHIP_CSR_BC4    = 1,
0074     BTC_CHIP_CSR_BC8    = 2,
0075     BTC_CHIP_RTL8723A   = 3,
0076     BTC_CHIP_RTL8821    = 4,
0077     BTC_CHIP_RTL8723B   = 5,
0078     BTC_CHIP_MAX
0079 };
0080 
0081 enum btc_msg_type {
0082     BTC_MSG_INTERFACE   = 0x0,
0083     BTC_MSG_ALGORITHM   = 0x1,
0084     BTC_MSG_MAX
0085 };
0086 
0087 /* following is for BTC_MSG_INTERFACE */
0088 #define     INTF_INIT               BIT0
0089 #define     INTF_NOTIFY             BIT2
0090 
0091 /* following is for BTC_ALGORITHM */
0092 #define     ALGO_BT_RSSI_STATE          BIT0
0093 #define     ALGO_WIFI_RSSI_STATE            BIT1
0094 #define     ALGO_BT_MONITOR             BIT2
0095 #define     ALGO_TRACE              BIT3
0096 #define     ALGO_TRACE_FW               BIT4
0097 #define     ALGO_TRACE_FW_DETAIL            BIT5
0098 #define     ALGO_TRACE_FW_EXEC          BIT6
0099 #define     ALGO_TRACE_SW               BIT7
0100 #define     ALGO_TRACE_SW_DETAIL            BIT8
0101 #define     ALGO_TRACE_SW_EXEC          BIT9
0102 
0103 /* following is for wifi link status */
0104 #define     WIFI_STA_CONNECTED          BIT0
0105 #define     WIFI_AP_CONNECTED           BIT1
0106 #define     WIFI_HS_CONNECTED           BIT2
0107 #define     WIFI_P2P_GO_CONNECTED           BIT3
0108 #define     WIFI_P2P_GC_CONNECTED           BIT4
0109 
0110 #define BTC_RSSI_HIGH(_rssi_)   \
0111     ((_rssi_ == BTC_RSSI_STATE_HIGH ||  \
0112       _rssi_ == BTC_RSSI_STATE_STAY_HIGH) ? true : false)
0113 #define BTC_RSSI_MEDIUM(_rssi_) \
0114     ((_rssi_ == BTC_RSSI_STATE_MEDIUM ||    \
0115       _rssi_ == BTC_RSSI_STATE_STAY_MEDIUM) ? true : false)
0116 #define BTC_RSSI_LOW(_rssi_)    \
0117     ((_rssi_ == BTC_RSSI_STATE_LOW ||   \
0118       _rssi_ == BTC_RSSI_STATE_STAY_LOW) ? true : false)
0119 
0120 enum btc_power_save_type {
0121     BTC_PS_WIFI_NATIVE = 0,
0122     BTC_PS_LPS_ON = 1,
0123     BTC_PS_LPS_OFF = 2,
0124     BTC_PS_LPS_MAX
0125 };
0126 
0127 struct btc_board_info {
0128     /* The following is some board information */
0129     u8 bt_chip_type;
0130     u8 pg_ant_num;  /* pg ant number */
0131     u8 btdm_ant_num;    /* ant number for btdm */
0132     u8 btdm_ant_pos;
0133     u8 single_ant_path; /* current used for 8723b only, 1=>s0,  0=>s1 */
0134     bool tfbga_package;
0135 
0136     u8 rfe_type;
0137     u8 ant_div_cfg;
0138     u8 customer_id;
0139 };
0140 
0141 enum btc_dbg_opcode {
0142     BTC_DBG_SET_COEX_NORMAL = 0x0,
0143     BTC_DBG_SET_COEX_WIFI_ONLY = 0x1,
0144     BTC_DBG_SET_COEX_BT_ONLY = 0x2,
0145     BTC_DBG_MAX
0146 };
0147 
0148 enum btc_rssi_state {
0149     BTC_RSSI_STATE_HIGH = 0x0,
0150     BTC_RSSI_STATE_MEDIUM = 0x1,
0151     BTC_RSSI_STATE_LOW = 0x2,
0152     BTC_RSSI_STATE_STAY_HIGH = 0x3,
0153     BTC_RSSI_STATE_STAY_MEDIUM = 0x4,
0154     BTC_RSSI_STATE_STAY_LOW = 0x5,
0155     BTC_RSSI_MAX
0156 };
0157 
0158 enum btc_wifi_role {
0159     BTC_ROLE_STATION = 0x0,
0160     BTC_ROLE_AP = 0x1,
0161     BTC_ROLE_IBSS = 0x2,
0162     BTC_ROLE_HS_MODE = 0x3,
0163     BTC_ROLE_MAX
0164 };
0165 
0166 enum btc_wireless_freq {
0167     BTC_FREQ_2_4G = 0x0,
0168     BTC_FREQ_5G = 0x1,
0169     BTC_FREQ_MAX
0170 };
0171 
0172 enum btc_wifi_bw_mode {
0173     BTC_WIFI_BW_LEGACY = 0x0,
0174     BTC_WIFI_BW_HT20 = 0x1,
0175     BTC_WIFI_BW_HT40 = 0x2,
0176     BTC_WIFI_BW_HT80 = 0x3,
0177     BTC_WIFI_BW_MAX
0178 };
0179 
0180 enum btc_wifi_traffic_dir {
0181     BTC_WIFI_TRAFFIC_TX = 0x0,
0182     BTC_WIFI_TRAFFIC_RX = 0x1,
0183     BTC_WIFI_TRAFFIC_MAX
0184 };
0185 
0186 enum btc_wifi_pnp {
0187     BTC_WIFI_PNP_WAKE_UP = 0x0,
0188     BTC_WIFI_PNP_SLEEP = 0x1,
0189     BTC_WIFI_PNP_SLEEP_KEEP_ANT = 0x2,
0190     BTC_WIFI_PNP_MAX
0191 };
0192 
0193 enum btc_iot_peer {
0194     BTC_IOT_PEER_UNKNOWN = 0,
0195     BTC_IOT_PEER_REALTEK = 1,
0196     BTC_IOT_PEER_REALTEK_92SE = 2,
0197     BTC_IOT_PEER_BROADCOM = 3,
0198     BTC_IOT_PEER_RALINK = 4,
0199     BTC_IOT_PEER_ATHEROS = 5,
0200     BTC_IOT_PEER_CISCO = 6,
0201     BTC_IOT_PEER_MERU = 7,
0202     BTC_IOT_PEER_MARVELL = 8,
0203     BTC_IOT_PEER_REALTEK_SOFTAP = 9,
0204     BTC_IOT_PEER_SELF_SOFTAP = 10, /* Self is SoftAP */
0205     BTC_IOT_PEER_AIRGO = 11,
0206     BTC_IOT_PEER_REALTEK_JAGUAR_BCUTAP = 12,
0207     BTC_IOT_PEER_REALTEK_JAGUAR_CCUTAP = 13,
0208     BTC_IOT_PEER_MAX,
0209 };
0210 
0211 /* for 8723b-d cut large current issue */
0212 enum bt_wifi_coex_state {
0213     BTC_WIFI_STAT_INIT,
0214     BTC_WIFI_STAT_IQK,
0215     BTC_WIFI_STAT_NORMAL_OFF,
0216     BTC_WIFI_STAT_MP_OFF,
0217     BTC_WIFI_STAT_NORMAL,
0218     BTC_WIFI_STAT_ANT_DIV,
0219     BTC_WIFI_STAT_MAX
0220 };
0221 
0222 enum bt_ant_type {
0223     BTC_ANT_TYPE_0,
0224     BTC_ANT_TYPE_1,
0225     BTC_ANT_TYPE_2,
0226     BTC_ANT_TYPE_3,
0227     BTC_ANT_TYPE_4,
0228     BTC_ANT_TYPE_MAX
0229 };
0230 
0231 enum btc_get_type {
0232     /* type bool */
0233     BTC_GET_BL_HS_OPERATION,
0234     BTC_GET_BL_HS_CONNECTING,
0235     BTC_GET_BL_WIFI_CONNECTED,
0236     BTC_GET_BL_WIFI_DUAL_BAND_CONNECTED,
0237     BTC_GET_BL_WIFI_BUSY,
0238     BTC_GET_BL_WIFI_SCAN,
0239     BTC_GET_BL_WIFI_LINK,
0240     BTC_GET_BL_WIFI_DHCP,
0241     BTC_GET_BL_WIFI_SOFTAP_IDLE,
0242     BTC_GET_BL_WIFI_SOFTAP_LINKING,
0243     BTC_GET_BL_WIFI_IN_EARLY_SUSPEND,
0244     BTC_GET_BL_WIFI_ROAM,
0245     BTC_GET_BL_WIFI_4_WAY_PROGRESS,
0246     BTC_GET_BL_WIFI_UNDER_5G,
0247     BTC_GET_BL_WIFI_AP_MODE_ENABLE,
0248     BTC_GET_BL_WIFI_ENABLE_ENCRYPTION,
0249     BTC_GET_BL_WIFI_UNDER_B_MODE,
0250     BTC_GET_BL_EXT_SWITCH,
0251     BTC_GET_BL_WIFI_IS_IN_MP_MODE,
0252     BTC_GET_BL_IS_ASUS_8723B,
0253     BTC_GET_BL_FW_READY,
0254     BTC_GET_BL_RF4CE_CONNECTED,
0255 
0256     /* type s4Byte */
0257     BTC_GET_S4_WIFI_RSSI,
0258     BTC_GET_S4_HS_RSSI,
0259 
0260     /* type u32 */
0261     BTC_GET_U4_WIFI_BW,
0262     BTC_GET_U4_WIFI_TRAFFIC_DIRECTION,
0263     BTC_GET_U4_WIFI_FW_VER,
0264     BTC_GET_U4_WIFI_LINK_STATUS,
0265     BTC_GET_U4_BT_PATCH_VER,
0266     BTC_GET_U4_VENDOR,
0267     BTC_GET_U4_SUPPORTED_VERSION,
0268     BTC_GET_U4_SUPPORTED_FEATURE,
0269     BTC_GET_U4_BT_DEVICE_INFO,
0270     BTC_GET_U4_BT_FORBIDDEN_SLOT_VAL,
0271     BTC_GET_U4_WIFI_IQK_TOTAL,
0272     BTC_GET_U4_WIFI_IQK_OK,
0273     BTC_GET_U4_WIFI_IQK_FAIL,
0274 
0275     /* type u1Byte */
0276     BTC_GET_U1_WIFI_DOT11_CHNL,
0277     BTC_GET_U1_WIFI_CENTRAL_CHNL,
0278     BTC_GET_U1_WIFI_HS_CHNL,
0279     BTC_GET_U1_MAC_PHY_MODE,
0280     BTC_GET_U1_AP_NUM,
0281     BTC_GET_U1_ANT_TYPE,
0282     BTC_GET_U1_IOT_PEER,
0283 
0284     /* for 1Ant */
0285     BTC_GET_U1_LPS_MODE,
0286     BTC_GET_BL_BT_SCO_BUSY,
0287 
0288     /* for test mode */
0289     BTC_GET_DRIVER_TEST_CFG,
0290     BTC_GET_MAX
0291 };
0292 
0293 enum btc_vendor {
0294     BTC_VENDOR_LENOVO,
0295     BTC_VENDOR_ASUS,
0296     BTC_VENDOR_OTHER
0297 };
0298 
0299 enum btc_set_type {
0300     /* type bool */
0301     BTC_SET_BL_BT_DISABLE,
0302     BTC_SET_BL_BT_TRAFFIC_BUSY,
0303     BTC_SET_BL_BT_LIMITED_DIG,
0304     BTC_SET_BL_FORCE_TO_ROAM,
0305     BTC_SET_BL_TO_REJ_AP_AGG_PKT,
0306     BTC_SET_BL_BT_CTRL_AGG_SIZE,
0307     BTC_SET_BL_INC_SCAN_DEV_NUM,
0308     BTC_SET_BL_BT_TX_RX_MASK,
0309     BTC_SET_BL_MIRACAST_PLUS_BT,
0310 
0311     /* type u1Byte */
0312     BTC_SET_U1_RSSI_ADJ_VAL_FOR_AGC_TABLE_ON,
0313     BTC_SET_UI_SCAN_SIG_COMPENSATION,
0314     BTC_SET_U1_AGG_BUF_SIZE,
0315 
0316     /* type trigger some action */
0317     BTC_SET_ACT_GET_BT_RSSI,
0318     BTC_SET_ACT_AGGREGATE_CTRL,
0319     BTC_SET_ACT_ANTPOSREGRISTRY_CTRL,
0320     BTC_SET_MIMO_PS_MODE,
0321 
0322     /********* for 1Ant **********/
0323     /* type bool */
0324     BTC_SET_BL_BT_SCO_BUSY,
0325     /* type u1Byte */
0326     BTC_SET_U1_RSSI_ADJ_VAL_FOR_1ANT_COEX_TYPE,
0327     BTC_SET_U1_LPS_VAL,
0328     BTC_SET_U1_RPWM_VAL,
0329     BTC_SET_U1_1ANT_LPS,
0330     BTC_SET_U1_1ANT_RPWM,
0331     /* type trigger some action */
0332     BTC_SET_ACT_LEAVE_LPS,
0333     BTC_SET_ACT_ENTER_LPS,
0334     BTC_SET_ACT_NORMAL_LPS,
0335     BTC_SET_ACT_PRE_NORMAL_LPS,
0336     BTC_SET_ACT_POST_NORMAL_LPS,
0337     BTC_SET_ACT_INC_FORCE_EXEC_PWR_CMD_CNT,
0338     BTC_SET_ACT_DISABLE_LOW_POWER,
0339     BTC_SET_BL_BT_LNA_CONSTRAIN_LEVEL,
0340     BTC_SET_ACT_UPDATE_RAMASK,
0341     BTC_SET_ACT_SEND_MIMO_PS,
0342     /* BT Coex related */
0343     BTC_SET_ACT_CTRL_BT_INFO,
0344     BTC_SET_ACT_CTRL_BT_COEX,
0345     BTC_SET_ACT_CTRL_8723B_ANT,
0346     /***************************/
0347     BTC_SET_MAX
0348 };
0349 
0350 enum btc_dbg_disp_type {
0351     BTC_DBG_DISP_COEX_STATISTICS = 0x0,
0352     BTC_DBG_DISP_BT_LINK_INFO = 0x1,
0353     BTC_DBG_DISP_BT_FW_VER = 0x2,
0354     BTC_DBG_DISP_FW_PWR_MODE_CMD = 0x3,
0355     BTC_DBG_DISP_WIFI_STATUS = 0x04,
0356     BTC_DBG_DISP_MAX
0357 };
0358 
0359 enum btc_notify_type_ips {
0360     BTC_IPS_LEAVE = 0x0,
0361     BTC_IPS_ENTER = 0x1,
0362     BTC_IPS_MAX
0363 };
0364 
0365 enum btc_notify_type_lps {
0366     BTC_LPS_DISABLE = 0x0,
0367     BTC_LPS_ENABLE = 0x1,
0368     BTC_LPS_MAX
0369 };
0370 
0371 enum btc_notify_type_scan {
0372     BTC_SCAN_FINISH = 0x0,
0373     BTC_SCAN_START = 0x1,
0374     BTC_SCAN_START_2G = 0x2,
0375     BTC_SCAN_MAX
0376 };
0377 
0378 enum btc_notify_type_switchband {
0379     BTC_NOT_SWITCH = 0x0,
0380     BTC_SWITCH_TO_24G = 0x1,
0381     BTC_SWITCH_TO_5G = 0x2,
0382     BTC_SWITCH_TO_24G_NOFORSCAN = 0x3,
0383     BTC_SWITCH_MAX
0384 };
0385 
0386 enum btc_notify_type_associate {
0387     BTC_ASSOCIATE_FINISH = 0x0,
0388     BTC_ASSOCIATE_START = 0x1,
0389     BTC_ASSOCIATE_5G_FINISH = 0x2,
0390     BTC_ASSOCIATE_5G_START = 0x3,
0391     BTC_ASSOCIATE_MAX
0392 };
0393 
0394 enum btc_notify_type_media_status {
0395     BTC_MEDIA_DISCONNECT = 0x0,
0396     BTC_MEDIA_CONNECT = 0x1,
0397     BTC_MEDIA_MAX
0398 };
0399 
0400 enum btc_notify_type_special_packet {
0401     BTC_PACKET_UNKNOWN = 0x0,
0402     BTC_PACKET_DHCP = 0x1,
0403     BTC_PACKET_ARP = 0x2,
0404     BTC_PACKET_EAPOL = 0x3,
0405     BTC_PACKET_MAX
0406 };
0407 
0408 enum hci_ext_bt_operation {
0409     HCI_BT_OP_NONE = 0x0,
0410     HCI_BT_OP_INQUIRY_START = 0x1,
0411     HCI_BT_OP_INQUIRY_FINISH = 0x2,
0412     HCI_BT_OP_PAGING_START = 0x3,
0413     HCI_BT_OP_PAGING_SUCCESS = 0x4,
0414     HCI_BT_OP_PAGING_UNSUCCESS = 0x5,
0415     HCI_BT_OP_PAIRING_START = 0x6,
0416     HCI_BT_OP_PAIRING_FINISH = 0x7,
0417     HCI_BT_OP_BT_DEV_ENABLE = 0x8,
0418     HCI_BT_OP_BT_DEV_DISABLE = 0x9,
0419     HCI_BT_OP_MAX
0420 };
0421 
0422 enum btc_notify_type_stack_operation {
0423     BTC_STACK_OP_NONE = 0x0,
0424     BTC_STACK_OP_INQ_PAGE_PAIR_START = 0x1,
0425     BTC_STACK_OP_INQ_PAGE_PAIR_FINISH = 0x2,
0426     BTC_STACK_OP_MAX
0427 };
0428 
0429 enum {
0430     BTC_CCK_1,
0431     BTC_CCK_2,
0432     BTC_CCK_5_5,
0433     BTC_CCK_11,
0434     BTC_OFDM_6,
0435     BTC_OFDM_9,
0436     BTC_OFDM_12,
0437     BTC_OFDM_18,
0438     BTC_OFDM_24,
0439     BTC_OFDM_36,
0440     BTC_OFDM_48,
0441     BTC_OFDM_54,
0442     BTC_MCS_0,
0443     BTC_MCS_1,
0444     BTC_MCS_2,
0445     BTC_MCS_3,
0446     BTC_MCS_4,
0447     BTC_MCS_5,
0448     BTC_MCS_6,
0449     BTC_MCS_7,
0450     BTC_MCS_8,
0451     BTC_MCS_9,
0452     BTC_MCS_10,
0453     BTC_MCS_11,
0454     BTC_MCS_12,
0455     BTC_MCS_13,
0456     BTC_MCS_14,
0457     BTC_MCS_15,
0458     BTC_MCS_16,
0459     BTC_MCS_17,
0460     BTC_MCS_18,
0461     BTC_MCS_19,
0462     BTC_MCS_20,
0463     BTC_MCS_21,
0464     BTC_MCS_22,
0465     BTC_MCS_23,
0466     BTC_MCS_24,
0467     BTC_MCS_25,
0468     BTC_MCS_26,
0469     BTC_MCS_27,
0470     BTC_MCS_28,
0471     BTC_MCS_29,
0472     BTC_MCS_30,
0473     BTC_MCS_31,
0474     BTC_VHT_1SS_MCS_0,
0475     BTC_VHT_1SS_MCS_1,
0476     BTC_VHT_1SS_MCS_2,
0477     BTC_VHT_1SS_MCS_3,
0478     BTC_VHT_1SS_MCS_4,
0479     BTC_VHT_1SS_MCS_5,
0480     BTC_VHT_1SS_MCS_6,
0481     BTC_VHT_1SS_MCS_7,
0482     BTC_VHT_1SS_MCS_8,
0483     BTC_VHT_1SS_MCS_9,
0484     BTC_VHT_2SS_MCS_0,
0485     BTC_VHT_2SS_MCS_1,
0486     BTC_VHT_2SS_MCS_2,
0487     BTC_VHT_2SS_MCS_3,
0488     BTC_VHT_2SS_MCS_4,
0489     BTC_VHT_2SS_MCS_5,
0490     BTC_VHT_2SS_MCS_6,
0491     BTC_VHT_2SS_MCS_7,
0492     BTC_VHT_2SS_MCS_8,
0493     BTC_VHT_2SS_MCS_9,
0494     BTC_VHT_3SS_MCS_0,
0495     BTC_VHT_3SS_MCS_1,
0496     BTC_VHT_3SS_MCS_2,
0497     BTC_VHT_3SS_MCS_3,
0498     BTC_VHT_3SS_MCS_4,
0499     BTC_VHT_3SS_MCS_5,
0500     BTC_VHT_3SS_MCS_6,
0501     BTC_VHT_3SS_MCS_7,
0502     BTC_VHT_3SS_MCS_8,
0503     BTC_VHT_3SS_MCS_9,
0504     BTC_VHT_4SS_MCS_0,
0505     BTC_VHT_4SS_MCS_1,
0506     BTC_VHT_4SS_MCS_2,
0507     BTC_VHT_4SS_MCS_3,
0508     BTC_VHT_4SS_MCS_4,
0509     BTC_VHT_4SS_MCS_5,
0510     BTC_VHT_4SS_MCS_6,
0511     BTC_VHT_4SS_MCS_7,
0512     BTC_VHT_4SS_MCS_8,
0513     BTC_VHT_4SS_MCS_9,
0514     BTC_MCS_32,
0515     BTC_UNKNOWN,
0516     BTC_PKT_MGNT,
0517     BTC_PKT_CTRL,
0518     BTC_PKT_UNKNOWN,
0519     BTC_PKT_NOT_FOR_ME,
0520     BTC_RATE_MAX
0521 };
0522 
0523 enum {
0524     BTC_MULTIPORT_SCC,
0525     BTC_MULTIPORT_MCC_2CHANNEL,
0526     BTC_MULTIPORT_MCC_2BAND,
0527     BTC_MULTIPORT_MAX
0528 };
0529 
0530 struct btc_bt_info {
0531     bool bt_disabled;
0532     u8 rssi_adjust_for_agc_table_on;
0533     u8 rssi_adjust_for_1ant_coex_type;
0534     bool pre_bt_ctrl_agg_buf_size;
0535     bool bt_busy;
0536     u8 pre_agg_buf_size;
0537     u8 agg_buf_size;
0538     bool limited_dig;
0539     bool pre_reject_agg_pkt;
0540     bool reject_agg_pkt;
0541     bool bt_ctrl_buf_size;
0542     bool increase_scan_dev_num;
0543     bool miracast_plus_bt;
0544     bool bt_ctrl_agg_buf_size;
0545     bool bt_tx_rx_mask;
0546     u16 bt_hci_ver;
0547     u16 bt_real_fw_ver;
0548     u8 bt_fw_ver;
0549     u32 bt_get_fw_ver;
0550 
0551     bool bt_disable_low_pwr;
0552 
0553     /* the following is for 1Ant solution */
0554     bool bt_ctrl_lps;
0555     bool bt_pwr_save_mode;
0556     bool bt_lps_on;
0557     bool force_to_roam;
0558     u8 force_exec_pwr_cmd_cnt;
0559     u8 lps_val;
0560     u8 rpwm_val;
0561     u32 ra_mask;
0562 
0563     u32 afh_map_l;
0564     u32 afh_map_m;
0565     u16 afh_map_h;
0566     u32 bt_supported_feature;
0567     u32 bt_supported_version;
0568     u32 bt_device_info;
0569     u32 bt_forb_slot_val;
0570     u8 bt_ant_det_val;
0571     u8 bt_ble_scan_type;
0572     u32 bt_ble_scan_para;
0573 };
0574 
0575 struct btc_stack_info {
0576     bool profile_notified;
0577     u16 hci_version;    /* stack hci version */
0578     u8 num_of_link;
0579     bool bt_link_exist;
0580     bool sco_exist;
0581     bool acl_exist;
0582     bool a2dp_exist;
0583     bool hid_exist;
0584     u8 num_of_hid;
0585     bool pan_exist;
0586     bool unknown_acl_exist;
0587     s8 min_bt_rssi;
0588 };
0589 
0590 struct btc_statistics {
0591     u32 cnt_bind;
0592     u32 cnt_init_hw_config;
0593     u32 cnt_init_coex_dm;
0594     u32 cnt_ips_notify;
0595     u32 cnt_lps_notify;
0596     u32 cnt_scan_notify;
0597     u32 cnt_connect_notify;
0598     u32 cnt_media_status_notify;
0599     u32 cnt_special_packet_notify;
0600     u32 cnt_bt_info_notify;
0601     u32 cnt_periodical;
0602     u32 cnt_coex_dm_switch;
0603     u32 cnt_stack_operation_notify;
0604     u32 cnt_dbg_ctrl;
0605     u32 cnt_pre_load_firmware;
0606     u32 cnt_power_on;
0607 };
0608 
0609 struct btc_bt_link_info {
0610     bool bt_link_exist;
0611     bool bt_hi_pri_link_exist;
0612     bool sco_exist;
0613     bool sco_only;
0614     bool a2dp_exist;
0615     bool a2dp_only;
0616     bool hid_exist;
0617     bool hid_only;
0618     bool pan_exist;
0619     bool pan_only;
0620     bool slave_role;
0621     bool acl_busy;
0622 };
0623 
0624 enum btc_antenna_pos {
0625     BTC_ANTENNA_AT_MAIN_PORT = 0x1,
0626     BTC_ANTENNA_AT_AUX_PORT = 0x2,
0627 };
0628 
0629 enum btc_mp_h2c_op_code {
0630     BT_OP_GET_BT_VERSION            = 0,
0631     BT_OP_WRITE_REG_ADDR            = 12,
0632     BT_OP_WRITE_REG_VALUE           = 13,
0633     BT_OP_READ_REG              = 17,
0634     BT_OP_GET_AFH_MAP_L         = 30,
0635     BT_OP_GET_AFH_MAP_M         = 31,
0636     BT_OP_GET_AFH_MAP_H         = 32,
0637     BT_OP_GET_BT_COEX_SUPPORTED_FEATURE = 42,
0638     BT_OP_GET_BT_COEX_SUPPORTED_VERSION = 43,
0639     BT_OP_GET_BT_ANT_DET_VAL        = 44,
0640     BT_OP_GET_BT_BLE_SCAN_PARA      = 45,
0641     BT_OP_GET_BT_BLE_SCAN_TYPE      = 46,
0642     BT_OP_GET_BT_DEVICE_INFO        = 48,
0643     BT_OP_GET_BT_FORBIDDEN_SLOT_VAL     = 49,
0644     BT_OP_MAX
0645 };
0646 
0647 enum btc_mp_h2c_req_num {
0648     /* 4 bits only */
0649     BT_SEQ_DONT_CARE            = 0,
0650     BT_SEQ_GET_BT_VERSION           = 0xE,
0651     BT_SEQ_GET_AFH_MAP_L            = 0x5,
0652     BT_SEQ_GET_AFH_MAP_M            = 0x6,
0653     BT_SEQ_GET_AFH_MAP_H            = 0x9,
0654     BT_SEQ_GET_BT_COEX_SUPPORTED_FEATURE    = 0x7,
0655     BT_SEQ_GET_BT_COEX_SUPPORTED_VERSION    = 0x8,
0656     BT_SEQ_GET_BT_ANT_DET_VAL       = 0x2,
0657     BT_SEQ_GET_BT_BLE_SCAN_PARA     = 0x3,
0658     BT_SEQ_GET_BT_BLE_SCAN_TYPE     = 0x4,
0659     BT_SEQ_GET_BT_DEVICE_INFO       = 0xA,
0660     BT_SEQ_GET_BT_FORB_SLOT_VAL     = 0xB,
0661 };
0662 
0663 struct btc_coexist {
0664     /* make sure only one adapter can bind the data context  */
0665     bool binded;
0666     /* default adapter */
0667     void *adapter;
0668     struct btc_board_info board_info;
0669     /* some bt info referenced by non-bt module */
0670     struct btc_bt_info bt_info;
0671     struct btc_stack_info stack_info;
0672     enum btc_chip_interface chip_interface;
0673     struct btc_bt_link_info bt_link_info;
0674 
0675     /* boolean variables to replace BT_AUTO_REPORT_ONLY_XXXXY_ZANT
0676      * configuration parameters
0677      */
0678     bool auto_report_1ant;
0679     bool auto_report_2ant;
0680     bool dbg_mode_1ant;
0681     bool dbg_mode_2ant;
0682     bool initialized;
0683     bool stop_coex_dm;
0684     bool manual_control;
0685     struct btc_statistics statistics;
0686     u8 pwr_mode_val[10];
0687 
0688     struct completion bt_mp_comp;
0689 
0690     /* function pointers - io related */
0691     u8 (*btc_read_1byte)(void *btc_context, u32 reg_addr);
0692     void (*btc_write_1byte)(void *btc_context, u32 reg_addr, u32 data);
0693     void (*btc_write_1byte_bitmask)(void *btc_context, u32 reg_addr,
0694                     u32 bit_mask, u8 data1b);
0695     u16 (*btc_read_2byte)(void *btc_context, u32 reg_addr);
0696     void (*btc_write_2byte)(void *btc_context, u32 reg_addr, u16 data);
0697     u32 (*btc_read_4byte)(void *btc_context, u32 reg_addr);
0698     void (*btc_write_4byte)(void *btc_context, u32 reg_addr, u32 data);
0699 
0700     void (*btc_write_local_reg_1byte)(void *btc_context, u32 reg_addr,
0701                       u8 data);
0702     void (*btc_set_bb_reg)(void *btc_context, u32 reg_addr,
0703                    u32 bit_mask, u32 data);
0704     u32 (*btc_get_bb_reg)(void *btc_context, u32 reg_addr,
0705                   u32 bit_mask);
0706     void (*btc_set_rf_reg)(void *btc_context, u8 rf_path, u32 reg_addr,
0707                    u32 bit_mask, u32 data);
0708     u32 (*btc_get_rf_reg)(void *btc_context, u8 rf_path,
0709                   u32 reg_addr, u32 bit_mask);
0710 
0711     void (*btc_fill_h2c)(void *btc_context, u8 element_id,
0712                  u32 cmd_len, u8 *cmd_buffer);
0713 
0714     void (*btc_disp_dbg_msg)(void *btcoexist, u8 disp_type,
0715                  struct seq_file *m);
0716 
0717     bool (*btc_get)(void *btcoexist, u8 get_type, void *out_buf);
0718     bool (*btc_set)(void *btcoexist, u8 set_type, void *in_buf);
0719 
0720     void (*btc_set_bt_reg)(void *btc_context, u8 reg_type, u32 offset,
0721                    u32 value);
0722     u32 (*btc_get_bt_reg)(void *btc_context, u8 reg_type, u32 offset);
0723     u32 (*btc_get_bt_coex_supported_feature)(void *btcoexist);
0724     u32 (*btc_get_bt_coex_supported_version)(void *btcoexist);
0725     u32 (*btc_get_bt_phydm_version)(void *btcoexist);
0726     void (*btc_phydm_modify_ra_pcr_threshold)(void *btcoexist,
0727                           u8 ra_offset_direction,
0728                           u8 ra_threshold_offset);
0729     u32 (*btc_phydm_query_phy_counter)(void *btcoexist,
0730                        enum dm_info_query dm_id);
0731     u8 (*btc_get_ant_det_val_from_bt)(void *btcoexist);
0732     u8 (*btc_get_ble_scan_type_from_bt)(void *btcoexist);
0733     u32 (*btc_get_ble_scan_para_from_bt)(void *btcoexist, u8 scan_type);
0734     bool (*btc_get_bt_afh_map_from_bt)(void *btcoexist, u8 map_type,
0735                        u8 *afh_map);
0736 };
0737 
0738 bool halbtc_is_wifi_uplink(struct rtl_priv *adapter);
0739 
0740 #define rtl_btc_coexist(rtlpriv)                \
0741     ((struct btc_coexist *)((rtlpriv)->btcoexist.btc_context))
0742 #define rtl_btc_wifi_only(rtlpriv)              \
0743     ((struct wifi_only_cfg *)((rtlpriv)->btcoexist.wifi_only_context))
0744 
0745 struct wifi_only_cfg;
0746 
0747 bool exhalbtc_initlize_variables(struct rtl_priv *rtlpriv);
0748 bool exhalbtc_initlize_variables_wifi_only(struct rtl_priv *rtlpriv);
0749 bool exhalbtc_bind_bt_coex_withadapter(void *adapter);
0750 void exhalbtc_power_on_setting(struct btc_coexist *btcoexist);
0751 void exhalbtc_pre_load_firmware(struct btc_coexist *btcoexist);
0752 void exhalbtc_init_hw_config(struct btc_coexist *btcoexist, bool wifi_only);
0753 void exhalbtc_init_hw_config_wifi_only(struct wifi_only_cfg *wifionly_cfg);
0754 void exhalbtc_init_coex_dm(struct btc_coexist *btcoexist);
0755 void exhalbtc_ips_notify(struct btc_coexist *btcoexist, u8 type);
0756 void exhalbtc_lps_notify(struct btc_coexist *btcoexist, u8 type);
0757 void exhalbtc_scan_notify(struct btc_coexist *btcoexist, u8 type);
0758 void exhalbtc_scan_notify_wifi_only(struct wifi_only_cfg *wifionly_cfg,
0759                     u8 is_5g);
0760 void exhalbtc_connect_notify(struct btc_coexist *btcoexist, u8 action);
0761 void exhalbtc_mediastatus_notify(struct btc_coexist *btcoexist,
0762                  enum rt_media_status media_status);
0763 void exhalbtc_special_packet_notify(struct btc_coexist *btcoexist, u8 pkt_type);
0764 void exhalbtc_bt_info_notify(struct btc_coexist *btcoexist, u8 *tmp_buf,
0765                  u8 length);
0766 void exhalbtc_rf_status_notify(struct btc_coexist *btcoexist, u8 type);
0767 void exhalbtc_halt_notify(struct btc_coexist *btcoexist);
0768 void exhalbtc_pnp_notify(struct btc_coexist *btcoexist, u8 pnp_state);
0769 void exhalbtc_coex_dm_switch(struct btc_coexist *btcoexist);
0770 void exhalbtc_periodical(struct btc_coexist *btcoexist);
0771 void exhalbtc_dbg_control(struct btc_coexist *btcoexist, u8 code, u8 len,
0772               u8 *data);
0773 void exhalbtc_antenna_detection(struct btc_coexist *btcoexist, u32 cent_freq,
0774                 u32 offset, u32 span, u32 seconds);
0775 void exhalbtc_stack_update_profile_info(void);
0776 void exhalbtc_set_hci_version(struct btc_coexist *btcoexist, u16 hci_version);
0777 void exhalbtc_set_bt_patch_version(struct btc_coexist *btcoexist,
0778                    u16 bt_hci_version, u16 bt_patch_version);
0779 void exhalbtc_update_min_bt_rssi(struct btc_coexist *btcoexist, s8 bt_rssi);
0780 void exhalbtc_set_bt_exist(struct btc_coexist *btcoexist, bool bt_exist);
0781 void exhalbtc_set_chip_type(struct btc_coexist *btcoexist, u8 chip_type);
0782 void exhalbtc_set_ant_num(struct rtl_priv *rtlpriv, u8 type, u8 ant_num);
0783 void exhalbtc_display_bt_coex_info(struct btc_coexist *btcoexist,
0784                    struct seq_file *m);
0785 void exhalbtc_switch_band_notify(struct btc_coexist *btcoexist, u8 type);
0786 void exhalbtc_switch_band_notify_wifi_only(struct wifi_only_cfg *wifionly_cfg,
0787                        u8 is_5g);
0788 void exhalbtc_signal_compensation(struct btc_coexist *btcoexist,
0789                   u8 *rssi_wifi, u8 *rssi_bt);
0790 void exhalbtc_lps_leave(struct btc_coexist *btcoexist);
0791 void exhalbtc_low_wifi_traffic_notify(struct btc_coexist *btcoexist);
0792 void exhalbtc_set_single_ant_path(struct btc_coexist *btcoexist,
0793                   u8 single_ant_path);
0794 void halbtc_send_wifi_port_id_cmd(void *bt_context);
0795 void halbtc_set_default_port_id_cmd(void *bt_context);
0796 
0797 /* The following are used by wifi_only case */
0798 enum wifionly_chip_interface {
0799     WIFIONLY_INTF_UNKNOWN   = 0,
0800     WIFIONLY_INTF_PCI       = 1,
0801     WIFIONLY_INTF_USB       = 2,
0802     WIFIONLY_INTF_SDIO      = 3,
0803     WIFIONLY_INTF_MAX
0804 };
0805 
0806 enum wifionly_customer_id {
0807     CUSTOMER_NORMAL         = 0,
0808     CUSTOMER_HP_1           = 1,
0809 };
0810 
0811 struct wifi_only_haldata {
0812     u16     customer_id;
0813     u8      efuse_pg_antnum;
0814     u8      efuse_pg_antpath;
0815     u8      rfe_type;
0816     u8      ant_div_cfg;
0817 };
0818 
0819 struct wifi_only_cfg {
0820     void                *adapter;
0821     struct wifi_only_haldata    haldata_info;
0822     enum wifionly_chip_interface    chip_interface;
0823 };
0824 
0825 static inline
0826 void halwifionly_phy_set_bb_reg(struct wifi_only_cfg *wifi_conly_cfg,
0827                 u32 regaddr, u32 bitmask, u32 data)
0828 {
0829     struct rtl_priv *rtlpriv = (struct rtl_priv *)wifi_conly_cfg->adapter;
0830 
0831     rtl_set_bbreg(rtlpriv->hw, regaddr, bitmask, data);
0832 }
0833 
0834 #endif