cregit-Linux how code gets into the kernel

Release 4.8 drivers/staging/rtl8723au/include/rtl8723a_bt-coexist.h

/******************************************************************************
 *
 * 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.
 *
 ******************************************************************************/
#ifndef __RTL8723A_BT_COEXIST_H__

#define __RTL8723A_BT_COEXIST_H__

#include <drv_types.h>
#include "odm_precomp.h"


/*  HEADER/PlatformDef.h */

enum rt_media_status {
	
RT_MEDIA_DISCONNECT	= 0,
	
RT_MEDIA_CONNECT	= 1
};

/*  ===== Below this line is sync from SD7 driver COMMON/BT.h ===== */


#define	BT_TMP_BUF_SIZE		100

void BT_SignalCompensation(struct rtw_adapter *padapter,
			   u8 *rssi_wifi, u8 *rssi_bt);
void BT_HaltProcess(struct rtw_adapter *padapter);
void BT_LpsLeave(struct rtw_adapter *padapter);



#define	BT_HsConnectionEstablished(Adapter)		false
/*  ===== End of sync from SD7 driver COMMON/BT.h ===== */

/*  HEADER/SecurityType.h */

#define TKIP_ENC_KEY_POS		32		
/* KEK_LEN+KEK_LEN) */

#define MAXRSNIELEN				256

/*  COMMON/Protocol802_11.h */
/*  */
/*       802.11 Management frame Status Code field */
/*  */

struct octet_string {
	
u8		*Octet;
	
u16		Length;
};


/*  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 */

struct chnl_txpower_triple {
	
u8 FirstChnl;
	
u8 NumChnls;
	
s8 MaxTxPowerInDbm;
};


/*  ===== Below this line is sync from SD7 driver COMMON/bt_hci.h ===== */
/*  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 */


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 */
};

/*  */
/*  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 LINK_CONTROL_COMMANDS			0x01

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
};

/* OGF 0x02 */

#define HOLD_MODE_COMMAND				0x02

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
};

/* OGF 0x03 */

#define OGF_SET_EVENT_MASK_COMMAND			0x03

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
};

/* OGF 0x04 */

#define OGF_INFORMATIONAL_PARAMETERS			0x04

enum informational_params {
	
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
};

/* OGF 0x05 */

#define OGF_STATUS_PARAMETERS				0x05

enum status_params {
	
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
};

/* OGF 0x06 */

#define OGF_TESTING_COMMANDS				0x06

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
};

/* OGF 0x3f */

#define OGF_EXTENSION					0X3f

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,
};


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
};

/*  The following is for BT 3.0 + HS EVENTS */

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,
};


enum hci_extension_event_moto {
	
HCI_EVENT_GET_BT_RSSI				= 0x01,
};


enum hci_extension_event {
	
HCI_EVENT_EXT_WIFI_SCAN_NOTIFY			= 0x01,
};


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,
};


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
};


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
};


enum amp_btap_type {
	
AMP_BTAP_NONE,
	
AMP_BTAP_CREATOR,
	
AMP_BTAP_JOINER
};


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,
};


enum hci_service_type {
	
SERVICE_NO_TRAFFIC,
	
SERVICE_BEST_EFFORT,
	
SERVICE_GUARANTEE
};


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
};


#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)


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
};


enum bt_wpa_msg_type {
	
Type_BT_4way1st	= 0,
	
Type_BT_4way2nd	= 1,
	
Type_BT_4way3rd	= 2,
	
Type_BT_4way4th	= 3,
	
Type_BT_unknow	= 4
};


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
};


enum bt_ll_service_type {
	
BT_LL_BE = 0x01,
	
BT_LL_GU = 0x02
};


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 */
};


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. */
};


enum bt_traffic_mode_profile {
	
BT_PROFILE_NONE,
	
BT_PROFILE_A2DP,
	
BT_PROFILE_PAN,
	
BT_PROFILE_HID,
	
BT_PROFILE_SCO
};


enum bt_link_role {
	
BT_LINK_MASTER	= 0,
	
BT_LINK_SLAVE	= 1
};


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
};


#define BT_WPA_AUTH_TIMEOUT_PERIOD		1000

#define BTMaxWPAAuthReTransmitCoun		5


#define MAX_AMP_ASSOC_FRAG_LEN			248

#define TOTAL_ALLOCIATE_ASSOC_LEN			1000


struct hci_flow_spec {
	
u8				Identifier;
	
u8				ServiceType;
	
u16				MaximumSDUSize;
	
u32				SDUInterArrivalTime;
	
u32				AccessLatency;
	
u32				FlushTimeout;
};


struct hci_log_link_cmd_data {
	
u8				BtPhyLinkhandle;
	
u16				BtLogLinkhandle;
	
u8				BtTxFlowSpecID;
	
struct hci_flow_spec		Tx_Flow_Spec;
	
struct hci_flow_spec		Rx_Flow_Spec;
	
u32				TxPacketCount;
	
u32				BestEffortFlushTimeout;

	
u8				bLLCompleteEventIsSet;

	
u8				bLLCancelCMDIsSetandComplete;
};


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];
};


struct amp_assoc_structure {
	/* TYPE ID */
	
u8				TypeID;
	/* Length */
	
u16				Length;
	/* Value */
	
u8				Data[1];
};


struct amp_pref_chnl_regulatory {
	
u8				reXId;
	
u8				regulatoryClass;
	
u8				coverageClass;
};


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;
};


struct hci_link_info {
	
u16				ConnectHandle;
	
u8				IncomingTrafficMode;
	
u8				OutgoingTrafficMode;
	
u8				BTProfile;
	
u8				BTCoreSpec;
	
s8				BT_RSSI;
	
u8				TrafficProfile;
	
u8				linkRole;
};


struct hci_ext_config {
	
struct 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;
};


struct hci_acl_packet_data {
	
u16				ACLDataPacketLen;
	
u8				SyncDataPacketLen;
	
u16				TotalNumACLDataPackets;
	
u16				TotalSyncNumDataPackets;
};


struct hci_phy_link_bss_info {
	
u16				bdCap;	/*  capability information */
};


struct packet_irp_hcicmd_data {
	
u16		OCF:10;
	
u16		OGF:6;
	
u8		Length;
	
u8		Data[20];
};


struct bt_asoc_entry {
	
u8						bUsed;
	
u8						mAssoc;
	
u8						b4waySuccess;
	
u8						Bssid[6];
	
struct hci_phy_link_cmd_data		PhyLinkCmdData;

	
struct hci_log_link_cmd_data		LogLinkCmdData[MAX_LOGICAL_LINK_NUM];

	
struct hci_acl_packet_data			ACLPacketsData;

	
struct amp_assoc_cmd_data		AmpAsocCmdData;
	
struct octet_string				BTSsid;
	
u8						BTSsidBuf[33];

	
enum hci_status						PhyLinkDisconnectReason;

	
u8						bSendSupervisionPacket;
	/* u8                                           CurrentSuervisionPacketSendNum; */
	/* u8                                           LastSuervisionPacketSendNum; */
	
u32						NoRxPktCnt;
	/* Is Creator or Joiner */
	
enum amp_btap_type				AMPRole;

	/* BT current state */
	
u8						BtCurrentState;
	/* BT next state */
	
u8						BtNextState;

	
u8						bNeedPhysLinkCompleteEvent;

	
enum 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];
	
enum bt_state_wpa_auth			BTWPAAuthState;
	
s32						UndecoratedSmoothedPWDB;

	/*  Add for HW security !! */
	
u8						HwCAMIndex;  /*  Cam index */
	
u8						bPeerQosSta;

	
u32						rxSuvpPktCnt;
};


struct bt_traffic_statistics {
	
u8				bTxBusyTraffic;
	
u8				bRxBusyTraffic;
	
u8				bIdle;
	
u32				TxPktCntInPeriod;
	
u32				RxPktCntInPeriod;
	
u64				TxPktLenInPeriod;
	
u64				RxPktLenInPeriod;
};


struct bt_mgnt {
	
u8				bBTConnectInProgress;
	
u8				bLogLinkInProgress;
	
u8				bPhyLinkInProgress;
	
u8				bPhyLinkInProgressStartLL;
	
u8				BtCurrentPhyLinkhandle;
	
u16				BtCurrentLogLinkhandle;
	
u8				CurrentConnectEntryNum;
	
u8				DisconnectEntryNum;
	
u8				CurrentBTConnectionCnt;
	
enum bt_connect_type		BTCurrentConnectType;
	
enum bt_connect_type		BTReceiveConnectPkt;
	
u8				BTAuthCount;
	
u8				BTAsocCount;
	
u8				bStartSendSupervisionPkt;
	
u8				BtOperationOn;
	
u8				BTNeedAMPStatusChg;
	
u8				JoinerNeedSendAuth;
	
struct hci_phy_link_bss_info	bssDesc;
	
struct hci_ext_config		ExtConfig;
	
u8				bNeedNotifyAMPNoCap;
	
u8				bCreateSpportQos;
	
u8				bSupportProfile;
	
u8				BTChannel;
	
u8				CheckChnlIsSuit;
	
u8				bBtScan;
	
u8				btLogoTest;
};


struct bt_hci_dgb_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;
};


struct bt_irp_dgb_info {
	
u32				irpMJCreate;
	/*  Io Control */
	
u32				irpIoControl;
	
u32				irpIoCtrlHciCmd;
	
u32				irpIoCtrlHciEvent;
	
u32				irpIoCtrlHciTxData;
	
u32				irpIoCtrlHciRxData;
	
u32				irpIoCtrlUnknown;

	
u32				irpIoCtrlHciTxData1s;
};


struct bt_packet_dgb_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;
};


struct bt_dgb {
	
u8				dbgCtrl;
	
u32				dbgProfile;
	
struct bt_hci_dgb_info		dbgHciInfo;
	
struct bt_irp_dgb_info		dbgIrpInfo;
	
struct bt_packet_dgb_info	dbgBtPkt;
};


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;
	/*  */
};


struct bt_traffic {
	/*  Add for check replay data */
	
u8					LastRxUniFragNum;
	
u16					LastRxUniSeqNum;

	/* s32                                  EntryMaxUndecoratedSmoothedPWDB; */
	/* s32                                  EntryMinUndecoratedSmoothedPWDB; */

	
struct bt_traffic_statistics		Bt30TrafficStatistics;
};


#define RT_WORK_ITEM struct work_struct


struct bt_security {
	/*  WPA auth state
         *  May need to remove to BTSecInfo ... 
         * enum bt_state_wpa_auth BTWPAAuthState;
         */
	
struct octet_string	RSNIE;
	
u8			RSNIEBuf[MAXRSNIELEN];
	
u8			bRegNoEncrypt;
	
u8			bUsedHwEncrypt;
};


struct bt_30info {
	
struct rtw_adapter	*padapter;
	
struct bt_asoc_entry		BtAsocEntry[MAX_BT_ASOC_ENTRY_NUM];
	
struct bt_mgnt				BtMgnt;
	
struct bt_dgb				BtDbg;
	
struct bt_hci_info			BtHciInfo;
	
struct bt_traffic			BtTraffic;
	
struct bt_security			BtSec;
	
RT_WORK_ITEM		HCICmdWorkItem;
	
struct timer_list BTHCICmdTimer;
	
RT_WORK_ITEM		BTPsDisableWorkItem;
	
RT_WORK_ITEM		BTConnectWorkItem;
	
struct timer_list BTHCIDiscardAclDataTimer;
	
struct timer_list BTHCIJoinTimeoutTimer;
	
struct timer_list BTTestSendPacketTimer;
	
struct timer_list BTDisconnectPhyLinkTimer;
	
struct timer_list BTBeaconTimer;
	
u8				BTBeaconTmrOn;

	
struct timer_list BTPsDisableTimer;

	
void *				pBtChnlList;
};


struct packet_irp_acl_data {
	
u16		Handle:12;
	
u16		PB_Flag:2;
	
u16		BC_Flag:2;
	
u16		Length;
	
u8		Data[1];
};


struct packet_irp_hcievent_data {
	
u8		EventCode;
	
u8		Length;
	
u8		Data[20];
};


struct common_triple {
	
u8 byte_1st;
	
u8 byte_2nd;
	
u8 byte_3rd;
};


#define COUNTRY_STR_LEN		3	
/*  country string len = 3 */


#define LOCAL_PMK	0


enum hci_wifi_connect_status {
	
HCI_WIFI_NOT_CONNECTED			= 0x0,
	
HCI_WIFI_CONNECTED			= 0x1,
	
HCI_WIFI_CONNECT_IN_PROGRESS		= 0x2,
};


enum hci_ext_bp_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
};


#define BTHCI_SM_WITH_INFO(_Adapter, _StateToEnter, _StateCmd, _EntryNum)	\
{                                                                               \
        RTPRINT(FIOCTL, IOCTL_STATE, ("[BT state change] caused by ""%s"", line =%d\n", __func__, __LINE__));                                                   \
        BTHCI_StateMachine(_Adapter, _StateToEnter, _StateCmd, _EntryNum);\
}

void BTHCI_EventParse(struct rtw_adapter *padapter, void *pEvntData,
		      u32 dataLen);

#define BT_EventParse BTHCI_EventParse
u8 BTHCI_HsConnectionEstablished(struct rtw_adapter *padapter);
void BTHCI_UpdateBTProfileRTKToMoto(struct rtw_adapter *padapter);
void BTHCI_WifiScanNotify(struct rtw_adapter *padapter, u8 scanType);
void BTHCI_StateMachine(struct rtw_adapter *padapter, u8 StateToEnter,
			enum hci_state_with_cmd StateCmd, u8 EntryNum);
void BTHCI_DisconnectPeer(struct rtw_adapter *padapter, u8 EntryNum);
void BTHCI_EventNumOfCompletedDataBlocks(struct rtw_adapter *padapter);
void BTHCI_EventAMPStatusChange(struct rtw_adapter *padapter, u8 AMP_Status);
void BTHCI_DisconnectAll(struct rtw_adapter *padapter);
enum hci_status BTHCI_HandleHCICMD(struct rtw_adapter *padapter,
				   struct packet_irp_hcicmd_data *pHciCmd);

/*  ===== End of sync from SD7 driver COMMON/bt_hci.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 */


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
};


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;
};

void BTDM_1AntSignalCompensation(struct rtw_adapter *padapter,
				 u8 *rssi_wifi, u8 *rssi_bt);
void BTDM_1AntForDhcp(struct rtw_adapter *padapter);
void BTDM_1AntBtCoexist8723A(struct rtw_adapter *padapter);

/*  ===== End of sync from SD7 driver HAL/BTCoexist/HalBtc87231Ant.h ===== */

/*  ===== Below this line is sync from SD7 driver HAL/BTCoexist/HalBtc87232Ant.h ===== */

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
};


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,
};


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;
};

void BTDM_2AntBtCoexist8723A(struct rtw_adapter *padapter);
/*  ===== End of sync from SD7 driver HAL/BTCoexist/HalBtc87232Ant.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)




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;
	
unsigned long				btInqPageStartTime; /*  for 2Ant */
	
u8					c2hBtProfile; /*  for 1Ant */
	
u8					btRetryCnt;
	
u8					btInfoExt;
	
u8					bC2hBtInfoReqSent;
	
u8					bForceFwBtInfo;
	
u8					bForceA2dpSink;
	
struct btdm_8723a_2ant			btdm2Ant;
	
struct btdm_8723a_1ant			btdm1Ant;
};

void BTDM_SetFwChnlInfo(struct rtw_adapter *padapter,
			enum rt_media_status mstatus);
u8 BTDM_IsWifiConnectionExist(struct rtw_adapter *padapter);
void BTDM_SetFw3a(struct rtw_adapter *padapter, u8 byte1, u8 byte2, u8 byte3,
		  u8 byte4, u8 byte5);
void BTDM_QueryBtInformation(struct rtw_adapter *padapter);
void BTDM_SetSwRfRxLpfCorner(struct rtw_adapter *padapter, u8 type);
void BTDM_SetSwPenaltyTxRateAdaptive(struct rtw_adapter *padapter, u8 raType);
void BTDM_SetFwDecBtPwr(struct rtw_adapter *padapter, u8 bDecBtPwr);
u8 BTDM_BtProfileSupport(struct rtw_adapter *padapter);
void BTDM_LpsLeave(struct rtw_adapter *padapter);

/*  ===== End of sync from SD7 driver HAL/BTCoexist/HalBtc8723.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(struct rtw_adapter *padapter, u8 bSingleAntOn,
		    u8 bInterruptOn, u8 bMultiNAVOn);
void BTDM_CheckBTIdleChange1Ant(struct rtw_adapter *padapter);

/*  ===== End of sync from SD7 driver HAL/BTCoexist/HalBtcCsr1Ant.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	BIT(0)

#define BT_RSSI_STATE_AMDPU_OFF		BIT(1)

#define BT_RSSI_STATE_SPECIAL_LOW	BIT(2)

#define BT_RSSI_STATE_BG_EDCA_LOW	BIT(3)

#define BT_RSSI_STATE_TXPOWER_LOW	BIT(4)


#define	BT_DACSWING_OFF				0

#define	BT_DACSWING_M4				1

#define	BT_DACSWING_M7				2

#define	BT_DACSWING_M10				3

void BTDM_DiminishWiFi(struct rtw_adapter *Adapter, u8 bDACOn, u8 bInterruptOn,
		       u8 DACSwingLevel, u8 bNAVOn);

/*  ===== End of sync from SD7 driver HAL/BTCoexist/HalBtcCsr2Ant.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		BIT(30)

#define BT_COEX_STATE_BTINFO_B_HID_SCOESCO	BIT(31)

#define BT_COEX_STATE_BTINFO_B_FTP_A2DP		BIT(32)


#define BT_COEX_STATE_BT_CNT_LEVEL_0		BIT(33)

#define BT_COEX_STATE_BT_CNT_LEVEL_1		BIT(34)

#define BT_COEX_STATE_BT_CNT_LEVEL_2		BIT(35)

#define BT_COEX_STATE_BT_CNT_LEVEL_3		BIT(36)


#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


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;
	
struct 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;
	
struct bt_coexist_8723a	halCoex8723;
	
u8			btActiveZeroCnt;
	
u8			bCurBtDisabled;
	
u8			bPreBtDisabled;
	
u8			bNeedToRoamForBtDisableEnable;
	
u8			fw3aVal[5];
};

void BTDM_CheckAntSelMode(struct rtw_adapter *padapter);
void BTDM_FwC2hBtRssi(struct rtw_adapter *padapter, u8 *tmpBuf);

#define BT_FwC2hBtRssi BTDM_FwC2hBtRssi
void BTDM_DisplayBtCoexInfo(struct rtw_adapter *padapter);

#define BT_DisplayBtCoexInfo BTDM_DisplayBtCoexInfo
void BTDM_RejectAPAggregatedPacket(struct rtw_adapter *padapter, u8 bReject);
u8 BTDM_IsHT40(struct rtw_adapter *padapter);
u8 BTDM_Legacy(struct rtw_adapter *padapter);
void BTDM_CheckWiFiState(struct rtw_adapter *padapter);
s32 BTDM_GetRxSS(struct rtw_adapter *padapter);
u8 BTDM_CheckCoexBcnRssiState(struct rtw_adapter *padapter, u8 levelNum,
			      u8 RssiThresh, u8 RssiThresh1);
u8 BTDM_CheckCoexRSSIState1(struct rtw_adapter *padapter, u8 levelNum,
			    u8 RssiThresh, u8 RssiThresh1);
u8 BTDM_CheckCoexRSSIState(struct rtw_adapter *padapter, u8 levelNum,
			   u8 RssiThresh, u8 RssiThresh1);
void BTDM_Balance(struct rtw_adapter *padapter, u8 bBalanceOn, u8 ms0, u8 ms1);
void BTDM_AGCTable(struct rtw_adapter *padapter, u8 type);
void BTDM_BBBackOffLevel(struct rtw_adapter *padapter, u8 type);
void BTDM_FWCoexAllOff(struct rtw_adapter *padapter);
void BTDM_SWCoexAllOff(struct rtw_adapter *padapter);
void BTDM_HWCoexAllOff(struct rtw_adapter *padapter);
void BTDM_CoexAllOff(struct rtw_adapter *padapter);
void BTDM_TurnOffBtCoexistBeforeEnterIPS(struct rtw_adapter *padapter);
void BTDM_SignalCompensation(struct rtw_adapter *padapter, u8 *rssi_wifi,
			     u8 *rssi_bt);
void BTDM_UpdateCoexState(struct rtw_adapter *padapter);
u8 BTDM_IsSameCoexistState(struct rtw_adapter *padapter);
void BTDM_PWDBMonitor(struct rtw_adapter *padapter);
u8 BTDM_IsBTBusy(struct rtw_adapter *padapter);

#define BT_IsBtBusy BTDM_IsBTBusy
u8 BTDM_IsWifiBusy(struct rtw_adapter *padapter);
u8 BTDM_IsCoexistStateChanged(struct rtw_adapter *padapter);
u8 BTDM_IsWifiUplink(struct rtw_adapter *padapter);
u8 BTDM_IsWifiDownlink(struct rtw_adapter *padapter);
u8 BTDM_IsBTHSMode(struct rtw_adapter *padapter);
u8 BTDM_IsBTUplink(struct rtw_adapter *padapter);
u8 BTDM_IsBTDownlink(struct rtw_adapter *padapter);
void BTDM_AdjustForBtOperation(struct rtw_adapter *padapter);
void BTDM_ForHalt(struct rtw_adapter *padapter);
void BTDM_WifiScanNotify(struct rtw_adapter *padapter, u8 scanType);
void BTDM_WifiAssociateNotify(struct rtw_adapter *padapter, u8 action);
void BTDM_MediaStatusNotify(struct rtw_adapter *padapter,
			    enum rt_media_status mstatus);
void BTDM_ForDhcp(struct rtw_adapter *padapter);
void BTDM_ResetActionProfileState(struct rtw_adapter *padapter);
void BTDM_SetBtCoexCurrAntNum(struct rtw_adapter *padapter, u8 antNum);

#define BT_SetBtCoexCurrAntNum BTDM_SetBtCoexCurrAntNum
u8 BTDM_IsActionSCO(struct rtw_adapter *padapter);
u8 BTDM_IsActionHID(struct rtw_adapter *padapter);
u8 BTDM_IsActionA2DP(struct rtw_adapter *padapter);
u8 BTDM_IsActionPAN(struct rtw_adapter *padapter);
u8 BTDM_IsActionHIDA2DP(struct rtw_adapter *padapter);
u8 BTDM_IsActionHIDPAN(struct rtw_adapter *padapter);
u8 BTDM_IsActionPANA2DP(struct rtw_adapter *padapter);
u32 BTDM_BtTxRxCounterH(struct rtw_adapter *padapter);
u32 BTDM_BtTxRxCounterL(struct rtw_adapter *padapter);

/*  ===== End of sync from SD7 driver HAL/BTCoexist/HalBtCoexist.h ===== */

/*  ===== Below this line is sync from SD7 driver HAL/HalBT.h ===== */


#define RTS_CTS_NO_LEN_LIMIT	0

u8 HALBT_GetPGAntNum(struct rtw_adapter *padapter);

#define BT_GetPGAntNum HALBT_GetPGAntNum
void HALBT_SetKey(struct rtw_adapter *padapter, u8 EntryNum);
void HALBT_RemoveKey(struct rtw_adapter *padapter, u8 EntryNum);
u8 HALBT_IsBTExist(struct rtw_adapter *padapter);

#define BT_IsBtExist HALBT_IsBTExist
u8 HALBT_BTChipType(struct rtw_adapter *padapter);
void HALBT_SetRtsCtsNoLenLimit(struct rtw_adapter *padapter);

/*  ===== End of sync from SD7 driver HAL/HalBT.c ===== */


#define _bt_dbg_off_		0

#define _bt_dbg_on_		1

extern u32 BTCoexDbgLevel;



#endif /*  __RTL8723A_BT_COEXIST_H__ */

Overall Contributors

PersonTokensPropCommitsCommitProp
larry fingerlarry finger533199.76%250.00%
jes sorensenjes sorensen120.22%125.00%
joe perchesjoe perches10.02%125.00%
Total5344100.00%4100.00%
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.