hc
2023-12-09 b22da3d8526a935aa31e086e63f60ff3246cb61c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
/******************************************************************************
 *
 * Copyright(c) 2013 Realtek Corporation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of version 2 of the GNU General Public License as
 * published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
 * more details.
 *
 * You should have received a copy of the GNU General Public License along with
 * this program; if not, write to the Free Software Foundation, Inc.,
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
 *
 *
 ******************************************************************************/
#ifndef __RTW_BTCOEX_H__
#define __RTW_BTCOEX_H__
 
#include <drv_types.h>
 
/* For H2C: H2C_BT_MP_OPER. Return status definition to the user layer */
typedef enum _BT_CTRL_STATUS {
   BT_STATUS_SUCCESS                                = 0x00, /* Success */
   BT_STATUS_BT_OP_SUCCESS                            = 0x01, /* bt fw op execution success */
   BT_STATUS_H2C_SUCCESS                            = 0x02, /* H2c success */
   BT_STATUS_H2C_FAIL                                = 0x03, /* H2c fail */
   BT_STATUS_H2C_LENGTH_EXCEEDED                    = 0x04, /* H2c command length exceeded */
   BT_STATUS_H2C_TIMTOUT                            = 0x05, /* H2c timeout */
   BT_STATUS_H2C_BT_NO_RSP                            = 0x06, /* H2c sent, bt no rsp */
   BT_STATUS_C2H_SUCCESS                            = 0x07, /* C2h success */
   BT_STATUS_C2H_REQNUM_MISMATCH                    = 0x08, /* bt fw wrong rsp */
   BT_STATUS_OPCODE_U_VERSION_MISMATCH                = 0x08, /* Upper layer OP code version mismatch. */
   BT_STATUS_OPCODE_L_VERSION_MISMATCH                = 0x0a, /* Lower layer OP code version mismatch. */
   BT_STATUS_UNKNOWN_OPCODE_U                        = 0x0b, /* Unknown Upper layer OP code */
   BT_STATUS_UNKNOWN_OPCODE_L                        = 0x0c, /* Unknown Lower layer OP code */
   BT_STATUS_PARAMETER_FORMAT_ERROR_U                = 0x0d, /* Wrong parameters sent by upper layer. */
   BT_STATUS_PARAMETER_FORMAT_ERROR_L                = 0x0e, /* bt fw parameter format is not consistency */
   BT_STATUS_PARAMETER_OUT_OF_RANGE_U                = 0x0f, /* uppery layer parameter value is out of range */
   BT_STATUS_PARAMETER_OUT_OF_RANGE_L                = 0x10, /* bt fw parameter value is out of range */
   BT_STATUS_UNKNOWN_STATUS_L                        = 0x11, /* bt returned an defined status code */
   BT_STATUS_UNKNOWN_STATUS_H                        = 0x12, /* driver need to do error handle or not handle-well. */
   BT_STATUS_WRONG_LEVEL                            = 0x13, /* should be under passive level */
   BT_STATUS_NOT_IMPLEMENT                        = 0x14, /* op code not implemented yet */
   BT_STATUS_BT_STACK_OP_SUCCESS                    = 0x15, /* bt stack op execution success */
   BT_STATUS_BT_STACK_NOT_SUPPORT                    = 0x16, /* stack version not support this. */
   BT_STATUS_BT_STACK_SEND_HCI_EVENT_FAIL            = 0x17, /* send hci event fail */
   BT_STATUS_BT_STACK_NOT_BIND                        = 0x18, /* stack not bind wifi driver */
   BT_STATUS_BT_STACK_NO_RSP                        = 0x19, /* stack doesn't have any rsp. */
   BT_STATUS_MAX
} BT_CTRL_STATUS, *PBT_CTRL_STATUS;
 
#define SET_BT_MP_OPER_RET(OpCode, StatusCode)                        ((OpCode << 8) | StatusCode)
#define GET_OP_CODE_FROM_BT_MP_OPER_RET(RetCode)                    ((RetCode & 0xF0) >> 8)
#define GET_STATUS_CODE_FROM_BT_MP_OPER_RET(RetCode)                (RetCode & 0x0F)
#define CHECK_STATUS_CODE_FROM_BT_MP_OPER_RET(RetCode, StatusCode)    (GET_STATUS_CODE_FROM_BT_MP_OPER_RET(RetCode) == StatusCode)
 
#ifdef CONFIG_BT_COEXIST_SOCKET_TRX
 
#define NETLINK_USER 31
#define CONNECT_PORT 30000
#define CONNECT_PORT_BT 30001
#define KERNEL_SOCKET_OK 0x01    
#define NETLINK_SOCKET_OK 0x02
 
#define OTHER 0
#define RX_ATTEND_ACK 1
#define RX_LEAVE_ACK 2
#define RX_BT_LEAVE 3
#define RX_INVITE_REQ 4
#define RX_ATTEND_REQ 5
#define RX_INVITE_RSP 6
 
#define invite_req "INVITE_REQ"
#define invite_rsp "INVITE_RSP"
#define attend_req "ATTEND_REQ"
#define attend_ack "ATTEND_ACK"
#define wifi_leave "WIFI_LEAVE"
#define leave_ack "LEAVE_ACK"
#define bt_leave "BT_LEAVE"
 
#define BT_INFO_NOTIFY_CMD 0x0106
#define BT_INFO_LEN 8
 
typedef struct _HCI_LINK_INFO{
   u2Byte                    ConnectHandle;
   u1Byte                    IncomingTrafficMode;
   u1Byte                    OutgoingTrafficMode;
   u1Byte                    BTProfile;
   u1Byte                    BTCoreSpec;
   s1Byte                    BT_RSSI;
   u1Byte                    TrafficProfile;
   u1Byte                    linkRole;
}HCI_LINK_INFO, *PHCI_LINK_INFO;
 
#define    MAX_BT_ACL_LINK_NUM                8
 
typedef struct _HCI_EXT_CONFIG{
   HCI_LINK_INFO                aclLink[MAX_BT_ACL_LINK_NUM];
   u1Byte                    btOperationCode;
   u2Byte                    CurrentConnectHandle;
   u1Byte                    CurrentIncomingTrafficMode;
   u1Byte                    CurrentOutgoingTrafficMode;
 
   u1Byte                    NumberOfACL;
   u1Byte                    NumberOfSCO;
   u1Byte                    CurrentBTStatus;
   u2Byte                    HCIExtensionVer;
 
   BOOLEAN                    bEnableWifiScanNotify;
}HCI_EXT_CONFIG, *PHCI_EXT_CONFIG;
 
typedef struct _HCI_PHY_LINK_BSS_INFO{
   u2Byte                        bdCap;            // capability information
 
   // Qos related. Added by Annie, 2005-11-01.
   //BSS_QOS                        BssQos;        
   
}HCI_PHY_LINK_BSS_INFO, *PHCI_PHY_LINK_BSS_INFO;
 
typedef enum _BT_CONNECT_TYPE{
   BT_CONNECT_AUTH_REQ                                =0x00,    
   BT_CONNECT_AUTH_RSP                                =0x01,
   BT_CONNECT_ASOC_REQ                                =0x02,
   BT_CONNECT_ASOC_RSP                                =0x03,
   BT_DISCONNECT                                        =0x04
}BT_CONNECT_TYPE,*PBT_CONNECT_TYPE;
 
 
typedef struct _PACKET_IRP_HCIEVENT_DATA {
       u8        EventCode;
       u8        Length; //total cmd length = extension event length+1(extension event code length)
       u8        Data[1]; // byte1 is extension event code
} rtw_HCI_event;
 
 
struct btinfo_8761ATV {
   u8 cid;
   u8 len;
 
   u8 bConnection:1;
   u8 bSCOeSCO:1;
   u8 bInQPage:1;
   u8 bACLBusy:1;
   u8 bSCOBusy:1;
   u8 bHID:1;
   u8 bA2DP:1;
   u8 bFTP:1;
 
   u8 retry_cnt:4;
   u8 rsvd_34:1;
   u8 bPage:1;
   u8 TRxMask:1;
   u8 Sniff_attempt:1;
 
   u8 rssi;
 
   u8 A2dp_rate:1;
   u8 ReInit:1;
   u8 MaxPower:1;
   u8 bEnIgnoreWlanAct:1;
   u8 TxPowerLow:1;
   u8 TxPowerHigh:1;
   u8 eSCO_SCO:1;
   u8 Master_Slave:1;
 
   u8 ACL_TRx_TP_low;
   u8 ACL_TRx_TP_high;
};
 
#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 HCI_OGF(opCode)  (unsigned char)((0xFC00 & (opCode)) >> 10)
#define HCI_OCF(opCode)  ( 0x3FF & (opCode))
 
 
typedef enum _HCI_STATUS{
   HCI_STATUS_SUCCESS                                        =0x00, //Success
   HCI_STATUS_UNKNOW_HCI_CMD                                =0x01, //Unknown HCI Command
   HCI_STATUS_UNKNOW_CONNECT_ID                            =0X02, //Unknown Connection Identifier
   HCI_STATUS_HW_FAIL                                        =0X03, //Hardware Failure
   HCI_STATUS_PAGE_TIMEOUT                                    =0X04, //Page Timeout
   HCI_STATUS_AUTH_FAIL                                        =0X05, //Authentication Failure
   HCI_STATUS_PIN_OR_KEY_MISSING                            =0X06, //PIN or Key Missing
   HCI_STATUS_MEM_CAP_EXCEED                                =0X07, //Memory Capacity Exceeded
   HCI_STATUS_CONNECT_TIMEOUT                                =0X08, //Connection Timeout
   HCI_STATUS_CONNECT_LIMIT                                    =0X09, //Connection Limit Exceeded
   HCI_STATUS_SYN_CONNECT_LIMIT                                =0X0a, //Synchronous Connection Limit To A Device Exceeded
   HCI_STATUS_ACL_CONNECT_EXISTS                            =0X0b, //ACL Connection Already Exists
   HCI_STATUS_CMD_DISALLOW                                    =0X0c, //Command Disallowed
   HCI_STATUS_CONNECT_RJT_LIMIT_RESOURCE                    =0X0d, //Connection Rejected due to Limited Resources
   HCI_STATUS_CONNECT_RJT_SEC_REASON                        =0X0e, //Connection Rejected Due To Security Reasons
   HCI_STATUS_CONNECT_RJT_UNACCEPT_BD_ADDR                =0X0f, //Connection Rejected due to Unacceptable BD_ADDR
   HCI_STATUS_CONNECT_ACCEPT_TIMEOUT                        =0X10, //Connection Accept Timeout Exceeded
   HCI_STATUS_UNSUPPORT_FEATURE_PARA_VALUE                =0X11, //Unsupported Feature or Parameter Value
   HCI_STATUS_INVALID_HCI_CMD_PARA_VALUE                    =0X12, //Invalid HCI Command Parameters
   HCI_STATUS_REMOTE_USER_TERMINATE_CONNECT                =0X13, //Remote User Terminated Connection
   HCI_STATUS_REMOTE_DEV_TERMINATE_LOW_RESOURCE            =0X14, //Remote Device Terminated Connection due to Low Resources
   HCI_STATUS_REMOTE_DEV_TERMINATE_CONNECT_POWER_OFF    =0X15, //Remote Device Terminated Connection due to Power Off
   HCI_STATUS_CONNECT_TERMINATE_LOCAL_HOST                =0X16, //Connection Terminated By Local Host
   HCI_STATUS_REPEATE_ATTEMPT                                =0X17, //Repeated Attempts
   HCI_STATUS_PAIR_NOT_ALLOW                                =0X18, //Pairing Not Allowed
   HCI_STATUS_UNKNOW_LMP_PDU                                =0X19, //Unknown LMP PDU
   HCI_STATUS_UNSUPPORT_REMOTE_LMP_FEATURE                =0X1a, //Unsupported Remote Feature / Unsupported LMP Feature
   HCI_STATUS_SOC_OFFSET_REJECT                                =0X1b, //SCO Offset Rejected
   HCI_STATUS_SOC_INTERVAL_REJECT                            =0X1c, //SCO Interval Rejected
   HCI_STATUS_SOC_AIR_MODE_REJECT                            =0X1d,//SCO Air Mode Rejected
   HCI_STATUS_INVALID_LMP_PARA                                =0X1e, //Invalid LMP Parameters
   HCI_STATUS_UNSPECIFIC_ERROR                                =0X1f, //Unspecified Error
   HCI_STATUS_UNSUPPORT_LMP_PARA_VALUE                    =0X20, //Unsupported LMP Parameter Value
   HCI_STATUS_ROLE_CHANGE_NOT_ALLOW                        =0X21, //Role Change Not Allowed
   HCI_STATUS_LMP_RESPONSE_TIMEOUT                            =0X22, //LMP Response Timeout
   HCI_STATUS_LMP_ERROR_TRANSACTION_COLLISION                =0X23, //LMP Error Transaction Collision
   HCI_STATUS_LMP_PDU_NOT_ALLOW                            =0X24, //LMP PDU Not Allowed
   HCI_STATUS_ENCRYPTION_MODE_NOT_ALLOW                    =0X25, //Encryption Mode Not Acceptable
   HCI_STATUS_LINK_KEY_CAN_NOT_CHANGE                        =0X26, //Link Key Can Not be Changed
   HCI_STATUS_REQUEST_QOS_NOT_SUPPORT                        =0X27, //Requested QoS Not Supported
   HCI_STATUS_INSTANT_PASSED                                =0X28, //Instant Passed
   HCI_STATUS_PAIRING_UNIT_KEY_NOT_SUPPORT                    =0X29, //Pairing With Unit Key Not Supported
   HCI_STATUS_DIFFERENT_TRANSACTION_COLLISION                =0X2a, //Different Transaction Collision
   HCI_STATUS_RESERVE_1                                        =0X2b, //Reserved
   HCI_STATUS_QOS_UNACCEPT_PARA                            =0X2c, //QoS Unacceptable Parameter
   HCI_STATUS_QOS_REJECT                                        =0X2d, //QoS Rejected
   HCI_STATUS_CHNL_CLASSIFICATION_NOT_SUPPORT                =0X2e, //Channel Classification Not Supported
   HCI_STATUS_INSUFFICIENT_SECURITY                            =0X2f, //Insufficient Security
   HCI_STATUS_PARA_OUT_OF_RANGE                            =0x30, //Parameter Out Of Mandatory Range
   HCI_STATUS_RESERVE_2                                        =0X31, //Reserved
   HCI_STATUS_ROLE_SWITCH_PENDING                            =0X32, //Role Switch Pending
   HCI_STATUS_RESERVE_3                                        =0X33, //Reserved
   HCI_STATUS_RESERVE_SOLT_VIOLATION                        =0X34, //Reserved Slot Violation
   HCI_STATUS_ROLE_SWITCH_FAIL                                =0X35, //Role Switch Failed
   HCI_STATUS_EXTEND_INQUIRY_RSP_TOO_LARGE                =0X36, //Extended Inquiry Response Too Large
   HCI_STATUS_SEC_SIMPLE_PAIRING_NOT_SUPPORT                =0X37, //Secure Simple Pairing Not Supported By Host.
   HCI_STATUS_HOST_BUSY_PAIRING                                =0X38, //Host Busy - Pairing
   HCI_STATUS_CONNECT_REJ_NOT_SUIT_CHNL_FOUND            =0X39, //Connection Rejected due to No Suitable Channel Found
   HCI_STATUS_CONTROLLER_BUSY                                =0X3a  //CONTROLLER BUSY
}RTW_HCI_STATUS;
 
#define HCI_EVENT_COMMAND_COMPLETE                    0x0e
 
#define OGF_EXTENSION                                    0X3f
typedef enum HCI_EXTENSION_COMMANDS{
   HCI_SET_ACL_LINK_DATA_FLOW_MODE                =0x0010,
   HCI_SET_ACL_LINK_STATUS                            =0x0020,
   HCI_SET_SCO_LINK_STATUS                            =0x0030,
   HCI_SET_RSSI_VALUE                                =0x0040,
   HCI_SET_CURRENT_BLUETOOTH_STATUS                =0x0041,
 
   //The following is for RTK8723
   HCI_EXTENSION_VERSION_NOTIFY                    =0x0100,
   HCI_LINK_STATUS_NOTIFY                            =0x0101,
   HCI_BT_OPERATION_NOTIFY                            =0x0102,
   HCI_ENABLE_WIFI_SCAN_NOTIFY                         =0x0103,
   HCI_QUERY_RF_STATUS                                =0x0104,
   HCI_BT_ABNORMAL_NOTIFY                            =0x0105,
   HCI_BT_INFO_NOTIFY                                =0x0106,
   HCI_BT_COEX_NOTIFY                                =0x0107,
   HCI_BT_PATCH_VERSION_NOTIFY                        =0x0108,
   HCI_BT_AFH_MAP_NOTIFY                            =0x0109,
   HCI_BT_REGISTER_VALUE_NOTIFY                    =0x010a,
   
   //The following is for IVT
   HCI_WIFI_CURRENT_CHANNEL                        =0x0300,    
   HCI_WIFI_CURRENT_BANDWIDTH                        =0x0301,        
   HCI_WIFI_CONNECTION_STATUS                        =0x0302
}RTW_HCI_EXT_CMD;
 
#define HCI_EVENT_EXTENSION_RTK                        0xfe
typedef enum HCI_EXTENSION_EVENT_RTK{
   HCI_EVENT_EXT_WIFI_SCAN_NOTIFY                                =0x01,
   HCI_EVENT_EXT_WIFI_RF_STATUS_NOTIFY                        =0x02,
   HCI_EVENT_EXT_BT_INFO_CONTROL                                =0x03,
   HCI_EVENT_EXT_BT_COEX_CONTROL                                =0x04
}RTW_HCI_EXT_EVENT;
 
typedef enum _BT_TRAFFIC_MODE{
   BT_MOTOR_EXT_BE        = 0x00, //Best Effort. Default. for HCRP, PAN, SDP, RFCOMM-based profiles like FTP,OPP, SPP, DUN, etc.
   BT_MOTOR_EXT_GUL        = 0x01, //Guaranteed Latency. This type of traffic is used e.g. for HID and AVRCP.
   BT_MOTOR_EXT_GUB        = 0X02, //Guaranteed Bandwidth.
   BT_MOTOR_EXT_GULB    = 0X03  //Guaranteed Latency and Bandwidth. for A2DP and VDP.
} BT_TRAFFIC_MODE;
 
typedef enum _BT_TRAFFIC_MODE_PROFILE{
   BT_PROFILE_NONE,    
   BT_PROFILE_A2DP,
   BT_PROFILE_PAN    ,
   BT_PROFILE_HID,
   BT_PROFILE_SCO        
} BT_TRAFFIC_MODE_PROFILE;
 
typedef enum _HCI_EXT_BT_OPERATION {
   HCI_BT_OP_NONE                = 0x0,
   HCI_BT_OP_INQUIRY_START        = 0x1,
   HCI_BT_OP_INQUIRY_FINISH        = 0x2,
   HCI_BT_OP_PAGING_START        = 0x3,
   HCI_BT_OP_PAGING_SUCCESS        = 0x4,
   HCI_BT_OP_PAGING_UNSUCCESS    = 0x5,
   HCI_BT_OP_PAIRING_START        = 0x6,
   HCI_BT_OP_PAIRING_FINISH        = 0x7,
   HCI_BT_OP_BT_DEV_ENABLE        = 0x8,
   HCI_BT_OP_BT_DEV_DISABLE        = 0x9,
   HCI_BT_OP_MAX
} HCI_EXT_BT_OPERATION, *PHCI_EXT_BT_OPERATION;
 
typedef struct _BT_MGNT{
   BOOLEAN                bBTConnectInProgress;
   BOOLEAN                bLogLinkInProgress;
   BOOLEAN                bPhyLinkInProgress;
   BOOLEAN                bPhyLinkInProgressStartLL;
   u1Byte                BtCurrentPhyLinkhandle;
   u2Byte                BtCurrentLogLinkhandle;    
   u1Byte                CurrentConnectEntryNum;
   u1Byte                DisconnectEntryNum;
   u1Byte                CurrentBTConnectionCnt;
   BT_CONNECT_TYPE        BTCurrentConnectType;
   BT_CONNECT_TYPE        BTReceiveConnectPkt;    
   u1Byte                BTAuthCount;
   u1Byte                BTAsocCount;
   BOOLEAN                bStartSendSupervisionPkt;
   BOOLEAN                BtOperationOn;
   BOOLEAN                BTNeedAMPStatusChg;
   BOOLEAN                JoinerNeedSendAuth;
   HCI_PHY_LINK_BSS_INFO    bssDesc;
   HCI_EXT_CONFIG        ExtConfig;
   BOOLEAN                bNeedNotifyAMPNoCap;
   BOOLEAN                bCreateSpportQos;
   BOOLEAN                bSupportProfile;
   u1Byte                BTChannel;
   BOOLEAN                CheckChnlIsSuit;
   BOOLEAN                bBtScan;
   BOOLEAN                btLogoTest;
   BOOLEAN                bRfStatusNotified;
   BOOLEAN                bBtRsvedPageDownload;
}BT_MGNT, *PBT_MGNT;
 
struct bt_coex_info {
   /* For Kernel Socket */
   struct socket *udpsock; 
   struct sockaddr_in wifi_sockaddr; /*wifi socket*/
   struct sockaddr_in bt_sockaddr;/* BT socket  */
   struct sock *sk_store;/*back up socket for UDP RX int*/
   
   /* store which socket is OK */
   u8 sock_open;
       
   u8 BT_attend;
   u8 is_exist; /* socket exist */
   BT_MGNT BtMgnt;
   struct workqueue_struct *btcoex_wq;
   struct delayed_work recvmsg_work;
};
#endif //CONFIG_BT_COEXIST_SOCKET_TRX
 
#define    PACKET_NORMAL            0
#define    PACKET_DHCP                1
#define    PACKET_ARP                2
#define    PACKET_EAPOL            3
 
void rtw_btcoex_Initialize(PADAPTER);
void rtw_btcoex_PowerOnSetting(PADAPTER padapter);
void rtw_btcoex_PreLoadFirmware(PADAPTER padapter);
void rtw_btcoex_HAL_Initialize(PADAPTER padapter, u8 bWifiOnly);
void rtw_btcoex_IpsNotify(PADAPTER, u8 type);
void rtw_btcoex_LpsNotify(PADAPTER, u8 type);
void rtw_btcoex_ScanNotify(PADAPTER, u8 type);
void rtw_btcoex_ConnectNotify(PADAPTER, u8 action);
void rtw_btcoex_MediaStatusNotify(PADAPTER, u8 mediaStatus);
void rtw_btcoex_SpecialPacketNotify(PADAPTER, u8 pktType);
void rtw_btcoex_IQKNotify(PADAPTER padapter, u8 state);
void rtw_btcoex_BtInfoNotify(PADAPTER, u8 length, u8 *tmpBuf);
void rtw_btcoex_BtMpRptNotify(PADAPTER, u8 length, u8 *tmpBuf);
void rtw_btcoex_SuspendNotify(PADAPTER, u8 state);
void rtw_btcoex_HaltNotify(PADAPTER);
void rtw_btcoex_ScoreBoardStatusNotify(PADAPTER, u8 length, u8 *tmpBuf);
void rtw_btcoex_SwitchBtTRxMask(PADAPTER);
void rtw_btcoex_Switch(PADAPTER, u8 enable);
u8 rtw_btcoex_IsBtDisabled(PADAPTER);
void rtw_btcoex_Handler(PADAPTER);
s32 rtw_btcoex_IsBTCoexRejectAMPDU(PADAPTER padapter);
s32 rtw_btcoex_IsBTCoexCtrlAMPDUSize(PADAPTER);
u32 rtw_btcoex_GetAMPDUSize(PADAPTER);
void rtw_btcoex_SetManualControl(PADAPTER, u8 bmanual);
u8 rtw_btcoex_1Ant(PADAPTER);
u8 rtw_btcoex_IsBtControlLps(PADAPTER);
u8 rtw_btcoex_IsLpsOn(PADAPTER);
u8 rtw_btcoex_RpwmVal(PADAPTER);
u8 rtw_btcoex_LpsVal(PADAPTER);
void rtw_btcoex_SetBTCoexist(PADAPTER, u8 bBtExist);
void rtw_btcoex_SetChipType(PADAPTER, u8 chipType);
void rtw_btcoex_SetPGAntNum(PADAPTER, u8 antNum);
u8 rtw_btcoex_GetPGAntNum(PADAPTER);
void rtw_btcoex_SetSingleAntPath(PADAPTER padapter, u8 singleAntPath);
u32 rtw_btcoex_GetRaMask(PADAPTER);
void rtw_btcoex_RecordPwrMode(PADAPTER, u8 *pCmdBuf, u8 cmdLen);
void rtw_btcoex_DisplayBtCoexInfo(PADAPTER, u8 *pbuf, u32 bufsize);
void rtw_btcoex_SetDBG(PADAPTER, u32 *pDbgModule);
u32 rtw_btcoex_GetDBG(PADAPTER, u8 *pStrBuf, u32 bufSize);
u8 rtw_btcoex_IncreaseScanDeviceNum(PADAPTER);
u8 rtw_btcoex_IsBtLinkExist(PADAPTER);
void rtw_btcoex_BTOffOnNotify(PADAPTER padapter, u8 bBTON);
#ifdef CONFIG_BT_COEXIST_SOCKET_TRX
void rtw_btcoex_SetBtPatchVersion(PADAPTER padapter,u16 btHciVer, u16 btPatchVer);
void rtw_btcoex_SetHciVersion(PADAPTER  padapter, u16 hciVersion);
void rtw_btcoex_StackUpdateProfileInfo(void);
void rtw_btcoex_init_socket(_adapter *padapter);
void rtw_btcoex_close_socket(_adapter *padapter);
void rtw_btcoex_dump_tx_msg(u8 *tx_msg, u8 len, u8 *msg_name);
u8 rtw_btcoex_sendmsgbysocket(_adapter *padapter, u8 *msg, u8 msg_size, bool force);
u8 rtw_btcoex_create_kernel_socket(_adapter *padapter);
void rtw_btcoex_close_kernel_socket(_adapter *padapter);
void rtw_btcoex_recvmsgbysocket(void *data);
u16 rtw_btcoex_parse_recv_data(u8 *msg, u8 msg_size);
u8 rtw_btcoex_btinfo_cmd(PADAPTER padapter, u8 *pbuf, u16 length);
void rtw_btcoex_parse_hci_cmd(_adapter *padapter, u8 *cmd, u16 len);
void rtw_btcoex_SendEventExtBtCoexControl(PADAPTER Adapter, u8 bNeedDbgRsp, u8 dataLen, void *pData);
void rtw_btcoex_SendEventExtBtInfoControl(PADAPTER Adapter, u8 dataLen, void *pData);
void rtw_btcoex_SendScanNotify(PADAPTER padapter, u8 scanType);
#define BT_SendEventExtBtCoexControl(Adapter, bNeedDbgRsp, dataLen, pData) rtw_btcoex_SendEventExtBtCoexControl(Adapter, bNeedDbgRsp, dataLen, pData)
#define BT_SendEventExtBtInfoControl(Adapter, dataLen, pData) rtw_btcoex_SendEventExtBtInfoControl(Adapter, dataLen, pData)
#endif //CONFIG_BT_COEXIST_SOCKET_TRX
u16 rtw_btcoex_btreg_read(PADAPTER padapter, u8 type, u16 addr, u32 *data);
u16 rtw_btcoex_btreg_write(PADAPTER padapter, u8 type, u16 addr, u16 val);
 
// ==================================================
// Below Functions are called by BT-Coex
// ==================================================
void rtw_btcoex_rx_ampdu_apply(PADAPTER);
void rtw_btcoex_LPS_Enter(PADAPTER);
void rtw_btcoex_LPS_Leave(PADAPTER);
 
#endif // __RTW_BTCOEX_H__