rtw_btcoex.h 19 KB

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