diff options
Diffstat (limited to 'drivers/net/wireless/rtl8188E_8192E/include/rtl8723a_bt-coexist.h')
-rwxr-xr-x | drivers/net/wireless/rtl8188E_8192E/include/rtl8723a_bt-coexist.h | 1809 |
1 files changed, 1809 insertions, 0 deletions
diff --git a/drivers/net/wireless/rtl8188E_8192E/include/rtl8723a_bt-coexist.h b/drivers/net/wireless/rtl8188E_8192E/include/rtl8723a_bt-coexist.h new file mode 100755 index 00000000..e69a8917 --- /dev/null +++ b/drivers/net/wireless/rtl8188E_8192E/include/rtl8723a_bt-coexist.h @@ -0,0 +1,1809 @@ +/****************************************************************************** + * + * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of version 2 of the GNU General Public License as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA + * + * + ******************************************************************************/ +#ifndef __RTL8723A_BT_COEXIST_H__ +#define __RTL8723A_BT_COEXIST_H__ + +#include <drv_types.h> +#include "../hal/OUTSRC/odm_precomp.h" + + +#define __BT_C__ 1 +#define __BT_HANDLEPACKET_C__ 1 +#define __BT_HCI_C__ 1 +#define __HALBTC87231ANT_C__ 1 +#define __HALBTC87232ANT_C__ 1 +#define __HALBTC8723_C__ 1 +#define __HALBTCCSR1ANT_C__ 1 +#define __HALBTCCSR2ANT_C__ 1 +#define __HALBTCOEXIST_C__ 1 +#define __HALBT_C__ 1 + +#ifdef __BT_C__ // COMMON/BT.h + +// HEADER/PlatformDef.h +typedef enum _RT_MEDIA_STATUS { + RT_MEDIA_DISCONNECT = 0, + RT_MEDIA_CONNECT = 1 +} RT_MEDIA_STATUS; + +// ===== Below this line is sync from SD7 driver COMMON/BT.h ===== + +#define BT_TMP_BUF_SIZE 100 + +void BT_SignalCompensation(PADAPTER padapter, u8 *rssi_wifi, u8 *rssi_bt); +void BT_WifiScanNotify(PADAPTER padapter, u8 scanType); +void BT_WifiAssociateNotify(PADAPTER padapter, u8 action); +void BT_WifiMediaStatusNotify(PADAPTER padapter, RT_MEDIA_STATUS mstatus); +void BT_SpecialPacketNotify(PADAPTER padapter); +void BT_HaltProcess(PADAPTER padapter); +void BT_LpsLeave(PADAPTER padapter); + + +#define BT_HsConnectionEstablished(Adapter) _FALSE +// ===== End of sync from SD7 driver COMMON/BT.h ===== +#endif // __BT_C__ + +#ifdef __BT_HCI_C__ // COMMON/bt_hci.h + +// HEADER/SecurityType.h +#define TKIP_ENC_KEY_POS 32 //(KEK_LEN+KEK_LEN) +#define MAXRSNIELEN 256 + +// HEADER/QoSType.h +#if 0 +// +// BSS QOS data. +// Ref: BssDscr in 8185 code. [def. in BssDscr.h] +// +typedef struct _BSS_QOS +{ + // Part 0. Ref. 8185 QoS code (From Emily) + QOS_MODE bdQoSMode; + u8 bdWMMIEBuf[MAX_WMMELE_LENGTH]; + OCTET_STRING bdWMMIE; + + QOS_ELE_SUBTYPE EleSubType; + + // Part 2. EDCA Parameter (perAC) + u8 *pWMMInfoEle; + u8 *pWMMParamEle; + + // QBSS Load. + u8 QBssLoad[QBSS_LOAD_SIZE]; + u8 bQBssLoadValid; +} BSS_QOS, *PBSS_QOS; +#endif + +// COMMON/Protocol802_11.h +//---------------------------------------------------------------------------- +// 802.11 Management frame Status Code field +//---------------------------------------------------------------------------- +typedef struct _OCTET_STRING{ + u8 *Octet; + u16 Length; +} OCTET_STRING, *POCTET_STRING; + + +//====================================================================================== +// AES_CCMP specific +//====================================================================================== +enum +{ + AESCCMP_BLK_SIZE = 16, // # octets in an AES block + AESCCMP_MAX_PACKET = 4*512, // largest packet size + AESCCMP_N_RESERVED = 0, // reserved nonce octet value + AESCCMP_A_DATA = 0x40, // the Adata bit in the flags + AESCCMP_M_SHIFT = 3, // how much to shift the 3-bit M field + AESCCMP_L_SHIFT = 0, // how much to shift the 3-bit L field + AESCCMP_L_SIZE = 2, // size of the l(m) length field (in octets) + AESCCMP_OFFSET_SC = 22, + AESCCMP_OFFSET_DURATION = 4, + AESCCMP_OFFSET_A2 = 10, + AESCCMP_OFFSET_A4 = 24, + AESCCMP_QC_TID_MASK = 0x0f, + AESCCMP_BLK_SIZE_TOTAL = 16*16, // Added by Annie for CKIP AES MIC BSOD, 2006-08-17. + // 16*8 < 4*60 Resove to 16*16 +}; + +// +// Key Length +// +#define PMK_LEN 32 +#define PTK_LEN_TKIP 64 +#define GTK_LEN 32 +#define KEY_NONCE_LEN 32 + + +// COMMON/Dot11d.h +typedef struct _CHNL_TXPOWER_TRIPLE +{ + u8 FirstChnl; + u8 NumChnls; + s8 MaxTxPowerInDbm; +} CHNL_TXPOWER_TRIPLE, *PCHNL_TXPOWER_TRIPLE; + + +// ===== Below this line is sync from SD7 driver COMMON/bt_hci.h ===== +#define BT_THREAD 0 +#if(BT_THREAD == 1) +#define SENDTXMEHTOD 2 +#else +#define SENDTXMEHTOD 1 // 0=workitem, 1= SendDirectily, 2=thread +#endif + +//============================================= +// The following is for BT 3.0 + HS HCI COMMAND ERRORS CODES +//============================================= + +#define Max80211PALPDUSize 1492 +#define Max80211AMPASSOCLen 672 +#define MinGUserPrio 4 +#define MaxGUserPrio 7 +#define BEUserPrio0 0 +#define BEUserPrio1 3 +#define Max80211BeaconPeriod 2000 +#define ShortRangeModePowerMax 4 + +#define BT_Default_Chnl 10 +#define ACLDataHeaderLen 4 + +#define BTTotalDataBlockNum 0x100 +#define BTLocalBufNum 0x200 +#define BTMaxDataBlockLen 0x800 +#define BTTOTALBANDWIDTH 0x7530 +#define BTMAXBANDGUBANDWIDTH 0x4e20 +#define TmpLocalBufSize 0x100 +#define BTSynDataPacketLength 0xff +//============================================= + +#define BTMaxAuthCount 5 +#define BTMaxAsocCount 5 + +#define MAX_LOGICAL_LINK_NUM 2 //temporarily define +#define MAX_BT_ASOC_ENTRY_NUM 2 //temporarily define + +#define INVALID_PL_HANDLE 0xff +#define INVALID_ENTRY_NUM 0xff +//============================================= + +#define CAM_BT_START_INDEX (HALF_CAM_ENTRY - 4) // MAX_BT_ASOC_ENTRY_NUM : 4 !!! +#define BT_HWCAM_STAR CAM_BT_START_INDEX // We used HALF_CAM_ENTRY ~ HALF_CAM_ENTRY -MAX_BT_ASOC_ENTRY_NUM + +typedef enum _HCI_STATUS +{ + HCI_STATUS_SUCCESS =0x00, //Success + HCI_STATUS_UNKNOW_HCI_CMD =0x01, //Unknown HCI Command + HCI_STATUS_UNKNOW_CONNECT_ID =0X02, //Unknown Connection Identifier + HCI_STATUS_HW_FAIL =0X03, //Hardware Failure + HCI_STATUS_PAGE_TIMEOUT =0X04, //Page Timeout + HCI_STATUS_AUTH_FAIL =0X05, //Authentication Failure + HCI_STATUS_PIN_OR_KEY_MISSING =0X06, //PIN or Key Missing + HCI_STATUS_MEM_CAP_EXCEED =0X07, //Memory Capacity Exceeded + HCI_STATUS_CONNECT_TIMEOUT =0X08, //Connection Timeout + HCI_STATUS_CONNECT_LIMIT =0X09, //Connection Limit Exceeded + HCI_STATUS_SYN_CONNECT_LIMIT =0X0a, //Synchronous Connection Limit To A Device Exceeded + HCI_STATUS_ACL_CONNECT_EXISTS =0X0b, //ACL Connection Already Exists + HCI_STATUS_CMD_DISALLOW =0X0c, //Command Disallowed + HCI_STATUS_CONNECT_RJT_LIMIT_RESOURCE =0X0d, //Connection Rejected due to Limited Resources + HCI_STATUS_CONNECT_RJT_SEC_REASON =0X0e, //Connection Rejected Due To Security Reasons + HCI_STATUS_CONNECT_RJT_UNACCEPT_BD_ADDR =0X0f, //Connection Rejected due to Unacceptable BD_ADDR + HCI_STATUS_CONNECT_ACCEPT_TIMEOUT =0X10, //Connection Accept Timeout Exceeded + HCI_STATUS_UNSUPPORT_FEATURE_PARA_VALUE =0X11, //Unsupported Feature or Parameter Value + HCI_STATUS_INVALID_HCI_CMD_PARA_VALUE =0X12, //Invalid HCI Command Parameters + HCI_STATUS_REMOTE_USER_TERMINATE_CONNECT =0X13, //Remote User Terminated Connection + HCI_STATUS_REMOTE_DEV_TERMINATE_LOW_RESOURCE =0X14, //Remote Device Terminated Connection due to Low Resources + HCI_STATUS_REMOTE_DEV_TERMINATE_CONNECT_POWER_OFF =0X15, //Remote Device Terminated Connection due to Power Off + HCI_STATUS_CONNECT_TERMINATE_LOCAL_HOST =0X16, //Connection Terminated By Local Host + HCI_STATUS_REPEATE_ATTEMPT =0X17, //Repeated Attempts + HCI_STATUS_PAIR_NOT_ALLOW =0X18, //Pairing Not Allowed + HCI_STATUS_UNKNOW_LMP_PDU =0X19, //Unknown LMP PDU + HCI_STATUS_UNSUPPORT_REMOTE_LMP_FEATURE =0X1a, //Unsupported Remote Feature / Unsupported LMP Feature + HCI_STATUS_SOC_OFFSET_REJECT =0X1b, //SCO Offset Rejected + HCI_STATUS_SOC_INTERVAL_REJECT =0X1c, //SCO Interval Rejected + HCI_STATUS_SOC_AIR_MODE_REJECT =0X1d,//SCO Air Mode Rejected + HCI_STATUS_INVALID_LMP_PARA =0X1e, //Invalid LMP Parameters + HCI_STATUS_UNSPECIFIC_ERROR =0X1f, //Unspecified Error + HCI_STATUS_UNSUPPORT_LMP_PARA_VALUE =0X20, //Unsupported LMP Parameter Value + HCI_STATUS_ROLE_CHANGE_NOT_ALLOW =0X21, //Role Change Not Allowed + HCI_STATUS_LMP_RESPONSE_TIMEOUT =0X22, //LMP Response Timeout + HCI_STATUS_LMP_ERROR_TRANSACTION_COLLISION =0X23, //LMP Error Transaction Collision + HCI_STATUS_LMP_PDU_NOT_ALLOW =0X24, //LMP PDU Not Allowed + HCI_STATUS_ENCRYPTION_MODE_NOT_ALLOW =0X25, //Encryption Mode Not Acceptable + HCI_STATUS_LINK_KEY_CAN_NOT_CHANGE =0X26, //Link Key Can Not be Changed + HCI_STATUS_REQUEST_QOS_NOT_SUPPORT =0X27, //Requested QoS Not Supported + HCI_STATUS_INSTANT_PASSED =0X28, //Instant Passed + HCI_STATUS_PAIRING_UNIT_KEY_NOT_SUPPORT =0X29, //Pairing With Unit Key Not Supported + HCI_STATUS_DIFFERENT_TRANSACTION_COLLISION =0X2a, //Different Transaction Collision + HCI_STATUS_RESERVE_1 =0X2b, //Reserved + HCI_STATUS_QOS_UNACCEPT_PARA =0X2c, //QoS Unacceptable Parameter + HCI_STATUS_QOS_REJECT =0X2d, //QoS Rejected + HCI_STATUS_CHNL_CLASSIFICATION_NOT_SUPPORT =0X2e, //Channel Classification Not Supported + HCI_STATUS_INSUFFICIENT_SECURITY =0X2f, //Insufficient Security + HCI_STATUS_PARA_OUT_OF_RANGE =0x30, //Parameter Out Of Mandatory Range + HCI_STATUS_RESERVE_2 =0X31, //Reserved + HCI_STATUS_ROLE_SWITCH_PENDING =0X32, //Role Switch Pending + HCI_STATUS_RESERVE_3 =0X33, //Reserved + HCI_STATUS_RESERVE_SOLT_VIOLATION =0X34, //Reserved Slot Violation + HCI_STATUS_ROLE_SWITCH_FAIL =0X35, //Role Switch Failed + HCI_STATUS_EXTEND_INQUIRY_RSP_TOO_LARGE =0X36, //Extended Inquiry Response Too Large + HCI_STATUS_SEC_SIMPLE_PAIRING_NOT_SUPPORT =0X37, //Secure Simple Pairing Not Supported By Host. + HCI_STATUS_HOST_BUSY_PAIRING =0X38, //Host Busy - Pairing + HCI_STATUS_CONNECT_REJ_NOT_SUIT_CHNL_FOUND =0X39, //Connection Rejected due to No Suitable Channel Found + HCI_STATUS_CONTROLLER_BUSY =0X3a //CONTROLLER BUSY +} HCI_STATUS,*PHCI_STATUS; + +//============================================= +// The following is for BT 3.0 + HS HCI COMMAND +//============================================= + +//bit 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 +// | OCF | OGF | +// + +//OGF 0x01 +#define OGF_LINK_CONTROL_COMMANDS 0x01 +typedef enum _LINK_CONTROL_COMMANDS +{ + HCI_INQUIRY =0x0001, + HCI_INQUIRY_CANCEL =0x0002, + HCI_PERIODIC_INQUIRY_MODE =0x0003, + HCI_EXIT_PERIODIC_INQUIRY_MODE =0x0004, + HCI_CREATE_CONNECTION =0x0005, + HCI_DISCONNECT =0x0006, + HCI_CREATE_CONNECTION_CANCEL =0x0008, + HCI_ACCEPT_CONNECTIONREQUEST =0x0009, + HCI_REJECT_CONNECTION_REQUEST =0x000a, + HCI_LINK_KEY_REQUEST_REPLY =0x000b, + HCI_LINK_KEY_REQUEST_NEGATIVE_REPLY =0x000c, + HCI_PIN_CODE_REQUEST_REPLY =0x000d, + HCI_PIN_CODE_REQUEST_NEGATIVE_REPLY =0x000e, + HCI_CHANGE_CONNECTION_PACKET_TYPE =0x000f, + HCI_AUTHENTICATION_REQUESTED =0x0011, + HCI_SET_CONNECTION_ENCRYPTION =0x0013, + HCI_CHANGE_CONNECTION_LINK_KEY =0x0015, + HCI_MASTER_LINK_KEY =0x0017, + HCI_REMOTE_NAME_REQUEST =0x0019, + HCI_REMOTE_NAME_REQUEST_CANCEL =0x001a, + HCI_READ_REMOTE_SUPPORTED_FEATURES =0x001b, + HCI_READ_REMOTE_EXTENDED_FEATURES =0x001c, + HCI_READ_REMOTE_VERSION_INFORMATION =0x001d, + HCI_READ_CLOCK_OFFSET =0x001f, + HCI_READ_LMP_HANDLE =0x0020, + HCI_SETUP_SYNCHRONOUS_CONNECTION =0x0028, + HCI_ACCEPT_SYNCHRONOUS_CONNECTION_REQUEST =0x0029, + HCI_REJECT_SYNCHRONOUS_CONNECTION_REQUEST =0x002a, + HCI_IO_CAPABILITY_REQUEST_REPLY =0x002b, + HCI_USER_CONFIRMATION_REQUEST_REPLY =0x002c, + HCI_USER_CONFIRMATION_REQUEST_NEGATIVE_REPLY =0x002d, + HCI_USER_PASSKEY_REQUEST_REPLY =0x002e, + HCI_USER_PASSKEY_REQUESTNEGATIVE_REPLY =0x002f, + HCI_REMOTE_OOB_DATA_REQUEST_REPLY =0x0030, + HCI_REMOTE_OOB_DATA_REQUEST_NEGATIVE_REPLY =0x0033, + HCI_IO_CAPABILITY_REQUEST_NEGATIVE_REPLY =0x0034, + HCI_CREATE_PHYSICAL_LINK =0x0035, + HCI_ACCEPT_PHYSICAL_LINK =0x0036, + HCI_DISCONNECT_PHYSICAL_LINK =0x0037, + HCI_CREATE_LOGICAL_LINK =0x0038, + HCI_ACCEPT_LOGICAL_LINK =0x0039, + HCI_DISCONNECT_LOGICAL_LINK =0x003a, + HCI_LOGICAL_LINK_CANCEL =0x003b, + HCI_FLOW_SPEC_MODIFY =0x003c +} LINK_CONTROL_COMMANDS,*PLINK_CONTROL_COMMANDS; + +//OGF 0x02 +#define OGF_HOLD_MODE_COMMAND 0x02 +typedef enum _HOLD_MODE_COMMAND +{ + HCI_HOLD_MODE =0x0001, + HCI_SNIFF_MODE =0x0002, + HCI_EXIT_SNIFF_MODE =0x0003, + HCI_PARK_STATE =0x0005, + HCI_EXIT_PARK_STATE =0x0006, + HCI_QOS_SETUP =0x0007, + HCI_ROLE_DISCOVERY =0x0009, + HCI_SWITCH_ROLE =0x000b, + HCI_READ_LINK_POLICY_SETTINGS =0x000c, + HCI_WRITE_LINK_POLICY_SETTINGS =0x000d, + HCI_READ_DEFAULT_LINK_POLICY_SETTINGS =0x000e, + HCI_WRITE_DEFAULT_LINK_POLICY_SETTINGS =0x000f, + HCI_FLOW_SPECIFICATION =0x0010, + HCI_SNIFF_SUBRATING =0x0011 +} HOLD_MODE_COMMAND,*PHOLD_MODE_COMMAND; + +//OGF 0x03 +#define OGF_SET_EVENT_MASK_COMMAND 0x03 +typedef enum _SET_EVENT_MASK_COMMAND +{ + HCI_SET_EVENT_MASK =0x0001, + HCI_RESET =0x0003, + HCI_SET_EVENT_FILTER =0x0005, + HCI_FLUSH =0x0008, + HCI_READ_PIN_TYPE =0x0009, + HCI_WRITE_PIN_TYPE =0x000a, + HCI_CREATE_NEW_UNIT_KEY =0x000b, + HCI_READ_STORED_LINK_KEY =0x000d, + HCI_WRITE_STORED_LINK_KEY =0x0011, + HCI_DELETE_STORED_LINK_KEY =0x0012, + HCI_WRITE_LOCAL_NAME =0x0013, + HCI_READ_LOCAL_NAME =0x0014, + HCI_READ_CONNECTION_ACCEPT_TIMEOUT =0x0015, + HCI_WRITE_CONNECTION_ACCEPT_TIMEOUT =0x0016, + HCI_READ_PAGE_TIMEOUT =0x0017, + HCI_WRITE_PAGE_TIMEOUT =0x0018, + HCI_READ_SCAN_ENABLE =0x0019, + HCI_WRITE_SCAN_ENABLE =0x001a, + HCI_READ_PAGE_SCAN_ACTIVITY =0x001b, + HCI_WRITE_PAGE_SCAN_ACTIVITY =0x001c, + HCI_READ_INQUIRY_SCAN_ACTIVITY =0x001d, + HCI_WRITE_INQUIRY_SCAN_ACTIVITY =0x001e, + HCI_READ_AUTHENTICATION_ENABLE =0x001f, + HCI_WRITE_AUTHENTICATION_ENABLE =0x0020, + HCI_READ_CLASS_OF_DEVICE =0x0023, + HCI_WRITE_CLASS_OF_DEVICE =0x0024, + HCI_READ_VOICE_SETTING =0x0025, + HCI_WRITE_VOICE_SETTING =0x0026, + HCI_READ_AUTOMATIC_FLUSH_TIMEOUT =0x0027, + HCI_WRITE_AUTOMATIC_FLUSH_TIMEOUT =0x0028, + HCI_READ_NUM_BROADCAST_RETRANSMISSIONS =0x0029, + HCI_WRITE_NUM_BROADCAST_RETRANSMISSIONS =0x002a, + HCI_READ_HOLD_MODE_ACTIVITY =0x002b, + HCI_WRITE_HOLD_MODE_ACTIVITY =0x002c, + HCI_READ_SYNCHRONOUS_FLOW_CONTROL_ENABLE =0x002e, + HCI_WRITE_SYNCHRONOUS_FLOW_CONTROL_ENABLE =0x002f, + HCI_SET_CONTROLLER_TO_HOST_FLOW_CONTROL =0x0031, + HCI_HOST_BUFFER_SIZE =0x0033, + HCI_HOST_NUMBER_OF_COMPLETED_PACKETS =0x0035, + HCI_READ_LINK_SUPERVISION_TIMEOUT =0x0036, + HCI_WRITE_LINK_SUPERVISION_TIMEOUT =0x0037, + HCI_READ_NUMBER_OF_SUPPORTED_IAC =0x0038, + HCI_READ_CURRENT_IAC_LAP =0x0039, + HCI_WRITE_CURRENT_IAC_LAP =0x003a, + HCI_READ_PAGE_SCAN_MODE =0x003d, + HCI_WRITE_PAGE_SCAN_MODE =0x003e, + HCI_SET_AFH_HOST_CHANNEL_CLASSIFICATION =0x003f, + HCI_READ_INQUIRY_SCAN_TYPE =0x0042, + HCI_WRITE_INQUIRY_SCAN_TYPE =0x0043, + HCI_READ_INQUIRY_MODE =0x0044, + HCI_WRITE_INQUIRY_MODE =0x0045, + HCI_READ_PAGE_SCAN_TYPE =0x0046, + HCI_WRITE_PAGE_SCAN_TYPE =0x0047, + HCI_READ_AFH_CHANNEL_ASSESSMENT_MODE =0x0048, + HCI_WRITE_AFH_CHANNEL_ASSESSMENT_MODE =0x0049, + HCI_READ_EXTENDED_INQUIRY_RESPONSE =0x0051, + HCI_WRITE_EXTENDED_INQUIRY_RESPONSE =0x0052, + HCI_REFRESH_ENCRYPTION_KEY =0x0053, + HCI_READ_SIMPLE_PAIRING_MODE =0x0055, + HCI_WRITE_SIMPLE_PAIRING_MODE =0x0056, + HCI_READ_LOCAL_OOB_DATA =0x0057, + HCI_READ_INQUIRY_RESPONSE_TRANSMIT_POWER_LEVEL =0x0058, + HCI_WRITE_INQUIRY_TRANSMIT_POWER_LEVEL =0x0059, + HCI_READ_DEFAULT_ERRONEOUS_DATA_REPORTING =0x005a, + HCI_WRITE_DEFAULT_ERRONEOUS_DATA_REPORTING =0x005b, + HCI_ENHANCED_FLUSH =0x005f, + HCI_SEND_KEYPRESS_NOTIFICATION =0x0060, + HCI_READ_LOGICAL_LINK_ACCEPT_TIMEOUT =0x0061, + HCI_WRITE_LOGICAL_LINK_ACCEPT_TIMEOUT =0x0062, + HCI_SET_EVENT_MASK_PAGE_2 =0x0063, + HCI_READ_LOCATION_DATA =0x0064, + HCI_WRITE_LOCATION_DATA =0x0065, + HCI_READ_FLOW_CONTROL_MODE =0x0066, + HCI_WRITE_FLOW_CONTROL_MODE =0x0067, + HCI_READ_ENHANCE_TRANSMIT_POWER_LEVEL =0x0068, + HCI_READ_BEST_EFFORT_FLUSH_TIMEOUT =0x0069, + HCI_WRITE_BEST_EFFORT_FLUSH_TIMEOUT =0x006a, + HCI_SHORT_RANGE_MODE =0x006b +}SET_EVENT_MASK_COMMAND,*PSET_EVENT_MASK_COMMAND; + +//OGF 0x04 +#define OGF_INFORMATIONAL_PARAMETERS 0x04 +typedef enum _INFORMATIONAL_PARAMETERS +{ + HCI_READ_LOCAL_VERSION_INFORMATION =0x0001, + HCI_READ_LOCAL_SUPPORTED_COMMANDS =0x0002, + HCI_READ_LOCAL_SUPPORTED_FEATURES =0x0003, + HCI_READ_LOCAL_EXTENDED_FEATURES =0x0004, + HCI_READ_BUFFER_SIZE =0x0005, + HCI_READ_BD_ADDR =0x0009, + HCI_READ_DATA_BLOCK_SIZE =0x000a +} INFORMATIONAL_PARAMETERS,*PINFORMATIONAL_PARAMETERS; + +//OGF 0x05 +#define OGF_STATUS_PARAMETERS 0x05 +typedef enum _STATUS_PARAMETERS +{ + HCI_READ_FAILED_CONTACT_COUNTER =0x0001, + HCI_RESET_FAILED_CONTACT_COUNTER =0x0002, + HCI_READ_LINK_QUALITY =0x0003, + HCI_READ_RSSI =0x0005, + HCI_READ_AFH_CHANNEL_MAP =0x0006, + HCI_READ_CLOCK =0x0007, + HCI_READ_ENCRYPTION_KEY_SIZE =0x0008, + HCI_READ_LOCAL_AMP_INFO =0x0009, + HCI_READ_LOCAL_AMP_ASSOC =0x000a, + HCI_WRITE_REMOTE_AMP_ASSOC =0x000b +} STATUS_PARAMETERS,*PSTATUS_PARAMETERS; + +//OGF 0x06 +#define OGF_TESTING_COMMANDS 0x06 +typedef enum _TESTING_COMMANDS +{ + HCI_READ_LOOPBACK_MODE =0x0001, + HCI_WRITE_LOOPBACK_MODE =0x0002, + HCI_ENABLE_DEVICE_UNDER_TEST_MODE =0x0003, + HCI_WRITE_SIMPLE_PAIRING_DEBUG_MODE =0x0004, + HCI_ENABLE_AMP_RECEIVER_REPORTS =0x0007, + HCI_AMP_TEST_END =0x0008, + HCI_AMP_TEST_COMMAND =0x0009 +} TESTING_COMMANDS,*PTESTING_COMMANDS; + +//OGF 0x3f +#define OGF_EXTENSION 0X3f +typedef enum _HCI_EXTENSION_COMMANDS +{ + HCI_SET_ACL_LINK_DATA_FLOW_MODE =0x0010, + HCI_SET_ACL_LINK_STATUS =0x0020, + HCI_SET_SCO_LINK_STATUS =0x0030, + HCI_SET_RSSI_VALUE =0x0040, + HCI_SET_CURRENT_BLUETOOTH_STATUS =0x0041, + + //The following is for RTK8723 + HCI_EXTENSION_VERSION_NOTIFY =0x0100, + HCI_LINK_STATUS_NOTIFY =0x0101, + HCI_BT_OPERATION_NOTIFY =0x0102, + HCI_ENABLE_WIFI_SCAN_NOTIFY =0x0103, + + + //The following is for IVT + HCI_WIFI_CURRENT_CHANNEL =0x0300, + HCI_WIFI_CURRENT_BANDWIDTH =0x0301, + HCI_WIFI_CONNECTION_STATUS =0x0302, +} HCI_EXTENSION_COMMANDS,*PHCI_EXTENSION_COMMANDS; + +typedef 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 +} BT_SPEC,*PBT_SPEC; + +//============================================= +// The following is for BT 3.0 + HS EVENTS +//============================================= +typedef enum _HCI_EVENT +{ + HCI_EVENT_INQUIRY_COMPLETE =0x01, + HCI_EVENT_INQUIRY_RESULT =0x02, + HCI_EVENT_CONNECTION_COMPLETE =0x03, + HCI_EVENT_CONNECTION_REQUEST =0x04, + HCI_EVENT_DISCONNECTION_COMPLETE =0x05, + HCI_EVENT_AUTHENTICATION_COMPLETE =0x06, + HCI_EVENT_REMOTE_NAME_REQUEST_COMPLETE =0x07, + HCI_EVENT_ENCRYPTION_CHANGE =0x08, + HCI_EVENT_CHANGE_LINK_KEY_COMPLETE =0x09, + HCI_EVENT_MASTER_LINK_KEY_COMPLETE =0x0a, + HCI_EVENT_READ_REMOTE_SUPPORT_FEATURES_COMPLETE =0x0b, + HCI_EVENT_READ_REMOTE_VER_INFO_COMPLETE =0x0c, + HCI_EVENT_QOS_SETUP_COMPLETE =0x0d, + HCI_EVENT_COMMAND_COMPLETE =0x0e, + HCI_EVENT_COMMAND_STATUS =0x0f, + HCI_EVENT_HARDWARE_ERROR =0x10, + HCI_EVENT_FLUSH_OCCRUED =0x11, + HCI_EVENT_ROLE_CHANGE =0x12, + HCI_EVENT_NUMBER_OF_COMPLETE_PACKETS =0x13, + HCI_EVENT_MODE_CHANGE =0x14, + HCI_EVENT_RETURN_LINK_KEYS =0x15, + HCI_EVENT_PIN_CODE_REQUEST =0x16, + HCI_EVENT_LINK_KEY_REQUEST =0x17, + HCI_EVENT_LINK_KEY_NOTIFICATION =0x18, + HCI_EVENT_LOOPBACK_COMMAND =0x19, + HCI_EVENT_DATA_BUFFER_OVERFLOW =0x1a, + HCI_EVENT_MAX_SLOTS_CHANGE =0x1b, + HCI_EVENT_READ_CLOCK_OFFSET_COMPLETE =0x1c, + HCI_EVENT_CONNECT_PACKET_TYPE_CHANGE =0x1d, + HCI_EVENT_QOS_VIOLATION =0x1e, + HCI_EVENT_PAGE_SCAN_REPETITION_MODE_CHANGE =0x20, + HCI_EVENT_FLOW_SEPC_COMPLETE =0x21, + HCI_EVENT_INQUIRY_RESULT_WITH_RSSI =0x22, + HCI_EVENT_READ_REMOTE_EXT_FEATURES_COMPLETE =0x23, + HCI_EVENT_SYNC_CONNECT_COMPLETE =0x2c, + HCI_EVENT_SYNC_CONNECT_CHANGE =0x2d, + HCI_EVENT_SNIFFER_SUBRATING =0x2e, + HCI_EVENT_EXTENTED_INQUIRY_RESULT =0x2f, + HCI_EVENT_ENCRYPTION_KEY_REFLASH_COMPLETE =0x30, + HCI_EVENT_IO_CAPIBILITY_COMPLETE =0x31, + HCI_EVENT_IO_CAPIBILITY_RESPONSE =0x32, + HCI_EVENT_USER_CONFIRMTION_REQUEST =0x33, + HCI_EVENT_USER_PASSKEY_REQUEST =0x34, + HCI_EVENT_REMOTE_OOB_DATA_REQUEST =0x35, + HCI_EVENT_SIMPLE_PAIRING_COMPLETE =0x36, + HCI_EVENT_LINK_SUPERVISION_TIMEOUT_CHANGE =0x38, + HCI_EVENT_ENHANCED_FLUSH_COMPLETE =0x39, + HCI_EVENT_USER_PASSKEY_NOTIFICATION =0x3b, + HCI_EVENT_KEYPRESS_NOTIFICATION =0x3c, + HCI_EVENT_REMOTE_HOST_SUPPORT_FEATURES_NOTIFICATION =0x3d, + HCI_EVENT_PHY_LINK_COMPLETE =0x40, + HCI_EVENT_CHANNEL_SELECT =0x41, + HCI_EVENT_DISCONNECT_PHY_LINK_COMPLETE =0x42, + HCI_EVENT_PHY_LINK_LOSS_EARLY_WARNING =0x43, + HCI_EVENT_PHY_LINK_RECOVER =0x44, + HCI_EVENT_LOGICAL_LINK_COMPLETE =0x45, + HCI_EVENT_DISCONNECT_LOGICAL_LINK_COMPLETE =0x46, + HCI_EVENT_FLOW_SPEC_MODIFY_COMPLETE =0x47, + HCI_EVENT_NUM_OF_COMPLETE_DATA_BLOCKS =0x48, + HCI_EVENT_AMP_START_TEST =0x49, + HCI_EVENT_AMP_TEST_END =0x4a, + HCI_EVENT_AMP_RECEIVER_REPORT =0x4b, + HCI_EVENT_SHORT_RANGE_MODE_CHANGE_COMPLETE =0x4c, + HCI_EVENT_AMP_STATUS_CHANGE =0x4d, + HCI_EVENT_EXTENSION_RTK =0xfe, + HCI_EVENT_EXTENSION_MOTO =0xff, +}HCI_EVENT, *PHCI_EVENT; + +typedef enum _HCI_EXTENSION_EVENT_MOTO +{ + HCI_EVENT_GET_BT_RSSI =0x01, +} HCI_EXTENSION_EVENT_MOTO, *PHCI_EXTENSION_EVENT_MOTO; + +typedef enum _HCI_EXTENSION_EVENT_RTK +{ + HCI_EVENT_EXT_WIFI_SCAN_NOTIFY =0x01, +} HCI_EXTENSION_EVENT_RTK, *PHCI_EXTENSION_EVENT_RTK; + +typedef enum _HCI_EVENT_MASK_PAGE_2 +{ + EMP2_HCI_EVENT_PHY_LINK_COMPLETE =0x0000000000000001, + EMP2_HCI_EVENT_CHANNEL_SELECT =0x0000000000000002, + EMP2_HCI_EVENT_DISCONNECT_PHY_LINK_COMPLETE =0x0000000000000004, + EMP2_HCI_EVENT_PHY_LINK_LOSS_EARLY_WARNING =0x0000000000000008, + EMP2_HCI_EVENT_PHY_LINK_RECOVER =0x0000000000000010, + EMP2_HCI_EVENT_LOGICAL_LINK_COMPLETE =0x0000000000000020, + EMP2_HCI_EVENT_DISCONNECT_LOGICAL_LINK_COMPLETE =0x0000000000000040, + EMP2_HCI_EVENT_FLOW_SPEC_MODIFY_COMPLETE =0x0000000000000080, + EMP2_HCI_EVENT_NUM_OF_COMPLETE_DATA_BLOCKS =0x0000000000000100, + EMP2_HCI_EVENT_AMP_START_TEST =0x0000000000000200, + EMP2_HCI_EVENT_AMP_TEST_END =0x0000000000000400, + EMP2_HCI_EVENT_AMP_RECEIVER_REPORT =0x0000000000000800, + EMP2_HCI_EVENT_SHORT_RANGE_MODE_CHANGE_COMPLETE =0x0000000000001000, + EMP2_HCI_EVENT_AMP_STATUS_CHANGE =0x0000000000002000, +} HCI_EVENT_MASK_PAGE_2, *PHCI_EVENT_MASK_PAGE_2; + +typedef enum _HCI_STATE_MACHINE +{ + HCI_STATE_STARTING =0x01, + HCI_STATE_CONNECTING =0x02, + HCI_STATE_AUTHENTICATING =0x04, + HCI_STATE_CONNECTED =0x08, + HCI_STATE_DISCONNECTING =0x10, + HCI_STATE_DISCONNECTED =0x20 +} HCI_STATE_MACHINE, *PHCI_STATE_MACHINE; + +typedef enum _AMP_ASSOC_STRUCTURE_TYPE +{ + AMP_MAC_ADDR =0x01, + AMP_PREFERRED_CHANNEL_LIST =0x02, + AMP_CONNECTED_CHANNEL =0x03, + AMP_80211_PAL_CAP_LIST =0x04, + AMP_80211_PAL_VISION =0x05, + AMP_RESERVED_FOR_TESTING =0x33 +} AMP_ASSOC_STRUCTURE_TYPE, *PAMP_ASSOC_STRUCTURE_TYPE; + +typedef enum _AMP_BTAP_TYPE +{ + AMP_BTAP_NONE, + AMP_BTAP_CREATOR, + AMP_BTAP_JOINER +} AMP_BTAP_TYPE, *PAMP_BTAP_TYPE; + +typedef enum _HCI_STATE_WITH_CMD +{ + STATE_CMD_CREATE_PHY_LINK, + STATE_CMD_ACCEPT_PHY_LINK, + STATE_CMD_DISCONNECT_PHY_LINK, + STATE_CMD_CONNECT_ACCEPT_TIMEOUT, + STATE_CMD_MAC_START_COMPLETE, + STATE_CMD_MAC_START_FAILED, + STATE_CMD_MAC_CONNECT_COMPLETE, + STATE_CMD_MAC_CONNECT_FAILED, + STATE_CMD_MAC_DISCONNECT_INDICATE, + STATE_CMD_MAC_CONNECT_CANCEL_INDICATE, + STATE_CMD_4WAY_FAILED, + STATE_CMD_4WAY_SUCCESSED, + STATE_CMD_ENTER_STATE, + STATE_CMD_NO_SUCH_CMD, +} HCI_STATE_WITH_CMD, *PHCI_STATE_WITH_CMD; + +typedef enum _HCI_SERVICE_TYPE +{ + SERVICE_NO_TRAFFIC, + SERVICE_BEST_EFFORT, + SERVICE_GUARANTEE +} HCI_SERVICE_TYPE, *PHCI_SERVICE_TYPE; + +typedef enum _HCI_TRAFFIC_MODE +{ + TRAFFIC_MODE_BEST_EFFORT =0x00, + TRAFFIC_MODE_GUARANTEED_LATENCY =0x01, + TRAFFIC_MODE_GUARANTEED_BANDWIDTH =0x02, + TRAFFIC_MODE_GUARANTEED_LATENCY_AND_BANDWIDTH =0x03 +} HCI_TRAFFIC_MODE, *PHCI_TRAFFIC_MODE; + +#define HCIOPCODE(_OCF, _OGF) (_OGF<<10|_OCF) +#define HCIOPCODELOW(_OCF, _OGF) (u8)(HCIOPCODE(_OCF, _OGF)&0x00ff) +#define HCIOPCODEHIGHT(_OCF, _OGF) (u8)(HCIOPCODE(_OCF, _OGF)>>8) + +#define TWOBYTE_HIGHTBYTE(_DATA) (u8)(_DATA>>8) +#define TWOBYTE_LOWBYTE(_DATA) (u8)(_DATA) + +typedef enum _AMP_STATUS +{ + AMP_STATUS_AVA_PHY_PWR_DWN = 0x0, + AMP_STATUS_BT_USE_ONLY = 0x1, + AMP_STATUS_NO_CAPACITY_FOR_BT = 0x2, + AMP_STATUS_LOW_CAPACITY_FOR_BT = 0x3, + AMP_STATUS_MEDIUM_CAPACITY_FOR_BT = 0x4, + AMP_STATUS_HIGH_CAPACITY_FOR_BT = 0x5, + AMP_STATUS_FULL_CAPACITY_FOR_BT = 0x6 +} AMP_STATUS, *PAMP_STATUS; + +typedef enum +{ + Type_BT_4way1st = 0, + Type_BT_4way2nd = 1, + Type_BT_4way3rd = 2, + Type_BT_4way4th = 3, + Type_BT_unknow = 4 +} BT_WPAMsgType; + +typedef enum _BT_CONNECT_TYPE +{ + BT_CONNECT_AUTH_REQ =0x00, + BT_CONNECT_AUTH_RSP =0x01, + BT_CONNECT_ASOC_REQ =0x02, + BT_CONNECT_ASOC_RSP =0x03, + BT_DISCONNECT =0x04 +} BT_CONNECT_TYPE, *PBT_CONNECT_TYPE; + +typedef enum _BT_LL_SERVICE_TYPE +{ + BT_LL_BE = 0x01, + BT_LL_GU = 0x02 +} BT_LL_SERVICE_TYPE; + +typedef enum _BT_LL_FLOWSPEC +{ + BT_TX_BE_FS, //TX best effort flowspec + BT_RX_BE_FS, //RX best effort flowspec + BT_TX_GU_FS, //TX guaranteed latency flowspec + BT_RX_GU_FS, //RX guaranteed latency flowspec + BT_TX_BE_AGG_FS, //TX aggregated best effort flowspec + BT_RX_BE_AGG_FS, //RX aggregated best effort flowspec + BT_TX_GU_BW_FS, //TX guaranteed bandwidth flowspec + BT_RX_GU_BW_FS, //RX guaranteed bandwidth flowspec + BT_TX_GU_LARGE_FS, //TX guaranteed latency flowspec, for testing only + BT_RX_GU_LARGE_FS, //RX guaranteed latency flowspec, for testing only +} BT_LL_FLOWSPEC; + +typedef enum _BT_TRAFFIC_MODE +{ + BT_MOTOR_EXT_BE = 0x00, //Best Effort. Default. for HCRP, PAN, SDP, RFCOMM-based profiles like FTP,OPP, SPP, DUN, etc. + BT_MOTOR_EXT_GUL = 0x01, //Guaranteed Latency. This type of traffic is used e.g. for HID and AVRCP. + BT_MOTOR_EXT_GUB = 0X02, //Guaranteed Bandwidth. + BT_MOTOR_EXT_GULB = 0X03 //Guaranteed Latency and Bandwidth. for A2DP and VDP. +} BT_TRAFFIC_MODE; + +typedef enum _BT_TRAFFIC_MODE_PROFILE +{ + BT_PROFILE_NONE, + BT_PROFILE_A2DP, + BT_PROFILE_PAN, + BT_PROFILE_HID, + BT_PROFILE_SCO +} BT_TRAFFIC_MODE_PROFILE; + +typedef enum _BT_LINK_ROLE +{ + BT_LINK_MASTER = 0, + BT_LINK_SLAVE = 1 +} BT_LINK_ROLE; + +typedef enum _BT_STATE_WPA_AUTH +{ + STATE_WPA_AUTH_UNINITIALIZED, + STATE_WPA_AUTH_WAIT_PACKET_1, // Join + STATE_WPA_AUTH_WAIT_PACKET_2, // Creat + STATE_WPA_AUTH_WAIT_PACKET_3, + STATE_WPA_AUTH_WAIT_PACKET_4, + STATE_WPA_AUTH_SUCCESSED +} BT_STATE_WPA_AUTH, *PBT_STATE_WPA_AUTH; + +#define BT_WPA_AUTH_TIMEOUT_PERIOD 1000 +#define BTMaxWPAAuthReTransmitCoun 5 + +#define MAX_AMP_ASSOC_FRAG_LEN 248 +#define TOTAL_ALLOCIATE_ASSOC_LEN 1000 + +typedef struct _HCI_FLOW_SPEC +{ + u8 Identifier; + u8 ServiceType; + u16 MaximumSDUSize; + u32 SDUInterArrivalTime; + u32 AccessLatency; + u32 FlushTimeout; +} HCI_FLOW_SPEC, *PHCI_FLOW_SPEC; + +typedef struct _HCI_LOG_LINK_CMD_DATA +{ + u8 BtPhyLinkhandle; + u16 BtLogLinkhandle; + u8 BtTxFlowSpecID; + HCI_FLOW_SPEC Tx_Flow_Spec; + HCI_FLOW_SPEC Rx_Flow_Spec; + u32 TxPacketCount; + u32 BestEffortFlushTimeout; + + u8 bLLCompleteEventIsSet; + + u8 bLLCancelCMDIsSetandComplete; +} HCI_LOG_LINK_CMD_DATA, *PHCI_LOG_LINK_CMD_DATA; + +typedef struct _HCI_PHY_LINK_CMD_DATA +{ + //Physical_Link_Handle + u8 BtPhyLinkhandle; + + u16 LinkSuperversionTimeout; + + //u16 SuperTimeOutCnt; + + //Dedicated_AMP_Key_Length + u8 BtAMPKeyLen; + //Dedicated_AMP_Key_Type + u8 BtAMPKeyType; + //Dedicated_AMP_Key + u8 BtAMPKey[PMK_LEN]; +} HCI_PHY_LINK_CMD_DATA, *PHCI_PHY_LINK_CMD_DATA; + +typedef struct _AMP_ASSOC_STRUCTURE +{ + //TYPE ID + u8 TypeID; + //Length + u16 Length; + //Value + u8 Data[1]; +} AMP_ASSOC_STRUCTURE, *PAMP_ASSOC_STRUCTURE; + +typedef struct _AMP_PREF_CHNL_REGULATORY +{ + u8 reXId; + u8 regulatoryClass; + u8 coverageClass; +} AMP_PREF_CHNL_REGULATORY, *PAMP_PREF_CHNL_REGULATORY; + +typedef struct _AMP_ASSOC_CMD_DATA +{ + //Physical_Link_Handle + u8 BtPhyLinkhandle; + //Length_So_Far + u16 LenSoFar; + + u16 MaxRemoteASSOCLen; + //AMP_ASSOC_Remaining_Length + u16 AMPAssocRemLen; + //AMP_ASSOC_fragment + void *AMPAssocfragment; +} AMP_ASSOC_CMD_DATA, *PAMP_ASSOC_CMD_DATA; + +typedef struct _HCI_LINK_INFO +{ + u16 ConnectHandle; + u8 IncomingTrafficMode; + u8 OutgoingTrafficMode; + u8 BTProfile; + u8 BTCoreSpec; + s8 BT_RSSI; + u8 TrafficProfile; + u8 linkRole; +} HCI_LINK_INFO, *PHCI_LINK_INFO; + +typedef struct _HCI_EXT_CONFIG +{ + HCI_LINK_INFO linkInfo[MAX_BT_ASOC_ENTRY_NUM]; + u8 btOperationCode; + u16 CurrentConnectHandle; + u8 CurrentIncomingTrafficMode; + u8 CurrentOutgoingTrafficMode; + s8 MIN_BT_RSSI; + u8 NumberOfHandle; + u8 NumberOfSCO; + u8 CurrentBTStatus; + u16 HCIExtensionVer; + + //Bt coexist related + u8 btProfileCase; + u8 btProfileAction; + u8 bManualControl; + u8 bBTBusy; + u8 bBTA2DPBusy; + u8 bEnableWifiScanNotify; + + u8 bHoldForBtOperation; + u32 bHoldPeriodCnt; + +}HCI_EXT_CONFIG, *PHCI_EXT_CONFIG; + +typedef struct _HCI_ACL_PACKET_DATA +{ + u16 ACLDataPacketLen; + u8 SyncDataPacketLen; + u16 TotalNumACLDataPackets; + u16 TotalSyncNumDataPackets; +} HCI_ACL_PACKET_DATA, *PHCI_ACL_PACKET_DATA; + +typedef struct _HCI_PHY_LINK_BSS_INFO +{ + u16 bdCap; // capability information + + // Qos related. Added by Annie, 2005-11-01. +// BSS_QOS BssQos; // not implement yet + +} HCI_PHY_LINK_BSS_INFO, *PHCI_PHY_LINK_BSS_INFO; + +typedef struct _PACKET_IRP_HCICMD_DATA +{ + u16 OCF:10; + u16 OGF:6; + u8 Length; + u8 Data[1]; +} PACKET_IRP_HCICMD_DATA, *PPACKET_IRP_HCICMD_DATA; + +typedef struct _BT_ASOC_ENTRY +{ + u8 bUsed; + u8 mAssoc; + u8 b4waySuccess; + u8 Bssid[6]; + HCI_PHY_LINK_CMD_DATA PhyLinkCmdData; + + HCI_LOG_LINK_CMD_DATA LogLinkCmdData[MAX_LOGICAL_LINK_NUM]; + + HCI_ACL_PACKET_DATA ACLPacketsData; + + AMP_ASSOC_CMD_DATA AmpAsocCmdData; + OCTET_STRING BTSsid; + u8 BTSsidBuf[33]; + + HCI_STATUS PhyLinkDisconnectReason; + + u8 bSendSupervisionPacket; + //u8 CurrentSuervisionPacketSendNum; + //u8 LastSuervisionPacketSendNum; + u32 NoRxPktCnt; + //Is Creator or Joiner + AMP_BTAP_TYPE AMPRole; + + //BT current state + u8 BtCurrentState; + //BT next state + u8 BtNextState; + + u8 bNeedPhysLinkCompleteEvent; + + HCI_STATUS PhysLinkCompleteStatus; + + u8 BTRemoteMACAddr[6]; + + u32 BTCapability; + + u8 SyncDataPacketLen; + + u16 TotalSyncNumDataPackets; + u16 TotalNumACLDataPackets; + + u8 ShortRangeMode; + + u8 PTK[PTK_LEN_TKIP]; + u8 GTK[GTK_LEN]; + u8 ANonce[KEY_NONCE_LEN]; + u8 SNonce[KEY_NONCE_LEN]; + u64 KeyReplayCounter; + u8 WPAAuthReplayCount; + u8 AESKeyBuf[AESCCMP_BLK_SIZE_TOTAL]; + u8 PMK[PMK_LEN]; + BT_STATE_WPA_AUTH BTWPAAuthState; + s32 UndecoratedSmoothedPWDB; + + // Add for HW security !! + u8 HwCAMIndex; // Cam index + u8 bPeerQosSta; + + u32 rxSuvpPktCnt; +}BT_ASOC_ENTRY, *PBT_ASOC_ENTRY; + +typedef struct _BT_TRAFFIC_STATISTICS +{ + u8 bTxBusyTraffic; + u8 bRxBusyTraffic; + u8 bIdle; + u32 TxPktCntInPeriod; + u32 RxPktCntInPeriod; + u64 TxPktLenInPeriod; + u64 RxPktLenInPeriod; +} BT_TRAFFIC_STATISTICS, *PBT_TRAFFIC_STATISTICS; + +typedef struct _BT_MGNT +{ + u8 bBTConnectInProgress; + u8 bLogLinkInProgress; + u8 bPhyLinkInProgress; + u8 bPhyLinkInProgressStartLL; + u8 BtCurrentPhyLinkhandle; + u16 BtCurrentLogLinkhandle; + u8 CurrentConnectEntryNum; + u8 DisconnectEntryNum; + u8 CurrentBTConnectionCnt; + BT_CONNECT_TYPE BTCurrentConnectType; + BT_CONNECT_TYPE BTReceiveConnectPkt; + u8 BTAuthCount; + u8 BTAsocCount; + u8 bStartSendSupervisionPkt; + u8 BtOperationOn; + u8 BTNeedAMPStatusChg; + u8 JoinerNeedSendAuth; + HCI_PHY_LINK_BSS_INFO bssDesc; + HCI_EXT_CONFIG ExtConfig; + u8 bNeedNotifyAMPNoCap; + u8 bCreateSpportQos; + u8 bSupportProfile; + u8 BTChannel; + u8 CheckChnlIsSuit; + u8 bBtScan; + u8 btLogoTest; +} BT_MGNT, *PBT_MGNT; + +typedef struct _BT_HCI_DBG_INFO +{ + u32 hciCmdCnt; + u32 hciCmdCntUnknown; + u32 hciCmdCntCreatePhyLink; + u32 hciCmdCntAcceptPhyLink; + u32 hciCmdCntDisconnectPhyLink; + u32 hciCmdPhyLinkStatus; + u32 hciCmdCntCreateLogLink; + u32 hciCmdCntAcceptLogLink; + u32 hciCmdCntDisconnectLogLink; + u32 hciCmdCntReadLocalAmpAssoc; + u32 hciCmdCntWriteRemoteAmpAssoc; + u32 hciCmdCntSetAclLinkStatus; + u32 hciCmdCntSetScoLinkStatus; + u32 hciCmdCntExtensionVersionNotify; + u32 hciCmdCntLinkStatusNotify; +} BT_HCI_DBG_INFO, *PBT_HCI_DBG_INFO; + +typedef struct _BT_IRP_DBG_INFO +{ + u32 irpMJCreate; + // Io Control + u32 irpIoControl; + u32 irpIoCtrlHciCmd; + u32 irpIoCtrlHciEvent; + u32 irpIoCtrlHciTxData; + u32 irpIoCtrlHciRxData; + u32 irpIoCtrlUnknown; + + u32 irpIoCtrlHciTxData1s; +} BT_IRP_DBG_INFO, *PBT_IRP_DBG_INFO; + +typedef struct _BT_PACKET_DBG_INFO +{ + u32 btPktTxProbReq; + u32 btPktRxProbReq; + u32 btPktRxProbReqFail; + u32 btPktTxProbRsp; + u32 btPktRxProbRsp; + u32 btPktTxAuth; + u32 btPktRxAuth; + u32 btPktRxAuthButDrop; + u32 btPktTxAssocReq; + u32 btPktRxAssocReq; + u32 btPktRxAssocReqButDrop; + u32 btPktTxAssocRsp; + u32 btPktRxAssocRsp; + u32 btPktTxDisassoc; + u32 btPktRxDisassoc; + u32 btPktRxDeauth; + u32 btPktTx4way1st; + u32 btPktRx4way1st; + u32 btPktTx4way2nd; + u32 btPktRx4way2nd; + u32 btPktTx4way3rd; + u32 btPktRx4way3rd; + u32 btPktTx4way4th; + u32 btPktRx4way4th; + u32 btPktTxLinkSuperReq; + u32 btPktRxLinkSuperReq; + u32 btPktTxLinkSuperRsp; + u32 btPktRxLinkSuperRsp; + u32 btPktTxData; + u32 btPktRxData; +} BT_PACKET_DBG_INFO, *PBT_PACKET_DBG_INFO; + +typedef struct _BT_DBG +{ + u8 dbgCtrl; + u32 dbgProfile; + BT_HCI_DBG_INFO dbgHciInfo; + BT_IRP_DBG_INFO dbgIrpInfo; + BT_PACKET_DBG_INFO dbgBtPkt; +} BT_DBG, *PBT_DBG; + +typedef struct _BT_HCI_INFO +{ + //802.11 Pal version specifier + u8 BTPalVersion; + u16 BTPalCompanyID; + u16 BTPalsubversion; + + //Connected channel list + u16 BTConnectChnlListLen; + u8 BTConnectChnllist[64]; + + //Fail contact counter + u16 FailContactCount; + + //Event mask + u64 BTEventMask; + u64 BTEventMaskPage2; + + //timeout var + u16 ConnAcceptTimeout; + u16 LogicalAcceptTimeout; + u16 PageTimeout; + + u8 LocationDomainAware; + u16 LocationDomain; + u8 LocationDomainOptions; + u8 LocationOptions; + + u8 FlowControlMode; + + //Preferred channel list + u16 BtPreChnlListLen; + u8 BTPreChnllist[64]; + + u16 enFlush_LLH; //enhanced flush handle + u16 FLTO_LLH; //enhanced flush handle + + //========================================== + //Test command only. + u8 bInTestMode; + u8 bTestIsEnd; + u8 bTestNeedReport; + u8 TestScenario; + u8 TestReportInterval; + u8 TestCtrType; + u32 TestEventType; + u16 TestNumOfFrame; + u16 TestNumOfErrFrame; + u16 TestNumOfBits; + u16 TestNumOfErrBits; + //========================================== +} BT_HCI_INFO, *PBT_HCI_INFO; + +typedef struct _BT_TRAFFIC +{ + // Add for check replay data + u8 LastRxUniFragNum; + u16 LastRxUniSeqNum; + + //s32 EntryMaxUndecoratedSmoothedPWDB; + //s32 EntryMinUndecoratedSmoothedPWDB; + + BT_TRAFFIC_STATISTICS Bt30TrafficStatistics; +} BT_TRAFFIC, *PBT_TRAFFIC; + +#define RT_WORK_ITEM _workitem +#define RT_THREAD _thread_hdl_ + +typedef struct _BT_SECURITY +{ + // WPA auth state + // May need to remove to BTSecInfo ... + //BT_STATE_WPA_AUTH BTWPAAuthState; + //u8 PMK[PMK_LEN]; + RT_TIMER BTWPAAuthTimer; + OCTET_STRING RSNIE; + u8 RSNIEBuf[MAXRSNIELEN]; + u8 bRegNoEncrypt; + u8 bUsedHwEncrypt; // It is define by OS version !! +} BT_SECURITY, *PBT_SECURITY; + +typedef struct _BT30Info +{ + PADAPTER padapter; + BT_ASOC_ENTRY BtAsocEntry[MAX_BT_ASOC_ENTRY_NUM]; + BT_MGNT BtMgnt; + BT_DBG BtDbg; + BT_HCI_INFO BtHciInfo; + BT_TRAFFIC BtTraffic; + BT_SECURITY BtSec; + +#if(BT_THREAD == 0) + RT_WORK_ITEM HCICmdWorkItem; + RT_TIMER BTHCICmdTimer; +#endif +#if (SENDTXMEHTOD==0) + RT_WORK_ITEM HCISendACLDataWorkItem; + RT_TIMER BTHCISendAclDataTimer; +#elif(SENDTXMEHTOD==2) + RT_THREAD BTTxThread; +#endif + RT_WORK_ITEM BTPsDisableWorkItem; + RT_WORK_ITEM BTConnectWorkItem; + RT_TIMER BTHCIDiscardAclDataTimer; + RT_TIMER BTHCIJoinTimeoutTimer; + RT_TIMER BTTestSendPacketTimer; + RT_TIMER BTSupervisionPktTimer; + RT_TIMER BTDisconnectPhyLinkTimer; + RT_TIMER BTBeaconTimer; + u8 BTBeaconTmrOn; + + RT_TIMER BTPsDisableTimer; + RT_TIMER BTAuthTimeoutTimer; + RT_TIMER BTAsocTimeoutTimer; + + PVOID pBtChnlList; +}BT30Info, *PBT30Info; + +typedef struct _PACKET_IRP_ACL_DATA +{ + u16 Handle:12; + u16 PB_Flag:2; + u16 BC_Flag:2; + u16 Length; + u8 Data[1]; +} PACKET_IRP_ACL_DATA, *PPACKET_IRP_ACL_DATA; + +typedef struct _PACKET_IRP_HCIEVENT_DATA +{ + u8 EventCode; + u8 Length; + u8 Data[1]; +} PACKET_IRP_HCIEVENT_DATA, *PPACKET_IRP_HCIEVENT_DATA; + +typedef struct _COMMON_TRIPLE +{ + u8 byte_1st; + u8 byte_2nd; + u8 byte_3rd; +} COMMON_TRIPLE, *PCOMMON_TRIPLE; + +#define COUNTRY_STR_LEN 3 // country string len=3 + +#define LOCAL_PMK 0 + +typedef enum _HCI_WIFI_CONNECT_STATUS +{ + HCI_WIFI_NOT_CONNECTED =0x0, + HCI_WIFI_CONNECTED =0x1, + HCI_WIFI_CONNECT_IN_PROGRESS =0x2, +} HCI_WIFI_CONNECT_STATUS, *PHCI_WIFI_CONNECT_STATUS; + +typedef enum _HCI_EXT_BT_OPERATION +{ + HCI_BT_OP_NONE = 0x0, + HCI_BT_OP_INQUIRY_START = 0x1, + HCI_BT_OP_INQUIRY_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 +} HCI_EXT_BT_OPERATION, *PHCI_EXT_BT_OPERATION; + +//====================================== +// Function proto type +//====================================== +#define RT_LIST_ENTRY _list +typedef struct _BTData_ENTRY +{ + RT_LIST_ENTRY List; + void *pDataBlock; +} BTData_ENTRY, *PBTData_ENTRY; + +#define BTHCI_SM_WITH_INFO(_Adapter, _StateToEnter, _StateCmd, _EntryNum) \ +{ \ + RTPRINT(FIOCTL, IOCTL_STATE, ("[BT state change] caused by ""%s"", line=%d\n", __FUNCTION__, __LINE__)); \ + BTHCI_StateMachine(_Adapter, _StateToEnter, _StateCmd, _EntryNum);\ +} + +void BTHCI_EventParse(PADAPTER padapter, void *pEvntData, u32 dataLen); +#define BT_EventParse BTHCI_EventParse +u8 BTHCI_HsConnectionEstablished(PADAPTER padapter); +void BTHCI_UpdateBTProfileRTKToMoto(PADAPTER padapter); +void BTHCI_WifiScanNotify(PADAPTER padapter, u8 scanType); +void BTHCI_StateMachine(PADAPTER padapter, u8 StateToEnter, HCI_STATE_WITH_CMD StateCmd, u8 EntryNum); +void BTHCI_DisconnectPeer(PADAPTER padapter, u8 EntryNum); +void BTHCI_EventNumOfCompletedDataBlocks(PADAPTER padapter); +void BTHCI_EventAMPStatusChange(PADAPTER padapter, u8 AMP_Status); +void BTHCI_DisconnectAll(PADAPTER padapter); +HCI_STATUS BTHCI_HandleHCICMD(PADAPTER padapter, PPACKET_IRP_HCICMD_DATA pHciCmd); + +// ===== End of sync from SD7 driver COMMON/bt_hci.h ===== +#endif // __BT_HCI_C__ + +#ifdef __HALBTC87231ANT_C__ // HAL/BTCoexist/HalBtc87231Ant.h +// ===== Below this line is sync from SD7 driver HAL/BTCoexist/HalBtc87231Ant.h ===== +#define GET_BT_INFO(padapter) (&GET_HAL_DATA(padapter)->BtInfo) + +#define BTC_FOR_SCAN_START 1 +#define BTC_FOR_SCAN_FINISH 0 + +#define BT_TXRX_CNT_THRES_1 1200 +#define BT_TXRX_CNT_THRES_2 1400 +#define BT_TXRX_CNT_THRES_3 3000 +#define BT_TXRX_CNT_LEVEL_0 0 // < 1200 +#define BT_TXRX_CNT_LEVEL_1 1 // >= 1200 && < 1400 +#define BT_TXRX_CNT_LEVEL_2 2 // >= 1400 +#define BT_TXRX_CNT_LEVEL_3 3 // >= 3000 + +typedef enum _BT_STATE_1ANT{ + 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_ACL_INQ_OR_PAG = 7, + BT_INFO_STATE_MAX = 8 +} BT_STATE_1ANT, *PBT_STATE_1ANT; + +typedef struct _BTDM_8723A_1ANT +{ + u8 prePsTdma; + u8 curPsTdma; + u8 psTdmaDuAdjType; + u8 bPrePsTdmaOn; + u8 bCurPsTdmaOn; + u8 preWifiPara; + u8 curWifiPara; + u8 preCoexWifiCon; + u8 curCoexWifiCon; + u8 wifiRssiThresh; + + u32 psTdmaMonitorCnt; + u32 psTdmaGlobalCnt; + + //DurationAdjust For SCO + u32 psTdmaMonitorCntForSCO; + u8 psTdmaDuAdjTypeForSCO; + u8 RSSI_WiFi_Last; + u8 RSSI_BT_Last; + + u8 bWiFiHalt; + u8 bRAChanged; +} BTDM_8723A_1ANT, *PBTDM_8723A_1ANT; + +void BTDM_1AntSignalCompensation(PADAPTER padapter, u8 *rssi_wifi, u8 *rssi_bt); +void BTDM_1AntForDhcp(PADAPTER padapter); +void BTDM_1AntBtCoexist8723A(PADAPTER padapter); + +// ===== End of sync from SD7 driver HAL/BTCoexist/HalBtc87231Ant.h ===== +#endif // __HALBTC87231ANT_C__ + +#ifdef __HALBTC87232ANT_C__ // HAL/BTCoexist/HalBtc87232Ant.h +// ===== Below this line is sync from SD7 driver HAL/BTCoexist/HalBtc87232Ant.h ===== +typedef enum _BT_2ANT_BT_STATUS{ + BT_2ANT_BT_STATUS_IDLE = 0x0, + BT_2ANT_BT_STATUS_CONNECTED_IDLE = 0x1, + BT_2ANT_BT_STATUS_NON_IDLE = 0x2, + BT_2ANT_BT_STATUS_MAX +}BT_2ANT_BT_STATUS,*PBT_2ANT_BT_STATUS; + +typedef enum _BT_2ANT_COEX_ALGO{ + BT_2ANT_COEX_ALGO_UNDEFINED = 0x0, + BT_2ANT_COEX_ALGO_SCO = 0x1, + BT_2ANT_COEX_ALGO_HID = 0x2, + BT_2ANT_COEX_ALGO_A2DP = 0x3, + BT_2ANT_COEX_ALGO_PANEDR = 0x4, + BT_2ANT_COEX_ALGO_PANHS = 0x5, + BT_2ANT_COEX_ALGO_PANEDR_A2DP = 0x6, + BT_2ANT_COEX_ALGO_PANEDR_HID = 0x7, + BT_2ANT_COEX_ALGO_HID_A2DP_PANEDR = 0x8, + BT_2ANT_COEX_ALGO_HID_A2DP = 0x9, + BT_2ANT_COEX_ALGO_HID_A2DP_PANHS = 0xA, + BT_2ANT_COEX_ALGO_MAX = 0xB, +}BT_2ANT_COEX_ALGO,*PBT_2ANT_COEX_ALGO; + +typedef struct _BTDM_8723A_2ANT +{ + u8 bPreDecBtPwr; + u8 bCurDecBtPwr; + + u8 preWlanActHi; + u8 curWlanActHi; + u8 preWlanActLo; + u8 curWlanActLo; + + u8 preFwDacSwingLvl; + u8 curFwDacSwingLvl; + + u8 bPreRfRxLpfShrink; + u8 bCurRfRxLpfShrink; + + u8 bPreLowPenaltyRa; + u8 bCurLowPenaltyRa; + + u8 preBtRetryIndex; + u8 curBtRetryIndex; + + u8 bPreDacSwingOn; + u32 preDacSwingLvl; + u8 bCurDacSwingOn; + u32 curDacSwingLvl; + + u8 bPreAdcBackOff; + u8 bCurAdcBackOff; + + u8 bPreAgcTableEn; + u8 bCurAgcTableEn; + + u32 preVal0x6c0; + u32 curVal0x6c0; + u32 preVal0x6c8; + u32 curVal0x6c8; + u8 preVal0x6cc; + u8 curVal0x6cc; + + u8 bCurIgnoreWlanAct; + u8 bPreIgnoreWlanAct; + + u8 prePsTdma; + u8 curPsTdma; + u8 psTdmaDuAdjType; + u8 bPrePsTdmaOn; + u8 bCurPsTdmaOn; + + u8 preAlgorithm; + u8 curAlgorithm; + u8 bResetTdmaAdjust; + + + u8 btStatus; +} BTDM_8723A_2ANT, *PBTDM_8723A_2ANT; +void BTDM_2AntBtCoexist8723A(PADAPTER padapter); +// ===== End of sync from SD7 driver HAL/BTCoexist/HalBtc87232Ant.h ===== +#endif // __HALBTC87232ANT_C__ + +#ifdef __HALBTC8723_C__ // HAL/BTCoexist/HalBtc8723.h +// ===== Below this line is sync from SD7 driver HAL/BTCoexist/HalBtc8723.h ===== + +#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 + +#define BT_RSSI_LEVEL_H 0 +#define BT_RSSI_LEVEL_M 1 +#define BT_RSSI_LEVEL_L 2 + +// 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 BT_INFO_ACL BIT(0) +#define BT_INFO_SCO BIT(1) +#define BT_INFO_INQ_PAG BIT(2) +#define BT_INFO_ACL_BUSY BIT(3) +#define BT_INFO_SCO_BUSY BIT(4) +#define BT_INFO_HID BIT(5) +#define BT_INFO_A2DP BIT(6) +#define BT_INFO_FTP BIT(7) + + + +typedef struct _BT_COEXIST_8723A +{ + u32 highPriorityTx; + u32 highPriorityRx; + u32 lowPriorityTx; + u32 lowPriorityRx; + u8 btRssi; + u8 TotalAntNum; + u8 bC2hBtInfoSupport; + u8 c2hBtInfo; + u8 c2hBtInfoOriginal; + u8 prec2hBtInfo; // for 1Ant + u8 bC2hBtInquiryPage; + u64 btInqPageStartTime; // for 2Ant + u8 c2hBtProfile; // for 1Ant + u8 btRetryCnt; + u8 btInfoExt; + u8 bC2hBtInfoReqSent; + u8 bForceFwBtInfo; + u8 bForceA2dpSink; +// u8 bForceLps; +// u8 bBtPwrSaveMode; + BTDM_8723A_2ANT btdm2Ant; + BTDM_8723A_1ANT btdm1Ant; +} BT_COEXIST_8723A, *PBT_COEXIST_8723A; + +void BTDM_SetFwChnlInfo(PADAPTER padapter, RT_MEDIA_STATUS mstatus); +u8 BTDM_IsWifiConnectionExist(PADAPTER padapter); +void BTDM_SetFw3a(PADAPTER padapter, u8 byte1, u8 byte2, u8 byte3, u8 byte4, u8 byte5); +void BTDM_QueryBtInformation(PADAPTER padapter); +void BTDM_SetSwRfRxLpfCorner(PADAPTER padapter, u8 type); +void BTDM_SetSwPenaltyTxRateAdaptive(PADAPTER padapter, u8 raType); +void BTDM_SetFwDecBtPwr(PADAPTER padapter, u8 bDecBtPwr); +u8 BTDM_BtProfileSupport(PADAPTER padapter); +void BTDM_LpsLeave(PADAPTER padapter); +u8 BTDM_1Ant8723A(PADAPTER padapter); +#define BT_1Ant BTDM_1Ant8723A + +// ===== End of sync from SD7 driver HAL/BTCoexist/HalBtc8723.h ===== +#endif // __HALBTC8723_C__ + +#ifdef __HALBTCCSR1ANT_C__ // HAL/BTCoexist/HalBtcCsr1Ant.h +// ===== Below this line is sync from SD7 driver HAL/BTCoexist/HalBtcCsr1Ant.h ===== + +enum BT_A2DP_INDEX{ + BT_A2DP_INDEX0 =0, // 32,12; the most critical for BT + BT_A2DP_INDEX1, // 12,24 + BT_A2DP_INDEX2, // 0,0 + BT_A2DP_INDEX_MAX +}; + +#define BT_A2DP_STATE_NOT_ENTERED 0 +#define BT_A2DP_STATE_DETECTING 1 +#define BT_A2DP_STATE_DETECTED 2 + +#define BTDM_ANT_BT_IDLE 0 +#define BTDM_ANT_WIFI 1 +#define BTDM_ANT_BT 2 + + +void BTDM_SingleAnt(PADAPTER padapter, u8 bSingleAntOn, u8 bInterruptOn, u8 bMultiNAVOn); +void BTDM_CheckBTIdleChange1Ant(PADAPTER padapter); + +// ===== End of sync from SD7 driver HAL/BTCoexist/HalBtcCsr1Ant.h ===== +#endif // __HALBTCCSR1ANT_C__ + +#ifdef __HALBTCCSR2ANT_C__ // HAL/BTCoexist/HalBtcCsr2Ant.h +// ===== Below this line is sync from SD7 driver HAL/BTCoexist/HalBtcCsr2Ant.h ===== + +//=========================================== +// For old core stack before v251 +//=========================================== +#define BT_RSSI_STATE_NORMAL_POWER BIT0 +#define BT_RSSI_STATE_AMDPU_OFF BIT1 +#define BT_RSSI_STATE_SPECIAL_LOW BIT2 +#define BT_RSSI_STATE_BG_EDCA_LOW BIT3 +#define BT_RSSI_STATE_TXPOWER_LOW BIT4 + +#define BT_DACSWING_OFF 0 +#define BT_DACSWING_M4 1 +#define BT_DACSWING_M7 2 +#define BT_DACSWING_M10 3 + +void BTDM_DiminishWiFi(PADAPTER Adapter, u8 bDACOn, u8 bInterruptOn, u8 DACSwingLevel, u8 bNAVOn); + +// ===== End of sync from SD7 driver HAL/BTCoexist/HalBtcCsr2Ant.h ===== +#endif // __HALBTCCSR2ANT_C__ + +#ifdef __HALBTCOEXIST_C__ // HAL/BTCoexist/HalBtCoexist.h + +// HEADER/TypeDef.h +#define MAX_FW_SUPPORT_MACID_NUM 64 + +// ===== Below this line is sync from SD7 driver HAL/BTCoexist/HalBtCoexist.h ===== + +#define FW_VER_BT_REG 62 +#define FW_VER_BT_REG1 74 +#define REG_BT_ACTIVE 0x444 +#define REG_BT_STATE 0x448 +#define REG_BT_POLLING1 0x44c +#define REG_BT_POLLING 0x700 + +#define REG_BT_ACTIVE_OLD 0x488 +#define REG_BT_STATE_OLD 0x48c +#define REG_BT_POLLING_OLD 0x490 + +// The reg define is for 8723 +#define REG_HIGH_PRIORITY_TXRX 0x770 +#define REG_LOW_PRIORITY_TXRX 0x774 + +#define BT_FW_COEX_THRESH_TOL 6 +#define BT_FW_COEX_THRESH_20 20 +#define BT_FW_COEX_THRESH_23 23 +#define BT_FW_COEX_THRESH_25 25 +#define BT_FW_COEX_THRESH_30 30 +#define BT_FW_COEX_THRESH_35 35 +#define BT_FW_COEX_THRESH_40 40 +#define BT_FW_COEX_THRESH_45 45 +#define BT_FW_COEX_THRESH_47 47 +#define BT_FW_COEX_THRESH_50 50 +#define BT_FW_COEX_THRESH_55 55 +#define BT_FW_COEX_THRESH_65 65 + +#define BT_COEX_STATE_BT30 BIT(0) +#define BT_COEX_STATE_WIFI_HT20 BIT(1) +#define BT_COEX_STATE_WIFI_HT40 BIT(2) +#define BT_COEX_STATE_WIFI_LEGACY BIT(3) + +#define BT_COEX_STATE_WIFI_RSSI_LOW BIT(4) +#define BT_COEX_STATE_WIFI_RSSI_MEDIUM BIT(5) +#define BT_COEX_STATE_WIFI_RSSI_HIGH BIT(6) +#define BT_COEX_STATE_DEC_BT_POWER BIT(7) + +#define BT_COEX_STATE_WIFI_IDLE BIT(8) +#define BT_COEX_STATE_WIFI_UPLINK BIT(9) +#define BT_COEX_STATE_WIFI_DOWNLINK BIT(10) + +#define BT_COEX_STATE_BT_INQ_PAGE BIT(11) +#define BT_COEX_STATE_BT_IDLE BIT(12) +#define BT_COEX_STATE_BT_UPLINK BIT(13) +#define BT_COEX_STATE_BT_DOWNLINK BIT(14) +//=========================================== +// Todo: Remove these definitions +#define BT_COEX_STATE_BT_PAN_IDLE BIT(15) +#define BT_COEX_STATE_BT_PAN_UPLINK BIT(16) +#define BT_COEX_STATE_BT_PAN_DOWNLINK BIT(17) +#define BT_COEX_STATE_BT_A2DP_IDLE BIT(18) +//=========================================== +#define BT_COEX_STATE_BT_RSSI_LOW BIT(19) + +#define BT_COEX_STATE_PROFILE_HID BIT(20) +#define BT_COEX_STATE_PROFILE_A2DP BIT(21) +#define BT_COEX_STATE_PROFILE_PAN BIT(22) +#define BT_COEX_STATE_PROFILE_SCO BIT(23) + +#define BT_COEX_STATE_WIFI_RSSI_1_LOW BIT(24) +#define BT_COEX_STATE_WIFI_RSSI_1_MEDIUM BIT(25) +#define BT_COEX_STATE_WIFI_RSSI_1_HIGH BIT(26) + +#define BT_COEX_STATE_WIFI_RSSI_BEACON_LOW BIT(27) +#define BT_COEX_STATE_WIFI_RSSI_BEACON_MEDIUM BIT(28) +#define BT_COEX_STATE_WIFI_RSSI_BEACON_HIGH BIT(29) + + +#define BT_COEX_STATE_BTINFO_COMMON BIT30 +#define BT_COEX_STATE_BTINFO_B_HID_SCOESCO BIT31 +#define BT_COEX_STATE_BTINFO_B_FTP_A2DP BIT32 + +#define BT_COEX_STATE_BT_CNT_LEVEL_0 BIT33 +#define BT_COEX_STATE_BT_CNT_LEVEL_1 BIT34 +#define BT_COEX_STATE_BT_CNT_LEVEL_2 BIT35 +#define BT_COEX_STATE_BT_CNT_LEVEL_3 BIT36 + +#define BT_RSSI_STATE_HIGH 0 +#define BT_RSSI_STATE_MEDIUM 1 +#define BT_RSSI_STATE_LOW 2 +#define BT_RSSI_STATE_STAY_HIGH 3 +#define BT_RSSI_STATE_STAY_MEDIUM 4 +#define BT_RSSI_STATE_STAY_LOW 5 + + + +#define BT_AGCTABLE_OFF 0 +#define BT_AGCTABLE_ON 1 + +#define BT_BB_BACKOFF_OFF 0 +#define BT_BB_BACKOFF_ON 1 + +#define BT_FW_NAV_OFF 0 +#define BT_FW_NAV_ON 1 + + +#define BT_COEX_MECH_NONE 0 +#define BT_COEX_MECH_SCO 1 +#define BT_COEX_MECH_HID 2 +#define BT_COEX_MECH_A2DP 3 +#define BT_COEX_MECH_PAN 4 +#define BT_COEX_MECH_HID_A2DP 5 +#define BT_COEX_MECH_HID_PAN 6 +#define BT_COEX_MECH_PAN_A2DP 7 +#define BT_COEX_MECH_HID_SCO_ESCO 8 +#define BT_COEX_MECH_FTP_A2DP 9 +#define BT_COEX_MECH_COMMON 10 +#define BT_COEX_MECH_MAX 11 +//=========================================== +// BT Dbg Ctrl +//=========================================== +#define BT_DBG_PROFILE_NONE 0 +#define BT_DBG_PROFILE_SCO 1 +#define BT_DBG_PROFILE_HID 2 +#define BT_DBG_PROFILE_A2DP 3 +#define BT_DBG_PROFILE_PAN 4 +#define BT_DBG_PROFILE_HID_A2DP 5 +#define BT_DBG_PROFILE_HID_PAN 6 +#define BT_DBG_PROFILE_PAN_A2DP 7 +#define BT_DBG_PROFILE_MAX 9 +//=========================================== + +typedef struct _BT_COEXIST_STR +{ + u8 BluetoothCoexist; + u8 BT_Ant_Num; + u8 BT_CoexistType; + u8 BT_Ant_isolation; //0:good, 1:bad + u8 BT_RadioSharedType; + u32 Ratio_Tx; + u32 Ratio_PRI; + u8 bInitlized; + u32 BtRfRegOrigin1E; + u32 BtRfRegOrigin1F; + u8 bBTBusyTraffic; + u8 bBTTrafficModeSet; + u8 bBTNonTrafficModeSet; + BT_TRAFFIC_STATISTICS BT21TrafficStatistics; + u64 CurrentState; + u64 PreviousState; + u8 preRssiState; + u8 preRssiState1; + u8 preRssiStateBeacon; + u8 bFWCoexistAllOff; + u8 bSWCoexistAllOff; + u8 bHWCoexistAllOff; + u8 bBalanceOn; + u8 bSingleAntOn; + u8 bInterruptOn; + u8 bMultiNAVOn; + u8 PreWLANActH; + u8 PreWLANActL; + u8 WLANActH; + u8 WLANActL; + u8 A2DPState; + u8 AntennaState; + u32 lastBtEdca; + u16 last_aggr_num; + u8 bEDCAInitialized; + u8 exec_cnt; + u8 b8723aAgcTableOn; + u8 b92DAgcTableOn; + BT_COEXIST_8723A halCoex8723; + u8 btActiveZeroCnt; + u8 bCurBtDisabled; + u8 bPreBtDisabled; + u8 bNeedToRoamForBtDisableEnable; + u8 fw3aVal[5]; +}BT_COEXIST_STR, *PBT_COEXIST_STR; + + +void BTDM_CheckAntSelMode(PADAPTER padapter); +void BTDM_FwC2hBtRssi(PADAPTER padapter, u8 *tmpBuf); +#define BT_FwC2hBtRssi BTDM_FwC2hBtRssi +void BTDM_FwC2hBtInfo(PADAPTER padapter, u8 *tmpBuf, u8 length); +#define BT_FwC2hBtInfo BTDM_FwC2hBtInfo +void BTDM_DisplayBtCoexInfo(PADAPTER padapter); +#define BT_DisplayBtCoexInfo BTDM_DisplayBtCoexInfo +void BTDM_RejectAPAggregatedPacket(PADAPTER padapter, u8 bReject); +u8 BTDM_IsHT40(PADAPTER padapter); +u8 BTDM_Legacy(PADAPTER padapter); +void BTDM_CheckWiFiState(PADAPTER padapter); +s32 BTDM_GetRxSS(PADAPTER padapter); +u8 BTDM_CheckCoexBcnRssiState(PADAPTER padapter, u8 levelNum, u8 RssiThresh, u8 RssiThresh1); +u8 BTDM_CheckCoexRSSIState1(PADAPTER padapter, u8 levelNum, u8 RssiThresh, u8 RssiThresh1); +u8 BTDM_CheckCoexRSSIState(PADAPTER padapter, u8 levelNum, u8 RssiThresh, u8 RssiThresh1); +u8 BTDM_DisableEDCATurbo(PADAPTER padapter); +#define BT_DisableEDCATurbo BTDM_DisableEDCATurbo +void BTDM_Balance(PADAPTER padapter, u8 bBalanceOn, u8 ms0, u8 ms1); +void BTDM_AGCTable(PADAPTER padapter, u8 type); +void BTDM_BBBackOffLevel(PADAPTER padapter, u8 type); +void BTDM_FWCoexAllOff(PADAPTER padapter); +void BTDM_SWCoexAllOff(PADAPTER padapter); +void BTDM_HWCoexAllOff(PADAPTER padapter); +void BTDM_CoexAllOff(PADAPTER padapter); +void BTDM_TurnOffBtCoexistBeforeEnterIPS(PADAPTER padapter); +void BTDM_SignalCompensation(PADAPTER padapter, u8 *rssi_wifi, u8 *rssi_bt); +void BTDM_Coexist(PADAPTER padapter); +#define BT_CoexistMechanism BTDM_Coexist +void BTDM_UpdateCoexState(PADAPTER padapter); +u8 BTDM_IsSameCoexistState(PADAPTER padapter); +void BTDM_PWDBMonitor(PADAPTER padapter); +u8 BTDM_IsBTBusy(PADAPTER padapter); +#define BT_IsBtBusy BTDM_IsBTBusy +u8 BTDM_IsWifiBusy(PADAPTER padapter); +u8 BTDM_IsCoexistStateChanged(PADAPTER padapter); +u8 BTDM_IsWifiUplink(PADAPTER padapter); +u8 BTDM_IsWifiDownlink(PADAPTER padapter); +u8 BTDM_IsBTHSMode(PADAPTER padapter); +u8 BTDM_IsBTUplink(PADAPTER padapter); +u8 BTDM_IsBTDownlink(PADAPTER padapter); +void BTDM_AdjustForBtOperation(PADAPTER padapter); +void BTDM_ForHalt(PADAPTER padapter); +void BTDM_WifiScanNotify(PADAPTER padapter, u8 scanType); +void BTDM_WifiAssociateNotify(PADAPTER padapter, u8 action); +void BTDM_MediaStatusNotify(PADAPTER padapter, RT_MEDIA_STATUS mstatus); +void BTDM_ForDhcp(PADAPTER padapter); +void BTDM_ResetActionProfileState(PADAPTER padapter); +void BTDM_SetBtCoexCurrAntNum(PADAPTER padapter, u8 antNum); +#define BT_SetBtCoexCurrAntNum BTDM_SetBtCoexCurrAntNum +u8 BTDM_IsActionSCO(PADAPTER padapter); +u8 BTDM_IsActionHID(PADAPTER padapter); +u8 BTDM_IsActionA2DP(PADAPTER padapter); +u8 BTDM_IsActionPAN(PADAPTER padapter); +u8 BTDM_IsActionHIDA2DP(PADAPTER padapter); +u8 BTDM_IsActionHIDPAN(PADAPTER padapter); +u8 BTDM_IsActionPANA2DP(PADAPTER padapter); +u8 BTDM_IsBtDisabled(PADAPTER padapter); +#define BT_IsBtDisabled BTDM_IsBtDisabled +u32 BTDM_BtTxRxCounterH(PADAPTER padapter); +u32 BTDM_BtTxRxCounterL(PADAPTER padapter); + +// ===== End of sync from SD7 driver HAL/BTCoexist/HalBtCoexist.h ===== +#endif // __HALBTCOEXIST_C__ + +#ifdef __HALBT_C__ // HAL/HalBT.h +// ===== Below this line is sync from SD7 driver HAL/HalBT.h ===== + +#define RTS_CTS_NO_LEN_LIMIT 0 + +u8 HALBT_GetPGAntNum(PADAPTER padapter); +#define BT_GetPGAntNum HALBT_GetPGAntNum +void HALBT_SetKey(PADAPTER padapter, u8 EntryNum); +void HALBT_RemoveKey(PADAPTER padapter, u8 EntryNum); +void HALBT_InitBTVars8723A(PADAPTER padapter); +#define HALBT_InitHalVars HALBT_InitBTVars8723A +#define BT_InitHalVars HALBT_InitHalVars +u8 HALBT_IsBTExist(PADAPTER padapter); +#define BT_IsBtExist HALBT_IsBTExist +u8 HALBT_BTChipType(PADAPTER padapter); +void HALBT_InitHwConfig(PADAPTER padapter); +#define BT_InitHwConfig HALBT_InitHwConfig +void HALBT_SetRtsCtsNoLenLimit(PADAPTER padapter); + +// ===== End of sync from SD7 driver HAL/HalBT.c ===== +#endif // __HALBT_C__ + +#define _bt_dbg_off_ 0 +#define _bt_dbg_on_ 1 + +extern u32 BTCoexDbgLevel; + + + +#endif // __RTL8723A_BT_COEXIST_H__ + |