net: wireless: rockchip_wlan: add rtl8188fu support
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / rtl8188fu / hal / btc / HalBtcOutSrc.h
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8188fu/hal/btc/HalBtcOutSrc.h b/drivers/net/wireless/rockchip_wlan/rtl8188fu/hal/btc/HalBtcOutSrc.h
new file mode 100644 (file)
index 0000000..6dbdcec
--- /dev/null
@@ -0,0 +1,747 @@
+#ifndef        __HALBTC_OUT_SRC_H__\r
+#define __HALBTC_OUT_SRC_H__\r
+\r
+#define                NORMAL_EXEC                                     FALSE\r
+#define                FORCE_EXEC                                              TRUE\r
+\r
+#define                BTC_RF_OFF                                      0x0\r
+#define                BTC_RF_ON                                       0x1\r
+\r
+#define                BTC_RF_A                                        0x0\r
+#define                BTC_RF_B                                        0x1\r
+#define                BTC_RF_C                                        0x2\r
+#define                BTC_RF_D                                        0x3\r
+\r
+#define                BTC_SMSP                                SINGLEMAC_SINGLEPHY\r
+#define                BTC_DMDP                                DUALMAC_DUALPHY\r
+#define                BTC_DMSP                                DUALMAC_SINGLEPHY\r
+#define                BTC_MP_UNKNOWN          0xff\r
+\r
+#define                BT_COEX_ANT_TYPE_PG                     0\r
+#define                BT_COEX_ANT_TYPE_ANTDIV         1\r
+#define                BT_COEX_ANT_TYPE_DETECTED       2\r
+\r
+#define                BTC_MIMO_PS_STATIC                      0       // 1ss\r
+#define                BTC_MIMO_PS_DYNAMIC                     1       // 2ss\r
+\r
+#define                BTC_RATE_DISABLE                        0\r
+#define                BTC_RATE_ENABLE                         1\r
+\r
+// single Antenna definition\r
+#define                BTC_ANT_PATH_WIFI                       0\r
+#define                BTC_ANT_PATH_BT                         1\r
+#define                BTC_ANT_PATH_PTA                        2\r
+// dual Antenna definition\r
+#define                BTC_ANT_WIFI_AT_MAIN            0\r
+#define                BTC_ANT_WIFI_AT_AUX                     1\r
+// coupler Antenna definition\r
+#define                BTC_ANT_WIFI_AT_CPL_MAIN        0\r
+#define                BTC_ANT_WIFI_AT_CPL_AUX         1\r
+\r
+typedef enum _BTC_POWERSAVE_TYPE{\r
+       BTC_PS_WIFI_NATIVE                      = 0,    // wifi original power save behavior\r
+       BTC_PS_LPS_ON                           = 1,\r
+       BTC_PS_LPS_OFF                          = 2,\r
+       BTC_PS_MAX\r
+} BTC_POWERSAVE_TYPE, *PBTC_POWERSAVE_TYPE;\r
+\r
+typedef enum _BTC_BT_REG_TYPE{\r
+       BTC_BT_REG_RF                                           = 0,\r
+       BTC_BT_REG_MODEM                                        = 1,\r
+       BTC_BT_REG_BLUEWIZE                                     = 2,\r
+       BTC_BT_REG_VENDOR                                       = 3,\r
+       BTC_BT_REG_LE                                           = 4,\r
+       BTC_BT_REG_MAX\r
+} BTC_BT_REG_TYPE, *PBTC_BT_REG_TYPE;\r
+\r
+typedef enum _BTC_CHIP_INTERFACE{\r
+       BTC_INTF_UNKNOWN        = 0,\r
+       BTC_INTF_PCI                    = 1,\r
+       BTC_INTF_USB                    = 2,\r
+       BTC_INTF_SDIO           = 3,\r
+       BTC_INTF_MAX\r
+} BTC_CHIP_INTERFACE, *PBTC_CHIP_INTERFACE;\r
+\r
+typedef enum _BTC_CHIP_TYPE{\r
+       BTC_CHIP_UNDEF          = 0,\r
+       BTC_CHIP_CSR_BC4                = 1,\r
+       BTC_CHIP_CSR_BC8                = 2,\r
+       BTC_CHIP_RTL8723A       = 3,\r
+       BTC_CHIP_RTL8821        = 4,\r
+       BTC_CHIP_RTL8723B       = 5,\r
+       BTC_CHIP_MAX\r
+} BTC_CHIP_TYPE, *PBTC_CHIP_TYPE;\r
+\r
+// following is for wifi link status\r
+#define                WIFI_STA_CONNECTED                              BIT0\r
+#define                WIFI_AP_CONNECTED                               BIT1\r
+#define                WIFI_HS_CONNECTED                               BIT2\r
+#define                WIFI_P2P_GO_CONNECTED                   BIT3\r
+#define                WIFI_P2P_GC_CONNECTED                   BIT4\r
+\r
+// following is for command line utility\r
+#define        CL_SPRINTF      rsprintf\r
+#define        CL_PRINTF       DCMD_Printf\r
+\r
+\r
+typedef struct _BTC_BOARD_INFO{\r
+       // The following is some board information\r
+       u1Byte                          btChipType;\r
+       u1Byte                          pgAntNum;       // pg ant number\r
+       u1Byte                          btdmAntNum;     // ant number for btdm\r
+       u1Byte                          btdmAntNumByAntDet;     // ant number for btdm after antenna detection\r
+       u1Byte                          btdmAntPos;             //Bryant Add to indicate Antenna Position for (pgAntNum = 2) && (btdmAntNum =1)  (DPDT+1Ant case)\r
+       u1Byte                          singleAntPath;  // current used for 8723b only, 1=>s0,  0=>s1\r
+       u1Byte                          bTfbgaPackage;    //for Antenna detect threshold \r
+       u1Byte                          btdmAntDetFinish;\r
+       u1Byte                          antType;\r
+} BTC_BOARD_INFO, *PBTC_BOARD_INFO;\r
+\r
+typedef enum _BTC_DBG_OPCODE{\r
+       BTC_DBG_SET_COEX_NORMAL                         = 0x0,\r
+       BTC_DBG_SET_COEX_WIFI_ONLY                              = 0x1,\r
+       BTC_DBG_SET_COEX_BT_ONLY                                = 0x2,\r
+       BTC_DBG_SET_COEX_DEC_BT_PWR                             = 0x3,\r
+       BTC_DBG_SET_COEX_BT_AFH_MAP                             = 0x4,\r
+       BTC_DBG_SET_COEX_BT_IGNORE_WLAN_ACT             = 0x5,\r
+       BTC_DBG_MAX\r
+}BTC_DBG_OPCODE,*PBTC_DBG_OPCODE;\r
+\r
+typedef enum _BTC_RSSI_STATE{\r
+       BTC_RSSI_STATE_HIGH                                             = 0x0,\r
+       BTC_RSSI_STATE_MEDIUM                                   = 0x1,\r
+       BTC_RSSI_STATE_LOW                                              = 0x2,\r
+       BTC_RSSI_STATE_STAY_HIGH                                        = 0x3,\r
+       BTC_RSSI_STATE_STAY_MEDIUM                              = 0x4,\r
+       BTC_RSSI_STATE_STAY_LOW                                 = 0x5,\r
+       BTC_RSSI_MAX\r
+}BTC_RSSI_STATE,*PBTC_RSSI_STATE;\r
+#define        BTC_RSSI_HIGH(_rssi_)   ((_rssi_==BTC_RSSI_STATE_HIGH||_rssi_==BTC_RSSI_STATE_STAY_HIGH)? TRUE:FALSE)\r
+#define        BTC_RSSI_MEDIUM(_rssi_) ((_rssi_==BTC_RSSI_STATE_MEDIUM||_rssi_==BTC_RSSI_STATE_STAY_MEDIUM)? TRUE:FALSE)\r
+#define        BTC_RSSI_LOW(_rssi_)    ((_rssi_==BTC_RSSI_STATE_LOW||_rssi_==BTC_RSSI_STATE_STAY_LOW)? TRUE:FALSE)\r
+\r
+typedef enum _BTC_WIFI_ROLE{\r
+       BTC_ROLE_STATION                                                = 0x0,\r
+       BTC_ROLE_AP                                                             = 0x1,\r
+       BTC_ROLE_IBSS                                                   = 0x2,\r
+       BTC_ROLE_HS_MODE                                                = 0x3,\r
+       BTC_ROLE_MAX\r
+}BTC_WIFI_ROLE,*PBTC_WIFI_ROLE;\r
+\r
+typedef enum _BTC_WIRELESS_FREQ{\r
+       BTC_FREQ_2_4G                                   = 0x0,\r
+       BTC_FREQ_5G                                             = 0x1,\r
+       BTC_FREQ_MAX    \r
+}BTC_WIRELESS_FREQ,*PBTC_WIRELESS_FREQ;\r
+\r
+typedef enum _BTC_WIFI_BW_MODE{\r
+       BTC_WIFI_BW_LEGACY                                      = 0x0,\r
+       BTC_WIFI_BW_HT20                                        = 0x1,\r
+       BTC_WIFI_BW_HT40                                        = 0x2,\r
+       BTC_WIFI_BW_HT80                                        = 0x3,\r
+       BTC_WIFI_BW_HT160                                       = 0x4,\r
+       BTC_WIFI_BW_MAX \r
+}BTC_WIFI_BW_MODE,*PBTC_WIFI_BW_MODE;\r
+\r
+typedef enum _BTC_WIFI_TRAFFIC_DIR{\r
+       BTC_WIFI_TRAFFIC_TX                                     = 0x0,\r
+       BTC_WIFI_TRAFFIC_RX                                     = 0x1,\r
+       BTC_WIFI_TRAFFIC_MAX    \r
+}BTC_WIFI_TRAFFIC_DIR,*PBTC_WIFI_TRAFFIC_DIR;\r
+\r
+typedef enum _BTC_WIFI_PNP{\r
+       BTC_WIFI_PNP_WAKE_UP                                    = 0x0,\r
+       BTC_WIFI_PNP_SLEEP                                              = 0x1,\r
+       BTC_WIFI_PNP_MAX\r
+}BTC_WIFI_PNP,*PBTC_WIFI_PNP;\r
+\r
+typedef enum _BTC_IOT_PEER\r
+{\r
+       BTC_IOT_PEER_UNKNOWN = 0,\r
+       BTC_IOT_PEER_REALTEK = 1,\r
+       BTC_IOT_PEER_REALTEK_92SE = 2,\r
+       BTC_IOT_PEER_BROADCOM = 3,\r
+       BTC_IOT_PEER_RALINK = 4,\r
+       BTC_IOT_PEER_ATHEROS = 5,\r
+       BTC_IOT_PEER_CISCO = 6,\r
+       BTC_IOT_PEER_MERU = 7,  \r
+       BTC_IOT_PEER_MARVELL = 8,\r
+       BTC_IOT_PEER_REALTEK_SOFTAP = 9,// peer is RealTek SOFT_AP, by Bohn, 2009.12.17\r
+       BTC_IOT_PEER_SELF_SOFTAP = 10, // Self is SoftAP\r
+       BTC_IOT_PEER_AIRGO = 11,\r
+       BTC_IOT_PEER_INTEL                              = 12, \r
+       BTC_IOT_PEER_RTK_APCLIENT               = 13, \r
+       BTC_IOT_PEER_REALTEK_81XX               = 14,   \r
+       BTC_IOT_PEER_REALTEK_WOW                = 15,\r
+       BTC_IOT_PEER_REALTEK_JAGUAR_BCUTAP = 16,\r
+       BTC_IOT_PEER_REALTEK_JAGUAR_CCUTAP = 17,\r
+       BTC_IOT_PEER_MAX,\r
+}BTC_IOT_PEER, *PBTC_IOT_PEER;\r
+\r
+//for 8723b-d cut large current issue\r
+typedef enum _BT_WIFI_COEX_STATE{\r
+       BTC_WIFI_STAT_INIT,\r
+       BTC_WIFI_STAT_IQK,\r
+       BTC_WIFI_STAT_NORMAL_OFF,\r
+       BTC_WIFI_STAT_MP_OFF,\r
+       BTC_WIFI_STAT_NORMAL,\r
+       BTC_WIFI_STAT_ANT_DIV,\r
+       BTC_WIFI_STAT_MAX\r
+}BT_WIFI_COEX_STATE,*PBT_WIFI_COEX_STATE;\r
+\r
+typedef enum _BT_ANT_TYPE{\r
+       BTC_ANT_TYPE_0,\r
+       BTC_ANT_TYPE_1,\r
+       BTC_ANT_TYPE_2,\r
+       BTC_ANT_TYPE_3,\r
+       BTC_ANT_TYPE_4,\r
+       BTC_ANT_TYPE_MAX\r
+}BT_ANT_TYPE,*PBT_ANT_TYPE;\r
+\r
+// defined for BFP_BTC_GET\r
+typedef enum _BTC_GET_TYPE{\r
+       // type BOOLEAN\r
+       BTC_GET_BL_HS_OPERATION,\r
+       BTC_GET_BL_HS_CONNECTING,\r
+       BTC_GET_BL_WIFI_CONNECTED,\r
+       BTC_GET_BL_WIFI_BUSY,\r
+       BTC_GET_BL_WIFI_SCAN,\r
+       BTC_GET_BL_WIFI_LINK,\r
+       BTC_GET_BL_WIFI_ROAM,\r
+       BTC_GET_BL_WIFI_4_WAY_PROGRESS,\r
+       BTC_GET_BL_WIFI_UNDER_5G,\r
+       BTC_GET_BL_WIFI_AP_MODE_ENABLE,\r
+       BTC_GET_BL_WIFI_ENABLE_ENCRYPTION,\r
+       BTC_GET_BL_WIFI_UNDER_B_MODE,\r
+       BTC_GET_BL_EXT_SWITCH,\r
+       BTC_GET_BL_WIFI_IS_IN_MP_MODE,\r
+       BTC_GET_BL_IS_ASUS_8723B,\r
+\r
+       // type s4Byte\r
+       BTC_GET_S4_WIFI_RSSI,\r
+       BTC_GET_S4_HS_RSSI,\r
+       \r
+       // type u4Byte\r
+       BTC_GET_U4_WIFI_BW,\r
+       BTC_GET_U4_WIFI_TRAFFIC_DIRECTION,\r
+       BTC_GET_U4_WIFI_FW_VER,\r
+       BTC_GET_U4_WIFI_LINK_STATUS,\r
+       BTC_GET_U4_BT_PATCH_VER,\r
+\r
+       // type u1Byte\r
+       BTC_GET_U1_WIFI_DOT11_CHNL,\r
+       BTC_GET_U1_WIFI_CENTRAL_CHNL,\r
+       BTC_GET_U1_WIFI_HS_CHNL,\r
+       BTC_GET_U1_MAC_PHY_MODE,\r
+       BTC_GET_U1_AP_NUM,\r
+       BTC_GET_U1_ANT_TYPE,\r
+       BTC_GET_U1_IOT_PEER,\r
+\r
+       //===== for 1Ant ======\r
+       BTC_GET_U1_LPS_MODE,\r
+\r
+       BTC_GET_MAX\r
+}BTC_GET_TYPE,*PBTC_GET_TYPE;\r
+\r
+// defined for BFP_BTC_SET\r
+typedef enum _BTC_SET_TYPE{\r
+       // type BOOLEAN\r
+       BTC_SET_BL_BT_DISABLE,\r
+       BTC_SET_BL_BT_TRAFFIC_BUSY,\r
+       BTC_SET_BL_BT_LIMITED_DIG,\r
+       BTC_SET_BL_FORCE_TO_ROAM,\r
+       BTC_SET_BL_TO_REJ_AP_AGG_PKT,\r
+       BTC_SET_BL_BT_CTRL_AGG_SIZE,\r
+       BTC_SET_BL_INC_SCAN_DEV_NUM,\r
+       BTC_SET_BL_BT_TX_RX_MASK,\r
+       BTC_SET_BL_MIRACAST_PLUS_BT,\r
+\r
+       // type u1Byte\r
+       BTC_SET_U1_RSSI_ADJ_VAL_FOR_AGC_TABLE_ON,\r
+       BTC_SET_U1_AGG_BUF_SIZE,\r
+\r
+       // type trigger some action\r
+       BTC_SET_ACT_GET_BT_RSSI,\r
+       BTC_SET_ACT_AGGREGATE_CTRL,\r
+       //===== for 1Ant ======\r
+       // type BOOLEAN\r
+\r
+       // type u1Byte\r
+       BTC_SET_U1_RSSI_ADJ_VAL_FOR_1ANT_COEX_TYPE,\r
+       BTC_SET_U1_LPS_VAL,\r
+       BTC_SET_U1_RPWM_VAL,\r
+       // type trigger some action\r
+       BTC_SET_ACT_LEAVE_LPS,\r
+       BTC_SET_ACT_ENTER_LPS,\r
+       BTC_SET_ACT_NORMAL_LPS,\r
+       BTC_SET_ACT_DISABLE_LOW_POWER,\r
+       BTC_SET_ACT_UPDATE_RAMASK,\r
+       BTC_SET_ACT_SEND_MIMO_PS,\r
+       // BT Coex related\r
+       BTC_SET_ACT_CTRL_BT_INFO,\r
+       BTC_SET_ACT_CTRL_BT_COEX,\r
+       BTC_SET_ACT_CTRL_8723B_ANT,\r
+       //=================\r
+       BTC_SET_MAX\r
+}BTC_SET_TYPE,*PBTC_SET_TYPE;\r
+\r
+typedef enum _BTC_DBG_DISP_TYPE{\r
+       BTC_DBG_DISP_COEX_STATISTICS                            = 0x0,\r
+       BTC_DBG_DISP_BT_LINK_INFO                               = 0x1,\r
+       BTC_DBG_DISP_WIFI_STATUS                                = 0x2,\r
+       BTC_DBG_DISP_MAX\r
+}BTC_DBG_DISP_TYPE,*PBTC_DBG_DISP_TYPE;\r
+\r
+typedef enum _BTC_NOTIFY_TYPE_IPS{\r
+       BTC_IPS_LEAVE                                                   = 0x0,\r
+       BTC_IPS_ENTER                                                   = 0x1,\r
+       BTC_IPS_MAX\r
+}BTC_NOTIFY_TYPE_IPS,*PBTC_NOTIFY_TYPE_IPS;\r
+typedef enum _BTC_NOTIFY_TYPE_LPS{\r
+       BTC_LPS_DISABLE                                                 = 0x0,\r
+       BTC_LPS_ENABLE                                                  = 0x1,\r
+       BTC_LPS_MAX\r
+}BTC_NOTIFY_TYPE_LPS,*PBTC_NOTIFY_TYPE_LPS;\r
+typedef enum _BTC_NOTIFY_TYPE_SCAN{\r
+       BTC_SCAN_FINISH                                                 = 0x0,\r
+       BTC_SCAN_START                                                  = 0x1,\r
+       BTC_SCAN_MAX\r
+}BTC_NOTIFY_TYPE_SCAN,*PBTC_NOTIFY_TYPE_SCAN;\r
+typedef enum _BTC_NOTIFY_TYPE_ASSOCIATE{\r
+       BTC_ASSOCIATE_FINISH                                            = 0x0,\r
+       BTC_ASSOCIATE_START                                             = 0x1,\r
+       BTC_ASSOCIATE_MAX\r
+}BTC_NOTIFY_TYPE_ASSOCIATE,*PBTC_NOTIFY_TYPE_ASSOCIATE;\r
+typedef enum _BTC_NOTIFY_TYPE_MEDIA_STATUS{\r
+       BTC_MEDIA_DISCONNECT                                    = 0x0,\r
+       BTC_MEDIA_CONNECT                                               = 0x1,\r
+       BTC_MEDIA_MAX\r
+}BTC_NOTIFY_TYPE_MEDIA_STATUS,*PBTC_NOTIFY_TYPE_MEDIA_STATUS;\r
+typedef enum _BTC_NOTIFY_TYPE_SPECIAL_PACKET{\r
+       BTC_PACKET_UNKNOWN                                      = 0x0,\r
+       BTC_PACKET_DHCP                                                 = 0x1,\r
+       BTC_PACKET_ARP                                                  = 0x2,\r
+       BTC_PACKET_EAPOL                                                = 0x3,\r
+       BTC_PACKET_MAX\r
+}BTC_NOTIFY_TYPE_SPECIAL_PACKET,*PBTC_NOTIFY_TYPE_SPECIAL_PACKET;\r
+typedef enum _BTC_NOTIFY_TYPE_STACK_OPERATION{\r
+       BTC_STACK_OP_NONE                                       = 0x0,\r
+       BTC_STACK_OP_INQ_PAGE_PAIR_START                = 0x1,\r
+       BTC_STACK_OP_INQ_PAGE_PAIR_FINISH       = 0x2,\r
+       BTC_STACK_OP_MAX\r
+}BTC_NOTIFY_TYPE_STACK_OPERATION,*PBTC_NOTIFY_TYPE_STACK_OPERATION;\r
+\r
+//Bryant Add\r
+typedef enum _BTC_ANTENNA_POS{\r
+       BTC_ANTENNA_AT_MAIN_PORT                                = 0x1,\r
+       BTC_ANTENNA_AT_AUX_PORT                         = 0x2,\r
+}BTC_ANTENNA_POS,*PBTC_ANTENNA_POS;\r
+\r
+//Bryant Add\r
+typedef enum _BTC_BT_OFFON{\r
+       BTC_BT_OFF                              = 0x0,\r
+       BTC_BT_ON                               = 0x1,\r
+}BTC_BTOFFON,*PBTC_BT_OFFON;\r
+\r
+typedef u1Byte\r
+(*BFP_BTC_R1)(\r
+       IN      PVOID                   pBtcContext,\r
+       IN      u4Byte                  RegAddr\r
+       );\r
+typedef u2Byte\r
+(*BFP_BTC_R2)(\r
+       IN      PVOID                   pBtcContext,\r
+       IN      u4Byte                  RegAddr\r
+       );\r
+typedef u4Byte\r
+(*BFP_BTC_R4)(\r
+       IN      PVOID                   pBtcContext,\r
+       IN      u4Byte                  RegAddr\r
+       );\r
+typedef VOID\r
+(*BFP_BTC_W1)(\r
+       IN      PVOID                   pBtcContext,\r
+       IN      u4Byte                  RegAddr,\r
+       IN      u1Byte                  Data\r
+       );\r
+typedef VOID\r
+(*BFP_BTC_W1_BIT_MASK)(\r
+       IN      PVOID                   pBtcContext,\r
+       IN      u4Byte                  regAddr,\r
+       IN      u1Byte                  bitMask,\r
+       IN      u1Byte                  data1b\r
+       );\r
+typedef VOID\r
+(*BFP_BTC_W2)(\r
+       IN      PVOID                   pBtcContext,\r
+       IN      u4Byte                  RegAddr,\r
+       IN      u2Byte                  Data\r
+       );\r
+typedef VOID\r
+(*BFP_BTC_W4)(\r
+       IN      PVOID                   pBtcContext,\r
+       IN      u4Byte                  RegAddr,\r
+       IN      u4Byte                  Data\r
+       );\r
+typedef VOID\r
+(*BFP_BTC_LOCAL_REG_W1)(\r
+       IN      PVOID                   pBtcContext,\r
+       IN      u4Byte                  RegAddr,\r
+       IN      u1Byte                  Data\r
+       );\r
+typedef VOID\r
+(*BFP_BTC_SET_BB_REG)(\r
+       IN      PVOID                   pBtcContext,\r
+       IN      u4Byte                  RegAddr,\r
+       IN      u4Byte                  BitMask,\r
+       IN      u4Byte                  Data\r
+       );\r
+typedef u4Byte \r
+(*BFP_BTC_GET_BB_REG)(\r
+       IN      PVOID                   pBtcContext,\r
+       IN      u4Byte                  RegAddr,\r
+       IN      u4Byte                  BitMask\r
+       );\r
+typedef VOID\r
+(*BFP_BTC_SET_RF_REG)( \r
+       IN      PVOID                   pBtcContext,\r
+       IN      u1Byte                  eRFPath,\r
+       IN      u4Byte                  RegAddr,\r
+       IN      u4Byte                  BitMask,\r
+       IN      u4Byte                  Data\r
+       );\r
+typedef u4Byte \r
+(*BFP_BTC_GET_RF_REG)(\r
+       IN      PVOID                   pBtcContext,\r
+       IN      u1Byte                  eRFPath,\r
+       IN      u4Byte                  RegAddr,\r
+       IN      u4Byte                  BitMask\r
+       );\r
+typedef VOID\r
+(*BFP_BTC_FILL_H2C)(\r
+       IN      PVOID                   pBtcContext,\r
+       IN      u1Byte                  elementId,\r
+       IN      u4Byte                  cmdLen,\r
+       IN      pu1Byte                 pCmdBuffer\r
+       );\r
+\r
+typedef        BOOLEAN\r
+(*BFP_BTC_GET)(\r
+       IN      PVOID                   pBtCoexist,\r
+       IN      u1Byte                  getType,\r
+       OUT     PVOID                   pOutBuf\r
+       );\r
+\r
+typedef        BOOLEAN\r
+(*BFP_BTC_SET)(\r
+       IN      PVOID                   pBtCoexist,\r
+       IN      u1Byte                  setType,\r
+       OUT     PVOID                   pInBuf\r
+       );\r
+typedef u2Byte\r
+(*BFP_BTC_SET_BT_REG)(\r
+       IN      PVOID                   pBtcContext,\r
+       IN      u1Byte                  regType,\r
+       IN      u4Byte                  offset,\r
+       IN      u4Byte                  value\r
+       );\r
+typedef BOOLEAN\r
+(*BFP_BTC_SET_BT_ANT_DETECTION)(\r
+       IN      PVOID                   pBtcContext,\r
+       IN      u1Byte                  txTime,\r
+       IN      u1Byte                  btChnl\r
+       );\r
+typedef u2Byte \r
+(*BFP_BTC_GET_BT_REG)(\r
+       IN      PVOID                   pBtcContext,\r
+       IN      u1Byte                  regType,\r
+       IN      u4Byte                  offset,\r
+       IN      pu4Byte                 data\r
+       );\r
+typedef VOID\r
+(*BFP_BTC_DISP_DBG_MSG)(\r
+       IN      PVOID                   pBtCoexist,\r
+       IN      u1Byte                  dispType\r
+       );\r
+\r
+typedef struct _BTC_BT_INFO{\r
+       BOOLEAN                                 bBtDisabled;\r
+       u1Byte                                  rssiAdjustForAgcTableOn;\r
+       u1Byte                                  rssiAdjustFor1AntCoexType;\r
+       BOOLEAN                                 bPreBtCtrlAggBufSize;\r
+       BOOLEAN                                 bBtCtrlAggBufSize;\r
+       BOOLEAN                                 bPreRejectAggPkt;\r
+       BOOLEAN                                 bRejectAggPkt;\r
+       BOOLEAN                                 bIncreaseScanDevNum;\r
+       BOOLEAN                                 bBtTxRxMask;\r
+       u1Byte                                  preAggBufSize;\r
+       u1Byte                                  aggBufSize;\r
+       BOOLEAN                                 bBtBusy;\r
+       BOOLEAN                                 bLimitedDig;\r
+       u2Byte                                  btHciVer;\r
+       u2Byte                                  btRealFwVer;\r
+       u1Byte                                  btFwVer;\r
+       u4Byte                                  getBtFwVerCnt;\r
+       BOOLEAN                                 bMiracastPlusBt;\r
+\r
+       BOOLEAN                                 bBtDisableLowPwr;\r
+\r
+       BOOLEAN                                 bBtCtrlLps;\r
+       BOOLEAN                                 bBtLpsOn;\r
+       BOOLEAN                                 bForceToRoam;   // for 1Ant solution\r
+       u1Byte                                  lpsVal;\r
+       u1Byte                                  rpwmVal;\r
+       u4Byte                                  raMask;\r
+} BTC_BT_INFO, *PBTC_BT_INFO;\r
+\r
+typedef struct _BTC_STACK_INFO{\r
+       BOOLEAN                                 bProfileNotified;\r
+       u2Byte                                  hciVersion;     // stack hci version\r
+       u1Byte                                  numOfLink;\r
+       BOOLEAN                                 bBtLinkExist;\r
+       BOOLEAN                                 bScoExist;\r
+       BOOLEAN                                 bAclExist;\r
+       BOOLEAN                                 bA2dpExist;\r
+       BOOLEAN                                 bHidExist;\r
+       u1Byte                                  numOfHid;\r
+       BOOLEAN                                 bPanExist;\r
+       BOOLEAN                                 bUnknownAclExist;\r
+       s1Byte                                  minBtRssi;\r
+} BTC_STACK_INFO, *PBTC_STACK_INFO;\r
+\r
+typedef struct _BTC_BT_LINK_INFO{\r
+       BOOLEAN                                 bBtLinkExist;\r
+       BOOLEAN                                 bBtHiPriLinkExist;\r
+       BOOLEAN                                 bScoExist;\r
+       BOOLEAN                                 bScoOnly;\r
+       BOOLEAN                                 bA2dpExist;\r
+       BOOLEAN                                 bA2dpOnly;\r
+       BOOLEAN                                 bHidExist;\r
+       BOOLEAN                                 bHidOnly;\r
+       BOOLEAN                                 bPanExist;\r
+       BOOLEAN                                 bPanOnly;\r
+       BOOLEAN                                 bSlaveRole;\r
+       BOOLEAN                                 bAclBusy;\r
+} BTC_BT_LINK_INFO, *PBTC_BT_LINK_INFO;\r
+\r
+typedef struct _BTC_STATISTICS{\r
+       u4Byte                                  cntBind;\r
+       u4Byte                                  cntPowerOn;\r
+       u4Byte                                  cntPreLoadFirmware;\r
+       u4Byte                                  cntInitHwConfig;\r
+       u4Byte                                  cntInitCoexDm;\r
+       u4Byte                                  cntIpsNotify;\r
+       u4Byte                                  cntLpsNotify;\r
+       u4Byte                                  cntScanNotify;\r
+       u4Byte                                  cntConnectNotify;\r
+       u4Byte                                  cntMediaStatusNotify;\r
+       u4Byte                                  cntSpecialPacketNotify;\r
+       u4Byte                                  cntBtInfoNotify;\r
+       u4Byte                                  cntRfStatusNotify;\r
+       u4Byte                                  cntPeriodical;\r
+       u4Byte                                  cntCoexDmSwitch;\r
+       u4Byte                                  cntStackOperationNotify;\r
+       u4Byte                                  cntDbgCtrl;\r
+} BTC_STATISTICS, *PBTC_STATISTICS;\r
+\r
+typedef struct _BTC_COEXIST{\r
+       BOOLEAN                         bBinded;                // make sure only one adapter can bind the data context\r
+       PVOID                           Adapter;                // default adapter\r
+       BTC_BOARD_INFO          boardInfo;\r
+       BTC_BT_INFO                     btInfo;         // some bt info referenced by non-bt module\r
+       BTC_STACK_INFO          stackInfo;\r
+       BTC_BT_LINK_INFO        btLinkInfo;\r
+       BTC_CHIP_INTERFACE      chipInterface;\r
+\r
+       BOOLEAN                         bInitilized;\r
+       BOOLEAN                         bStopCoexDm;\r
+       BOOLEAN                         bManualControl;\r
+       pu1Byte                         cliBuf;\r
+       BTC_STATISTICS          statistics;\r
+       u1Byte                          pwrModeVal[10];\r
+               \r
+       // function pointers\r
+       // io related\r
+       BFP_BTC_R1                      fBtcRead1Byte;\r
+       BFP_BTC_W1                      fBtcWrite1Byte;\r
+       BFP_BTC_W1_BIT_MASK     fBtcWrite1ByteBitMask;\r
+       BFP_BTC_R2                      fBtcRead2Byte;\r
+       BFP_BTC_W2                      fBtcWrite2Byte;\r
+       BFP_BTC_R4                      fBtcRead4Byte;\r
+       BFP_BTC_W4                      fBtcWrite4Byte;\r
+       BFP_BTC_LOCAL_REG_W1    fBtcWriteLocalReg1Byte;\r
+       // read/write bb related\r
+       BFP_BTC_SET_BB_REG      fBtcSetBbReg;\r
+       BFP_BTC_GET_BB_REG      fBtcGetBbReg;\r
+\r
+       // read/write rf related\r
+       BFP_BTC_SET_RF_REG      fBtcSetRfReg;\r
+       BFP_BTC_GET_RF_REG      fBtcGetRfReg;\r
+       \r
+       // fill h2c related\r
+       BFP_BTC_FILL_H2C                fBtcFillH2c;\r
+       // other\r
+       BFP_BTC_DISP_DBG_MSG    fBtcDispDbgMsg;\r
+       // normal get/set related\r
+       BFP_BTC_GET                     fBtcGet;\r
+       BFP_BTC_SET                     fBtcSet;\r
+\r
+       BFP_BTC_GET_BT_REG      fBtcGetBtReg;\r
+       BFP_BTC_SET_BT_REG      fBtcSetBtReg;\r
+\r
+       BFP_BTC_SET_BT_ANT_DETECTION    fBtcSetBtAntDetection;\r
+} BTC_COEXIST, *PBTC_COEXIST;\r
+\r
+extern BTC_COEXIST                             GLBtCoexist;\r
+\r
+BOOLEAN\r
+EXhalbtcoutsrc_InitlizeVariables(\r
+       IN      PVOID           Adapter \r
+       );\r
+VOID\r
+EXhalbtcoutsrc_PowerOnSetting(\r
+       IN      PBTC_COEXIST            pBtCoexist\r
+       );\r
+VOID\r
+EXhalbtcoutsrc_PreLoadFirmware(\r
+       IN      PBTC_COEXIST            pBtCoexist\r
+       );\r
+VOID\r
+EXhalbtcoutsrc_InitHwConfig(\r
+       IN      PBTC_COEXIST            pBtCoexist,\r
+       IN      BOOLEAN                         bWifiOnly\r
+       );\r
+VOID\r
+EXhalbtcoutsrc_InitCoexDm(\r
+       IN      PBTC_COEXIST            pBtCoexist\r
+       );\r
+VOID\r
+EXhalbtcoutsrc_IpsNotify(\r
+       IN      PBTC_COEXIST            pBtCoexist,\r
+       IN      u1Byte                  type\r
+       );\r
+VOID\r
+EXhalbtcoutsrc_LpsNotify(\r
+       IN      PBTC_COEXIST            pBtCoexist,\r
+       IN      u1Byte                  type\r
+       );\r
+VOID\r
+EXhalbtcoutsrc_ScanNotify(\r
+       IN      PBTC_COEXIST            pBtCoexist,\r
+       IN      u1Byte                  type\r
+       );\r
+VOID\r
+EXhalbtcoutsrc_ConnectNotify(\r
+       IN      PBTC_COEXIST            pBtCoexist,\r
+       IN      u1Byte                  action\r
+       );\r
+VOID\r
+EXhalbtcoutsrc_MediaStatusNotify(\r
+       IN      PBTC_COEXIST            pBtCoexist,\r
+       IN      RT_MEDIA_STATUS mediaStatus\r
+       );\r
+VOID\r
+EXhalbtcoutsrc_SpecialPacketNotify(\r
+       IN      PBTC_COEXIST            pBtCoexist,\r
+       IN      u1Byte                  pktType\r
+       );\r
+VOID\r
+EXhalbtcoutsrc_BtInfoNotify(\r
+       IN      PBTC_COEXIST            pBtCoexist,\r
+       IN      pu1Byte                 tmpBuf,\r
+       IN      u1Byte                  length\r
+       );\r
+VOID\r
+EXhalbtcoutsrc_RfStatusNotify(\r
+       IN      PBTC_COEXIST            pBtCoexist,\r
+       IN      u1Byte                          type\r
+       );\r
+VOID\r
+EXhalbtcoutsrc_StackOperationNotify(\r
+       IN      PBTC_COEXIST            pBtCoexist,\r
+       IN      u1Byte                  type\r
+       );\r
+VOID\r
+EXhalbtcoutsrc_HaltNotify(\r
+       IN      PBTC_COEXIST            pBtCoexist\r
+       );\r
+VOID\r
+EXhalbtcoutsrc_PnpNotify(\r
+       IN      PBTC_COEXIST            pBtCoexist,\r
+       IN      u1Byte                  pnpState\r
+       );\r
+VOID\r
+EXhalbtcoutsrc_ScoreBoardStatusNotify(\r
+       IN      PBTC_COEXIST            pBtCoexist,\r
+       IN      pu1Byte                 tmpBuf,\r
+       IN      u1Byte                  length\r
+       );\r
+VOID\r
+EXhalbtcoutsrc_CoexDmSwitch(\r
+       IN      PBTC_COEXIST            pBtCoexist\r
+       );\r
+VOID\r
+EXhalbtcoutsrc_Periodical(\r
+       IN      PBTC_COEXIST            pBtCoexist\r
+       );\r
+VOID\r
+EXhalbtcoutsrc_DbgControl(\r
+       IN      PBTC_COEXIST                    pBtCoexist,\r
+       IN      u1Byte                          opCode,\r
+       IN      u1Byte                          opLen,\r
+       IN      pu1Byte                         pData\r
+       );\r
+VOID\r
+EXhalbtcoutsrc_AntennaDetection(\r
+       IN      PBTC_COEXIST                    pBtCoexist,\r
+       IN      u4Byte                                  centFreq,\r
+       IN      u4Byte                                  offset,\r
+       IN      u4Byte                                  span,\r
+       IN      u4Byte                                  seconds\r
+       );\r
+VOID\r
+EXhalbtcoutsrc_StackUpdateProfileInfo(\r
+       VOID\r
+       );\r
+VOID\r
+EXhalbtcoutsrc_SetHciVersion(\r
+       IN      u2Byte  hciVersion\r
+       );\r
+VOID\r
+EXhalbtcoutsrc_SetBtPatchVersion(\r
+       IN      u2Byte  btHciVersion,\r
+       IN      u2Byte  btPatchVersion\r
+       );\r
+VOID\r
+EXhalbtcoutsrc_UpdateMinBtRssi(\r
+       IN      s1Byte  btRssi\r
+       );\r
+#if 0\r
+VOID\r
+EXhalbtcoutsrc_SetBtExist(\r
+       IN      BOOLEAN         bBtExist\r
+       );\r
+#endif\r
+VOID\r
+EXhalbtcoutsrc_SetChipType(\r
+       IN      u1Byte          chipType\r
+       );\r
+VOID\r
+EXhalbtcoutsrc_SetAntNum(\r
+       IN      u1Byte          type,\r
+       IN      u1Byte          antNum\r
+       );\r
+VOID\r
+EXhalbtcoutsrc_SetSingleAntPath(\r
+       IN      u1Byte          singleAntPath\r
+       );\r
+VOID\r
+EXhalbtcoutsrc_DisplayBtCoexInfo(\r
+       IN      PBTC_COEXIST            pBtCoexist\r
+       );\r
+VOID\r
+EXhalbtcoutsrc_DisplayAntDetection(\r
+       IN      PBTC_COEXIST            pBtCoexist\r
+       );\r
+\r
+#endif\r