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