]> git.karo-electronics.de Git - karo-tx-linux.git/blob - drivers/staging/rtl8723au/include/rtl8723a_bt-coexist.h
154bb477995334b4ef7bf438a0c6d23d244f1810
[karo-tx-linux.git] / drivers / staging / rtl8723au / include / rtl8723a_bt-coexist.h
1 /******************************************************************************
2  *
3  * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
4  *
5  * This program is free software; you can redistribute it and/or modify it
6  * under the terms of version 2 of the GNU General Public License as
7  * published by the Free Software Foundation.
8  *
9  * This program is distributed in the hope that it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12  * more details.
13  *
14  ******************************************************************************/
15 #ifndef __RTL8723A_BT_COEXIST_H__
16 #define __RTL8723A_BT_COEXIST_H__
17
18 #include <drv_types.h>
19 #include "odm_precomp.h"
20
21
22 /*  HEADER/PlatformDef.h */
23 enum rt_media_status {
24         RT_MEDIA_DISCONNECT     = 0,
25         RT_MEDIA_CONNECT        = 1
26 };
27
28 /*  ===== Below this line is sync from SD7 driver COMMON/BT.h ===== */
29
30 #define BT_TMP_BUF_SIZE         100
31
32 void BT_SignalCompensation(struct rtw_adapter *padapter,
33                            u8 *rssi_wifi, u8 *rssi_bt);
34 void BT_WifiScanNotify(struct rtw_adapter *padapter, u8 scanType);
35 void BT_WifiAssociateNotify(struct rtw_adapter *padapter, u8 action);
36 void BT_WifiMediaStatusNotify(struct rtw_adapter *padapter,
37                               enum rt_media_status mstatus);
38 void BT_SpecialPacketNotify(struct rtw_adapter * padapter);
39 void BT_HaltProcess(struct rtw_adapter * padapter);
40 void BT_LpsLeave(struct rtw_adapter * padapter);
41
42
43 #define BT_HsConnectionEstablished(Adapter)             false
44 /*  ===== End of sync from SD7 driver COMMON/BT.h ===== */
45
46 /*  HEADER/SecurityType.h */
47 #define TKIP_ENC_KEY_POS                32              /* KEK_LEN+KEK_LEN) */
48 #define MAXRSNIELEN                             256
49
50 /*  COMMON/Protocol802_11.h */
51 /*  */
52 /*       802.11 Management frame Status Code field */
53 /*  */
54 struct octet_string {
55         u8              *Octet;
56         u16             Length;
57 };
58
59
60 /*  AES_CCMP specific */
61 enum {
62         AESCCMP_BLK_SIZE                =   16,     /*  # octets in an AES block */
63         AESCCMP_MAX_PACKET              =   4*512,  /*  largest packet size */
64         AESCCMP_N_RESERVED              =   0,      /*  reserved nonce octet value */
65         AESCCMP_A_DATA                  =   0x40,   /*  the Adata bit in the flags */
66         AESCCMP_M_SHIFT                 =   3,      /*  how much to shift the 3-bit M field */
67         AESCCMP_L_SHIFT                 =   0,      /*  how much to shift the 3-bit L field */
68         AESCCMP_L_SIZE                  =   2,       /*  size of the l(m) length field (in octets) */
69         AESCCMP_OFFSET_SC               =       22,
70         AESCCMP_OFFSET_DURATION =       4,
71         AESCCMP_OFFSET_A2               =       10,
72         AESCCMP_OFFSET_A4               =       24,
73         AESCCMP_QC_TID_MASK             =       0x0f,
74         AESCCMP_BLK_SIZE_TOTAL  =   16*16,     /*  Added by Annie for CKIP AES MIC BSOD, 2006-08-17. */
75                                                                                         /*  16*8 < 4*60  Resove to 16*16 */
76 };
77
78 /*  Key Length */
79 #define PMK_LEN                         32
80 #define PTK_LEN_TKIP                    64
81 #define GTK_LEN                         32
82 #define KEY_NONCE_LEN                   32
83
84
85 /*  COMMON/Dot11d.h */
86 struct chnl_txpower_triple {
87         u8 FirstChnl;
88         u8 NumChnls;
89         s8 MaxTxPowerInDbm;
90 };
91
92
93 /*  ===== Below this line is sync from SD7 driver COMMON/bt_hci.h ===== */
94 /*  The following is for BT 3.0 + HS HCI COMMAND ERRORS CODES */
95
96 #define Max80211PALPDUSize                      1492
97 #define Max80211AMPASSOCLen                     672
98 #define MinGUserPrio                                    4
99 #define MaxGUserPrio                                    7
100 #define BEUserPrio0                                             0
101 #define BEUserPrio1                                             3
102 #define Max80211BeaconPeriod            2000
103 #define ShortRangeModePowerMax          4
104
105 #define BT_Default_Chnl                                 10
106 #define ACLDataHeaderLen                                4
107
108 #define BTTotalDataBlockNum                     0x100
109 #define BTLocalBufNum                                   0x200
110 #define BTMaxDataBlockLen                               0x800
111 #define BTTOTALBANDWIDTH                                0x7530
112 #define BTMAXBANDGUBANDWIDTH            0x4e20
113 #define TmpLocalBufSize                                 0x100
114 #define BTSynDataPacketLength                   0xff
115 /*  */
116
117 #define BTMaxAuthCount                                  5
118 #define BTMaxAsocCount                                  5
119
120 #define MAX_LOGICAL_LINK_NUM                    2       /* temporarily define */
121 #define MAX_BT_ASOC_ENTRY_NUM           2       /* temporarily define */
122
123 #define INVALID_PL_HANDLE                               0xff
124 #define INVALID_ENTRY_NUM                               0xff
125 /*  */
126
127 #define CAM_BT_START_INDEX              (HALF_CAM_ENTRY - 4)   /*  MAX_BT_ASOC_ENTRY_NUM : 4 !!! */
128 #define BT_HWCAM_STAR                   CAM_BT_START_INDEX  /*  We used  HALF_CAM_ENTRY ~ HALF_CAM_ENTRY -MAX_BT_ASOC_ENTRY_NUM */
129
130 enum hci_status {
131         HCI_STATUS_SUCCESS                      = 0x00, /* Success */
132         HCI_STATUS_UNKNOW_HCI_CMD               = 0x01, /* Unknown HCI Command */
133         HCI_STATUS_UNKNOW_CONNECT_ID            = 0X02, /* Unknown Connection Identifier */
134         HCI_STATUS_HW_FAIL                      = 0X03, /* Hardware Failure */
135         HCI_STATUS_PAGE_TIMEOUT                 = 0X04, /* Page Timeout */
136         HCI_STATUS_AUTH_FAIL                    = 0X05, /* Authentication Failure */
137         HCI_STATUS_PIN_OR_KEY_MISSING           = 0X06, /* PIN or Key Missing */
138         HCI_STATUS_MEM_CAP_EXCEED               = 0X07, /* Memory Capacity Exceeded */
139         HCI_STATUS_CONNECT_TIMEOUT              = 0X08, /* Connection Timeout */
140         HCI_STATUS_CONNECT_LIMIT                = 0X09, /* Connection Limit Exceeded */
141         HCI_STATUS_SYN_CONNECT_LIMIT            = 0X0a, /* Synchronous Connection Limit To A Device Exceeded */
142         HCI_STATUS_ACL_CONNECT_EXISTS           = 0X0b, /* ACL Connection Already Exists */
143         HCI_STATUS_CMD_DISALLOW                 = 0X0c, /* Command Disallowed */
144         HCI_STATUS_CONNECT_RJT_LIMIT_RESOURCE   = 0X0d, /* Connection Rejected due to Limited Resources */
145         HCI_STATUS_CONNECT_RJT_SEC_REASON       = 0X0e, /* Connection Rejected Due To Security Reasons */
146         HCI_STATUS_CONNECT_RJT_UNACCEPT_BD_ADDR = 0X0f, /* Connection Rejected due to Unacceptable BD_ADDR */
147         HCI_STATUS_CONNECT_ACCEPT_TIMEOUT       = 0X10, /* Connection Accept Timeout Exceeded */
148         HCI_STATUS_UNSUPPORT_FEATURE_PARA_VALUE = 0X11, /* Unsupported Feature or Parameter Value */
149         HCI_STATUS_INVALID_HCI_CMD_PARA_VALUE   = 0X12, /* Invalid HCI Command Parameters */
150         HCI_STATUS_REMOTE_USER_TERMINATE_CONNECT = 0X13, /* Remote User Terminated Connection */
151         HCI_STATUS_REMOTE_DEV_TERMINATE_LOW_RESOURCE = 0X14, /* Remote Device Terminated Connection due to Low Resources */
152         HCI_STATUS_REMOTE_DEV_TERMINATE_CONNECT_POWER_OFF = 0X15, /* Remote Device Terminated Connection due to Power Off */
153         HCI_STATUS_CONNECT_TERMINATE_LOCAL_HOST = 0X16, /* Connection Terminated By Local Host */
154         HCI_STATUS_REPEATE_ATTEMPT              = 0X17, /* Repeated Attempts */
155         HCI_STATUS_PAIR_NOT_ALLOW               = 0X18, /* Pairing Not Allowed */
156         HCI_STATUS_UNKNOW_LMP_PDU               = 0X19, /* Unknown LMP PDU */
157         HCI_STATUS_UNSUPPORT_REMOTE_LMP_FEATURE = 0X1a, /* Unsupported Remote Feature / Unsupported LMP Feature */
158         HCI_STATUS_SOC_OFFSET_REJECT            = 0X1b, /* SCO Offset Rejected */
159         HCI_STATUS_SOC_INTERVAL_REJECT          = 0X1c, /* SCO Interval Rejected */
160         HCI_STATUS_SOC_AIR_MODE_REJECT          = 0X1d,/* SCO Air Mode Rejected */
161         HCI_STATUS_INVALID_LMP_PARA             = 0X1e, /* Invalid LMP Parameters */
162         HCI_STATUS_UNSPECIFIC_ERROR             = 0X1f, /* Unspecified Error */
163         HCI_STATUS_UNSUPPORT_LMP_PARA_VALUE     = 0X20, /* Unsupported LMP Parameter Value */
164         HCI_STATUS_ROLE_CHANGE_NOT_ALLOW        = 0X21, /* Role Change Not Allowed */
165         HCI_STATUS_LMP_RESPONSE_TIMEOUT         = 0X22, /* LMP Response Timeout */
166         HCI_STATUS_LMP_ERROR_TRANSACTION_COLLISION = 0X23, /* LMP Error Transaction Collision */
167         HCI_STATUS_LMP_PDU_NOT_ALLOW            = 0X24, /* LMP PDU Not Allowed */
168         HCI_STATUS_ENCRYPTION_MODE_NOT_ALLOW    = 0X25, /* Encryption Mode Not Acceptable */
169         HCI_STATUS_LINK_KEY_CAN_NOT_CHANGE      = 0X26, /* Link Key Can Not be Changed */
170         HCI_STATUS_REQUEST_QOS_NOT_SUPPORT      = 0X27, /* Requested QoS Not Supported */
171         HCI_STATUS_INSTANT_PASSED               = 0X28, /* Instant Passed */
172         HCI_STATUS_PAIRING_UNIT_KEY_NOT_SUPPORT = 0X29, /* Pairing With Unit Key Not Supported */
173         HCI_STATUS_DIFFERENT_TRANSACTION_COLLISION = 0X2a, /* Different Transaction Collision */
174         HCI_STATUS_RESERVE_1                    = 0X2b, /* Reserved */
175         HCI_STATUS_QOS_UNACCEPT_PARA            = 0X2c, /* QoS Unacceptable Parameter */
176         HCI_STATUS_QOS_REJECT                   = 0X2d, /* QoS Rejected */
177         HCI_STATUS_CHNL_CLASSIFICATION_NOT_SUPPORT = 0X2e, /* Channel Classification Not Supported */
178         HCI_STATUS_INSUFFICIENT_SECURITY        = 0X2f, /* Insufficient Security */
179         HCI_STATUS_PARA_OUT_OF_RANGE            = 0x30, /* Parameter Out Of Mandatory Range */
180         HCI_STATUS_RESERVE_2                    = 0X31, /* Reserved */
181         HCI_STATUS_ROLE_SWITCH_PENDING          = 0X32, /* Role Switch Pending */
182         HCI_STATUS_RESERVE_3                    = 0X33, /* Reserved */
183         HCI_STATUS_RESERVE_SOLT_VIOLATION       = 0X34, /* Reserved Slot Violation */
184         HCI_STATUS_ROLE_SWITCH_FAIL             = 0X35, /* Role Switch Failed */
185         HCI_STATUS_EXTEND_INQUIRY_RSP_TOO_LARGE = 0X36, /* Extended Inquiry Response Too Large */
186         HCI_STATUS_SEC_SIMPLE_PAIRING_NOT_SUPPORT = 0X37, /* Secure Simple Pairing Not Supported By Host. */
187         HCI_STATUS_HOST_BUSY_PAIRING            = 0X38, /* Host Busy - Pairing */
188         HCI_STATUS_CONNECT_REJ_NOT_SUIT_CHNL_FOUND = 0X39, /* Connection Rejected due to No Suitable Channel Found */
189         HCI_STATUS_CONTROLLER_BUSY              = 0X3a  /* CONTROLLER BUSY */
190 };
191
192 /*  */
193 /*  The following is for BT 3.0 + HS HCI COMMAND */
194 /*  */
195
196 /* bit 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 */
197 /*       |      OCF                                  |     OGF       | */
198 /*  */
199
200 /* OGF 0x01 */
201 #define LINK_CONTROL_COMMANDS                   0x01
202 enum link_control_commands {
203         HCI_INQUIRY                                     = 0x0001,
204         HCI_INQUIRY_CANCEL                              = 0x0002,
205         HCI_PERIODIC_INQUIRY_MODE                       = 0x0003,
206         HCI_EXIT_PERIODIC_INQUIRY_MODE                  = 0x0004,
207         HCI_CREATE_CONNECTION                           = 0x0005,
208         HCI_DISCONNECT                                  = 0x0006,
209         HCI_CREATE_CONNECTION_CANCEL                    = 0x0008,
210         HCI_ACCEPT_CONNECTIONREQUEST                    = 0x0009,
211         HCI_REJECT_CONNECTION_REQUEST                   = 0x000a,
212         HCI_LINK_KEY_REQUEST_REPLY                      = 0x000b,
213         HCI_LINK_KEY_REQUEST_NEGATIVE_REPLY             = 0x000c,
214         HCI_PIN_CODE_REQUEST_REPLY                      = 0x000d,
215         HCI_PIN_CODE_REQUEST_NEGATIVE_REPLY             = 0x000e,
216         HCI_CHANGE_CONNECTION_PACKET_TYPE               = 0x000f,
217         HCI_AUTHENTICATION_REQUESTED                    = 0x0011,
218         HCI_SET_CONNECTION_ENCRYPTION                   = 0x0013,
219         HCI_CHANGE_CONNECTION_LINK_KEY                  = 0x0015,
220         HCI_MASTER_LINK_KEY                             = 0x0017,
221         HCI_REMOTE_NAME_REQUEST                         = 0x0019,
222         HCI_REMOTE_NAME_REQUEST_CANCEL                  = 0x001a,
223         HCI_READ_REMOTE_SUPPORTED_FEATURES              = 0x001b,
224         HCI_READ_REMOTE_EXTENDED_FEATURES               = 0x001c,
225         HCI_READ_REMOTE_VERSION_INFORMATION             = 0x001d,
226         HCI_READ_CLOCK_OFFSET                           = 0x001f,
227         HCI_READ_LMP_HANDLE                             = 0x0020,
228         HCI_SETUP_SYNCHRONOUS_CONNECTION                = 0x0028,
229         HCI_ACCEPT_SYNCHRONOUS_CONNECTION_REQUEST       = 0x0029,
230         HCI_REJECT_SYNCHRONOUS_CONNECTION_REQUEST       = 0x002a,
231         HCI_IO_CAPABILITY_REQUEST_REPLY                 = 0x002b,
232         HCI_USER_CONFIRMATION_REQUEST_REPLY             = 0x002c,
233         HCI_USER_CONFIRMATION_REQUEST_NEGATIVE_REPLY    = 0x002d,
234         HCI_USER_PASSKEY_REQUEST_REPLY                  = 0x002e,
235         HCI_USER_PASSKEY_REQUESTNEGATIVE_REPLY          = 0x002f,
236         HCI_REMOTE_OOB_DATA_REQUEST_REPLY               = 0x0030,
237         HCI_REMOTE_OOB_DATA_REQUEST_NEGATIVE_REPLY      = 0x0033,
238         HCI_IO_CAPABILITY_REQUEST_NEGATIVE_REPLY        = 0x0034,
239         HCI_CREATE_PHYSICAL_LINK                        = 0x0035,
240         HCI_ACCEPT_PHYSICAL_LINK                        = 0x0036,
241         HCI_DISCONNECT_PHYSICAL_LINK                    = 0x0037,
242         HCI_CREATE_LOGICAL_LINK                         = 0x0038,
243         HCI_ACCEPT_LOGICAL_LINK                         = 0x0039,
244         HCI_DISCONNECT_LOGICAL_LINK                     = 0x003a,
245         HCI_LOGICAL_LINK_CANCEL                         = 0x003b,
246         HCI_FLOW_SPEC_MODIFY                            = 0x003c
247 };
248
249 /* OGF 0x02 */
250 #define HOLD_MODE_COMMAND                               0x02
251 enum hold_mode_command {
252         HCI_HOLD_MODE                                   = 0x0001,
253         HCI_SNIFF_MODE                                  = 0x0002,
254         HCI_EXIT_SNIFF_MODE                             = 0x0003,
255         HCI_PARK_STATE                                  = 0x0005,
256         HCI_EXIT_PARK_STATE                             = 0x0006,
257         HCI_QOS_SETUP                                   = 0x0007,
258         HCI_ROLE_DISCOVERY                              = 0x0009,
259         HCI_SWITCH_ROLE                                 = 0x000b,
260         HCI_READ_LINK_POLICY_SETTINGS                   = 0x000c,
261         HCI_WRITE_LINK_POLICY_SETTINGS                  = 0x000d,
262         HCI_READ_DEFAULT_LINK_POLICY_SETTINGS           = 0x000e,
263         HCI_WRITE_DEFAULT_LINK_POLICY_SETTINGS          = 0x000f,
264         HCI_FLOW_SPECIFICATION                          = 0x0010,
265         HCI_SNIFF_SUBRATING                             = 0x0011
266 };
267
268 /* OGF 0x03 */
269 #define OGF_SET_EVENT_MASK_COMMAND                      0x03
270 enum set_event_mask_command {
271         HCI_SET_EVENT_MASK                              = 0x0001,
272         HCI_RESET                                       = 0x0003,
273         HCI_SET_EVENT_FILTER                            = 0x0005,
274         HCI_FLUSH                                       = 0x0008,
275         HCI_READ_PIN_TYPE                               = 0x0009,
276         HCI_WRITE_PIN_TYPE                              = 0x000a,
277         HCI_CREATE_NEW_UNIT_KEY                         = 0x000b,
278         HCI_READ_STORED_LINK_KEY                        = 0x000d,
279         HCI_WRITE_STORED_LINK_KEY                       = 0x0011,
280         HCI_DELETE_STORED_LINK_KEY                      = 0x0012,
281         HCI_WRITE_LOCAL_NAME                            = 0x0013,
282         HCI_READ_LOCAL_NAME                             = 0x0014,
283         HCI_READ_CONNECTION_ACCEPT_TIMEOUT              = 0x0015,
284         HCI_WRITE_CONNECTION_ACCEPT_TIMEOUT             = 0x0016,
285         HCI_READ_PAGE_TIMEOUT                           = 0x0017,
286         HCI_WRITE_PAGE_TIMEOUT                          = 0x0018,
287         HCI_READ_SCAN_ENABLE                            = 0x0019,
288         HCI_WRITE_SCAN_ENABLE                           = 0x001a,
289         HCI_READ_PAGE_SCAN_ACTIVITY                     = 0x001b,
290         HCI_WRITE_PAGE_SCAN_ACTIVITY                    = 0x001c,
291         HCI_READ_INQUIRY_SCAN_ACTIVITY                  = 0x001d,
292         HCI_WRITE_INQUIRY_SCAN_ACTIVITY                 = 0x001e,
293         HCI_READ_AUTHENTICATION_ENABLE                  = 0x001f,
294         HCI_WRITE_AUTHENTICATION_ENABLE                 = 0x0020,
295         HCI_READ_CLASS_OF_DEVICE                        = 0x0023,
296         HCI_WRITE_CLASS_OF_DEVICE                       = 0x0024,
297         HCI_READ_VOICE_SETTING                          = 0x0025,
298         HCI_WRITE_VOICE_SETTING                         = 0x0026,
299         HCI_READ_AUTOMATIC_FLUSH_TIMEOUT                = 0x0027,
300         HCI_WRITE_AUTOMATIC_FLUSH_TIMEOUT               = 0x0028,
301         HCI_READ_NUM_BROADCAST_RETRANSMISSIONS          = 0x0029,
302         HCI_WRITE_NUM_BROADCAST_RETRANSMISSIONS         = 0x002a,
303         HCI_READ_HOLD_MODE_ACTIVITY                     = 0x002b,
304         HCI_WRITE_HOLD_MODE_ACTIVITY                    = 0x002c,
305         HCI_READ_SYNCHRONOUS_FLOW_CONTROL_ENABLE        = 0x002e,
306         HCI_WRITE_SYNCHRONOUS_FLOW_CONTROL_ENABLE       = 0x002f,
307         HCI_SET_CONTROLLER_TO_HOST_FLOW_CONTROL         = 0x0031,
308         HCI_HOST_BUFFER_SIZE                            = 0x0033,
309         HCI_HOST_NUMBER_OF_COMPLETED_PACKETS            = 0x0035,
310         HCI_READ_LINK_SUPERVISION_TIMEOUT               = 0x0036,
311         HCI_WRITE_LINK_SUPERVISION_TIMEOUT              = 0x0037,
312         HCI_READ_NUMBER_OF_SUPPORTED_IAC                = 0x0038,
313         HCI_READ_CURRENT_IAC_LAP                        = 0x0039,
314         HCI_WRITE_CURRENT_IAC_LAP                       = 0x003a,
315         HCI_READ_PAGE_SCAN_MODE                         = 0x003d,
316         HCI_WRITE_PAGE_SCAN_MODE                        = 0x003e,
317         HCI_SET_AFH_HOST_CHANNEL_CLASSIFICATION         = 0x003f,
318         HCI_READ_INQUIRY_SCAN_TYPE                      = 0x0042,
319         HCI_WRITE_INQUIRY_SCAN_TYPE                     = 0x0043,
320         HCI_READ_INQUIRY_MODE                           = 0x0044,
321         HCI_WRITE_INQUIRY_MODE                          = 0x0045,
322         HCI_READ_PAGE_SCAN_TYPE                         = 0x0046,
323         HCI_WRITE_PAGE_SCAN_TYPE                        = 0x0047,
324         HCI_READ_AFH_CHANNEL_ASSESSMENT_MODE            = 0x0048,
325         HCI_WRITE_AFH_CHANNEL_ASSESSMENT_MODE           = 0x0049,
326         HCI_READ_EXTENDED_INQUIRY_RESPONSE              = 0x0051,
327         HCI_WRITE_EXTENDED_INQUIRY_RESPONSE             = 0x0052,
328         HCI_REFRESH_ENCRYPTION_KEY                      = 0x0053,
329         HCI_READ_SIMPLE_PAIRING_MODE                    = 0x0055,
330         HCI_WRITE_SIMPLE_PAIRING_MODE                   = 0x0056,
331         HCI_READ_LOCAL_OOB_DATA                         = 0x0057,
332         HCI_READ_INQUIRY_RESPONSE_TRANSMIT_POWER_LEVEL  = 0x0058,
333         HCI_WRITE_INQUIRY_TRANSMIT_POWER_LEVEL          = 0x0059,
334         HCI_READ_DEFAULT_ERRONEOUS_DATA_REPORTING       = 0x005a,
335         HCI_WRITE_DEFAULT_ERRONEOUS_DATA_REPORTING      = 0x005b,
336         HCI_ENHANCED_FLUSH                              = 0x005f,
337         HCI_SEND_KEYPRESS_NOTIFICATION                  = 0x0060,
338         HCI_READ_LOGICAL_LINK_ACCEPT_TIMEOUT            = 0x0061,
339         HCI_WRITE_LOGICAL_LINK_ACCEPT_TIMEOUT           = 0x0062,
340         HCI_SET_EVENT_MASK_PAGE_2                       = 0x0063,
341         HCI_READ_LOCATION_DATA                          = 0x0064,
342         HCI_WRITE_LOCATION_DATA                         = 0x0065,
343         HCI_READ_FLOW_CONTROL_MODE                      = 0x0066,
344         HCI_WRITE_FLOW_CONTROL_MODE                     = 0x0067,
345         HCI_READ_ENHANCE_TRANSMIT_POWER_LEVEL           = 0x0068,
346         HCI_READ_BEST_EFFORT_FLUSH_TIMEOUT              = 0x0069,
347         HCI_WRITE_BEST_EFFORT_FLUSH_TIMEOUT             = 0x006a,
348         HCI_SHORT_RANGE_MODE                            = 0x006b
349 };
350
351 /* OGF 0x04 */
352 #define OGF_INFORMATIONAL_PARAMETERS                    0x04
353 enum informational_params {
354         HCI_READ_LOCAL_VERSION_INFORMATION              = 0x0001,
355         HCI_READ_LOCAL_SUPPORTED_COMMANDS               = 0x0002,
356         HCI_READ_LOCAL_SUPPORTED_FEATURES               = 0x0003,
357         HCI_READ_LOCAL_EXTENDED_FEATURES                = 0x0004,
358         HCI_READ_BUFFER_SIZE                            = 0x0005,
359         HCI_READ_BD_ADDR                                = 0x0009,
360         HCI_READ_DATA_BLOCK_SIZE                        = 0x000a
361 };
362
363 /* OGF 0x05 */
364 #define OGF_STATUS_PARAMETERS                           0x05
365 enum status_params {
366         HCI_READ_FAILED_CONTACT_COUNTER                 = 0x0001,
367         HCI_RESET_FAILED_CONTACT_COUNTER                = 0x0002,
368         HCI_READ_LINK_QUALITY                           = 0x0003,
369         HCI_READ_RSSI                                   = 0x0005,
370         HCI_READ_AFH_CHANNEL_MAP                        = 0x0006,
371         HCI_READ_CLOCK                                  = 0x0007,
372         HCI_READ_ENCRYPTION_KEY_SIZE                    = 0x0008,
373         HCI_READ_LOCAL_AMP_INFO                         = 0x0009,
374         HCI_READ_LOCAL_AMP_ASSOC                        = 0x000a,
375         HCI_WRITE_REMOTE_AMP_ASSOC                      = 0x000b
376 };
377
378 /* OGF 0x06 */
379 #define OGF_TESTING_COMMANDS                            0x06
380 enum testing_commands {
381         HCI_READ_LOOPBACK_MODE                          = 0x0001,
382         HCI_WRITE_LOOPBACK_MODE                         = 0x0002,
383         HCI_ENABLE_DEVICE_UNDER_TEST_MODE               = 0x0003,
384         HCI_WRITE_SIMPLE_PAIRING_DEBUG_MODE             = 0x0004,
385         HCI_ENABLE_AMP_RECEIVER_REPORTS                 = 0x0007,
386         HCI_AMP_TEST_END                                = 0x0008,
387         HCI_AMP_TEST_COMMAND                            = 0x0009
388 };
389
390 /* OGF 0x3f */
391 #define OGF_EXTENSION                                   0X3f
392 enum hci_extension_commands {
393         HCI_SET_ACL_LINK_DATA_FLOW_MODE                 = 0x0010,
394         HCI_SET_ACL_LINK_STATUS                         = 0x0020,
395         HCI_SET_SCO_LINK_STATUS                         = 0x0030,
396         HCI_SET_RSSI_VALUE                              = 0x0040,
397         HCI_SET_CURRENT_BLUETOOTH_STATUS                = 0x0041,
398
399         /* The following is for RTK8723 */
400         HCI_EXTENSION_VERSION_NOTIFY                    = 0x0100,
401         HCI_LINK_STATUS_NOTIFY                          = 0x0101,
402         HCI_BT_OPERATION_NOTIFY                         = 0x0102,
403         HCI_ENABLE_WIFI_SCAN_NOTIFY                     = 0x0103,
404
405
406         /* The following is for IVT */
407         HCI_WIFI_CURRENT_CHANNEL                        = 0x0300,
408         HCI_WIFI_CURRENT_BANDWIDTH                      = 0x0301,
409         HCI_WIFI_CONNECTION_STATUS                      = 0x0302,
410 };
411
412 enum bt_spec {
413         BT_SPEC_1_0_b                                   = 0x00,
414         BT_SPEC_1_1                                     = 0x01,
415         BT_SPEC_1_2                                     = 0x02,
416         BT_SPEC_2_0_EDR                                 = 0x03,
417         BT_SPEC_2_1_EDR                                 = 0x04,
418         BT_SPEC_3_0_HS                                  = 0x05,
419         BT_SPEC_4_0                                     = 0x06
420 };
421
422 /*  The following is for BT 3.0 + HS EVENTS */
423 enum hci_event {
424         HCI_EVENT_INQUIRY_COMPLETE                      = 0x01,
425         HCI_EVENT_INQUIRY_RESULT                        = 0x02,
426         HCI_EVENT_CONNECTION_COMPLETE                   = 0x03,
427         HCI_EVENT_CONNECTION_REQUEST                    = 0x04,
428         HCI_EVENT_DISCONNECTION_COMPLETE                = 0x05,
429         HCI_EVENT_AUTHENTICATION_COMPLETE               = 0x06,
430         HCI_EVENT_REMOTE_NAME_REQUEST_COMPLETE          = 0x07,
431         HCI_EVENT_ENCRYPTION_CHANGE                     = 0x08,
432         HCI_EVENT_CHANGE_LINK_KEY_COMPLETE              = 0x09,
433         HCI_EVENT_MASTER_LINK_KEY_COMPLETE              = 0x0a,
434         HCI_EVENT_READ_REMOTE_SUPPORT_FEATURES_COMPLETE = 0x0b,
435         HCI_EVENT_READ_REMOTE_VER_INFO_COMPLETE         = 0x0c,
436         HCI_EVENT_QOS_SETUP_COMPLETE                    = 0x0d,
437         HCI_EVENT_COMMAND_COMPLETE                      = 0x0e,
438         HCI_EVENT_COMMAND_STATUS                        = 0x0f,
439         HCI_EVENT_HARDWARE_ERROR                        = 0x10,
440         HCI_EVENT_FLUSH_OCCRUED                         = 0x11,
441         HCI_EVENT_ROLE_CHANGE                           = 0x12,
442         HCI_EVENT_NUMBER_OF_COMPLETE_PACKETS            = 0x13,
443         HCI_EVENT_MODE_CHANGE                           = 0x14,
444         HCI_EVENT_RETURN_LINK_KEYS                      = 0x15,
445         HCI_EVENT_PIN_CODE_REQUEST                      = 0x16,
446         HCI_EVENT_LINK_KEY_REQUEST                      = 0x17,
447         HCI_EVENT_LINK_KEY_NOTIFICATION                 = 0x18,
448         HCI_EVENT_LOOPBACK_COMMAND                      = 0x19,
449         HCI_EVENT_DATA_BUFFER_OVERFLOW                  = 0x1a,
450         HCI_EVENT_MAX_SLOTS_CHANGE                      = 0x1b,
451         HCI_EVENT_READ_CLOCK_OFFSET_COMPLETE            = 0x1c,
452         HCI_EVENT_CONNECT_PACKET_TYPE_CHANGE            = 0x1d,
453         HCI_EVENT_QOS_VIOLATION                         = 0x1e,
454         HCI_EVENT_PAGE_SCAN_REPETITION_MODE_CHANGE      = 0x20,
455         HCI_EVENT_FLOW_SEPC_COMPLETE                    = 0x21,
456         HCI_EVENT_INQUIRY_RESULT_WITH_RSSI              = 0x22,
457         HCI_EVENT_READ_REMOTE_EXT_FEATURES_COMPLETE     = 0x23,
458         HCI_EVENT_SYNC_CONNECT_COMPLETE                 = 0x2c,
459         HCI_EVENT_SYNC_CONNECT_CHANGE                   = 0x2d,
460         HCI_EVENT_SNIFFER_SUBRATING                     = 0x2e,
461         HCI_EVENT_EXTENTED_INQUIRY_RESULT               = 0x2f,
462         HCI_EVENT_ENCRYPTION_KEY_REFLASH_COMPLETE       = 0x30,
463         HCI_EVENT_IO_CAPIBILITY_COMPLETE                = 0x31,
464         HCI_EVENT_IO_CAPIBILITY_RESPONSE                = 0x32,
465         HCI_EVENT_USER_CONFIRMTION_REQUEST              = 0x33,
466         HCI_EVENT_USER_PASSKEY_REQUEST                  = 0x34,
467         HCI_EVENT_REMOTE_OOB_DATA_REQUEST               = 0x35,
468         HCI_EVENT_SIMPLE_PAIRING_COMPLETE               = 0x36,
469         HCI_EVENT_LINK_SUPERVISION_TIMEOUT_CHANGE       = 0x38,
470         HCI_EVENT_ENHANCED_FLUSH_COMPLETE               = 0x39,
471         HCI_EVENT_USER_PASSKEY_NOTIFICATION             = 0x3b,
472         HCI_EVENT_KEYPRESS_NOTIFICATION                 = 0x3c,
473         HCI_EVENT_REMOTE_HOST_SUPPORT_FEATURES_NOTIFICATION     = 0x3d,
474         HCI_EVENT_PHY_LINK_COMPLETE                     = 0x40,
475         HCI_EVENT_CHANNEL_SELECT                        = 0x41,
476         HCI_EVENT_DISCONNECT_PHY_LINK_COMPLETE          = 0x42,
477         HCI_EVENT_PHY_LINK_LOSS_EARLY_WARNING           = 0x43,
478         HCI_EVENT_PHY_LINK_RECOVER                      = 0x44,
479         HCI_EVENT_LOGICAL_LINK_COMPLETE                 = 0x45,
480         HCI_EVENT_DISCONNECT_LOGICAL_LINK_COMPLETE      = 0x46,
481         HCI_EVENT_FLOW_SPEC_MODIFY_COMPLETE             = 0x47,
482         HCI_EVENT_NUM_OF_COMPLETE_DATA_BLOCKS           = 0x48,
483         HCI_EVENT_AMP_START_TEST                        = 0x49,
484         HCI_EVENT_AMP_TEST_END                          = 0x4a,
485         HCI_EVENT_AMP_RECEIVER_REPORT                   = 0x4b,
486         HCI_EVENT_SHORT_RANGE_MODE_CHANGE_COMPLETE      = 0x4c,
487         HCI_EVENT_AMP_STATUS_CHANGE                     = 0x4d,
488         HCI_EVENT_EXTENSION_RTK                         = 0xfe,
489         HCI_EVENT_EXTENSION_MOTO                        = 0xff,
490 };
491
492 enum hci_extension_event_moto {
493         HCI_EVENT_GET_BT_RSSI                           = 0x01,
494 };
495
496 enum hci_extension_event {
497         HCI_EVENT_EXT_WIFI_SCAN_NOTIFY                  = 0x01,
498 };
499
500 enum hci_event_mask_page_2 {
501         EMP2_HCI_EVENT_PHY_LINK_COMPLETE                = 0x0000000000000001,
502         EMP2_HCI_EVENT_CHANNEL_SELECT                   = 0x0000000000000002,
503         EMP2_HCI_EVENT_DISCONNECT_PHY_LINK_COMPLETE     = 0x0000000000000004,
504         EMP2_HCI_EVENT_PHY_LINK_LOSS_EARLY_WARNING      = 0x0000000000000008,
505         EMP2_HCI_EVENT_PHY_LINK_RECOVER                 = 0x0000000000000010,
506         EMP2_HCI_EVENT_LOGICAL_LINK_COMPLETE            = 0x0000000000000020,
507         EMP2_HCI_EVENT_DISCONNECT_LOGICAL_LINK_COMPLETE = 0x0000000000000040,
508         EMP2_HCI_EVENT_FLOW_SPEC_MODIFY_COMPLETE        = 0x0000000000000080,
509         EMP2_HCI_EVENT_NUM_OF_COMPLETE_DATA_BLOCKS      = 0x0000000000000100,
510         EMP2_HCI_EVENT_AMP_START_TEST                   = 0x0000000000000200,
511         EMP2_HCI_EVENT_AMP_TEST_END                     = 0x0000000000000400,
512         EMP2_HCI_EVENT_AMP_RECEIVER_REPORT              = 0x0000000000000800,
513         EMP2_HCI_EVENT_SHORT_RANGE_MODE_CHANGE_COMPLETE = 0x0000000000001000,
514         EMP2_HCI_EVENT_AMP_STATUS_CHANGE                = 0x0000000000002000,
515 };
516
517 enum hci_state_machine {
518         HCI_STATE_STARTING                      = 0x01,
519         HCI_STATE_CONNECTING                    = 0x02,
520         HCI_STATE_AUTHENTICATING                = 0x04,
521         HCI_STATE_CONNECTED                     = 0x08,
522         HCI_STATE_DISCONNECTING                 = 0x10,
523         HCI_STATE_DISCONNECTED                  = 0x20
524 };
525
526 enum amp_assoc_structure_type {
527         AMP_MAC_ADDR                            = 0x01,
528         AMP_PREFERRED_CHANNEL_LIST              = 0x02,
529         AMP_CONNECTED_CHANNEL                   = 0x03,
530         AMP_80211_PAL_CAP_LIST                  = 0x04,
531         AMP_80211_PAL_VISION                    = 0x05,
532         AMP_RESERVED_FOR_TESTING                = 0x33
533 };
534
535 enum amp_btap_type {
536         AMP_BTAP_NONE,
537         AMP_BTAP_CREATOR,
538         AMP_BTAP_JOINER
539 };
540
541 enum hci_state_with_cmd {
542         STATE_CMD_CREATE_PHY_LINK,
543         STATE_CMD_ACCEPT_PHY_LINK,
544         STATE_CMD_DISCONNECT_PHY_LINK,
545         STATE_CMD_CONNECT_ACCEPT_TIMEOUT,
546         STATE_CMD_MAC_START_COMPLETE,
547         STATE_CMD_MAC_START_FAILED,
548         STATE_CMD_MAC_CONNECT_COMPLETE,
549         STATE_CMD_MAC_CONNECT_FAILED,
550         STATE_CMD_MAC_DISCONNECT_INDICATE,
551         STATE_CMD_MAC_CONNECT_CANCEL_INDICATE,
552         STATE_CMD_4WAY_FAILED,
553         STATE_CMD_4WAY_SUCCESSED,
554         STATE_CMD_ENTER_STATE,
555         STATE_CMD_NO_SUCH_CMD,
556 };
557
558 enum hci_service_type {
559         SERVICE_NO_TRAFFIC,
560         SERVICE_BEST_EFFORT,
561         SERVICE_GUARANTEE
562 };
563
564 enum hci_traffic_mode {
565         TRAFFIC_MODE_BEST_EFFORT                        = 0x00,
566         TRAFFIC_MODE_GUARANTEED_LATENCY                 = 0x01,
567         TRAFFIC_MODE_GUARANTEED_BANDWIDTH               = 0x02,
568         TRAFFIC_MODE_GUARANTEED_LATENCY_AND_BANDWIDTH   = 0x03
569 };
570
571 #define HCIOPCODE(_OCF, _OGF)           (_OGF<<10|_OCF)
572 #define HCIOPCODELOW(_OCF, _OGF)        (u8)(HCIOPCODE(_OCF, _OGF)&0x00ff)
573 #define HCIOPCODEHIGHT(_OCF, _OGF)      (u8)(HCIOPCODE(_OCF, _OGF)>>8)
574
575 #define TWOBYTE_HIGHTBYTE(_DATA)        (u8)(_DATA>>8)
576 #define TWOBYTE_LOWBYTE(_DATA)          (u8)(_DATA)
577
578 enum amp_status {
579         AMP_STATUS_AVA_PHY_PWR_DWN              = 0x0,
580         AMP_STATUS_BT_USE_ONLY                  = 0x1,
581         AMP_STATUS_NO_CAPACITY_FOR_BT           = 0x2,
582         AMP_STATUS_LOW_CAPACITY_FOR_BT          = 0x3,
583         AMP_STATUS_MEDIUM_CAPACITY_FOR_BT       = 0x4,
584         AMP_STATUS_HIGH_CAPACITY_FOR_BT         = 0x5,
585         AMP_STATUS_FULL_CAPACITY_FOR_BT         = 0x6
586 };
587
588 enum bt_wpa_msg_type {
589         Type_BT_4way1st = 0,
590         Type_BT_4way2nd = 1,
591         Type_BT_4way3rd = 2,
592         Type_BT_4way4th = 3,
593         Type_BT_unknow  = 4
594 };
595
596 enum bt_connect_type {
597         BT_CONNECT_AUTH_REQ                     = 0x00,
598         BT_CONNECT_AUTH_RSP                     = 0x01,
599         BT_CONNECT_ASOC_REQ                     = 0x02,
600         BT_CONNECT_ASOC_RSP                     = 0x03,
601         BT_DISCONNECT                           = 0x04
602 };
603
604 enum bt_ll_service_type {
605         BT_LL_BE = 0x01,
606         BT_LL_GU = 0x02
607 };
608
609 enum bt_ll_flowspec {
610         BT_TX_BE_FS,                    /* TX best effort flowspec */
611         BT_RX_BE_FS,                    /* RX best effort flowspec */
612         BT_TX_GU_FS,                    /* TX guaranteed latency flowspec */
613         BT_RX_GU_FS,                    /* RX guaranteed latency flowspec */
614         BT_TX_BE_AGG_FS,                /* TX aggregated best effort flowspec */
615         BT_RX_BE_AGG_FS,                /* RX aggregated best effort flowspec */
616         BT_TX_GU_BW_FS,                 /* TX guaranteed bandwidth flowspec */
617         BT_RX_GU_BW_FS,                 /* RX guaranteed bandwidth flowspec */
618         BT_TX_GU_LARGE_FS,              /* TX guaranteed latency flowspec, for testing only */
619         BT_RX_GU_LARGE_FS,              /* RX guaranteed latency flowspec, for testing only */
620 };
621
622 enum bt_traffic_mode {
623         BT_MOTOR_EXT_BE         = 0x00, /* Best Effort. Default. for HCRP, PAN, SDP, RFCOMM-based profiles like FTP, OPP, SPP, DUN, etc. */
624         BT_MOTOR_EXT_GUL        = 0x01, /* Guaranteed Latency. This type of traffic is used e.g. for HID and AVRCP. */
625         BT_MOTOR_EXT_GUB        = 0X02, /* Guaranteed Bandwidth. */
626         BT_MOTOR_EXT_GULB       = 0X03  /* Guaranteed Latency and Bandwidth. for A2DP and VDP. */
627 };
628
629 enum bt_traffic_mode_profile {
630         BT_PROFILE_NONE,
631         BT_PROFILE_A2DP,
632         BT_PROFILE_PAN,
633         BT_PROFILE_HID,
634         BT_PROFILE_SCO
635 };
636
637 enum bt_link_role {
638         BT_LINK_MASTER  = 0,
639         BT_LINK_SLAVE   = 1
640 };
641
642 enum bt_state_wpa_auth {
643         STATE_WPA_AUTH_UNINITIALIZED,
644         STATE_WPA_AUTH_WAIT_PACKET_1, /*  Join */
645         STATE_WPA_AUTH_WAIT_PACKET_2, /*  Creat */
646         STATE_WPA_AUTH_WAIT_PACKET_3,
647         STATE_WPA_AUTH_WAIT_PACKET_4,
648         STATE_WPA_AUTH_SUCCESSED
649 };
650
651 #define BT_WPA_AUTH_TIMEOUT_PERIOD              1000
652 #define BTMaxWPAAuthReTransmitCoun              5
653
654 #define MAX_AMP_ASSOC_FRAG_LEN                  248
655 #define TOTAL_ALLOCIATE_ASSOC_LEN                       1000
656
657 struct hci_flow_spec {
658         u8                              Identifier;
659         u8                              ServiceType;
660         u16                             MaximumSDUSize;
661         u32                             SDUInterArrivalTime;
662         u32                             AccessLatency;
663         u32                             FlushTimeout;
664 };
665
666 struct hci_log_link_cmd_data {
667         u8                              BtPhyLinkhandle;
668         u16                             BtLogLinkhandle;
669         u8                              BtTxFlowSpecID;
670         struct hci_flow_spec            Tx_Flow_Spec;
671         struct hci_flow_spec            Rx_Flow_Spec;
672         u32                             TxPacketCount;
673         u32                             BestEffortFlushTimeout;
674
675         u8                              bLLCompleteEventIsSet;
676
677         u8                              bLLCancelCMDIsSetandComplete;
678 };
679
680 struct hci_phy_link_cmd_data {
681         /* Physical_Link_Handle */
682         u8                              BtPhyLinkhandle;
683
684         u16                             LinkSuperversionTimeout;
685
686         /* u16                          SuperTimeOutCnt; */
687
688         /* Dedicated_AMP_Key_Length */
689         u8                              BtAMPKeyLen;
690         /* Dedicated_AMP_Key_Type */
691         u8                              BtAMPKeyType;
692         /* Dedicated_AMP_Key */
693         u8                              BtAMPKey[PMK_LEN];
694 };
695
696 struct amp_assoc_structure {
697         /* TYPE ID */
698         u8                              TypeID;
699         /* Length */
700         u16                             Length;
701         /* Value */
702         u8                              Data[1];
703 };
704
705 struct amp_pref_chnl_regulatory {
706         u8                              reXId;
707         u8                              regulatoryClass;
708         u8                              coverageClass;
709 };
710
711 struct amp_assoc_cmd_data {
712         /* Physical_Link_Handle */
713         u8                              BtPhyLinkhandle;
714         /* Length_So_Far */
715         u16                             LenSoFar;
716
717         u16                             MaxRemoteASSOCLen;
718         /* AMP_ASSOC_Remaining_Length */
719         u16                             AMPAssocRemLen;
720         /* AMP_ASSOC_fragment */
721         void                            *AMPAssocfragment;
722 };
723
724 struct hci_link_info {
725         u16                             ConnectHandle;
726         u8                              IncomingTrafficMode;
727         u8                              OutgoingTrafficMode;
728         u8                              BTProfile;
729         u8                              BTCoreSpec;
730         s8                              BT_RSSI;
731         u8                              TrafficProfile;
732         u8                              linkRole;
733 };
734
735 struct hci_ext_config {
736         struct hci_link_info            linkInfo[MAX_BT_ASOC_ENTRY_NUM];
737         u8                              btOperationCode;
738         u16                             CurrentConnectHandle;
739         u8                              CurrentIncomingTrafficMode;
740         u8                              CurrentOutgoingTrafficMode;
741         s8                              MIN_BT_RSSI;
742         u8                              NumberOfHandle;
743         u8                              NumberOfSCO;
744         u8                              CurrentBTStatus;
745         u16                             HCIExtensionVer;
746
747         /* Bt coexist related */
748         u8                              btProfileCase;
749         u8                              btProfileAction;
750         u8                              bManualControl;
751         u8                              bBTBusy;
752         u8                              bBTA2DPBusy;
753         u8                              bEnableWifiScanNotify;
754
755         u8                              bHoldForBtOperation;
756         u32                             bHoldPeriodCnt;
757 };
758
759 struct hci_acl_packet_data {
760         u16                             ACLDataPacketLen;
761         u8                              SyncDataPacketLen;
762         u16                             TotalNumACLDataPackets;
763         u16                             TotalSyncNumDataPackets;
764 };
765
766 struct hci_phy_link_bss_info {
767         u16                             bdCap;  /*  capability information */
768 };
769
770 struct packet_irp_hcicmd_data {
771         u16             OCF:10;
772         u16             OGF:6;
773         u8              Length;
774         u8              Data[20];
775 };
776
777 struct bt_asoc_entry {
778         u8                                              bUsed;
779         u8                                              mAssoc;
780         u8                                              b4waySuccess;
781         u8                                              Bssid[6];
782         struct hci_phy_link_cmd_data            PhyLinkCmdData;
783
784         struct hci_log_link_cmd_data            LogLinkCmdData[MAX_LOGICAL_LINK_NUM];
785
786         struct hci_acl_packet_data                      ACLPacketsData;
787
788         struct amp_assoc_cmd_data               AmpAsocCmdData;
789         struct octet_string                             BTSsid;
790         u8                                              BTSsidBuf[33];
791
792         enum hci_status                                         PhyLinkDisconnectReason;
793
794         u8                                              bSendSupervisionPacket;
795         /* u8                                           CurrentSuervisionPacketSendNum; */
796         /* u8                                           LastSuervisionPacketSendNum; */
797         u32                                             NoRxPktCnt;
798         /* Is Creator or Joiner */
799         enum amp_btap_type                              AMPRole;
800
801         /* BT current state */
802         u8                                              BtCurrentState;
803         /* BT next state */
804         u8                                              BtNextState;
805
806         u8                                              bNeedPhysLinkCompleteEvent;
807
808         enum hci_status                                 PhysLinkCompleteStatus;
809
810         u8                                              BTRemoteMACAddr[6];
811
812         u32                                             BTCapability;
813
814         u8                                              SyncDataPacketLen;
815
816         u16                                             TotalSyncNumDataPackets;
817         u16                                             TotalNumACLDataPackets;
818
819         u8                                              ShortRangeMode;
820
821         u8                                              PTK[PTK_LEN_TKIP];
822         u8                                              GTK[GTK_LEN];
823         u8                                              ANonce[KEY_NONCE_LEN];
824         u8                                              SNonce[KEY_NONCE_LEN];
825         u64                                             KeyReplayCounter;
826         u8                                              WPAAuthReplayCount;
827         u8                                              AESKeyBuf[AESCCMP_BLK_SIZE_TOTAL];
828         u8                                              PMK[PMK_LEN];
829         enum bt_state_wpa_auth                  BTWPAAuthState;
830         s32                                             UndecoratedSmoothedPWDB;
831
832         /*  Add for HW security !! */
833         u8                                              HwCAMIndex;  /*  Cam index */
834         u8                                              bPeerQosSta;
835
836         u32                                             rxSuvpPktCnt;
837 };
838
839 struct bt_traffic_statistics {
840         u8                              bTxBusyTraffic;
841         u8                              bRxBusyTraffic;
842         u8                              bIdle;
843         u32                             TxPktCntInPeriod;
844         u32                             RxPktCntInPeriod;
845         u64                             TxPktLenInPeriod;
846         u64                             RxPktLenInPeriod;
847 };
848
849 struct bt_mgnt {
850         u8                              bBTConnectInProgress;
851         u8                              bLogLinkInProgress;
852         u8                              bPhyLinkInProgress;
853         u8                              bPhyLinkInProgressStartLL;
854         u8                              BtCurrentPhyLinkhandle;
855         u16                             BtCurrentLogLinkhandle;
856         u8                              CurrentConnectEntryNum;
857         u8                              DisconnectEntryNum;
858         u8                              CurrentBTConnectionCnt;
859         enum bt_connect_type            BTCurrentConnectType;
860         enum bt_connect_type            BTReceiveConnectPkt;
861         u8                              BTAuthCount;
862         u8                              BTAsocCount;
863         u8                              bStartSendSupervisionPkt;
864         u8                              BtOperationOn;
865         u8                              BTNeedAMPStatusChg;
866         u8                              JoinerNeedSendAuth;
867         struct hci_phy_link_bss_info    bssDesc;
868         struct hci_ext_config           ExtConfig;
869         u8                              bNeedNotifyAMPNoCap;
870         u8                              bCreateSpportQos;
871         u8                              bSupportProfile;
872         u8                              BTChannel;
873         u8                              CheckChnlIsSuit;
874         u8                              bBtScan;
875         u8                              btLogoTest;
876 };
877
878 struct bt_hci_dgb_info {
879         u32                             hciCmdCnt;
880         u32                             hciCmdCntUnknown;
881         u32                             hciCmdCntCreatePhyLink;
882         u32                             hciCmdCntAcceptPhyLink;
883         u32                             hciCmdCntDisconnectPhyLink;
884         u32                             hciCmdPhyLinkStatus;
885         u32                             hciCmdCntCreateLogLink;
886         u32                             hciCmdCntAcceptLogLink;
887         u32                             hciCmdCntDisconnectLogLink;
888         u32                             hciCmdCntReadLocalAmpAssoc;
889         u32                             hciCmdCntWriteRemoteAmpAssoc;
890         u32                             hciCmdCntSetAclLinkStatus;
891         u32                             hciCmdCntSetScoLinkStatus;
892         u32                             hciCmdCntExtensionVersionNotify;
893         u32                             hciCmdCntLinkStatusNotify;
894 };
895
896 struct bt_irp_dgb_info {
897         u32                             irpMJCreate;
898         /*  Io Control */
899         u32                             irpIoControl;
900         u32                             irpIoCtrlHciCmd;
901         u32                             irpIoCtrlHciEvent;
902         u32                             irpIoCtrlHciTxData;
903         u32                             irpIoCtrlHciRxData;
904         u32                             irpIoCtrlUnknown;
905
906         u32                             irpIoCtrlHciTxData1s;
907 };
908
909 struct bt_packet_dgb_info {
910         u32                             btPktTxProbReq;
911         u32                             btPktRxProbReq;
912         u32                             btPktRxProbReqFail;
913         u32                             btPktTxProbRsp;
914         u32                             btPktRxProbRsp;
915         u32                             btPktTxAuth;
916         u32                             btPktRxAuth;
917         u32                             btPktRxAuthButDrop;
918         u32                             btPktTxAssocReq;
919         u32                             btPktRxAssocReq;
920         u32                             btPktRxAssocReqButDrop;
921         u32                             btPktTxAssocRsp;
922         u32                             btPktRxAssocRsp;
923         u32                             btPktTxDisassoc;
924         u32                             btPktRxDisassoc;
925         u32                             btPktRxDeauth;
926         u32                             btPktTx4way1st;
927         u32                             btPktRx4way1st;
928         u32                             btPktTx4way2nd;
929         u32                             btPktRx4way2nd;
930         u32                             btPktTx4way3rd;
931         u32                             btPktRx4way3rd;
932         u32                             btPktTx4way4th;
933         u32                             btPktRx4way4th;
934         u32                             btPktTxLinkSuperReq;
935         u32                             btPktRxLinkSuperReq;
936         u32                             btPktTxLinkSuperRsp;
937         u32                             btPktRxLinkSuperRsp;
938         u32                             btPktTxData;
939         u32                             btPktRxData;
940 };
941
942 struct bt_dgb {
943         u8                              dbgCtrl;
944         u32                             dbgProfile;
945         struct bt_hci_dgb_info          dbgHciInfo;
946         struct bt_irp_dgb_info          dbgIrpInfo;
947         struct bt_packet_dgb_info       dbgBtPkt;
948 };
949
950 struct bt_hci_info {
951         /* 802.11 Pal version specifier */
952         u8                              BTPalVersion;
953         u16                             BTPalCompanyID;
954         u16                             BTPalsubversion;
955
956         /* Connected channel list */
957         u16                             BTConnectChnlListLen;
958         u8                              BTConnectChnllist[64];
959
960         /* Fail contact counter */
961         u16                             FailContactCount;
962
963         /* Event mask */
964         u64                             BTEventMask;
965         u64                             BTEventMaskPage2;
966
967         /* timeout var */
968         u16                             ConnAcceptTimeout;
969         u16                             LogicalAcceptTimeout;
970         u16                             PageTimeout;
971
972         u8                              LocationDomainAware;
973         u16                             LocationDomain;
974         u8                              LocationDomainOptions;
975         u8                              LocationOptions;
976
977         u8                              FlowControlMode;
978
979         /* Preferred channel list */
980         u16                             BtPreChnlListLen;
981         u8                              BTPreChnllist[64];
982
983         u16                             enFlush_LLH;    /* enhanced flush handle */
984         u16                             FLTO_LLH;               /* enhanced flush handle */
985
986         /*  */
987         /* Test command only. */
988         u8                              bInTestMode;
989         u8                              bTestIsEnd;
990         u8                              bTestNeedReport;
991         u8                              TestScenario;
992         u8                              TestReportInterval;
993         u8                              TestCtrType;
994         u32                             TestEventType;
995         u16                             TestNumOfFrame;
996         u16                             TestNumOfErrFrame;
997         u16                             TestNumOfBits;
998         u16                             TestNumOfErrBits;
999         /*  */
1000 };
1001
1002 struct bt_traffic {
1003         /*  Add for check replay data */
1004         u8                                      LastRxUniFragNum;
1005         u16                                     LastRxUniSeqNum;
1006
1007         /* s32                                  EntryMaxUndecoratedSmoothedPWDB; */
1008         /* s32                                  EntryMinUndecoratedSmoothedPWDB; */
1009
1010         struct bt_traffic_statistics            Bt30TrafficStatistics;
1011 };
1012
1013 #define RT_WORK_ITEM struct work_struct
1014
1015 struct bt_security {
1016         /*  WPA auth state
1017          *  May need to remove to BTSecInfo ... 
1018          * enum bt_state_wpa_auth BTWPAAuthState;
1019          */
1020         struct octet_string     RSNIE;
1021         u8                      RSNIEBuf[MAXRSNIELEN];
1022         u8                      bRegNoEncrypt;
1023         u8                      bUsedHwEncrypt;
1024 };
1025
1026 struct bt_30info {
1027         struct rtw_adapter      *padapter;
1028         struct bt_asoc_entry            BtAsocEntry[MAX_BT_ASOC_ENTRY_NUM];
1029         struct bt_mgnt                          BtMgnt;
1030         struct bt_dgb                           BtDbg;
1031         struct bt_hci_info                      BtHciInfo;
1032         struct bt_traffic                       BtTraffic;
1033         struct bt_security                      BtSec;
1034         RT_WORK_ITEM            HCICmdWorkItem;
1035         struct timer_list BTHCICmdTimer;
1036         RT_WORK_ITEM            BTPsDisableWorkItem;
1037         RT_WORK_ITEM            BTConnectWorkItem;
1038         struct timer_list BTHCIDiscardAclDataTimer;
1039         struct timer_list BTHCIJoinTimeoutTimer;
1040         struct timer_list BTTestSendPacketTimer;
1041         struct timer_list BTDisconnectPhyLinkTimer;
1042         struct timer_list BTBeaconTimer;
1043         u8                              BTBeaconTmrOn;
1044
1045         struct timer_list BTPsDisableTimer;
1046
1047         void *                          pBtChnlList;
1048 };
1049
1050 struct packet_irp_acl_data {
1051         u16             Handle:12;
1052         u16             PB_Flag:2;
1053         u16             BC_Flag:2;
1054         u16             Length;
1055         u8              Data[1];
1056 };
1057
1058 struct packet_irp_hcievent_data {
1059         u8              EventCode;
1060         u8              Length;
1061         u8              Data[20];
1062 };
1063
1064 struct common_triple {
1065         u8 byte_1st;
1066         u8 byte_2nd;
1067         u8 byte_3rd;
1068 };
1069
1070 #define COUNTRY_STR_LEN         3       /*  country string len = 3 */
1071
1072 #define LOCAL_PMK       0
1073
1074 enum hci_wifi_connect_status {
1075         HCI_WIFI_NOT_CONNECTED                  = 0x0,
1076         HCI_WIFI_CONNECTED                      = 0x1,
1077         HCI_WIFI_CONNECT_IN_PROGRESS            = 0x2,
1078 };
1079
1080 enum hci_ext_bp_operation {
1081         HCI_BT_OP_NONE                          = 0x0,
1082         HCI_BT_OP_INQUIRY_START                 = 0x1,
1083         HCI_BT_OP_INQUIRY_FINISH                = 0x2,
1084         HCI_BT_OP_PAGING_START                  = 0x3,
1085         HCI_BT_OP_PAGING_SUCCESS                = 0x4,
1086         HCI_BT_OP_PAGING_UNSUCCESS              = 0x5,
1087         HCI_BT_OP_PAIRING_START                 = 0x6,
1088         HCI_BT_OP_PAIRING_FINISH                = 0x7,
1089         HCI_BT_OP_BT_DEV_ENABLE                 = 0x8,
1090         HCI_BT_OP_BT_DEV_DISABLE                = 0x9,
1091         HCI_BT_OP_MAX
1092 };
1093
1094 /*      Function proto type */
1095 struct btdata_entry {
1096         struct list_head        List;
1097         void                    *pDataBlock;
1098 };
1099
1100 #define BTHCI_SM_WITH_INFO(_Adapter, _StateToEnter, _StateCmd, _EntryNum)       \
1101 {                                                                               \
1102         RTPRINT(FIOCTL, IOCTL_STATE, ("[BT state change] caused by ""%s"", line =%d\n", __FUNCTION__, __LINE__));                                                       \
1103         BTHCI_StateMachine(_Adapter, _StateToEnter, _StateCmd, _EntryNum);\
1104 }
1105
1106 void BTHCI_EventParse(struct rtw_adapter * padapter, void *pEvntData, u32 dataLen);
1107 #define BT_EventParse BTHCI_EventParse
1108 u8 BTHCI_HsConnectionEstablished(struct rtw_adapter * padapter);
1109 void BTHCI_UpdateBTProfileRTKToMoto(struct rtw_adapter * padapter);
1110 void BTHCI_WifiScanNotify(struct rtw_adapter * padapter, u8 scanType);
1111 void BTHCI_StateMachine(struct rtw_adapter * padapter, u8 StateToEnter, enum hci_state_with_cmd StateCmd, u8 EntryNum);
1112 void BTHCI_DisconnectPeer(struct rtw_adapter * padapter, u8 EntryNum);
1113 void BTHCI_EventNumOfCompletedDataBlocks(struct rtw_adapter * padapter);
1114 void BTHCI_EventAMPStatusChange(struct rtw_adapter * padapter, u8 AMP_Status);
1115 void BTHCI_DisconnectAll(struct rtw_adapter * padapter);
1116 enum hci_status BTHCI_HandleHCICMD(struct rtw_adapter * padapter, struct packet_irp_hcicmd_data *pHciCmd);
1117
1118 /*  ===== End of sync from SD7 driver COMMON/bt_hci.h ===== */
1119
1120 /*  ===== Below this line is sync from SD7 driver HAL/BTCoexist/HalBtc87231Ant.h ===== */
1121 #define GET_BT_INFO(padapter)   (&GET_HAL_DATA(padapter)->BtInfo)
1122
1123 #define BTC_FOR_SCAN_START                              1
1124 #define BTC_FOR_SCAN_FINISH                             0
1125
1126 #define BT_TXRX_CNT_THRES_1                             1200
1127 #define BT_TXRX_CNT_THRES_2                             1400
1128 #define BT_TXRX_CNT_THRES_3                             3000
1129 #define BT_TXRX_CNT_LEVEL_0                             0       /*  < 1200 */
1130 #define BT_TXRX_CNT_LEVEL_1                             1       /*  >= 1200 && < 1400 */
1131 #define BT_TXRX_CNT_LEVEL_2                             2       /*  >= 1400 */
1132 #define BT_TXRX_CNT_LEVEL_3                             3       /*  >= 3000 */
1133
1134 enum bt_state_1ant {
1135         BT_INFO_STATE_DISABLED                  = 0,
1136         BT_INFO_STATE_NO_CONNECTION             = 1,
1137         BT_INFO_STATE_CONNECT_IDLE              = 2,
1138         BT_INFO_STATE_INQ_OR_PAG                = 3,
1139         BT_INFO_STATE_ACL_ONLY_BUSY             = 4,
1140         BT_INFO_STATE_SCO_ONLY_BUSY             = 5,
1141         BT_INFO_STATE_ACL_SCO_BUSY              = 6,
1142         BT_INFO_STATE_ACL_INQ_OR_PAG            = 7,
1143         BT_INFO_STATE_MAX                       = 8
1144 };
1145
1146 struct btdm_8723a_1ant {
1147         u8              prePsTdma;
1148         u8              curPsTdma;
1149         u8              psTdmaDuAdjType;
1150         u8              bPrePsTdmaOn;
1151         u8              bCurPsTdmaOn;
1152         u8              preWifiPara;
1153         u8              curWifiPara;
1154         u8              preCoexWifiCon;
1155         u8              curCoexWifiCon;
1156         u8              wifiRssiThresh;
1157
1158         u32             psTdmaMonitorCnt;
1159         u32             psTdmaGlobalCnt;
1160
1161         /* DurationAdjust For SCO */
1162         u32             psTdmaMonitorCntForSCO;
1163         u8              psTdmaDuAdjTypeForSCO;
1164         u8              RSSI_WiFi_Last;
1165         u8              RSSI_BT_Last;
1166
1167         u8              bWiFiHalt;
1168         u8              bRAChanged;
1169 };
1170
1171 void BTDM_1AntSignalCompensation(struct rtw_adapter * padapter, u8 *rssi_wifi, u8 *rssi_bt);
1172 void BTDM_1AntForDhcp(struct rtw_adapter * padapter);
1173 void BTDM_1AntBtCoexist8723A(struct rtw_adapter * padapter);
1174
1175 /*  ===== End of sync from SD7 driver HAL/BTCoexist/HalBtc87231Ant.h ===== */
1176
1177 /*  ===== Below this line is sync from SD7 driver HAL/BTCoexist/HalBtc87232Ant.h ===== */
1178 enum bt_2ant_bt_status {
1179         BT_2ANT_BT_STATUS_IDLE                  = 0x0,
1180         BT_2ANT_BT_STATUS_CONNECTED_IDLE        = 0x1,
1181         BT_2ANT_BT_STATUS_NON_IDLE              = 0x2,
1182         BT_2ANT_BT_STATUS_MAX
1183 };
1184
1185 enum bt_2ant_coex_algo {
1186         BT_2ANT_COEX_ALGO_UNDEFINED                     = 0x0,
1187         BT_2ANT_COEX_ALGO_SCO                           = 0x1,
1188         BT_2ANT_COEX_ALGO_HID                           = 0x2,
1189         BT_2ANT_COEX_ALGO_A2DP                          = 0x3,
1190         BT_2ANT_COEX_ALGO_PANEDR                        = 0x4,
1191         BT_2ANT_COEX_ALGO_PANHS                         = 0x5,
1192         BT_2ANT_COEX_ALGO_PANEDR_A2DP           = 0x6,
1193         BT_2ANT_COEX_ALGO_PANEDR_HID            = 0x7,
1194         BT_2ANT_COEX_ALGO_HID_A2DP_PANEDR       = 0x8,
1195         BT_2ANT_COEX_ALGO_HID_A2DP                      = 0x9,
1196         BT_2ANT_COEX_ALGO_HID_A2DP_PANHS        = 0xA,
1197         BT_2ANT_COEX_ALGO_MAX                           = 0xB,
1198 };
1199
1200 struct btdm_8723a_2ant {
1201         u8      bPreDecBtPwr;
1202         u8      bCurDecBtPwr;
1203
1204         u8      preWlanActHi;
1205         u8      curWlanActHi;
1206         u8      preWlanActLo;
1207         u8      curWlanActLo;
1208
1209         u8      preFwDacSwingLvl;
1210         u8      curFwDacSwingLvl;
1211
1212         u8      bPreRfRxLpfShrink;
1213         u8      bCurRfRxLpfShrink;
1214
1215         u8      bPreLowPenaltyRa;
1216         u8      bCurLowPenaltyRa;
1217
1218         u8      preBtRetryIndex;
1219         u8      curBtRetryIndex;
1220
1221         u8      bPreDacSwingOn;
1222         u32     preDacSwingLvl;
1223         u8      bCurDacSwingOn;
1224         u32     curDacSwingLvl;
1225
1226         u8      bPreAdcBackOff;
1227         u8      bCurAdcBackOff;
1228
1229         u8      bPreAgcTableEn;
1230         u8      bCurAgcTableEn;
1231
1232         u32     preVal0x6c0;
1233         u32     curVal0x6c0;
1234         u32     preVal0x6c8;
1235         u32     curVal0x6c8;
1236         u8      preVal0x6cc;
1237         u8      curVal0x6cc;
1238
1239         u8      bCurIgnoreWlanAct;
1240         u8      bPreIgnoreWlanAct;
1241
1242         u8      prePsTdma;
1243         u8      curPsTdma;
1244         u8      psTdmaDuAdjType;
1245         u8      bPrePsTdmaOn;
1246         u8      bCurPsTdmaOn;
1247
1248         u8      preAlgorithm;
1249         u8      curAlgorithm;
1250         u8      bResetTdmaAdjust;
1251
1252         u8      btStatus;
1253 };
1254
1255 void BTDM_2AntBtCoexist8723A(struct rtw_adapter * padapter);
1256 /*  ===== End of sync from SD7 driver HAL/BTCoexist/HalBtc87232Ant.h ===== */
1257
1258 /*  ===== Below this line is sync from SD7 driver HAL/BTCoexist/HalBtc8723.h ===== */
1259
1260 #define BT_Q_PKT_OFF            0
1261 #define BT_Q_PKT_ON             1
1262
1263 #define BT_TX_PWR_OFF           0
1264 #define BT_TX_PWR_ON            1
1265
1266 /*  TDMA mode definition */
1267 #define TDMA_2ANT                       0
1268 #define TDMA_1ANT                       1
1269 #define TDMA_NAV_OFF            0
1270 #define TDMA_NAV_ON             1
1271 #define TDMA_DAC_SWING_OFF      0
1272 #define TDMA_DAC_SWING_ON       1
1273
1274 #define BT_RSSI_LEVEL_H 0
1275 #define BT_RSSI_LEVEL_M 1
1276 #define BT_RSSI_LEVEL_L 2
1277
1278 /*  PTA mode related definition */
1279 #define BT_PTA_MODE_OFF         0
1280 #define BT_PTA_MODE_ON          1
1281
1282 /*  Penalty Tx Rate Adaptive */
1283 #define BT_TX_RATE_ADAPTIVE_NORMAL                      0
1284 #define BT_TX_RATE_ADAPTIVE_LOW_PENALTY 1
1285
1286 /*  RF Corner */
1287 #define BT_RF_RX_LPF_CORNER_RESUME                      0
1288 #define BT_RF_RX_LPF_CORNER_SHRINK                      1
1289
1290 #define BT_INFO_ACL                     BIT(0)
1291 #define BT_INFO_SCO                     BIT(1)
1292 #define BT_INFO_INQ_PAG         BIT(2)
1293 #define BT_INFO_ACL_BUSY        BIT(3)
1294 #define BT_INFO_SCO_BUSY        BIT(4)
1295 #define BT_INFO_HID                     BIT(5)
1296 #define BT_INFO_A2DP            BIT(6)
1297 #define BT_INFO_FTP                     BIT(7)
1298
1299
1300
1301 struct bt_coexist_8723a {
1302         u32                                     highPriorityTx;
1303         u32                                     highPriorityRx;
1304         u32                                     lowPriorityTx;
1305         u32                                     lowPriorityRx;
1306         u8                                      btRssi;
1307         u8                                      TotalAntNum;
1308         u8                                      bC2hBtInfoSupport;
1309         u8                                      c2hBtInfo;
1310         u8                                      c2hBtInfoOriginal;
1311         u8                                      prec2hBtInfo; /*  for 1Ant */
1312         u8                                      bC2hBtInquiryPage;
1313         unsigned long                           btInqPageStartTime; /*  for 2Ant */
1314         u8                                      c2hBtProfile; /*  for 1Ant */
1315         u8                                      btRetryCnt;
1316         u8                                      btInfoExt;
1317         u8                                      bC2hBtInfoReqSent;
1318         u8                                      bForceFwBtInfo;
1319         u8                                      bForceA2dpSink;
1320         struct btdm_8723a_2ant                  btdm2Ant;
1321         struct btdm_8723a_1ant                  btdm1Ant;
1322 };
1323
1324 void BTDM_SetFwChnlInfo(struct rtw_adapter * padapter, enum rt_media_status mstatus);
1325 u8 BTDM_IsWifiConnectionExist(struct rtw_adapter * padapter);
1326 void BTDM_SetFw3a(struct rtw_adapter * padapter, u8 byte1, u8 byte2, u8 byte3, u8 byte4, u8 byte5);
1327 void BTDM_QueryBtInformation(struct rtw_adapter * padapter);
1328 void BTDM_SetSwRfRxLpfCorner(struct rtw_adapter * padapter, u8 type);
1329 void BTDM_SetSwPenaltyTxRateAdaptive(struct rtw_adapter * padapter, u8 raType);
1330 void BTDM_SetFwDecBtPwr(struct rtw_adapter * padapter, u8 bDecBtPwr);
1331 u8 BTDM_BtProfileSupport(struct rtw_adapter * padapter);
1332 void BTDM_LpsLeave(struct rtw_adapter * padapter);
1333 u8 BTDM_1Ant8723A(struct rtw_adapter * padapter);
1334 #define BT_1Ant BTDM_1Ant8723A
1335
1336 /*  ===== End of sync from SD7 driver HAL/BTCoexist/HalBtc8723.h ===== */
1337
1338 /*  ===== Below this line is sync from SD7 driver HAL/BTCoexist/HalBtcCsr1Ant.h ===== */
1339
1340 enum BT_A2DP_INDEX{
1341         BT_A2DP_INDEX0          = 0,                    /*  32, 12; the most critical for BT */
1342         BT_A2DP_INDEX1,                                 /*  12, 24 */
1343         BT_A2DP_INDEX2,                                 /*  0, 0 */
1344         BT_A2DP_INDEX_MAX
1345 };
1346
1347 #define BT_A2DP_STATE_NOT_ENTERED               0
1348 #define BT_A2DP_STATE_DETECTING         1
1349 #define BT_A2DP_STATE_DETECTED                  2
1350
1351 #define BTDM_ANT_BT_IDLE                                0
1352 #define BTDM_ANT_WIFI                                   1
1353 #define BTDM_ANT_BT                                             2
1354
1355
1356 void BTDM_SingleAnt(struct rtw_adapter * padapter, u8 bSingleAntOn, u8 bInterruptOn, u8 bMultiNAVOn);
1357 void BTDM_CheckBTIdleChange1Ant(struct rtw_adapter * padapter);
1358
1359 /*  ===== End of sync from SD7 driver HAL/BTCoexist/HalBtcCsr1Ant.h ===== */
1360
1361 /*  ===== Below this line is sync from SD7 driver HAL/BTCoexist/HalBtcCsr2Ant.h ===== */
1362
1363 /*  */
1364 /*  For old core stack before v251 */
1365 /*  */
1366 #define BT_RSSI_STATE_NORMAL_POWER      BIT(0)
1367 #define BT_RSSI_STATE_AMDPU_OFF         BIT(1)
1368 #define BT_RSSI_STATE_SPECIAL_LOW       BIT(2)
1369 #define BT_RSSI_STATE_BG_EDCA_LOW       BIT(3)
1370 #define BT_RSSI_STATE_TXPOWER_LOW       BIT(4)
1371
1372 #define BT_DACSWING_OFF                         0
1373 #define BT_DACSWING_M4                          1
1374 #define BT_DACSWING_M7                          2
1375 #define BT_DACSWING_M10                         3
1376
1377 void BTDM_DiminishWiFi(struct rtw_adapter * Adapter, u8 bDACOn, u8 bInterruptOn, u8 DACSwingLevel, u8 bNAVOn);
1378
1379 /*  ===== End of sync from SD7 driver HAL/BTCoexist/HalBtcCsr2Ant.h ===== */
1380
1381 /*  HEADER/TypeDef.h */
1382 #define MAX_FW_SUPPORT_MACID_NUM                        64
1383
1384 /*  ===== Below this line is sync from SD7 driver HAL/BTCoexist/HalBtCoexist.h ===== */
1385
1386 #define FW_VER_BT_REG                   62
1387 #define FW_VER_BT_REG1          74
1388 #define REG_BT_ACTIVE                   0x444
1389 #define REG_BT_STATE                    0x448
1390 #define REG_BT_POLLING1         0x44c
1391 #define REG_BT_POLLING                  0x700
1392
1393 #define REG_BT_ACTIVE_OLD               0x488
1394 #define REG_BT_STATE_OLD                0x48c
1395 #define REG_BT_POLLING_OLD      0x490
1396
1397 /*  The reg define is for 8723 */
1398 #define REG_HIGH_PRIORITY_TXRX                  0x770
1399 #define REG_LOW_PRIORITY_TXRX                   0x774
1400
1401 #define BT_FW_COEX_THRESH_TOL                   6
1402 #define BT_FW_COEX_THRESH_20                            20
1403 #define BT_FW_COEX_THRESH_23                            23
1404 #define BT_FW_COEX_THRESH_25                            25
1405 #define BT_FW_COEX_THRESH_30                            30
1406 #define BT_FW_COEX_THRESH_35                            35
1407 #define BT_FW_COEX_THRESH_40                            40
1408 #define BT_FW_COEX_THRESH_45                            45
1409 #define BT_FW_COEX_THRESH_47                            47
1410 #define BT_FW_COEX_THRESH_50                            50
1411 #define BT_FW_COEX_THRESH_55                            55
1412 #define BT_FW_COEX_THRESH_65                            65
1413
1414 #define BT_COEX_STATE_BT30                      BIT(0)
1415 #define BT_COEX_STATE_WIFI_HT20                 BIT(1)
1416 #define BT_COEX_STATE_WIFI_HT40                 BIT(2)
1417 #define BT_COEX_STATE_WIFI_LEGACY               BIT(3)
1418
1419 #define BT_COEX_STATE_WIFI_RSSI_LOW             BIT(4)
1420 #define BT_COEX_STATE_WIFI_RSSI_MEDIUM          BIT(5)
1421 #define BT_COEX_STATE_WIFI_RSSI_HIGH            BIT(6)
1422 #define BT_COEX_STATE_DEC_BT_POWER              BIT(7)
1423
1424 #define BT_COEX_STATE_WIFI_IDLE                 BIT(8)
1425 #define BT_COEX_STATE_WIFI_UPLINK               BIT(9)
1426 #define BT_COEX_STATE_WIFI_DOWNLINK             BIT(10)
1427
1428 #define BT_COEX_STATE_BT_INQ_PAGE               BIT(11)
1429 #define BT_COEX_STATE_BT_IDLE                   BIT(12)
1430 #define BT_COEX_STATE_BT_UPLINK                 BIT(13)
1431 #define BT_COEX_STATE_BT_DOWNLINK               BIT(14)
1432 /*  */
1433 /*  Todo: Remove these definitions */
1434 #define BT_COEX_STATE_BT_PAN_IDLE               BIT(15)
1435 #define BT_COEX_STATE_BT_PAN_UPLINK             BIT(16)
1436 #define BT_COEX_STATE_BT_PAN_DOWNLINK           BIT(17)
1437 #define BT_COEX_STATE_BT_A2DP_IDLE              BIT(18)
1438 /*  */
1439 #define BT_COEX_STATE_BT_RSSI_LOW               BIT(19)
1440
1441 #define BT_COEX_STATE_PROFILE_HID               BIT(20)
1442 #define BT_COEX_STATE_PROFILE_A2DP              BIT(21)
1443 #define BT_COEX_STATE_PROFILE_PAN               BIT(22)
1444 #define BT_COEX_STATE_PROFILE_SCO               BIT(23)
1445
1446 #define BT_COEX_STATE_WIFI_RSSI_1_LOW           BIT(24)
1447 #define BT_COEX_STATE_WIFI_RSSI_1_MEDIUM        BIT(25)
1448 #define BT_COEX_STATE_WIFI_RSSI_1_HIGH          BIT(26)
1449
1450 #define BT_COEX_STATE_WIFI_RSSI_BEACON_LOW      BIT(27)
1451 #define BT_COEX_STATE_WIFI_RSSI_BEACON_MEDIUM   BIT(28)
1452 #define BT_COEX_STATE_WIFI_RSSI_BEACON_HIGH     BIT(29)
1453
1454
1455 #define BT_COEX_STATE_BTINFO_COMMON             BIT(30)
1456 #define BT_COEX_STATE_BTINFO_B_HID_SCOESCO      BIT(31)
1457 #define BT_COEX_STATE_BTINFO_B_FTP_A2DP         BIT(32)
1458
1459 #define BT_COEX_STATE_BT_CNT_LEVEL_0            BIT(33)
1460 #define BT_COEX_STATE_BT_CNT_LEVEL_1            BIT(34)
1461 #define BT_COEX_STATE_BT_CNT_LEVEL_2            BIT(35)
1462 #define BT_COEX_STATE_BT_CNT_LEVEL_3            BIT(36)
1463
1464 #define BT_RSSI_STATE_HIGH                      0
1465 #define BT_RSSI_STATE_MEDIUM                    1
1466 #define BT_RSSI_STATE_LOW                       2
1467 #define BT_RSSI_STATE_STAY_HIGH                 3
1468 #define BT_RSSI_STATE_STAY_MEDIUM               4
1469 #define BT_RSSI_STATE_STAY_LOW                  5
1470
1471 #define BT_AGCTABLE_OFF                         0
1472 #define BT_AGCTABLE_ON                          1
1473
1474 #define BT_BB_BACKOFF_OFF                       0
1475 #define BT_BB_BACKOFF_ON                        1
1476
1477 #define BT_FW_NAV_OFF                           0
1478 #define BT_FW_NAV_ON                            1
1479
1480 #define BT_COEX_MECH_NONE                       0
1481 #define BT_COEX_MECH_SCO                        1
1482 #define BT_COEX_MECH_HID                        2
1483 #define BT_COEX_MECH_A2DP                       3
1484 #define BT_COEX_MECH_PAN                        4
1485 #define BT_COEX_MECH_HID_A2DP                   5
1486 #define BT_COEX_MECH_HID_PAN                    6
1487 #define BT_COEX_MECH_PAN_A2DP                   7
1488 #define BT_COEX_MECH_HID_SCO_ESCO               8
1489 #define BT_COEX_MECH_FTP_A2DP                   9
1490 #define BT_COEX_MECH_COMMON                     10
1491 #define BT_COEX_MECH_MAX                        11
1492 /*      BT Dbg Ctrl */
1493 #define BT_DBG_PROFILE_NONE                     0
1494 #define BT_DBG_PROFILE_SCO                      1
1495 #define BT_DBG_PROFILE_HID                      2
1496 #define BT_DBG_PROFILE_A2DP                     3
1497 #define BT_DBG_PROFILE_PAN                      4
1498 #define BT_DBG_PROFILE_HID_A2DP                 5
1499 #define BT_DBG_PROFILE_HID_PAN                  6
1500 #define BT_DBG_PROFILE_PAN_A2DP                 7
1501 #define BT_DBG_PROFILE_MAX                      9
1502
1503 struct bt_coexist_str {
1504         u8                      BluetoothCoexist;
1505         u8                      BT_Ant_Num;
1506         u8                      BT_CoexistType;
1507         u8                      BT_Ant_isolation;       /* 0:good, 1:bad */
1508         u8                      bt_radiosharedtype;
1509         u32                     Ratio_Tx;
1510         u32                     Ratio_PRI;
1511         u8                      bInitlized;
1512         u32                     BtRfRegOrigin1E;
1513         u32                     BtRfRegOrigin1F;
1514         u8                      bBTBusyTraffic;
1515         u8                      bBTTrafficModeSet;
1516         u8                      bBTNonTrafficModeSet;
1517         struct bt_traffic_statistics            BT21TrafficStatistics;
1518         u64                     CurrentState;
1519         u64                     PreviousState;
1520         u8                      preRssiState;
1521         u8                      preRssiState1;
1522         u8                      preRssiStateBeacon;
1523         u8                      bFWCoexistAllOff;
1524         u8                      bSWCoexistAllOff;
1525         u8                      bHWCoexistAllOff;
1526         u8                      bBalanceOn;
1527         u8                      bSingleAntOn;
1528         u8                      bInterruptOn;
1529         u8                      bMultiNAVOn;
1530         u8                      PreWLANActH;
1531         u8                      PreWLANActL;
1532         u8                      WLANActH;
1533         u8                      WLANActL;
1534         u8                      A2DPState;
1535         u8                      AntennaState;
1536         u32                     lastBtEdca;
1537         u16                     last_aggr_num;
1538         u8                      bEDCAInitialized;
1539         u8                      exec_cnt;
1540         u8                      b8723aAgcTableOn;
1541         u8                      b92DAgcTableOn;
1542         struct bt_coexist_8723a halCoex8723;
1543         u8                      btActiveZeroCnt;
1544         u8                      bCurBtDisabled;
1545         u8                      bPreBtDisabled;
1546         u8                      bNeedToRoamForBtDisableEnable;
1547         u8                      fw3aVal[5];
1548 };
1549
1550 void BTDM_CheckAntSelMode(struct rtw_adapter * padapter);
1551 void BTDM_FwC2hBtRssi(struct rtw_adapter * padapter, u8 *tmpBuf);
1552 #define BT_FwC2hBtRssi BTDM_FwC2hBtRssi
1553 void BTDM_FwC2hBtInfo(struct rtw_adapter * padapter, u8 *tmpBuf, u8 length);
1554 #define BT_FwC2hBtInfo BTDM_FwC2hBtInfo
1555 void BTDM_DisplayBtCoexInfo(struct rtw_adapter * padapter);
1556 #define BT_DisplayBtCoexInfo BTDM_DisplayBtCoexInfo
1557 void BTDM_RejectAPAggregatedPacket(struct rtw_adapter * padapter, u8 bReject);
1558 u8 BTDM_IsHT40(struct rtw_adapter * padapter);
1559 u8 BTDM_Legacy(struct rtw_adapter * padapter);
1560 void BTDM_CheckWiFiState(struct rtw_adapter * padapter);
1561 s32 BTDM_GetRxSS(struct rtw_adapter * padapter);
1562 u8 BTDM_CheckCoexBcnRssiState(struct rtw_adapter * padapter, u8 levelNum, u8 RssiThresh, u8 RssiThresh1);
1563 u8 BTDM_CheckCoexRSSIState1(struct rtw_adapter * padapter, u8 levelNum, u8 RssiThresh, u8 RssiThresh1);
1564 u8 BTDM_CheckCoexRSSIState(struct rtw_adapter * padapter, u8 levelNum, u8 RssiThresh, u8 RssiThresh1);
1565 u8 BTDM_DisableEDCATurbo(struct rtw_adapter * padapter);
1566 #define BT_DisableEDCATurbo BTDM_DisableEDCATurbo
1567 void BTDM_Balance(struct rtw_adapter * padapter, u8 bBalanceOn, u8 ms0, u8 ms1);
1568 void BTDM_AGCTable(struct rtw_adapter * padapter, u8 type);
1569 void BTDM_BBBackOffLevel(struct rtw_adapter * padapter, u8 type);
1570 void BTDM_FWCoexAllOff(struct rtw_adapter * padapter);
1571 void BTDM_SWCoexAllOff(struct rtw_adapter * padapter);
1572 void BTDM_HWCoexAllOff(struct rtw_adapter * padapter);
1573 void BTDM_CoexAllOff(struct rtw_adapter * padapter);
1574 void BTDM_TurnOffBtCoexistBeforeEnterIPS(struct rtw_adapter * padapter);
1575 void BTDM_SignalCompensation(struct rtw_adapter * padapter, u8 *rssi_wifi, u8 *rssi_bt);
1576 void BTDM_Coexist(struct rtw_adapter * padapter);
1577 #define BT_CoexistMechanism BTDM_Coexist
1578 void BTDM_UpdateCoexState(struct rtw_adapter * padapter);
1579 u8 BTDM_IsSameCoexistState(struct rtw_adapter * padapter);
1580 void BTDM_PWDBMonitor(struct rtw_adapter * padapter);
1581 u8 BTDM_IsBTBusy(struct rtw_adapter * padapter);
1582 #define BT_IsBtBusy BTDM_IsBTBusy
1583 u8 BTDM_IsWifiBusy(struct rtw_adapter * padapter);
1584 u8 BTDM_IsCoexistStateChanged(struct rtw_adapter * padapter);
1585 u8 BTDM_IsWifiUplink(struct rtw_adapter * padapter);
1586 u8 BTDM_IsWifiDownlink(struct rtw_adapter * padapter);
1587 u8 BTDM_IsBTHSMode(struct rtw_adapter * padapter);
1588 u8 BTDM_IsBTUplink(struct rtw_adapter * padapter);
1589 u8 BTDM_IsBTDownlink(struct rtw_adapter * padapter);
1590 void BTDM_AdjustForBtOperation(struct rtw_adapter * padapter);
1591 void BTDM_ForHalt(struct rtw_adapter * padapter);
1592 void BTDM_WifiScanNotify(struct rtw_adapter * padapter, u8 scanType);
1593 void BTDM_WifiAssociateNotify(struct rtw_adapter * padapter, u8 action);
1594 void BTDM_MediaStatusNotify(struct rtw_adapter * padapter, enum rt_media_status mstatus);
1595 void BTDM_ForDhcp(struct rtw_adapter * padapter);
1596 void BTDM_ResetActionProfileState(struct rtw_adapter * padapter);
1597 void BTDM_SetBtCoexCurrAntNum(struct rtw_adapter * padapter, u8 antNum);
1598 #define BT_SetBtCoexCurrAntNum BTDM_SetBtCoexCurrAntNum
1599 u8 BTDM_IsActionSCO(struct rtw_adapter * padapter);
1600 u8 BTDM_IsActionHID(struct rtw_adapter * padapter);
1601 u8 BTDM_IsActionA2DP(struct rtw_adapter * padapter);
1602 u8 BTDM_IsActionPAN(struct rtw_adapter * padapter);
1603 u8 BTDM_IsActionHIDA2DP(struct rtw_adapter * padapter);
1604 u8 BTDM_IsActionHIDPAN(struct rtw_adapter * padapter);
1605 u8 BTDM_IsActionPANA2DP(struct rtw_adapter * padapter);
1606 u8 BTDM_IsBtDisabled(struct rtw_adapter * padapter);
1607 #define BT_IsBtDisabled BTDM_IsBtDisabled
1608 u32 BTDM_BtTxRxCounterH(struct rtw_adapter * padapter);
1609 u32 BTDM_BtTxRxCounterL(struct rtw_adapter * padapter);
1610
1611 /*  ===== End of sync from SD7 driver HAL/BTCoexist/HalBtCoexist.h ===== */
1612
1613 /*  ===== Below this line is sync from SD7 driver HAL/HalBT.h ===== */
1614
1615 #define RTS_CTS_NO_LEN_LIMIT    0
1616
1617 u8 HALBT_GetPGAntNum(struct rtw_adapter * padapter);
1618 #define BT_GetPGAntNum HALBT_GetPGAntNum
1619 void HALBT_SetKey(struct rtw_adapter * padapter, u8 EntryNum);
1620 void HALBT_RemoveKey(struct rtw_adapter * padapter, u8 EntryNum);
1621 void HALBT_InitBTVars8723A(struct rtw_adapter * padapter);
1622 #define HALBT_InitHalVars HALBT_InitBTVars8723A
1623 #define BT_InitHalVars HALBT_InitHalVars
1624 u8 HALBT_IsBTExist(struct rtw_adapter * padapter);
1625 #define BT_IsBtExist HALBT_IsBTExist
1626 u8 HALBT_BTChipType(struct rtw_adapter * padapter);
1627 void HALBT_InitHwConfig(struct rtw_adapter * padapter);
1628 #define BT_InitHwConfig HALBT_InitHwConfig
1629 void HALBT_SetRtsCtsNoLenLimit(struct rtw_adapter * padapter);
1630
1631 /*  ===== End of sync from SD7 driver HAL/HalBT.c ===== */
1632
1633 #define _bt_dbg_off_            0
1634 #define _bt_dbg_on_             1
1635
1636 extern u32 BTCoexDbgLevel;
1637
1638
1639
1640 #endif /*  __RTL8723A_BT_COEXIST_H__ */