linux/drivers/staging/rtlwifi/btcoexist/halbtcoutsrc.h
<<
>>
Prefs
   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 *
  22 * Larry Finger <Larry.Finger@lwfinger.net>
  23 *
  24 *****************************************************************************/
  25#ifndef __HALBTC_OUT_SRC_H__
  26#define __HALBTC_OUT_SRC_H__
  27
  28#include        "../wifi.h"
  29
  30#define         BTC_COEX_OFFLOAD                        0
  31
  32#define         NORMAL_EXEC                             false
  33#define         FORCE_EXEC                              true
  34
  35#define         BTC_RF_OFF                              0x0
  36#define         BTC_RF_ON                               0x1
  37
  38#define         BTC_RF_A                                RF90_PATH_A
  39#define         BTC_RF_B                                RF90_PATH_B
  40#define         BTC_RF_C                                RF90_PATH_C
  41#define         BTC_RF_D                                RF90_PATH_D
  42
  43#define         BTC_SMSP                                SINGLEMAC_SINGLEPHY
  44#define         BTC_DMDP                                DUALMAC_DUALPHY
  45#define         BTC_DMSP                                DUALMAC_SINGLEPHY
  46#define         BTC_MP_UNKNOWN                          0xff
  47
  48#define         IN
  49#define         OUT
  50
  51#define         BT_TMP_BUF_SIZE                         100
  52
  53#define         BT_COEX_ANT_TYPE_PG                     0
  54#define         BT_COEX_ANT_TYPE_ANTDIV                 1
  55#define         BT_COEX_ANT_TYPE_DETECTED               2
  56
  57#define         BTC_MIMO_PS_STATIC                      0
  58#define         BTC_MIMO_PS_DYNAMIC                     1
  59
  60#define         BTC_RATE_DISABLE                        0
  61#define         BTC_RATE_ENABLE                         1
  62
  63/* single Antenna definition */
  64#define         BTC_ANT_PATH_WIFI                       0
  65#define         BTC_ANT_PATH_BT                         1
  66#define         BTC_ANT_PATH_PTA                        2
  67#define         BTC_ANT_PATH_WIFI5G                     3
  68#define         BTC_ANT_PATH_AUTO                       4
  69/* dual Antenna definition */
  70#define         BTC_ANT_WIFI_AT_MAIN                    0
  71#define         BTC_ANT_WIFI_AT_AUX                     1
  72#define         BTC_ANT_WIFI_AT_DIVERSITY       2
  73/* coupler Antenna definition */
  74#define         BTC_ANT_WIFI_AT_CPL_MAIN                0
  75#define         BTC_ANT_WIFI_AT_CPL_AUX                 1
  76
  77enum btc_bt_reg_type {
  78        BTC_BT_REG_RF           = 0,
  79        BTC_BT_REG_MODEM        = 1,
  80        BTC_BT_REG_BLUEWIZE     = 2,
  81        BTC_BT_REG_VENDOR       = 3,
  82        BTC_BT_REG_LE           = 4,
  83        BTC_BT_REG_MAX
  84};
  85
  86enum btc_chip_interface {
  87        BTC_INTF_UNKNOWN        = 0,
  88        BTC_INTF_PCI            = 1,
  89        BTC_INTF_USB            = 2,
  90        BTC_INTF_SDIO           = 3,
  91        BTC_INTF_GSPI           = 4,
  92        BTC_INTF_MAX
  93};
  94
  95enum btc_chip_type {
  96        BTC_CHIP_UNDEF          = 0,
  97        BTC_CHIP_CSR_BC4        = 1,
  98        BTC_CHIP_CSR_BC8        = 2,
  99        BTC_CHIP_RTL8723A       = 3,
 100        BTC_CHIP_RTL8821        = 4,
 101        BTC_CHIP_RTL8723B       = 5,
 102        BTC_CHIP_MAX
 103};
 104
 105enum btc_msg_type {
 106        BTC_MSG_INTERFACE       = 0x0,
 107        BTC_MSG_ALGORITHM       = 0x1,
 108        BTC_MSG_MAX
 109};
 110
 111/* following is for BTC_MSG_INTERFACE */
 112#define         INTF_INIT                               BIT0
 113#define         INTF_NOTIFY                             BIT2
 114
 115/* following is for BTC_ALGORITHM */
 116#define         ALGO_BT_RSSI_STATE                      BIT0
 117#define         ALGO_WIFI_RSSI_STATE                    BIT1
 118#define         ALGO_BT_MONITOR                         BIT2
 119#define         ALGO_TRACE                              BIT3
 120#define         ALGO_TRACE_FW                           BIT4
 121#define         ALGO_TRACE_FW_DETAIL                    BIT5
 122#define         ALGO_TRACE_FW_EXEC                      BIT6
 123#define         ALGO_TRACE_SW                           BIT7
 124#define         ALGO_TRACE_SW_DETAIL                    BIT8
 125#define         ALGO_TRACE_SW_EXEC                      BIT9
 126
 127/* following is for wifi link status */
 128#define         WIFI_STA_CONNECTED                      BIT0
 129#define         WIFI_AP_CONNECTED                       BIT1
 130#define         WIFI_HS_CONNECTED                       BIT2
 131#define         WIFI_P2P_GO_CONNECTED                   BIT3
 132#define         WIFI_P2P_GC_CONNECTED                   BIT4
 133
 134#define BTC_RSSI_HIGH(_rssi_)   \
 135        ((_rssi_ == BTC_RSSI_STATE_HIGH ||      \
 136          _rssi_ == BTC_RSSI_STATE_STAY_HIGH) ? true : false)
 137#define BTC_RSSI_MEDIUM(_rssi_) \
 138        ((_rssi_ == BTC_RSSI_STATE_MEDIUM ||    \
 139          _rssi_ == BTC_RSSI_STATE_STAY_MEDIUM) ? true : false)
 140#define BTC_RSSI_LOW(_rssi_)    \
 141        ((_rssi_ == BTC_RSSI_STATE_LOW ||       \
 142          _rssi_ == BTC_RSSI_STATE_STAY_LOW) ? true : false)
 143
 144enum btc_power_save_type {
 145        BTC_PS_WIFI_NATIVE = 0,
 146        BTC_PS_LPS_ON = 1,
 147        BTC_PS_LPS_OFF = 2,
 148        BTC_PS_LPS_MAX
 149};
 150
 151struct btc_board_info {
 152        /* The following is some board information */
 153        u8 bt_chip_type;
 154        u8 pg_ant_num;  /* pg ant number */
 155        u8 btdm_ant_num;        /* ant number for btdm */
 156        u8 btdm_ant_num_by_ant_det;
 157        u8 btdm_ant_pos;
 158        u8 single_ant_path; /* current used for 8723b only, 1=>s0,  0=>s1 */
 159        bool tfbga_package;
 160        bool btdm_ant_det_finish;
 161
 162        u8 rfe_type;
 163        u8 ant_div_cfg;
 164};
 165
 166enum btc_dbg_opcode {
 167        BTC_DBG_SET_COEX_NORMAL = 0x0,
 168        BTC_DBG_SET_COEX_WIFI_ONLY = 0x1,
 169        BTC_DBG_SET_COEX_BT_ONLY = 0x2,
 170        BTC_DBG_MAX
 171};
 172
 173enum btc_rssi_state {
 174        BTC_RSSI_STATE_HIGH = 0x0,
 175        BTC_RSSI_STATE_MEDIUM = 0x1,
 176        BTC_RSSI_STATE_LOW = 0x2,
 177        BTC_RSSI_STATE_STAY_HIGH = 0x3,
 178        BTC_RSSI_STATE_STAY_MEDIUM = 0x4,
 179        BTC_RSSI_STATE_STAY_LOW = 0x5,
 180        BTC_RSSI_MAX
 181};
 182
 183enum btc_wifi_role {
 184        BTC_ROLE_STATION = 0x0,
 185        BTC_ROLE_AP = 0x1,
 186        BTC_ROLE_IBSS = 0x2,
 187        BTC_ROLE_HS_MODE = 0x3,
 188        BTC_ROLE_MAX
 189};
 190
 191enum btc_wireless_freq {
 192        BTC_FREQ_2_4G = 0x0,
 193        BTC_FREQ_5G = 0x1,
 194        BTC_FREQ_MAX
 195};
 196
 197enum btc_wifi_bw_mode {
 198        BTC_WIFI_BW_LEGACY = 0x0,
 199        BTC_WIFI_BW_HT20 = 0x1,
 200        BTC_WIFI_BW_HT40 = 0x2,
 201        BTC_WIFI_BW_HT80 = 0x3,
 202        BTC_WIFI_BW_MAX
 203};
 204
 205enum btc_wifi_traffic_dir {
 206        BTC_WIFI_TRAFFIC_TX = 0x0,
 207        BTC_WIFI_TRAFFIC_RX = 0x1,
 208        BTC_WIFI_TRAFFIC_MAX
 209};
 210
 211enum btc_wifi_pnp {
 212        BTC_WIFI_PNP_WAKE_UP = 0x0,
 213        BTC_WIFI_PNP_SLEEP = 0x1,
 214        BTC_WIFI_PNP_SLEEP_KEEP_ANT = 0x2,
 215        BTC_WIFI_PNP_MAX
 216};
 217
 218enum btc_iot_peer {
 219        BTC_IOT_PEER_UNKNOWN = 0,
 220        BTC_IOT_PEER_REALTEK = 1,
 221        BTC_IOT_PEER_REALTEK_92SE = 2,
 222        BTC_IOT_PEER_BROADCOM = 3,
 223        BTC_IOT_PEER_RALINK = 4,
 224        BTC_IOT_PEER_ATHEROS = 5,
 225        BTC_IOT_PEER_CISCO = 6,
 226        BTC_IOT_PEER_MERU = 7,
 227        BTC_IOT_PEER_MARVELL = 8,
 228        BTC_IOT_PEER_REALTEK_SOFTAP = 9,
 229        BTC_IOT_PEER_SELF_SOFTAP = 10, /* Self is SoftAP */
 230        BTC_IOT_PEER_AIRGO = 11,
 231        BTC_IOT_PEER_REALTEK_JAGUAR_BCUTAP = 12,
 232        BTC_IOT_PEER_REALTEK_JAGUAR_CCUTAP = 13,
 233        BTC_IOT_PEER_MAX,
 234};
 235
 236/* for 8723b-d cut large current issue */
 237enum bt_wifi_coex_state {
 238        BTC_WIFI_STAT_INIT,
 239        BTC_WIFI_STAT_IQK,
 240        BTC_WIFI_STAT_NORMAL_OFF,
 241        BTC_WIFI_STAT_MP_OFF,
 242        BTC_WIFI_STAT_NORMAL,
 243        BTC_WIFI_STAT_ANT_DIV,
 244        BTC_WIFI_STAT_MAX
 245};
 246
 247enum bt_ant_type {
 248        BTC_ANT_TYPE_0,
 249        BTC_ANT_TYPE_1,
 250        BTC_ANT_TYPE_2,
 251        BTC_ANT_TYPE_3,
 252        BTC_ANT_TYPE_4,
 253        BTC_ANT_TYPE_MAX
 254};
 255
 256enum btc_get_type {
 257        /* type bool */
 258        BTC_GET_BL_HS_OPERATION,
 259        BTC_GET_BL_HS_CONNECTING,
 260        BTC_GET_BL_WIFI_CONNECTED,
 261        BTC_GET_BL_WIFI_BUSY,
 262        BTC_GET_BL_WIFI_SCAN,
 263        BTC_GET_BL_WIFI_LINK,
 264        BTC_GET_BL_WIFI_DHCP,
 265        BTC_GET_BL_WIFI_SOFTAP_IDLE,
 266        BTC_GET_BL_WIFI_SOFTAP_LINKING,
 267        BTC_GET_BL_WIFI_IN_EARLY_SUSPEND,
 268        BTC_GET_BL_WIFI_ROAM,
 269        BTC_GET_BL_WIFI_4_WAY_PROGRESS,
 270        BTC_GET_BL_WIFI_UNDER_5G,
 271        BTC_GET_BL_WIFI_AP_MODE_ENABLE,
 272        BTC_GET_BL_WIFI_ENABLE_ENCRYPTION,
 273        BTC_GET_BL_WIFI_UNDER_B_MODE,
 274        BTC_GET_BL_EXT_SWITCH,
 275        BTC_GET_BL_WIFI_IS_IN_MP_MODE,
 276        BTC_GET_BL_IS_ASUS_8723B,
 277        BTC_GET_BL_FW_READY,
 278        BTC_GET_BL_RF4CE_CONNECTED,
 279
 280        /* type s4Byte */
 281        BTC_GET_S4_WIFI_RSSI,
 282        BTC_GET_S4_HS_RSSI,
 283
 284        /* type u32 */
 285        BTC_GET_U4_WIFI_BW,
 286        BTC_GET_U4_WIFI_TRAFFIC_DIRECTION,
 287        BTC_GET_U4_WIFI_FW_VER,
 288        BTC_GET_U4_WIFI_LINK_STATUS,
 289        BTC_GET_U4_BT_PATCH_VER,
 290        BTC_GET_U4_VENDOR,
 291        BTC_GET_U4_SUPPORTED_VERSION,
 292        BTC_GET_U4_SUPPORTED_FEATURE,
 293        BTC_GET_U4_WIFI_IQK_TOTAL,
 294        BTC_GET_U4_WIFI_IQK_OK,
 295        BTC_GET_U4_WIFI_IQK_FAIL,
 296
 297        /* type u1Byte */
 298        BTC_GET_U1_WIFI_DOT11_CHNL,
 299        BTC_GET_U1_WIFI_CENTRAL_CHNL,
 300        BTC_GET_U1_WIFI_HS_CHNL,
 301        BTC_GET_U1_MAC_PHY_MODE,
 302        BTC_GET_U1_AP_NUM,
 303        BTC_GET_U1_ANT_TYPE,
 304        BTC_GET_U1_IOT_PEER,
 305
 306        /* for 1Ant */
 307        BTC_GET_U1_LPS_MODE,
 308        BTC_GET_BL_BT_SCO_BUSY,
 309
 310        /* for test mode */
 311        BTC_GET_DRIVER_TEST_CFG,
 312        BTC_GET_MAX
 313};
 314
 315enum btc_vendor {
 316        BTC_VENDOR_LENOVO,
 317        BTC_VENDOR_ASUS,
 318        BTC_VENDOR_OTHER
 319};
 320
 321enum btc_set_type {
 322        /* type bool */
 323        BTC_SET_BL_BT_DISABLE,
 324        BTC_SET_BL_BT_ENABLE_DISABLE_CHANGE,
 325        BTC_SET_BL_BT_TRAFFIC_BUSY,
 326        BTC_SET_BL_BT_LIMITED_DIG,
 327        BTC_SET_BL_FORCE_TO_ROAM,
 328        BTC_SET_BL_TO_REJ_AP_AGG_PKT,
 329        BTC_SET_BL_BT_CTRL_AGG_SIZE,
 330        BTC_SET_BL_INC_SCAN_DEV_NUM,
 331        BTC_SET_BL_BT_TX_RX_MASK,
 332        BTC_SET_BL_MIRACAST_PLUS_BT,
 333
 334        /* type u1Byte */
 335        BTC_SET_U1_RSSI_ADJ_VAL_FOR_AGC_TABLE_ON,
 336        BTC_SET_UI_SCAN_SIG_COMPENSATION,
 337        BTC_SET_U1_AGG_BUF_SIZE,
 338
 339        /* type trigger some action */
 340        BTC_SET_ACT_GET_BT_RSSI,
 341        BTC_SET_ACT_AGGREGATE_CTRL,
 342        BTC_SET_ACT_ANTPOSREGRISTRY_CTRL,
 343
 344        /********* for 1Ant **********/
 345        /* type bool */
 346        BTC_SET_BL_BT_SCO_BUSY,
 347        /* type u1Byte */
 348        BTC_SET_U1_RSSI_ADJ_VAL_FOR_1ANT_COEX_TYPE,
 349        BTC_SET_U1_LPS_VAL,
 350        BTC_SET_U1_RPWM_VAL,
 351        BTC_SET_U1_1ANT_LPS,
 352        BTC_SET_U1_1ANT_RPWM,
 353        /* type trigger some action */
 354        BTC_SET_ACT_LEAVE_LPS,
 355        BTC_SET_ACT_ENTER_LPS,
 356        BTC_SET_ACT_NORMAL_LPS,
 357        BTC_SET_ACT_INC_FORCE_EXEC_PWR_CMD_CNT,
 358        BTC_SET_ACT_DISABLE_LOW_POWER,
 359        BTC_SET_ACT_UPDATE_RAMASK,
 360        BTC_SET_ACT_SEND_MIMO_PS,
 361        /* BT Coex related */
 362        BTC_SET_ACT_CTRL_BT_INFO,
 363        BTC_SET_ACT_CTRL_BT_COEX,
 364        BTC_SET_ACT_CTRL_8723B_ANT,
 365        /***************************/
 366        BTC_SET_MAX
 367};
 368
 369enum btc_dbg_disp_type {
 370        BTC_DBG_DISP_COEX_STATISTICS = 0x0,
 371        BTC_DBG_DISP_BT_LINK_INFO = 0x1,
 372        BTC_DBG_DISP_BT_FW_VER = 0x2,
 373        BTC_DBG_DISP_FW_PWR_MODE_CMD = 0x3,
 374        BTC_DBG_DISP_WIFI_STATUS = 0x04,
 375        BTC_DBG_DISP_MAX
 376};
 377
 378enum btc_notify_type_ips {
 379        BTC_IPS_LEAVE = 0x0,
 380        BTC_IPS_ENTER = 0x1,
 381        BTC_IPS_MAX
 382};
 383
 384enum btc_notify_type_lps {
 385        BTC_LPS_DISABLE = 0x0,
 386        BTC_LPS_ENABLE = 0x1,
 387        BTC_LPS_MAX
 388};
 389
 390enum btc_notify_type_scan {
 391        BTC_SCAN_FINISH = 0x0,
 392        BTC_SCAN_START = 0x1,
 393        BTC_SCAN_START_2G = 0x2,
 394        BTC_SCAN_MAX
 395};
 396
 397enum btc_notify_type_switchband {
 398        BTC_NOT_SWITCH = 0x0,
 399        BTC_SWITCH_TO_24G = 0x1,
 400        BTC_SWITCH_TO_5G = 0x2,
 401        BTC_SWITCH_TO_24G_NOFORSCAN = 0x3,
 402        BTC_SWITCH_MAX
 403};
 404
 405enum btc_notify_type_associate {
 406        BTC_ASSOCIATE_FINISH = 0x0,
 407        BTC_ASSOCIATE_START = 0x1,
 408        BTC_ASSOCIATE_5G_FINISH = 0x2,
 409        BTC_ASSOCIATE_5G_START = 0x3,
 410        BTC_ASSOCIATE_MAX
 411};
 412
 413enum btc_notify_type_media_status {
 414        BTC_MEDIA_DISCONNECT = 0x0,
 415        BTC_MEDIA_CONNECT = 0x1,
 416        BTC_MEDIA_MAX
 417};
 418
 419enum btc_notify_type_special_packet {
 420        BTC_PACKET_UNKNOWN = 0x0,
 421        BTC_PACKET_DHCP = 0x1,
 422        BTC_PACKET_ARP = 0x2,
 423        BTC_PACKET_EAPOL = 0x3,
 424        BTC_PACKET_MAX
 425};
 426
 427enum hci_ext_bt_operation {
 428        HCI_BT_OP_NONE = 0x0,
 429        HCI_BT_OP_INQUIRY_START = 0x1,
 430        HCI_BT_OP_INQUIRY_FINISH = 0x2,
 431        HCI_BT_OP_PAGING_START = 0x3,
 432        HCI_BT_OP_PAGING_SUCCESS = 0x4,
 433        HCI_BT_OP_PAGING_UNSUCCESS = 0x5,
 434        HCI_BT_OP_PAIRING_START = 0x6,
 435        HCI_BT_OP_PAIRING_FINISH = 0x7,
 436        HCI_BT_OP_BT_DEV_ENABLE = 0x8,
 437        HCI_BT_OP_BT_DEV_DISABLE = 0x9,
 438        HCI_BT_OP_MAX
 439};
 440
 441enum btc_notify_type_stack_operation {
 442        BTC_STACK_OP_NONE = 0x0,
 443        BTC_STACK_OP_INQ_PAGE_PAIR_START = 0x1,
 444        BTC_STACK_OP_INQ_PAGE_PAIR_FINISH = 0x2,
 445        BTC_STACK_OP_MAX
 446};
 447
 448typedef u8 (*bfp_btc_r1)(void *btc_context, u32 reg_addr);
 449
 450typedef u16 (*bfp_btc_r2)(void *btc_context, u32 reg_addr);
 451
 452typedef u32 (*bfp_btc_r4)(void *btc_context, u32 reg_addr);
 453
 454typedef void (*bfp_btc_w1)(void *btc_context, u32 reg_addr, u32 data);
 455
 456typedef void (*bfp_btc_w1_bit_mak)(void *btc_context, u32 reg_addr,
 457                                   u32 bit_mask, u8 data1b);
 458
 459typedef void (*bfp_btc_w2)(void *btc_context, u32 reg_addr, u16 data);
 460
 461typedef void (*bfp_btc_w4)(void *btc_context, u32 reg_addr, u32 data);
 462
 463typedef void (*bfp_btc_local_reg_w1)(void *btc_context, u32 reg_addr, u8 data);
 464typedef void (*bfp_btc_wr_1byte_bit_mask)(void *btc_context, u32 reg_addr,
 465                                          u8 bit_mask, u8 data);
 466
 467typedef void (*bfp_btc_set_bb_reg)(void *btc_context, u32 reg_addr,
 468                                   u32 bit_mask, u32 data);
 469
 470typedef u32 (*bfp_btc_get_bb_reg)(void *btc_context, u32 reg_addr,
 471                                  u32 bit_mask);
 472
 473typedef void (*bfp_btc_set_rf_reg)(void *btc_context, u8 rf_path, u32 reg_addr,
 474                                   u32 bit_mask, u32 data);
 475
 476typedef u32 (*bfp_btc_get_rf_reg)(void *btc_context, u8 rf_path,
 477                                  u32 reg_addr, u32 bit_mask);
 478
 479typedef void (*bfp_btc_fill_h2c)(void *btc_context, u8 element_id,
 480                                 u32 cmd_len, u8 *cmd_buffer);
 481
 482typedef bool (*bfp_btc_get)(void *btcoexist, u8 get_type, void *out_buf);
 483
 484typedef bool (*bfp_btc_set)(void *btcoexist, u8 set_type, void *in_buf);
 485
 486typedef u32 (*bfp_btc_get_bt_coex_supported_feature)(void *btcoexist);
 487
 488typedef u32 (*bfp_btc_get_bt_coex_supported_version)(void *btcoexist);
 489
 490typedef u32 (*bfp_btc_get_bt_phydm_version)(void *btcoexist);
 491
 492typedef void (*bfp_btc_phydm_modify_ra_pcr_threshold)(void *btcoexist,
 493                                          u8 ra_offset_direction,
 494                                          u8 ra_threshold_offset);
 495
 496typedef u32 (*bfp_btc_phydm_query_phy_counter)(void *btcoexist,
 497                                               const char *info_type);
 498
 499typedef u8 (*bfp_btc_get_ant_det_val_from_bt)(void *btcoexist);
 500
 501typedef u8 (*bfp_btc_get_ble_scan_type_from_bt)(void *btcoexist);
 502
 503typedef u32 (*bfp_btc_get_ble_scan_para_from_bt)(void *btcoexist, u8 scan_type);
 504
 505typedef bool (*bfp_btc_get_bt_afh_map_from_bt)(void *btcoexist, u8 map_type,
 506                                               u8 *afh_map);
 507
 508typedef void (*bfp_btc_set_bt_reg)(void *btc_context, u8 reg_type, u32 offset,
 509                                   u32 value);
 510typedef u32 (*bfp_btc_get_bt_reg)(void *btc_context, u8 reg_type, u32 offset);
 511
 512typedef void (*bfp_btc_disp_dbg_msg)(void *btcoexist, u8 disp_type,
 513                                     struct seq_file *m);
 514
 515struct btc_bt_info {
 516        bool bt_disabled;
 517        u8 rssi_adjust_for_agc_table_on;
 518        u8 rssi_adjust_for_1ant_coex_type;
 519        bool pre_bt_ctrl_agg_buf_size;
 520        bool bt_busy;
 521        u8 pre_agg_buf_size;
 522        u8 agg_buf_size;
 523        bool limited_dig;
 524        bool pre_reject_agg_pkt;
 525        bool reject_agg_pkt;
 526        bool bt_ctrl_buf_size;
 527        bool increase_scan_dev_num;
 528        bool miracast_plus_bt;
 529        bool bt_ctrl_agg_buf_size;
 530        bool bt_tx_rx_mask;
 531        u16 bt_hci_ver;
 532        u16 bt_real_fw_ver;
 533        u8 bt_fw_ver;
 534        u32 bt_get_fw_ver;
 535
 536        bool bt_disable_low_pwr;
 537
 538        /* the following is for 1Ant solution */
 539        bool bt_ctrl_lps;
 540        bool bt_pwr_save_mode;
 541        bool bt_lps_on;
 542        bool force_to_roam;
 543        u8 force_exec_pwr_cmd_cnt;
 544        u8 lps_val;
 545        u8 rpwm_val;
 546        u32 ra_mask;
 547
 548        u32 afh_map_l;
 549        u32 afh_map_m;
 550        u16 afh_map_h;
 551        u32 bt_supported_feature;
 552        u32 bt_supported_version;
 553        u8 bt_ant_det_val;
 554        u8 bt_ble_scan_type;
 555        u32 bt_ble_scan_para;
 556};
 557
 558struct btc_stack_info {
 559        bool profile_notified;
 560        u16 hci_version;        /* stack hci version */
 561        u8 num_of_link;
 562        bool bt_link_exist;
 563        bool sco_exist;
 564        bool acl_exist;
 565        bool a2dp_exist;
 566        bool hid_exist;
 567        u8 num_of_hid;
 568        bool pan_exist;
 569        bool unknown_acl_exist;
 570        s8 min_bt_rssi;
 571};
 572
 573struct btc_statistics {
 574        u32 cnt_bind;
 575        u32 cnt_init_hw_config;
 576        u32 cnt_init_coex_dm;
 577        u32 cnt_ips_notify;
 578        u32 cnt_lps_notify;
 579        u32 cnt_scan_notify;
 580        u32 cnt_connect_notify;
 581        u32 cnt_media_status_notify;
 582        u32 cnt_special_packet_notify;
 583        u32 cnt_bt_info_notify;
 584        u32 cnt_periodical;
 585        u32 cnt_coex_dm_switch;
 586        u32 cnt_stack_operation_notify;
 587        u32 cnt_dbg_ctrl;
 588        u32 cnt_pre_load_firmware;
 589        u32 cnt_power_on;
 590};
 591
 592struct btc_bt_link_info {
 593        bool bt_link_exist;
 594        bool bt_hi_pri_link_exist;
 595        bool sco_exist;
 596        bool sco_only;
 597        bool a2dp_exist;
 598        bool a2dp_only;
 599        bool hid_exist;
 600        bool hid_only;
 601        bool pan_exist;
 602        bool pan_only;
 603        bool slave_role;
 604        bool acl_busy;
 605};
 606
 607enum btc_antenna_pos {
 608        BTC_ANTENNA_AT_MAIN_PORT = 0x1,
 609        BTC_ANTENNA_AT_AUX_PORT = 0x2,
 610};
 611
 612enum btc_mp_h2c_op_code {
 613        BT_OP_GET_BT_VERSION                    = 0,
 614        BT_OP_WRITE_REG_ADDR                    = 12,
 615        BT_OP_WRITE_REG_VALUE                   = 13,
 616        BT_OP_READ_REG                          = 17,
 617        BT_OP_GET_AFH_MAP_L                     = 30,
 618        BT_OP_GET_AFH_MAP_M                     = 31,
 619        BT_OP_GET_AFH_MAP_H                     = 32,
 620        BT_OP_GET_BT_COEX_SUPPORTED_FEATURE     = 42,
 621        BT_OP_GET_BT_COEX_SUPPORTED_VERSION     = 43,
 622        BT_OP_GET_BT_ANT_DET_VAL                = 44,
 623        BT_OP_GET_BT_BLE_SCAN_PARA              = 45,
 624        BT_OP_GET_BT_BLE_SCAN_TYPE              = 46,
 625        BT_OP_MAX
 626};
 627
 628enum btc_mp_h2c_req_num {
 629        /* 4 bits only */
 630        BT_SEQ_DONT_CARE                        = 0,
 631        BT_SEQ_GET_BT_VERSION                   = 0xE,
 632        BT_SEQ_GET_AFH_MAP_L                    = 0x5,
 633        BT_SEQ_GET_AFH_MAP_M                    = 0x6,
 634        BT_SEQ_GET_AFH_MAP_H                    = 0x9,
 635        BT_SEQ_GET_BT_COEX_SUPPORTED_FEATURE    = 0x7,
 636        BT_SEQ_GET_BT_COEX_SUPPORTED_VERSION    = 0x8,
 637        BT_SEQ_GET_BT_ANT_DET_VAL               = 0x2,
 638        BT_SEQ_GET_BT_BLE_SCAN_PARA             = 0x3,
 639        BT_SEQ_GET_BT_BLE_SCAN_TYPE             = 0x4,
 640};
 641
 642struct btc_coexist {
 643        /* make sure only one adapter can bind the data context  */
 644        bool binded;
 645        /* default adapter */
 646        void *adapter;
 647        struct btc_board_info board_info;
 648        /* some bt info referenced by non-bt module */
 649        struct btc_bt_info bt_info;
 650        struct btc_stack_info stack_info;
 651        enum btc_chip_interface chip_interface;
 652        struct btc_bt_link_info bt_link_info;
 653
 654        /* boolean variables to replace BT_AUTO_REPORT_ONLY_XXXXY_ZANT
 655         * configuration parameters
 656         */
 657        bool auto_report_1ant;
 658        bool auto_report_2ant;
 659        bool dbg_mode_1ant;
 660        bool dbg_mode_2ant;
 661        bool initilized;
 662        bool stop_coex_dm;
 663        bool manual_control;
 664        struct btc_statistics statistics;
 665        u8 pwr_mode_val[10];
 666
 667        struct completion bt_mp_comp;
 668
 669        /* function pointers - io related */
 670        bfp_btc_r1 btc_read_1byte;
 671        bfp_btc_w1 btc_write_1byte;
 672        bfp_btc_w1_bit_mak btc_write_1byte_bitmask;
 673        bfp_btc_r2 btc_read_2byte;
 674        bfp_btc_w2 btc_write_2byte;
 675        bfp_btc_r4 btc_read_4byte;
 676        bfp_btc_w4 btc_write_4byte;
 677        bfp_btc_local_reg_w1 btc_write_local_reg_1byte;
 678
 679        bfp_btc_set_bb_reg btc_set_bb_reg;
 680        bfp_btc_get_bb_reg btc_get_bb_reg;
 681
 682        bfp_btc_set_rf_reg btc_set_rf_reg;
 683        bfp_btc_get_rf_reg btc_get_rf_reg;
 684
 685        bfp_btc_fill_h2c btc_fill_h2c;
 686
 687        bfp_btc_disp_dbg_msg btc_disp_dbg_msg;
 688
 689        bfp_btc_get btc_get;
 690        bfp_btc_set btc_set;
 691
 692        bfp_btc_set_bt_reg btc_set_bt_reg;
 693        bfp_btc_get_bt_reg btc_get_bt_reg;
 694
 695        bfp_btc_get_bt_coex_supported_feature btc_get_bt_coex_supported_feature;
 696        bfp_btc_get_bt_coex_supported_version btc_get_bt_coex_supported_version;
 697        bfp_btc_get_bt_phydm_version btc_get_bt_phydm_version;
 698        bfp_btc_phydm_modify_ra_pcr_threshold btc_phydm_modify_ra_pcr_threshold;
 699        bfp_btc_phydm_query_phy_counter btc_phydm_query_phy_counter;
 700        bfp_btc_get_ant_det_val_from_bt btc_get_ant_det_val_from_bt;
 701        bfp_btc_get_ble_scan_type_from_bt btc_get_ble_scan_type_from_bt;
 702        bfp_btc_get_ble_scan_para_from_bt btc_get_ble_scan_para_from_bt;
 703        bfp_btc_get_bt_afh_map_from_bt btc_get_bt_afh_map_from_bt;
 704
 705};
 706
 707bool halbtc_is_wifi_uplink(struct rtl_priv *adapter);
 708
 709#define rtl_btc_coexist(rtlpriv)                                \
 710        ((struct btc_coexist *)((rtlpriv)->btcoexist.btc_context))
 711#define rtl_btc_wifi_only(rtlpriv)                              \
 712        ((struct wifi_only_cfg *)((rtlpriv)->btcoexist.wifi_only_context))
 713
 714struct wifi_only_cfg;
 715
 716bool exhalbtc_initlize_variables(struct rtl_priv *rtlpriv);
 717bool exhalbtc_initlize_variables_wifi_only(struct rtl_priv *rtlpriv);
 718bool exhalbtc_bind_bt_coex_withadapter(void *adapter);
 719void exhalbtc_power_on_setting(struct btc_coexist *btcoexist);
 720void exhalbtc_pre_load_firmware(struct btc_coexist *btcoexist);
 721void exhalbtc_init_hw_config(struct btc_coexist *btcoexist, bool wifi_only);
 722void exhalbtc_init_hw_config_wifi_only(struct wifi_only_cfg *wifionly_cfg);
 723void exhalbtc_init_coex_dm(struct btc_coexist *btcoexist);
 724void exhalbtc_ips_notify(struct btc_coexist *btcoexist, u8 type);
 725void exhalbtc_lps_notify(struct btc_coexist *btcoexist, u8 type);
 726void exhalbtc_scan_notify(struct btc_coexist *btcoexist, u8 type);
 727void exhalbtc_scan_notify_wifi_only(struct wifi_only_cfg *wifionly_cfg,
 728                                    u8 is_5g);
 729void exhalbtc_connect_notify(struct btc_coexist *btcoexist, u8 action);
 730void exhalbtc_mediastatus_notify(struct btc_coexist *btcoexist,
 731                                 enum rt_media_status media_status);
 732void exhalbtc_special_packet_notify(struct btc_coexist *btcoexist, u8 pkt_type);
 733void exhalbtc_bt_info_notify(struct btc_coexist *btcoexist, u8 *tmp_buf,
 734                             u8 length);
 735void exhalbtc_rf_status_notify(struct btc_coexist *btcoexist, u8 type);
 736void exhalbtc_stack_operation_notify(struct btc_coexist *btcoexist, u8 type);
 737void exhalbtc_halt_notify(struct btc_coexist *btcoexist);
 738void exhalbtc_pnp_notify(struct btc_coexist *btcoexist, u8 pnp_state);
 739void exhalbtc_coex_dm_switch(struct btc_coexist *btcoexist);
 740void exhalbtc_periodical(struct btc_coexist *btcoexist);
 741void exhalbtc_dbg_control(struct btc_coexist *btcoexist, u8 code, u8 len,
 742                          u8 *data);
 743void exhalbtc_antenna_detection(struct btc_coexist *btcoexist, u32 cent_freq,
 744                                u32 offset, u32 span, u32 seconds);
 745void exhalbtc_stack_update_profile_info(void);
 746void exhalbtc_set_hci_version(struct btc_coexist *btcoexist, u16 hci_version);
 747void exhalbtc_set_bt_patch_version(struct btc_coexist *btcoexist,
 748                                   u16 bt_hci_version, u16 bt_patch_version);
 749void exhalbtc_update_min_bt_rssi(struct btc_coexist *btcoexist, s8 bt_rssi);
 750void exhalbtc_set_bt_exist(struct btc_coexist *btcoexist, bool bt_exist);
 751void exhalbtc_set_chip_type(struct btc_coexist *btcoexist, u8 chip_type);
 752void exhalbtc_set_ant_num(struct rtl_priv *rtlpriv, u8 type, u8 ant_num);
 753void exhalbtc_display_bt_coex_info(struct btc_coexist *btcoexist,
 754                                   struct seq_file *m);
 755void exhalbtc_switch_band_notify(struct btc_coexist *btcoexist, u8 type);
 756void exhalbtc_switch_band_notify_wifi_only(struct wifi_only_cfg *wifionly_cfg,
 757                                           u8 is_5g);
 758void exhalbtc_signal_compensation(struct btc_coexist *btcoexist,
 759                                  u8 *rssi_wifi, u8 *rssi_bt);
 760void exhalbtc_lps_leave(struct btc_coexist *btcoexist);
 761void exhalbtc_low_wifi_traffic_notify(struct btc_coexist *btcoexist);
 762void exhalbtc_set_single_ant_path(struct btc_coexist *btcoexist,
 763                                  u8 single_ant_path);
 764
 765/* The following are used by wifi_only case */
 766enum wifionly_chip_interface {
 767        WIFIONLY_INTF_UNKNOWN   = 0,
 768        WIFIONLY_INTF_PCI               = 1,
 769        WIFIONLY_INTF_USB               = 2,
 770        WIFIONLY_INTF_SDIO              = 3,
 771        WIFIONLY_INTF_MAX
 772};
 773
 774enum wifionly_customer_id {
 775        CUSTOMER_NORMAL                 = 0,
 776        CUSTOMER_HP_1                   = 1,
 777};
 778
 779struct wifi_only_haldata {
 780        u16             customer_id;
 781        u8              efuse_pg_antnum;
 782        u8              efuse_pg_antpath;
 783        u8              rfe_type;
 784        u8              ant_div_cfg;
 785};
 786
 787struct wifi_only_cfg {
 788        void                            *adapter;
 789        struct wifi_only_haldata        haldata_info;
 790        enum wifionly_chip_interface    chip_interface;
 791};
 792
 793static inline
 794void halwifionly_phy_set_bb_reg(struct wifi_only_cfg *wifi_conly_cfg,
 795                                u32 regaddr, u32 bitmask, u32 data)
 796{
 797        struct rtl_priv *rtlpriv = (struct rtl_priv *)wifi_conly_cfg->adapter;
 798
 799        rtl_set_bbreg(rtlpriv->hw, regaddr, bitmask, data);
 800}
 801
 802#endif
 803