OSDN Git Service

9eee9293f9f8beb0ae410e3ebf7463907d8239ef
[android-x86/external-kernel-drivers.git] / rtl8821ce / hal / btc / halbtcoutsrc.h
1 /******************************************************************************
2  *
3  * Copyright(c) 2016 - 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 #ifndef __HALBTC_OUT_SRC_H__
16 #define __HALBTC_OUT_SRC_H__
17
18 enum {
19         BTC_CCK_1,
20         BTC_CCK_2,
21         BTC_CCK_5_5,
22         BTC_CCK_11,
23         BTC_OFDM_6,
24         BTC_OFDM_9,
25         BTC_OFDM_12,
26         BTC_OFDM_18,
27         BTC_OFDM_24,
28         BTC_OFDM_36,
29         BTC_OFDM_48,
30         BTC_OFDM_54,
31         BTC_MCS_0,
32         BTC_MCS_1,
33         BTC_MCS_2,
34         BTC_MCS_3,
35         BTC_MCS_4,
36         BTC_MCS_5,
37         BTC_MCS_6,
38         BTC_MCS_7,
39         BTC_MCS_8,
40         BTC_MCS_9,
41         BTC_MCS_10,
42         BTC_MCS_11,
43         BTC_MCS_12,
44         BTC_MCS_13,
45         BTC_MCS_14,
46         BTC_MCS_15,
47         BTC_MCS_16,
48         BTC_MCS_17,
49         BTC_MCS_18,
50         BTC_MCS_19,
51         BTC_MCS_20,
52         BTC_MCS_21,
53         BTC_MCS_22,
54         BTC_MCS_23,
55         BTC_MCS_24,
56         BTC_MCS_25,
57         BTC_MCS_26,
58         BTC_MCS_27,
59         BTC_MCS_28,
60         BTC_MCS_29,
61         BTC_MCS_30,
62         BTC_MCS_31,
63         BTC_VHT_1SS_MCS_0,
64         BTC_VHT_1SS_MCS_1,
65         BTC_VHT_1SS_MCS_2,
66         BTC_VHT_1SS_MCS_3,
67         BTC_VHT_1SS_MCS_4,
68         BTC_VHT_1SS_MCS_5,
69         BTC_VHT_1SS_MCS_6,
70         BTC_VHT_1SS_MCS_7,
71         BTC_VHT_1SS_MCS_8,
72         BTC_VHT_1SS_MCS_9,
73         BTC_VHT_2SS_MCS_0,
74         BTC_VHT_2SS_MCS_1,
75         BTC_VHT_2SS_MCS_2,
76         BTC_VHT_2SS_MCS_3,
77         BTC_VHT_2SS_MCS_4,
78         BTC_VHT_2SS_MCS_5,
79         BTC_VHT_2SS_MCS_6,
80         BTC_VHT_2SS_MCS_7,
81         BTC_VHT_2SS_MCS_8,
82         BTC_VHT_2SS_MCS_9,
83         BTC_VHT_3SS_MCS_0,
84         BTC_VHT_3SS_MCS_1,
85         BTC_VHT_3SS_MCS_2,
86         BTC_VHT_3SS_MCS_3,
87         BTC_VHT_3SS_MCS_4,
88         BTC_VHT_3SS_MCS_5,
89         BTC_VHT_3SS_MCS_6,
90         BTC_VHT_3SS_MCS_7,
91         BTC_VHT_3SS_MCS_8,
92         BTC_VHT_3SS_MCS_9,
93         BTC_VHT_4SS_MCS_0,
94         BTC_VHT_4SS_MCS_1,
95         BTC_VHT_4SS_MCS_2,
96         BTC_VHT_4SS_MCS_3,
97         BTC_VHT_4SS_MCS_4,
98         BTC_VHT_4SS_MCS_5,
99         BTC_VHT_4SS_MCS_6,
100         BTC_VHT_4SS_MCS_7,
101         BTC_VHT_4SS_MCS_8,
102         BTC_VHT_4SS_MCS_9,
103         BTC_MCS_32,
104         BTC_UNKNOWN,
105         BTC_PKT_MGNT,
106         BTC_PKT_CTRL,
107         BTC_PKT_UNKNOWN,
108         BTC_PKT_NOT_FOR_ME,
109         BTC_RATE_MAX
110 };
111
112 enum {
113         BTC_MULTIPORT_SCC,
114         BTC_MULTIPORT_MCC_DUAL_CHANNEL,
115         BTC_MULTIPORT_MCC_DUAL_BAND,
116         BTC_MULTIPORT_MAX
117 };
118
119 #define         BTC_COEX_OFFLOAD                        0
120 #define         BTC_TMP_BUF_SHORT               20
121
122 extern u1Byte   gl_btc_trace_buf[];
123 #define         BTC_SPRINTF                     rsprintf
124 #define         BTC_TRACE(_MSG_)\
125 do {\
126         if (GLBtcDbgType[COMP_COEX] & BIT(DBG_LOUD)) {\
127                 RTW_INFO("%s", _MSG_);\
128         } \
129 } while (0)
130 #define         BT_PrintData(adapter, _MSG_, len, data) RTW_DBG_DUMP((_MSG_), data, len)
131
132
133 #define         NORMAL_EXEC                                     FALSE
134 #define         FORCE_EXEC                                              TRUE
135
136 #define         NM_EXCU                                         FALSE
137 #define         FC_EXCU                                         TRUE
138
139 #define         BTC_RF_OFF                                      0x0
140 #define         BTC_RF_ON                                       0x1
141
142 #define         BTC_RF_A                                        0x0
143 #define         BTC_RF_B                                        0x1
144 #define         BTC_RF_C                                        0x2
145 #define         BTC_RF_D                                        0x3
146
147 #define         BTC_SMSP                                SINGLEMAC_SINGLEPHY
148 #define         BTC_DMDP                                DUALMAC_DUALPHY
149 #define         BTC_DMSP                                DUALMAC_SINGLEPHY
150 #define         BTC_MP_UNKNOWN          0xff
151
152 #define         BT_COEX_ANT_TYPE_PG                     0
153 #define         BT_COEX_ANT_TYPE_ANTDIV         1
154 #define         BT_COEX_ANT_TYPE_DETECTED       2
155
156 #define         BTC_MIMO_PS_STATIC                      0       /* 1ss */
157 #define         BTC_MIMO_PS_DYNAMIC                     1       /* 2ss */
158
159 #define         BTC_RATE_DISABLE                        0
160 #define         BTC_RATE_ENABLE                         1
161
162 /* single Antenna definition */
163 #define         BTC_ANT_PATH_WIFI                       0
164 #define         BTC_ANT_PATH_BT                         1
165 #define         BTC_ANT_PATH_PTA                        2
166 #define         BTC_ANT_PATH_WIFI5G                     3
167 #define         BTC_ANT_PATH_AUTO                       4
168 /* dual Antenna definition */
169 #define         BTC_ANT_WIFI_AT_MAIN            0
170 #define         BTC_ANT_WIFI_AT_AUX                     1
171 #define         BTC_ANT_WIFI_AT_DIVERSITY       2
172 /* coupler Antenna definition */
173 #define         BTC_ANT_WIFI_AT_CPL_MAIN        0
174 #define         BTC_ANT_WIFI_AT_CPL_AUX         1
175
176 typedef enum _BTC_POWERSAVE_TYPE {
177         BTC_PS_WIFI_NATIVE                      = 0,    /* wifi original power save behavior */
178         BTC_PS_LPS_ON                           = 1,
179         BTC_PS_LPS_OFF                          = 2,
180         BTC_PS_MAX
181 } BTC_POWERSAVE_TYPE, *PBTC_POWERSAVE_TYPE;
182
183 typedef enum _BTC_BT_REG_TYPE {
184         BTC_BT_REG_RF                                           = 0,
185         BTC_BT_REG_MODEM                                        = 1,
186         BTC_BT_REG_BLUEWIZE                                     = 2,
187         BTC_BT_REG_VENDOR                                       = 3,
188         BTC_BT_REG_LE                                           = 4,
189         BTC_BT_REG_MAX
190 } BTC_BT_REG_TYPE, *PBTC_BT_REG_TYPE;
191
192 typedef enum _BTC_CHIP_INTERFACE {
193         BTC_INTF_UNKNOWN        = 0,
194         BTC_INTF_PCI                    = 1,
195         BTC_INTF_USB                    = 2,
196         BTC_INTF_SDIO           = 3,
197         BTC_INTF_MAX
198 } BTC_CHIP_INTERFACE, *PBTC_CHIP_INTERFACE;
199
200 typedef enum _BTC_CHIP_TYPE {
201         BTC_CHIP_UNDEF          = 0,
202         BTC_CHIP_CSR_BC4                = 1,
203         BTC_CHIP_CSR_BC8                = 2,
204         BTC_CHIP_RTL8723A               = 3,
205         BTC_CHIP_RTL8821                = 4,
206         BTC_CHIP_RTL8723B               = 5,
207         BTC_CHIP_MAX
208 } BTC_CHIP_TYPE, *PBTC_CHIP_TYPE;
209
210 /* following is for wifi link status */
211 #define         WIFI_STA_CONNECTED                              BIT0
212 #define         WIFI_AP_CONNECTED                               BIT1
213 #define         WIFI_HS_CONNECTED                               BIT2
214 #define         WIFI_P2P_GO_CONNECTED                   BIT3
215 #define         WIFI_P2P_GC_CONNECTED                   BIT4
216
217 /* following is for command line utility */
218 #define CL_SPRINTF      rsprintf
219 #define CL_PRINTF       DCMD_Printf
220 #define CL_STRNCAT(dst, dst_size, src, src_size) rstrncat(dst, src, src_size)
221
222 struct btc_board_info {
223         /* The following is some board information */
224         u8                              bt_chip_type;
225         u8                              pg_ant_num;     /* pg ant number */
226         u8                              btdm_ant_num;   /* ant number for btdm */
227         u8                              btdm_ant_num_by_ant_det;        /* ant number for btdm after antenna detection */
228         u8                              btdm_ant_pos;           /* Bryant Add to indicate Antenna Position for (pg_ant_num = 2) && (btdm_ant_num =1)  (DPDT+1Ant case) */
229         u8                              single_ant_path;        /* current used for 8723b only, 1=>s0,  0=>s1 */
230         boolean                 tfbga_package;    /* for Antenna detect threshold */
231         boolean                 btdm_ant_det_finish;
232         boolean                 btdm_ant_det_already_init_phydm;
233         u8                              ant_type;
234         u8                              rfe_type;
235         u8                              ant_div_cfg;
236         boolean                 btdm_ant_det_complete_fail;
237         u8                              ant_det_result;
238         boolean                 ant_det_result_five_complete;
239         u32                             antdetval;
240         u8                              customerID;
241         u8                              customer_id;
242 };
243
244 typedef enum _BTC_DBG_OPCODE {
245         BTC_DBG_SET_COEX_NORMAL                         = 0x0,
246         BTC_DBG_SET_COEX_WIFI_ONLY                              = 0x1,
247         BTC_DBG_SET_COEX_BT_ONLY                                = 0x2,
248         BTC_DBG_SET_COEX_DEC_BT_PWR                             = 0x3,
249         BTC_DBG_SET_COEX_BT_AFH_MAP                             = 0x4,
250         BTC_DBG_SET_COEX_BT_IGNORE_WLAN_ACT             = 0x5,
251         BTC_DBG_SET_COEX_MANUAL_CTRL                            = 0x6,
252         BTC_DBG_MAX
253 } BTC_DBG_OPCODE, *PBTC_DBG_OPCODE;
254
255 typedef enum _BTC_RSSI_STATE {
256         BTC_RSSI_STATE_HIGH                                             = 0x0,
257         BTC_RSSI_STATE_MEDIUM                                   = 0x1,
258         BTC_RSSI_STATE_LOW                                              = 0x2,
259         BTC_RSSI_STATE_STAY_HIGH                                        = 0x3,
260         BTC_RSSI_STATE_STAY_MEDIUM                              = 0x4,
261         BTC_RSSI_STATE_STAY_LOW                                 = 0x5,
262         BTC_RSSI_MAX
263 } BTC_RSSI_STATE, *PBTC_RSSI_STATE;
264 #define BTC_RSSI_HIGH(_rssi_)   ((_rssi_ == BTC_RSSI_STATE_HIGH || _rssi_ == BTC_RSSI_STATE_STAY_HIGH) ? TRUE:FALSE)
265 #define BTC_RSSI_MEDIUM(_rssi_) ((_rssi_ == BTC_RSSI_STATE_MEDIUM || _rssi_ == BTC_RSSI_STATE_STAY_MEDIUM) ? TRUE:FALSE)
266 #define BTC_RSSI_LOW(_rssi_)    ((_rssi_ == BTC_RSSI_STATE_LOW || _rssi_ == BTC_RSSI_STATE_STAY_LOW) ? TRUE:FALSE)
267
268 typedef enum _BTC_WIFI_ROLE {
269         BTC_ROLE_STATION                                                = 0x0,
270         BTC_ROLE_AP                                                             = 0x1,
271         BTC_ROLE_IBSS                                                   = 0x2,
272         BTC_ROLE_HS_MODE                                                = 0x3,
273         BTC_ROLE_MAX
274 } BTC_WIFI_ROLE, *PBTC_WIFI_ROLE;
275
276 typedef enum _BTC_WIRELESS_FREQ {
277         BTC_FREQ_2_4G                                   = 0x0,
278         BTC_FREQ_5G                                             = 0x1,
279         BTC_FREQ_25G                                    = 0x2,
280         BTC_FREQ_MAX
281 } BTC_WIRELESS_FREQ, *PBTC_WIRELESS_FREQ;
282
283 typedef enum _BTC_WIFI_BW_MODE {
284         BTC_WIFI_BW_LEGACY                                      = 0x0,
285         BTC_WIFI_BW_HT20                                        = 0x1,
286         BTC_WIFI_BW_HT40                                        = 0x2,
287         BTC_WIFI_BW_HT80                                        = 0x3,
288         BTC_WIFI_BW_HT160                                       = 0x4,
289         BTC_WIFI_BW_MAX
290 } BTC_WIFI_BW_MODE, *PBTC_WIFI_BW_MODE;
291
292 typedef enum _BTC_WIFI_TRAFFIC_DIR {
293         BTC_WIFI_TRAFFIC_TX                                     = 0x0,
294         BTC_WIFI_TRAFFIC_RX                                     = 0x1,
295         BTC_WIFI_TRAFFIC_MAX
296 } BTC_WIFI_TRAFFIC_DIR, *PBTC_WIFI_TRAFFIC_DIR;
297
298 typedef enum _BTC_WIFI_PNP {
299         BTC_WIFI_PNP_WAKE_UP                                    = 0x0,
300         BTC_WIFI_PNP_SLEEP                                              = 0x1,
301         BTC_WIFI_PNP_SLEEP_KEEP_ANT                             = 0x2,
302         BTC_WIFI_PNP_WOWLAN                                     = 0x3,
303         BTC_WIFI_PNP_MAX
304 } BTC_WIFI_PNP, *PBTC_WIFI_PNP;
305
306 typedef enum _BTC_IOT_PEER {
307         BTC_IOT_PEER_UNKNOWN = 0,
308         BTC_IOT_PEER_REALTEK = 1,
309         BTC_IOT_PEER_REALTEK_92SE = 2,
310         BTC_IOT_PEER_BROADCOM = 3,
311         BTC_IOT_PEER_RALINK = 4,
312         BTC_IOT_PEER_ATHEROS = 5,
313         BTC_IOT_PEER_CISCO = 6,
314         BTC_IOT_PEER_MERU = 7,
315         BTC_IOT_PEER_MARVELL = 8,
316         BTC_IOT_PEER_REALTEK_SOFTAP = 9, /* peer is RealTek SOFT_AP, by Bohn, 2009.12.17 */
317         BTC_IOT_PEER_SELF_SOFTAP = 10, /* Self is SoftAP */
318         BTC_IOT_PEER_AIRGO = 11,
319         BTC_IOT_PEER_INTEL                              = 12,
320         BTC_IOT_PEER_RTK_APCLIENT               = 13,
321         BTC_IOT_PEER_REALTEK_81XX               = 14,
322         BTC_IOT_PEER_REALTEK_WOW                = 15,
323         BTC_IOT_PEER_REALTEK_JAGUAR_BCUTAP = 16,
324         BTC_IOT_PEER_REALTEK_JAGUAR_CCUTAP = 17,
325         BTC_IOT_PEER_MAX,
326 } BTC_IOT_PEER, *PBTC_IOT_PEER;
327
328 /* for 8723b-d cut large current issue */
329 typedef enum _BTC_WIFI_COEX_STATE {
330         BTC_WIFI_STAT_INIT,
331         BTC_WIFI_STAT_IQK,
332         BTC_WIFI_STAT_NORMAL_OFF,
333         BTC_WIFI_STAT_MP_OFF,
334         BTC_WIFI_STAT_NORMAL,
335         BTC_WIFI_STAT_ANT_DIV,
336         BTC_WIFI_STAT_MAX
337 } BTC_WIFI_COEX_STATE, *PBTC_WIFI_COEX_STATE;
338
339 typedef enum _BTC_ANT_TYPE {
340         BTC_ANT_TYPE_0,
341         BTC_ANT_TYPE_1,
342         BTC_ANT_TYPE_2,
343         BTC_ANT_TYPE_3,
344         BTC_ANT_TYPE_4,
345         BTC_ANT_TYPE_MAX
346 } BTC_ANT_TYPE, *PBTC_ANT_TYPE;
347
348 typedef enum _BTC_VENDOR {
349         BTC_VENDOR_LENOVO,
350         BTC_VENDOR_ASUS,
351         BTC_VENDOR_OTHER
352 } BTC_VENDOR, *PBTC_VENDOR;
353
354
355 /* defined for BFP_BTC_GET */
356 typedef enum _BTC_GET_TYPE {
357         /* type BOOLEAN */
358         BTC_GET_BL_HS_OPERATION,
359         BTC_GET_BL_HS_CONNECTING,
360         BTC_GET_BL_WIFI_FW_READY,
361         BTC_GET_BL_WIFI_CONNECTED,
362         BTC_GET_BL_WIFI_DUAL_BAND_CONNECTED,
363         BTC_GET_BL_WIFI_LINK_INFO,
364         BTC_GET_BL_WIFI_BUSY,
365         BTC_GET_BL_WIFI_SCAN,
366         BTC_GET_BL_WIFI_LINK,
367         BTC_GET_BL_WIFI_ROAM,
368         BTC_GET_BL_WIFI_4_WAY_PROGRESS,
369         BTC_GET_BL_WIFI_UNDER_5G,
370         BTC_GET_BL_WIFI_AP_MODE_ENABLE,
371         BTC_GET_BL_WIFI_ENABLE_ENCRYPTION,
372         BTC_GET_BL_WIFI_UNDER_B_MODE,
373         BTC_GET_BL_EXT_SWITCH,
374         BTC_GET_BL_WIFI_IS_IN_MP_MODE,
375         BTC_GET_BL_IS_ASUS_8723B,
376         BTC_GET_BL_RF4CE_CONNECTED,
377         BTC_GET_BL_WIFI_LW_PWR_STATE,
378
379         /* type s4Byte */
380         BTC_GET_S4_WIFI_RSSI,
381         BTC_GET_S4_HS_RSSI,
382
383         /* type u4Byte */
384         BTC_GET_U4_WIFI_BW,
385         BTC_GET_U4_WIFI_TRAFFIC_DIRECTION,
386         BTC_GET_U4_WIFI_FW_VER,
387         BTC_GET_U4_WIFI_LINK_STATUS,
388         BTC_GET_U4_BT_PATCH_VER,
389         BTC_GET_U4_VENDOR,
390         BTC_GET_U4_SUPPORTED_VERSION,
391         BTC_GET_U4_SUPPORTED_FEATURE,
392         BTC_GET_U4_BT_DEVICE_INFO,
393         BTC_GET_U4_BT_FORBIDDEN_SLOT_VAL,
394         BTC_GET_U4_WIFI_IQK_TOTAL,
395         BTC_GET_U4_WIFI_IQK_OK,
396         BTC_GET_U4_WIFI_IQK_FAIL,
397
398         /* type u1Byte */
399         BTC_GET_U1_WIFI_DOT11_CHNL,
400         BTC_GET_U1_WIFI_CENTRAL_CHNL,
401         BTC_GET_U1_WIFI_HS_CHNL,
402         BTC_GET_U1_WIFI_P2P_CHNL,
403         BTC_GET_U1_MAC_PHY_MODE,
404         BTC_GET_U1_AP_NUM,
405         BTC_GET_U1_ANT_TYPE,
406         BTC_GET_U1_IOT_PEER,
407
408         /* type u2Byte */
409         BTC_GET_U2_BEACON_PERIOD,
410
411         /*===== for 1Ant ======*/
412         BTC_GET_U1_LPS_MODE,
413
414         BTC_GET_MAX
415 } BTC_GET_TYPE, *PBTC_GET_TYPE;
416
417 /* defined for BFP_BTC_SET */
418 typedef enum _BTC_SET_TYPE {
419         /* type BOOLEAN */
420         BTC_SET_BL_BT_DISABLE,
421         BTC_SET_BL_BT_ENABLE_DISABLE_CHANGE,
422         BTC_SET_BL_BT_TRAFFIC_BUSY,
423         BTC_SET_BL_BT_LIMITED_DIG,
424         BTC_SET_BL_FORCE_TO_ROAM,
425         BTC_SET_BL_TO_REJ_AP_AGG_PKT,
426         BTC_SET_BL_BT_CTRL_AGG_SIZE,
427         BTC_SET_BL_INC_SCAN_DEV_NUM,
428         BTC_SET_BL_BT_TX_RX_MASK,
429         BTC_SET_BL_MIRACAST_PLUS_BT,
430         BTC_SET_BL_BT_LNA_CONSTRAIN_LEVEL,
431
432         /* type u1Byte */
433         BTC_SET_U1_RSSI_ADJ_VAL_FOR_AGC_TABLE_ON,
434         BTC_SET_U1_AGG_BUF_SIZE,
435
436         /* type trigger some action */
437         BTC_SET_ACT_GET_BT_RSSI,
438         BTC_SET_ACT_AGGREGATE_CTRL,
439         BTC_SET_ACT_ANTPOSREGRISTRY_CTRL,
440
441         // for mimo ps mode setting
442         BTC_SET_MIMO_PS_MODE,
443         /*===== for 1Ant ======*/
444         /* type BOOLEAN */
445
446         /* type u1Byte */
447         BTC_SET_U1_RSSI_ADJ_VAL_FOR_1ANT_COEX_TYPE,
448         BTC_SET_U1_LPS_VAL,
449         BTC_SET_U1_RPWM_VAL,
450         /* type trigger some action */
451         BTC_SET_ACT_LEAVE_LPS,
452         BTC_SET_ACT_ENTER_LPS,
453         BTC_SET_ACT_NORMAL_LPS,
454         BTC_SET_ACT_PRE_NORMAL_LPS,
455         BTC_SET_ACT_POST_NORMAL_LPS,
456         BTC_SET_ACT_DISABLE_LOW_POWER,
457         BTC_SET_ACT_UPDATE_RAMASK,
458         BTC_SET_ACT_SEND_MIMO_PS,
459         /* BT Coex related */
460         BTC_SET_ACT_CTRL_BT_INFO,
461         BTC_SET_ACT_CTRL_BT_COEX,
462         BTC_SET_ACT_CTRL_8723B_ANT,
463         /*=================*/
464         BTC_SET_MAX
465 } BTC_SET_TYPE, *PBTC_SET_TYPE;
466
467 typedef enum _BTC_DBG_DISP_TYPE {
468         BTC_DBG_DISP_COEX_STATISTICS                            = 0x0,
469         BTC_DBG_DISP_BT_LINK_INFO                               = 0x1,
470         BTC_DBG_DISP_WIFI_STATUS                                = 0x2,
471         BTC_DBG_DISP_MAX
472 } BTC_DBG_DISP_TYPE, *PBTC_DBG_DISP_TYPE;
473
474 typedef enum _BTC_NOTIFY_TYPE_IPS {
475         BTC_IPS_LEAVE                                                   = 0x0,
476         BTC_IPS_ENTER                                                   = 0x1,
477         BTC_IPS_MAX
478 } BTC_NOTIFY_TYPE_IPS, *PBTC_NOTIFY_TYPE_IPS;
479 typedef enum _BTC_NOTIFY_TYPE_LPS {
480         BTC_LPS_DISABLE                                                 = 0x0,
481         BTC_LPS_ENABLE                                                  = 0x1,
482         BTC_LPS_MAX
483 } BTC_NOTIFY_TYPE_LPS, *PBTC_NOTIFY_TYPE_LPS;
484 typedef enum _BTC_NOTIFY_TYPE_SCAN {
485         BTC_SCAN_FINISH                                                 = 0x0,
486         BTC_SCAN_START                                                  = 0x1,
487         BTC_SCAN_START_2G                                               = 0x2,
488         BTC_SCAN_START_5G                                               = 0x3,
489         BTC_SCAN_MAX
490 } BTC_NOTIFY_TYPE_SCAN, *PBTC_NOTIFY_TYPE_SCAN;
491 typedef enum _BTC_NOTIFY_TYPE_SWITCHBAND {
492         BTC_NOT_SWITCH                                                  = 0x0,
493         BTC_SWITCH_TO_24G                                               = 0x1,
494         BTC_SWITCH_TO_5G                                                = 0x2,
495         BTC_SWITCH_TO_24G_NOFORSCAN                             = 0x3,
496         BTC_SWITCH_MAX
497 } BTC_NOTIFY_TYPE_SWITCHBAND, *PBTC_NOTIFY_TYPE_SWITCHBAND;
498 typedef enum _BTC_NOTIFY_TYPE_ASSOCIATE {
499         BTC_ASSOCIATE_FINISH                                            = 0x0,
500         BTC_ASSOCIATE_START                                             = 0x1,
501         BTC_ASSOCIATE_5G_FINISH                                         = 0x2,
502         BTC_ASSOCIATE_5G_START                                          = 0x3,
503         BTC_ASSOCIATE_MAX
504 } BTC_NOTIFY_TYPE_ASSOCIATE, *PBTC_NOTIFY_TYPE_ASSOCIATE;
505 typedef enum _BTC_NOTIFY_TYPE_MEDIA_STATUS {
506         BTC_MEDIA_DISCONNECT                                    = 0x0,
507         BTC_MEDIA_CONNECT                                               = 0x1,
508         BTC_MEDIA_CONNECT_5G                                    = 0x02,
509         BTC_MEDIA_MAX
510 } BTC_NOTIFY_TYPE_MEDIA_STATUS, *PBTC_NOTIFY_TYPE_MEDIA_STATUS;
511 typedef enum _BTC_NOTIFY_TYPE_SPECIFIC_PACKET {
512         BTC_PACKET_UNKNOWN                                      = 0x0,
513         BTC_PACKET_DHCP                                                 = 0x1,
514         BTC_PACKET_ARP                                                  = 0x2,
515         BTC_PACKET_EAPOL                                                = 0x3,
516         BTC_PACKET_MAX
517 } BTC_NOTIFY_TYPE_SPECIFIC_PACKET, *PBTC_NOTIFY_TYPE_SPECIFIC_PACKET;
518 typedef enum _BTC_NOTIFY_TYPE_STACK_OPERATION {
519         BTC_STACK_OP_NONE                                       = 0x0,
520         BTC_STACK_OP_INQ_PAGE_PAIR_START                = 0x1,
521         BTC_STACK_OP_INQ_PAGE_PAIR_FINISH       = 0x2,
522         BTC_STACK_OP_MAX
523 } BTC_NOTIFY_TYPE_STACK_OPERATION, *PBTC_NOTIFY_TYPE_STACK_OPERATION;
524
525 /* Bryant Add */
526 typedef enum _BTC_ANTENNA_POS {
527         BTC_ANTENNA_AT_MAIN_PORT                                = 0x1,
528         BTC_ANTENNA_AT_AUX_PORT                         = 0x2,
529 } BTC_ANTENNA_POS, *PBTC_ANTENNA_POS;
530
531 /* Bryant Add */
532 typedef enum _BTC_BT_OFFON {
533         BTC_BT_OFF                              = 0x0,
534         BTC_BT_ON                               = 0x1,
535 } BTC_BTOFFON, *PBTC_BT_OFFON;
536
537 #define BTC_5G_BAND 0x80
538
539 /*==================================================
540 For following block is for coex offload
541 ==================================================*/
542 typedef struct _COL_H2C {
543         u1Byte  opcode;
544         u1Byte  opcode_ver:4;
545         u1Byte  req_num:4;
546         u1Byte  buf[1];
547 } COL_H2C, *PCOL_H2C;
548
549 #define COL_C2H_ACK_HDR_LEN     3
550 typedef struct _COL_C2H_ACK {
551         u1Byte  status;
552         u1Byte  opcode_ver:4;
553         u1Byte  req_num:4;
554         u1Byte  ret_len;
555         u1Byte  buf[1];
556 } COL_C2H_ACK, *PCOL_C2H_ACK;
557
558 #define COL_C2H_IND_HDR_LEN     3
559 typedef struct _COL_C2H_IND {
560         u1Byte  type;
561         u1Byte  version;
562         u1Byte  length;
563         u1Byte  data[1];
564 } COL_C2H_IND, *PCOL_C2H_IND;
565
566 /*============================================
567 NOTE: for debug message, the following define should match
568 the strings in coexH2cResultString.
569 ============================================*/
570 typedef enum _COL_H2C_STATUS {
571         /* c2h status */
572         COL_STATUS_C2H_OK                                                               = 0x00, /* Wifi received H2C request and check content ok. */
573         COL_STATUS_C2H_UNKNOWN                                                  = 0x01, /* Not handled routine */
574         COL_STATUS_C2H_UNKNOWN_OPCODE                                   = 0x02, /* Invalid OP code, It means that wifi firmware received an undefiend OP code. */
575         COL_STATUS_C2H_OPCODE_VER_MISMATCH                      = 0x03, /* Wifi firmware and wifi driver mismatch, need to update wifi driver or wifi or. */
576         COL_STATUS_C2H_PARAMETER_ERROR                          = 0x04, /* Error paraneter.(ex: parameters = NULL but it should have values) */
577         COL_STATUS_C2H_PARAMETER_OUT_OF_RANGE           = 0x05, /* Wifi firmware needs to check the parameters from H2C request and return the status.(ex: ch = 500, it's wrong) */
578         /* other COL status start from here */
579         COL_STATUS_C2H_REQ_NUM_MISMATCH                 , /* c2h req_num mismatch, means this c2h is not we expected. */
580         COL_STATUS_H2C_HALMAC_FAIL                                      , /* HALMAC return fail. */
581         COL_STATUS_H2C_TIMTOUT                                          , /* not received the c2h response from fw */
582         COL_STATUS_INVALID_C2H_LEN                                      , /* invalid coex offload c2h ack length, must >= 3 */
583         COL_STATUS_COEX_DATA_OVERFLOW                           , /* coex returned length over the c2h ack length. */
584         COL_STATUS_MAX
585 } COL_H2C_STATUS, *PCOL_H2C_STATUS;
586
587 #define COL_MAX_H2C_REQ_NUM             16
588
589 #define COL_H2C_BUF_LEN                 20
590 typedef enum _COL_OPCODE {
591         COL_OP_WIFI_STATUS_NOTIFY                                       = 0x0,
592         COL_OP_WIFI_PROGRESS_NOTIFY                                     = 0x1,
593         COL_OP_WIFI_INFO_NOTIFY                                         = 0x2,
594         COL_OP_WIFI_POWER_STATE_NOTIFY                          = 0x3,
595         COL_OP_SET_CONTROL                                                      = 0x4,
596         COL_OP_GET_CONTROL                                                      = 0x5,
597         COL_OP_WIFI_OPCODE_MAX
598 } COL_OPCODE, *PCOL_OPCODE;
599
600 typedef enum _COL_IND_TYPE {
601         COL_IND_BT_INFO                                                         = 0x0,
602         COL_IND_PSTDMA                                                          = 0x1,
603         COL_IND_LIMITED_TX_RX                                           = 0x2,
604         COL_IND_COEX_TABLE                                                      = 0x3,
605         COL_IND_REQ                                                                     = 0x4,
606         COL_IND_MAX
607 } COL_IND_TYPE, *PCOL_IND_TYPE;
608
609 typedef struct _COL_SINGLE_H2C_RECORD {
610         u1Byte                                  h2c_buf[COL_H2C_BUF_LEN];       /* the latest sent h2c buffer */
611         u4Byte                                  h2c_len;
612         u1Byte                                  c2h_ack_buf[COL_H2C_BUF_LEN];   /* the latest received c2h buffer */
613         u4Byte                                  c2h_ack_len;
614         u4Byte                                  count;                                                                  /* the total number of the sent h2c command */
615         u4Byte                                  status[COL_STATUS_MAX];                                 /* the c2h status for the sent h2c command */
616 } COL_SINGLE_H2C_RECORD, *PCOL_SINGLE_H2C_RECORD;
617
618 typedef struct _COL_SINGLE_C2H_IND_RECORD {
619         u1Byte                                  ind_buf[COL_H2C_BUF_LEN];       /* the latest received c2h indication buffer */
620         u4Byte                                  ind_len;
621         u4Byte                                  count;                                                                  /* the total number of the rcvd c2h indication */
622         u4Byte                                  status[COL_STATUS_MAX];                                 /* the c2h indication verified status */
623 } COL_SINGLE_C2H_IND_RECORD, *PCOL_SINGLE_C2H_IND_RECORD;
624
625 typedef struct _BTC_OFFLOAD {
626         /* H2C command related */
627         u1Byte                                  h2c_req_num;
628         u4Byte                                  cnt_h2c_sent;
629         COL_SINGLE_H2C_RECORD   h2c_record[COL_OP_WIFI_OPCODE_MAX];
630
631         /* C2H Ack related */
632         u4Byte                                  cnt_c2h_ack;
633         u4Byte                                  status[COL_STATUS_MAX];
634         struct completion               c2h_event[COL_MAX_H2C_REQ_NUM]; /* for req_num = 1~COL_MAX_H2C_REQ_NUM */
635         u1Byte                                  c2h_ack_buf[COL_MAX_H2C_REQ_NUM][COL_H2C_BUF_LEN];
636         u1Byte                                  c2h_ack_len[COL_MAX_H2C_REQ_NUM];
637
638         /* C2H Indication related */
639         u4Byte                                          cnt_c2h_ind;
640         COL_SINGLE_C2H_IND_RECORD       c2h_ind_record[COL_IND_MAX];
641         u4Byte                                          c2h_ind_status[COL_STATUS_MAX];
642         u1Byte                                          c2h_ind_buf[COL_H2C_BUF_LEN];
643         u1Byte                                          c2h_ind_len;
644 } BTC_OFFLOAD, *PBTC_OFFLOAD;
645 extern BTC_OFFLOAD                              gl_coex_offload;
646 /*==================================================*/
647
648 /* BTC_LINK_MODE same as WIFI_LINK_MODE */
649 typedef enum _BTC_LINK_MODE{
650         BTC_LINK_NONE=0,
651         BTC_LINK_ONLY_GO,
652         BTC_LINK_ONLY_GC,
653         BTC_LINK_ONLY_STA,
654         BTC_LINK_ONLY_AP,
655         BTC_LINK_2G_MCC_GO_STA,
656         BTC_LINK_5G_MCC_GO_STA,
657         BTC_LINK_25G_MCC_GO_STA,
658         BTC_LINK_2G_MCC_GC_STA,
659         BTC_LINK_5G_MCC_GC_STA,
660         BTC_LINK_25G_MCC_GC_STA,
661         BTC_LINK_2G_SCC_GO_STA,
662         BTC_LINK_5G_SCC_GO_STA,
663         BTC_LINK_2G_SCC_GC_STA,
664         BTC_LINK_5G_SCC_GC_STA,
665         BTC_LINK_MAX=30
666 }BTC_LINK_MODE, *PBTC_LINK_MODE;
667
668
669 struct btc_wifi_link_info {
670         BTC_LINK_MODE link_mode; /* LinkMode */
671         u1Byte sta_center_channel; /* StaCenterChannel */
672         u1Byte p2p_center_channel; /* P2PCenterChannel  */
673         BOOLEAN bany_client_join_go;
674         BOOLEAN benable_noa;
675         BOOLEAN bhotspot;
676 };
677
678 typedef enum _BTC_MULTI_PORT_TDMA_MODE {
679         BTC_MULTI_PORT_TDMA_MODE_NONE=0,
680         BTC_MULTI_PORT_TDMA_MODE_2G_SCC_GO,
681         BTC_MULTI_PORT_TDMA_MODE_2G_P2P_GO,
682         BTC_MULTI_PORT_TDMA_MODE_2G_HOTSPOT_GO
683 } BTC_MULTI_PORT_TDMA_MODE, *PBTC_MULTI_PORT_TDMA_MODE;
684
685 typedef struct btc_multi_port_tdma_info {
686         BTC_MULTI_PORT_TDMA_MODE btc_multi_port_tdma_mode;
687         u1Byte start_time_from_bcn;
688         u1Byte bt_time;
689 } BTC_MULTI_PORT_TDMA_INFO, *PBTC_MULTI_PORT_TDMA_INFO;
690
691 typedef u1Byte
692 (*BFP_BTC_R1)(
693         IN      PVOID                   pBtcContext,
694         IN      u4Byte                  RegAddr
695         );
696 typedef u2Byte
697 (*BFP_BTC_R2)(
698         IN      PVOID                   pBtcContext,
699         IN      u4Byte                  RegAddr
700         );
701 typedef u4Byte
702 (*BFP_BTC_R4)(
703         IN      PVOID                   pBtcContext,
704         IN      u4Byte                  RegAddr
705         );
706 typedef VOID
707 (*BFP_BTC_W1)(
708         IN      PVOID                   pBtcContext,
709         IN      u4Byte                  RegAddr,
710         IN      u1Byte                  Data
711         );
712 typedef VOID
713 (*BFP_BTC_W1_BIT_MASK)(
714         IN      PVOID                   pBtcContext,
715         IN      u4Byte                  regAddr,
716         IN      u1Byte                  bitMask,
717         IN      u1Byte                  data1b
718         );
719 typedef VOID
720 (*BFP_BTC_W2)(
721         IN      PVOID                   pBtcContext,
722         IN      u4Byte                  RegAddr,
723         IN      u2Byte                  Data
724         );
725 typedef VOID
726 (*BFP_BTC_W4)(
727         IN      PVOID                   pBtcContext,
728         IN      u4Byte                  RegAddr,
729         IN      u4Byte                  Data
730         );
731 typedef VOID
732 (*BFP_BTC_LOCAL_REG_W1)(
733         IN      PVOID                   pBtcContext,
734         IN      u4Byte                  RegAddr,
735         IN      u1Byte                  Data
736         );
737 typedef VOID
738 (*BFP_BTC_SET_BB_REG)(
739         IN      PVOID                   pBtcContext,
740         IN      u4Byte                  RegAddr,
741         IN      u4Byte                  BitMask,
742         IN      u4Byte                  Data
743         );
744 typedef u4Byte
745 (*BFP_BTC_GET_BB_REG)(
746         IN      PVOID                   pBtcContext,
747         IN      u4Byte                  RegAddr,
748         IN      u4Byte                  BitMask
749         );
750 typedef VOID
751 (*BFP_BTC_SET_RF_REG)(
752         IN      PVOID                   pBtcContext,
753         IN      enum rf_path            eRFPath,
754         IN      u4Byte                  RegAddr,
755         IN      u4Byte                  BitMask,
756         IN      u4Byte                  Data
757         );
758 typedef u4Byte
759 (*BFP_BTC_GET_RF_REG)(
760         IN      PVOID                   pBtcContext,
761         IN      enum rf_path            eRFPath,
762         IN      u4Byte                  RegAddr,
763         IN      u4Byte                  BitMask
764         );
765 typedef VOID
766 (*BFP_BTC_FILL_H2C)(
767         IN      PVOID                   pBtcContext,
768         IN      u1Byte                  elementId,
769         IN      u4Byte                  cmdLen,
770         IN      pu1Byte                 pCmdBuffer
771         );
772
773 typedef BOOLEAN
774 (*BFP_BTC_GET)(
775         IN      PVOID                   pBtCoexist,
776         IN      u1Byte                  getType,
777         OUT     PVOID                   pOutBuf
778         );
779
780 typedef BOOLEAN
781 (*BFP_BTC_SET)(
782         IN      PVOID                   pBtCoexist,
783         IN      u1Byte                  setType,
784         OUT     PVOID                   pInBuf
785         );
786 typedef u2Byte
787 (*BFP_BTC_SET_BT_REG)(
788         IN      PVOID                   pBtcContext,
789         IN      u1Byte                  regType,
790         IN      u4Byte                  offset,
791         IN      u4Byte                  value
792         );
793 typedef BOOLEAN
794 (*BFP_BTC_SET_BT_ANT_DETECTION)(
795         IN      PVOID                   pBtcContext,
796         IN      u1Byte                  txTime,
797         IN      u1Byte                  btChnl
798         );
799
800 typedef BOOLEAN
801 (*BFP_BTC_SET_BT_TRX_MASK)(
802         IN      PVOID                   pBtcContext,
803         IN      u1Byte                  bt_trx_mask
804         );
805
806 typedef u4Byte
807 (*BFP_BTC_GET_BT_REG)(
808         IN      PVOID                   pBtcContext,
809         IN      u1Byte                  regType,
810         IN      u4Byte                  offset
811         );
812 typedef VOID
813 (*BFP_BTC_DISP_DBG_MSG)(
814         IN      PVOID                   pBtCoexist,
815         IN      u1Byte                  dispType
816         );
817
818 typedef COL_H2C_STATUS
819 (*BFP_BTC_COEX_H2C_PROCESS)(
820         IN      PVOID                   pBtCoexist,
821         IN      u1Byte                  opcode,
822         IN      u1Byte                  opcode_ver,
823         IN      pu1Byte                 ph2c_par,
824         IN      u1Byte                  h2c_par_len
825         );
826
827 typedef u4Byte
828 (*BFP_BTC_GET_BT_COEX_SUPPORTED_FEATURE)(
829         IN      PVOID                   pBtcContext
830         );
831
832 typedef u4Byte
833 (*BFP_BTC_GET_BT_COEX_SUPPORTED_VERSION)(
834         IN      PVOID                   pBtcContext
835         );
836
837 typedef u4Byte
838 (*BFP_BTC_GET_PHYDM_VERSION)(
839         IN      PVOID                   pBtcContext
840         );
841
842 typedef u4Byte
843 (*BFP_BTC_SET_ATOMIC)   (
844         IN      PVOID                   pBtcContext,
845         IN      pu4Byte                 target,
846         IN      u4Byte                  val
847         );
848
849
850 typedef VOID
851 (*BTC_PHYDM_MODIFY_RA_PCR_THRESHLOD)(
852         IN      PVOID           pDM_Odm,
853         IN      u1Byte          RA_offset_direction,
854         IN      u1Byte          RA_threshold_offset
855         );
856
857 typedef u4Byte
858 (*BTC_PHYDM_CMNINFOQUERY)(
859         IN              PVOID   pDM_Odm,
860         IN              u1Byte  info_type
861         );
862
863 typedef VOID
864 (*BTC_PHYDM_MODIFY_ANTDIV_HWSW)(
865         IN              PVOID   pDM_Odm,
866         IN              u1Byte  type
867         );
868
869 typedef u1Byte
870 (*BFP_BTC_GET_ANT_DET_VAL_FROM_BT)(
871
872         IN      PVOID                   pBtcContext
873         );
874
875 typedef u1Byte
876 (*BFP_BTC_GET_BLE_SCAN_TYPE_FROM_BT)(
877         IN      PVOID                   pBtcContext
878         );
879
880 typedef u4Byte
881 (*BFP_BTC_GET_BLE_SCAN_PARA_FROM_BT)(
882         IN      PVOID                   pBtcContext,
883         IN  u1Byte                      scanType
884         );
885
886 typedef BOOLEAN
887 (*BFP_BTC_GET_BT_AFH_MAP_FROM_BT)(
888         IN      PVOID                   pBtcContext,
889         IN      u1Byte                  mapType,
890         OUT     pu1Byte                 afhMap
891         );
892
893 struct  btc_bt_info {
894         boolean                                 bt_disabled;
895         boolean                         bt_enable_disable_change;
896         u8                                      rssi_adjust_for_agc_table_on;
897         u8                                      rssi_adjust_for_1ant_coex_type;
898         boolean                                 pre_bt_ctrl_agg_buf_size;
899         boolean                                 bt_ctrl_agg_buf_size;
900         boolean                                 pre_reject_agg_pkt;
901         boolean                                 reject_agg_pkt;
902         boolean                                 increase_scan_dev_num;
903         boolean                                 bt_tx_rx_mask;
904         u8                                      pre_agg_buf_size;
905         u8                                      agg_buf_size;
906         boolean                                 bt_busy;
907         boolean                                 limited_dig;
908         u16                                     bt_hci_ver;
909         u16                                     bt_real_fw_ver;
910         u8                                      bt_fw_ver;
911         u32                                     get_bt_fw_ver_cnt;
912         u32                                     bt_get_fw_ver;
913         boolean                                 miracast_plus_bt;
914
915         boolean                                 bt_disable_low_pwr;
916
917         boolean                                 bt_ctrl_lps;
918         boolean                                 bt_lps_on;
919         boolean                                 force_to_roam;  /* for 1Ant solution */
920         u8                                      lps_val;
921         u8                                      rpwm_val;
922         u32                                     ra_mask;
923 };
924
925 struct btc_stack_info {
926         boolean                                 profile_notified;
927         u16                                     hci_version;    /* stack hci version */
928         u8                                      num_of_link;
929         boolean                                 bt_link_exist;
930         boolean                                 sco_exist;
931         boolean                                 acl_exist;
932         boolean                                 a2dp_exist;
933         boolean                                 hid_exist;
934         u8                                      num_of_hid;
935         boolean                                 pan_exist;
936         boolean                                 unknown_acl_exist;
937         s8                                      min_bt_rssi;
938 };
939
940 struct btc_bt_link_info {
941         boolean                                 bt_link_exist;
942         boolean                                 bt_hi_pri_link_exist;
943         boolean                                 sco_exist;
944         boolean                                 sco_only;
945         boolean                                 a2dp_exist;
946         boolean                                 a2dp_only;
947         boolean                                 hid_exist;
948         boolean                                 hid_only;
949         boolean                                 pan_exist;
950         boolean                                 pan_only;
951         boolean                                 slave_role;
952         boolean                                 acl_busy;
953 };
954
955 #ifdef CONFIG_RF4CE_COEXIST
956 struct btc_rf4ce_info {
957         u8                                      link_state;
958 };
959 #endif
960
961 struct btc_statistics {
962         u32                                     cnt_bind;
963         u32                                     cnt_power_on;
964         u32                                     cnt_pre_load_firmware;
965         u32                                     cnt_init_hw_config;
966         u32                                     cnt_init_coex_dm;
967         u32                                     cnt_ips_notify;
968         u32                                     cnt_lps_notify;
969         u32                                     cnt_scan_notify;
970         u32                                     cnt_connect_notify;
971         u32                                     cnt_media_status_notify;
972         u32                                     cnt_specific_packet_notify;
973         u32                                     cnt_bt_info_notify;
974         u32                                     cnt_rf_status_notify;
975         u32                                     cnt_periodical;
976         u32                                     cnt_coex_dm_switch;
977         u32                                     cnt_stack_operation_notify;
978         u32                                     cnt_dbg_ctrl;
979         u32                                     cnt_rate_id_notify;
980         u32                                     cnt_halt_notify;
981         u32                                     cnt_pnp_notify;
982 };
983
984 struct btc_coexist {
985         BOOLEAN                         bBinded;                /*make sure only one adapter can bind the data context*/
986         PVOID                           Adapter;                /*default adapter*/
987         struct  btc_board_info          board_info;
988         struct  btc_bt_info                     bt_info;                /*some bt info referenced by non-bt module*/
989         struct  btc_stack_info          stack_info;
990         struct  btc_bt_link_info                bt_link_info;
991         struct btc_wifi_link_info       wifi_link_info;
992
993 #ifdef CONFIG_RF4CE_COEXIST
994         struct  btc_rf4ce_info          rf4ce_info;
995 #endif
996         BTC_CHIP_INTERFACE              chip_interface;
997         PVOID                                   odm_priv;
998
999         BOOLEAN                                 initilized;
1000         BOOLEAN                                 stop_coex_dm;
1001         BOOLEAN                                 manual_control;
1002         BOOLEAN                                 bdontenterLPS;
1003         pu1Byte                                 cli_buf;
1004         struct btc_statistics           statistics;
1005         u1Byte                          pwrModeVal[10];
1006         BOOLEAN dbg_mode;
1007         BOOLEAN auto_report;
1008
1009         /* function pointers */
1010         /* io related */
1011         BFP_BTC_R1                      btc_read_1byte;
1012         BFP_BTC_W1                      btc_write_1byte;
1013         BFP_BTC_W1_BIT_MASK     btc_write_1byte_bitmask;
1014         BFP_BTC_R2                      btc_read_2byte;
1015         BFP_BTC_W2                      btc_write_2byte;
1016         BFP_BTC_R4                      btc_read_4byte;
1017         BFP_BTC_W4                      btc_write_4byte;
1018         BFP_BTC_LOCAL_REG_W1    btc_write_local_reg_1byte;
1019         /* read/write bb related */
1020         BFP_BTC_SET_BB_REG      btc_set_bb_reg;
1021         BFP_BTC_GET_BB_REG      btc_get_bb_reg;
1022
1023         /* read/write rf related */
1024         BFP_BTC_SET_RF_REG      btc_set_rf_reg;
1025         BFP_BTC_GET_RF_REG      btc_get_rf_reg;
1026
1027         /* fill h2c related */
1028         BFP_BTC_FILL_H2C                btc_fill_h2c;
1029         /* other */
1030         BFP_BTC_DISP_DBG_MSG    btc_disp_dbg_msg;
1031         /* normal get/set related */
1032         BFP_BTC_GET                     btc_get;
1033         BFP_BTC_SET                     btc_set;
1034
1035         BFP_BTC_GET_BT_REG      btc_get_bt_reg;
1036         BFP_BTC_SET_BT_REG      btc_set_bt_reg;
1037
1038         BFP_BTC_SET_BT_ANT_DETECTION    btc_set_bt_ant_detection;
1039
1040         BFP_BTC_COEX_H2C_PROCESS        btc_coex_h2c_process;
1041         BFP_BTC_SET_BT_TRX_MASK         btc_set_bt_trx_mask;
1042         BFP_BTC_GET_BT_COEX_SUPPORTED_FEATURE btc_get_bt_coex_supported_feature;
1043         BFP_BTC_GET_BT_COEX_SUPPORTED_VERSION btc_get_bt_coex_supported_version;
1044         BFP_BTC_GET_PHYDM_VERSION               btc_get_bt_phydm_version;
1045         BFP_BTC_SET_ATOMIC                      btc_set_atomic;
1046         BTC_PHYDM_MODIFY_RA_PCR_THRESHLOD       btc_phydm_modify_RA_PCR_threshold;
1047         BTC_PHYDM_CMNINFOQUERY                          btc_phydm_query_PHY_counter;
1048         BTC_PHYDM_MODIFY_ANTDIV_HWSW            btc_phydm_modify_antdiv_hwsw;
1049         BFP_BTC_GET_ANT_DET_VAL_FROM_BT         btc_get_ant_det_val_from_bt;
1050         BFP_BTC_GET_BLE_SCAN_TYPE_FROM_BT       btc_get_ble_scan_type_from_bt;
1051         BFP_BTC_GET_BLE_SCAN_PARA_FROM_BT       btc_get_ble_scan_para_from_bt;
1052         BFP_BTC_GET_BT_AFH_MAP_FROM_BT          btc_get_bt_afh_map_from_bt;
1053
1054         union {
1055                 #ifdef CONFIG_RTL8822B
1056                 struct coex_dm_8822b_1ant       coex_dm_8822b_1ant;
1057                 struct coex_dm_8822b_2ant       coex_dm_8822b_2ant;
1058                 #endif /* 8822B */
1059                 #ifdef CONFIG_RTL8821C
1060                 struct coex_dm_8821c_1ant       coex_dm_8821c_1ant;
1061                 struct coex_dm_8821c_2ant       coex_dm_8821c_2ant;
1062                 #endif /* 8821C */
1063         };
1064
1065         union {
1066                 #ifdef CONFIG_RTL8822B
1067                 struct coex_sta_8822b_1ant      coex_sta_8822b_1ant;
1068                 struct coex_sta_8822b_2ant      coex_sta_8822b_2ant;
1069                 #endif /* 8822B */
1070                 #ifdef CONFIG_RTL8821C
1071                 struct coex_sta_8821c_1ant      coex_sta_8821c_1ant;
1072                 struct coex_sta_8821c_2ant      coex_sta_8821c_2ant;
1073                 #endif /* 8821C */
1074         };
1075
1076         union {
1077                 #ifdef CONFIG_RTL8822B
1078                 struct rfe_type_8822b_1ant      rfe_type_8822b_1ant;
1079                 struct rfe_type_8822b_2ant      rfe_type_8822b_2ant;
1080                 #endif /* 8822B */
1081                 #ifdef CONFIG_RTL8821C
1082                 struct rfe_type_8821c_1ant      rfe_type_8821c_1ant;
1083                 struct rfe_type_8821c_2ant      rfe_type_8821c_2ant;
1084                 #endif /* 8821C */
1085         };
1086
1087         union {
1088                 #ifdef CONFIG_RTL8822B
1089                 struct wifi_link_info_8822b_1ant        wifi_link_info_8822b_1ant;
1090                 struct wifi_link_info_8822b_2ant        wifi_link_info_8822b_2ant;
1091                 #endif /* 8822B */
1092                 #ifdef CONFIG_RTL8821C
1093                 struct wifi_link_info_8821c_1ant        wifi_link_info_8821c_1ant;
1094                 struct wifi_link_info_8821c_2ant        wifi_link_info_8821c_2ant;
1095                 #endif /* 8821C */
1096         };
1097
1098 };
1099 typedef struct btc_coexist *PBTC_COEXIST;
1100
1101 extern struct btc_coexist       GLBtCoexist;
1102
1103 BOOLEAN
1104 EXhalbtcoutsrc_InitlizeVariables(
1105         IN      PVOID           Adapter
1106         );
1107 VOID
1108 EXhalbtcoutsrc_PowerOnSetting(
1109         IN      PBTC_COEXIST            pBtCoexist
1110         );
1111 VOID
1112 EXhalbtcoutsrc_PreLoadFirmware(
1113         IN      PBTC_COEXIST            pBtCoexist
1114         );
1115 VOID
1116 EXhalbtcoutsrc_InitHwConfig(
1117         IN      PBTC_COEXIST            pBtCoexist,
1118         IN      BOOLEAN                         bWifiOnly
1119         );
1120 VOID
1121 EXhalbtcoutsrc_InitCoexDm(
1122         IN      PBTC_COEXIST            pBtCoexist
1123         );
1124 VOID
1125 EXhalbtcoutsrc_IpsNotify(
1126         IN      PBTC_COEXIST            pBtCoexist,
1127         IN      u1Byte                  type
1128         );
1129 VOID
1130 EXhalbtcoutsrc_LpsNotify(
1131         IN      PBTC_COEXIST            pBtCoexist,
1132         IN      u1Byte                  type
1133         );
1134 VOID
1135 EXhalbtcoutsrc_ScanNotify(
1136         IN      PBTC_COEXIST            pBtCoexist,
1137         IN      u1Byte                  type
1138         );
1139 VOID
1140 EXhalbtcoutsrc_SetAntennaPathNotify(
1141         IN      PBTC_COEXIST    pBtCoexist,
1142         IN      u1Byte                  type
1143         );
1144 VOID
1145 EXhalbtcoutsrc_ConnectNotify(
1146         IN      PBTC_COEXIST            pBtCoexist,
1147         IN      u1Byte                  action
1148         );
1149 VOID
1150 EXhalbtcoutsrc_MediaStatusNotify(
1151         IN      PBTC_COEXIST            pBtCoexist,
1152         IN      RT_MEDIA_STATUS mediaStatus
1153         );
1154 VOID
1155 EXhalbtcoutsrc_SpecificPacketNotify(
1156         IN      PBTC_COEXIST            pBtCoexist,
1157         IN      u1Byte                  pktType
1158         );
1159 VOID
1160 EXhalbtcoutsrc_BtInfoNotify(
1161         IN      PBTC_COEXIST            pBtCoexist,
1162         IN      pu1Byte                 tmpBuf,
1163         IN      u1Byte                  length
1164         );
1165 VOID
1166 EXhalbtcoutsrc_RfStatusNotify(
1167         IN      PBTC_COEXIST            pBtCoexist,
1168         IN      u1Byte                          type
1169         );
1170 VOID
1171 EXhalbtcoutsrc_WlFwDbgInfoNotify(
1172         IN      PBTC_COEXIST            pBtCoexist,
1173         IN      pu1Byte                 tmpBuf,
1174         IN      u1Byte                  length
1175         );
1176 VOID
1177 EXhalbtcoutsrc_rx_rate_change_notify(
1178         IN      PBTC_COEXIST    pBtCoexist,
1179         IN      BOOLEAN                 is_data_frame,
1180         IN      u1Byte                  btc_rate_id
1181         );
1182 VOID
1183 EXhalbtcoutsrc_StackOperationNotify(
1184         IN      PBTC_COEXIST            pBtCoexist,
1185         IN      u1Byte                  type
1186         );
1187 VOID
1188 EXhalbtcoutsrc_HaltNotify(
1189         IN      PBTC_COEXIST            pBtCoexist
1190         );
1191 VOID
1192 EXhalbtcoutsrc_PnpNotify(
1193         IN      PBTC_COEXIST            pBtCoexist,
1194         IN      u1Byte                  pnpState
1195         );
1196 VOID
1197 EXhalbtcoutsrc_CoexDmSwitch(
1198         IN      PBTC_COEXIST            pBtCoexist
1199         );
1200 VOID
1201 EXhalbtcoutsrc_Periodical(
1202         IN      PBTC_COEXIST            pBtCoexist
1203         );
1204 VOID
1205 EXhalbtcoutsrc_DbgControl(
1206         IN      PBTC_COEXIST                    pBtCoexist,
1207         IN      u1Byte                          opCode,
1208         IN      u1Byte                          opLen,
1209         IN      pu1Byte                         pData
1210         );
1211 VOID
1212 EXhalbtcoutsrc_AntennaDetection(
1213         IN      PBTC_COEXIST                    pBtCoexist,
1214         IN      u4Byte                                  centFreq,
1215         IN      u4Byte                                  offset,
1216         IN      u4Byte                                  span,
1217         IN      u4Byte                                  seconds
1218         );
1219 VOID
1220 EXhalbtcoutsrc_StackUpdateProfileInfo(
1221         VOID
1222         );
1223 VOID
1224 EXhalbtcoutsrc_SetHciVersion(
1225         IN      u2Byte  hciVersion
1226         );
1227 VOID
1228 EXhalbtcoutsrc_SetBtPatchVersion(
1229         IN      u2Byte  btHciVersion,
1230         IN      u2Byte  btPatchVersion
1231         );
1232 VOID
1233 EXhalbtcoutsrc_UpdateMinBtRssi(
1234         IN      s1Byte  btRssi
1235         );
1236 #if 0
1237 VOID
1238 EXhalbtcoutsrc_SetBtExist(
1239         IN      BOOLEAN         bBtExist
1240         );
1241 #endif
1242 VOID
1243 EXhalbtcoutsrc_SetChipType(
1244         IN      u1Byte          chipType
1245         );
1246 VOID
1247 EXhalbtcoutsrc_SetAntNum(
1248         IN      u1Byte          type,
1249         IN      u1Byte          antNum
1250         );
1251 VOID
1252 EXhalbtcoutsrc_SetSingleAntPath(
1253         IN      u1Byte          singleAntPath
1254         );
1255 VOID
1256 EXhalbtcoutsrc_DisplayBtCoexInfo(
1257         IN      PBTC_COEXIST            pBtCoexist
1258         );
1259 VOID
1260 EXhalbtcoutsrc_DisplayAntDetection(
1261         IN      PBTC_COEXIST            pBtCoexist
1262         );
1263
1264 #define MASKBYTE0               0xff
1265 #define MASKBYTE1               0xff00
1266 #define MASKBYTE2               0xff0000
1267 #define MASKBYTE3               0xff000000
1268 #define MASKHWORD       0xffff0000
1269 #define MASKLWORD               0x0000ffff
1270 #define MASKDWORD       0xffffffff
1271 #define MASK12BITS              0xfff
1272 #define MASKH4BITS              0xf0000000
1273 #define MASKOFDM_D      0xffc00000
1274 #define MASKCCK         0x3f3f3f3f
1275
1276 #endif