5141726b1fec1fe3a5005881921479fcf8a375a0
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / combo_mt66xx / mt6628 / wlan / include / wlan_lib.h
1 /*
2 ** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/wlan_lib.h#1 $
3 */
4
5 /*! \file   "wlan_lib.h"
6     \brief  The declaration of the functions of the wlanAdpater objects
7
8     Detail description.
9 */
10
11
12
13 /*
14 ** $Log: wlan_lib.h $
15  *
16  * 06 08 2012 eason.tsai
17  * NULL
18  * Nvram context covert from 6620 to 6628 for old 6620 meta tool
19  *
20  * 01 16 2012 cp.wu
21  * [MT6620 Wi-Fi][Driver] API and behavior modification for preferred band configuration with corresponding network configuration 
22  * add wlanSetPreferBandByNetwork() for glue layer to invoke for setting preferred band configuration corresponding to network type.
23  *
24  * 01 05 2012 wh.su
25  * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function
26  * Adding the related ioctl / wlan oid function to set the Tx power cfg.
27  *
28  * 10 03 2011 cp.wu
29  * [WCXRP00001022] [MT6628 Driver][Firmware Download] Add multi section independent download functionality
30  * eliminate win32 native data types.
31  *
32  * 10 03 2011 cp.wu
33  * [WCXRP00001022] [MT6628 Driver][Firmware Download] Add multi section independent download functionality
34  * add firmware download path in divided scatters.
35  *
36  * 10 03 2011 cp.wu
37  * [MT6628 Driver][Firmware Download] Add multi section independent download functionality 
38  * add firmware downloading aggregated path.
39  *
40  * 09 20 2011 tsaiyuan.hsu
41  * [WCXRP00000931] [MT5931 Wi-Fi][DRV/FW] add swcr to disable roaming from driver
42  * change window registry of driver for roaming.
43  *
44  * 09 08 2011 cm.chang
45  * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code
46  * Use new fields ucChannelListMap and ucChannelListIndex in NVRAM
47  *
48  * 08 31 2011 cm.chang
49  * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code
50  * .
51  *
52  * 08 25 2011 chinghwa.yu
53  * [WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm
54  * Add DFS switch.
55  *
56  * 08 24 2011 chinghwa.yu
57  * [WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm
58  * Update RDD test mode cases.
59  *
60  * 08 15 2011 cp.wu
61  * [WCXRP00000913] [MT6620 Wi-Fi] create repository of source code dedicated for MT6620 E6 ASIC
62  * support to load different firmware image for E3/E4/E5 and E6 ASIC on win32 platforms.
63  *
64  * 08 02 2011 yuche.tsai
65  * [WCXRP00000896] [Volunteer Patch][WiFi Direct][Driver] GO with multiple client, TX deauth to a disconnecting device issue.
66  * Fix GO send deauth frame issue.
67  *
68  * 07 22 2011 jeffrey.chang
69  * [WCXRP00000864] [MT5931] Add command to adjust OSC stable time
70  * modify driver to set OSC stable time after f/w download
71  *
72  * 07 18 2011 chinghwa.yu
73  * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm
74  * Add CMD/Event for RDD and BWCS.
75  *
76  * 05 27 2011 cp.wu
77  * [WCXRP00000749] [MT6620 Wi-Fi][Driver] Add band edge tx power control to Wi-Fi NVRAM
78  * invoke CMD_ID_SET_EDGE_TXPWR_LIMIT when there is valid data exist in NVRAM content.
79  *
80  * 05 11 2011 cp.wu
81  * [WCXRP00000718] [MT6620 Wi-Fi] modify the behavior of setting tx power
82  * ACPI APIs migrate to wlan_lib.c for glue layer to invoke.
83  *
84  * 04 18 2011 cp.wu
85  * [WCXRP00000636] [WHQL][MT5931 Driver] 2c_PMHibernate (hang on 2h)
86  * 1) add API for glue layer to query ACPI state
87  * 2) Windows glue should not access to hardware after switched into D3 state
88  *
89  * 03 10 2011 cp.wu
90  * [WCXRP00000532] [MT6620 Wi-Fi][Driver] Migrate NVRAM configuration procedures from MT6620 E2 to MT6620 E3
91  * deprecate configuration used by MT6620 E2
92  *
93  * 01 27 2011 tsaiyuan.hsu
94  * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support
95  * add roaming fsm
96  * 1. not support 11r, only use strength of signal to determine roaming.
97  * 2. not enable CFG_SUPPORT_ROAMING until completion of full test.
98  * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw
99  * 4. assume that change of link quality in smooth way.
100  *
101  * 01 27 2011 george.huang
102  * [WCXRP00000355] [MT6620 Wi-Fi] Set WMM-PS related setting with qualifying AP capability
103  * Support current measure mode, assigned by registry (XP only).
104  *
105  * 01 24 2011 cp.wu
106  * [WCXRP00000382] [MT6620 Wi-Fi][Driver] Track forwarding packet number with notifying tx thread for serving
107  * 1. add an extra counter for tracking pending forward frames.
108  * 2. notify TX service thread as well when there is pending forward frame
109  * 3. correct build errors leaded by introduction of Wi-Fi direct separation module
110  *
111  * 01 10 2011 cp.wu
112  * [WCXRP00000351] [MT6620 Wi-Fi][Driver] remove from scanning result in OID handling layer when the corresponding BSS is disconnected due to beacon timeout
113  * remove from scanning result when the BSS is disconnected due to beacon timeout.
114  *
115  * 10 27 2010 george.huang
116  * [WCXRP00000127] [MT6620 Wi-Fi][Driver] Add a registry to disable Beacon Timeout function for SQA test by using E1 EVB
117  * Support registry option for disable beacon lost detection.
118  *
119  * 10 26 2010 cp.wu
120  * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000137] [MT6620 Wi-Fi] [FW] Support NIC capability query command
121  * 1) update NVRAM content template to ver 1.02
122  * 2) add compile option for querying NIC capability (default: off)
123  * 3) modify AIS 5GHz support to run-time option, which could be turned on by registry or NVRAM setting
124  * 4) correct auto-rate compiler error under linux (treat warning as error)
125  * 5) simplify usage of NVRAM and REG_INFO_T
126  * 6) add version checking between driver and firmware
127  *
128  * 10 26 2010 eddie.chen
129  * [WCXRP00000134] [MT6620 Wi-Fi][Driver] Add a registry to enable auto rate for SQA test by using E1 EVB
130  * Add auto rate parameter in registry.
131  *
132  * 10 18 2010 cp.wu
133  * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000086] [MT6620 Wi-Fi][Driver] The mac address is all zero at android
134  * complete implementation of Android NVRAM access
135  *
136  * 10 08 2010 cp.wu
137  * [WCXRP00000084] [MT6620 Wi-Fi][Driver][FW] Add fixed rate support for distance test
138  * adding fixed rate support for distance test. (from registry setting)
139  *
140  * 10 06 2010 cp.wu
141  * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning
142  * divide a single function into 2 part to surpress a weird compiler warning from gcc-4.4.0
143  *
144  * 10 06 2010 cp.wu
145  * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning
146  * code reorganization to improve isolation between GLUE and CORE layers.
147  *
148  * 10 05 2010 cp.wu
149  * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check
150  * load manufacture data when CFG_SUPPORT_NVRAM is set to 1
151  *
152  * 09 24 2010 cp.wu
153  * [WCXRP00000057] [MT6620 Wi-Fi][Driver] Modify online scan to a run-time switchable feature
154  * Modify online scan as a run-time adjustable option (for Windows, in registry)
155  *
156  * 09 23 2010 cp.wu
157  * [WCXRP00000051] [MT6620 Wi-Fi][Driver] WHQL test fail in MAC address changed item
158  * use firmware reported mac address right after wlanAdapterStart() as permanent address
159  *
160  * 09 23 2010 cp.wu
161  * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check
162  * add skeleton for NVRAM integration
163  *
164  * 08 26 2010 yuche.tsai
165  * NULL
166  * Add AT GO test configure mode under WinXP.
167  * Please enable 1. CFG_ENABLE_WIFI_DIRECT, 2. CFG_TEST_WIFI_DIRECT_GO, 3. CFG_SUPPORT_AAA
168  *
169  * 08 25 2010 george.huang
170  * NULL
171  * .
172  *
173  * 07 21 2010 cp.wu
174  *
175  * 1) change BG_SCAN to ONLINE_SCAN for consistent term
176  * 2) only clear scanning result when scan is permitted to do
177  *
178  * 07 13 2010 cp.wu
179  *
180  * 1) MMPDUs are now sent to MT6620 by CMD queue for keeping strict order of 1X/MMPDU/CMD packets
181  * 2) integrate with qmGetFrameAction() for deciding which MMPDU/1X could pass checking for sending
182  * 2) enhance CMD_INFO_T descriptor number from 10 to 32 to avoid descriptor underflow under concurrent network operation
183  *
184  * 07 08 2010 cp.wu
185  *
186  * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository.
187  *
188  * 06 24 2010 cp.wu
189  * [WPD00003833][MT6620 and MT5931] Driver migration
190  * 802.1x and bluetooth-over-Wi-Fi security frames are now delievered to firmware via command path instead of data path.
191  *
192  * 06 21 2010 cp.wu
193  * [WPD00003833][MT6620 and MT5931] Driver migration
194  * change MAC address updating logic.
195  *
196  * 06 21 2010 cp.wu
197  * [WPD00003833][MT6620 and MT5931] Driver migration
198  * simplify timer usage.
199  *
200  * 06 11 2010 cp.wu
201  * [WPD00003833][MT6620 and MT5931] Driver migration
202  * 1) migrate assoc.c.
203  * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness
204  * 3) add configuration options for CNM_MEM and RSN modules
205  * 4) add data path for management frames
206  * 5) eliminate rPacketInfo of MSDU_INFO_T
207  *
208  * 06 08 2010 cp.wu
209  * [WPD00003833][MT6620 and MT5931] Driver migration
210  * cnm_timer has been migrated.
211  *
212  * 06 06 2010 kevin.huang
213  * [WPD00003832][MT6620 5931] Create driver base
214  * [MT6620 5931] Create driver base
215  *
216  * 05 20 2010 cp.wu
217  * [WPD00001943]Create WiFi test driver framework on WinXP
218  * 1) integrate OID_GEN_NETWORK_LAYER_ADDRESSES with CMD_ID_SET_IP_ADDRESS
219  * 2) buffer statistics data for 2 seconds
220  * 3) use default value for adhoc parameters instead of 0
221  *
222  * 05 12 2010 cp.wu
223  * [WPD00001943]Create WiFi test driver framework on WinXP
224  * add extra 64 adjustable parameters for CoEX scenario.
225  *
226  * 04 06 2010 cp.wu
227  * [WPD00001943]Create WiFi test driver framework on WinXP
228  * code refine: fgTestMode should be at adapter rather than glue due to the device/fw is also involved
229  *
230  * 04 06 2010 cp.wu
231  * [WPD00001943]Create WiFi test driver framework on WinXP
232  * 1) for some OID, never do timeout expiration
233  *  * 2) add 2 kal API for later integration
234  *
235  * 04 01 2010 cp.wu
236  * [WPD00001943]Create WiFi test driver framework on WinXP
237  * change to use WIFI_TCM_ALWAYS_ON as firmware image
238  *
239  * 03 31 2010 wh.su
240  * [WPD00003816][MT6620 Wi-Fi] Adding the security support
241  * modify the wapi related code for new driver's design.
242  *
243  * 03 22 2010 cp.wu
244  * [WPD00001943]Create WiFi test driver framework on WinXP
245  * always send CMD_NIC_POWER_CTRL packet when nic is being halted
246  *
247  * 03 12 2010 cp.wu
248  * [WPD00001943]Create WiFi test driver framework on WinXP
249  * add two option for ACK and ENCRYPTION for firmware download
250  *
251  * 02 24 2010 cp.wu
252  * [WPD00001943]Create WiFi test driver framework on WinXP
253  * separate wlanProcesQueuePacket() into 2 APIs upon request
254  *
255  * 02 23 2010 cp.wu
256  * [WPD00001943]Create WiFi test driver framework on WinXP
257  * add new API: wlanProcessQueuedPackets()
258  *
259  * 02 11 2010 cp.wu
260  * [WPD00001943]Create WiFi test driver framework on WinXP
261  * 1. add logic for firmware download
262  *  *  * 2. firmware image filename and start/load address are now retrieved from registry
263  *
264  * 02 10 2010 cp.wu
265  * [WPD00001943]Create WiFi test driver framework on WinXP
266  * 1) remove unused function in nic_rx.c [which has been handled in que_mgt.c]
267  *  *  *  * 2) firmware image length is now retrieved via NdisFileOpen
268  *  *  *  * 3) firmware image is not structured by (P_IMG_SEC_HDR_T) anymore
269  *  *  *  * 4) nicRxWaitResponse() revised
270  *  *  *  * 5) another set of TQ counter default value is added for fw-download state
271  *  *  *  * 6) Wi-Fi load address is now retrieved from registry too
272  *
273  * 02 08 2010 cp.wu
274  * [WPD00001943]Create WiFi test driver framework on WinXP
275  * prepare for implementing fw download logic
276  *
277  * 01 27 2010 cp.wu
278  * [WPD00001943]Create WiFi test driver framework on WinXP
279  * 1. eliminate improper variable in rHifInfo
280  *  *  *  *  *  *  * 2. block TX/ordinary OID when RF test mode is engaged
281  *  *  *  *  *  *  * 3. wait until firmware finish operation when entering into and leaving from RF test mode
282  *  *  *  *  *  *  * 4. correct some HAL implementation
283 **  \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-12-10 16:39:55 GMT mtk02752
284 **  eliminate unused API
285 **  \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-10-13 21:58:41 GMT mtk01084
286 **  update for new macro define
287 **  \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-05-19 10:43:06 GMT mtk01461
288 **  Add wlanReleasePendingOid()
289 **  \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-04-13 16:38:44 GMT mtk01084
290 **  add WIFI start function
291 **  \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-04-08 16:51:14 GMT mtk01084
292 **  Update for the image download part
293 **  \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-04-01 10:57:38 GMT mtk01461
294 **  Add wlanSendLeftClusteredFrames() for SDIO_TX_ENHANCE
295 **  \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-23 00:31:02 GMT mtk01461
296 **  Add declaration of FW Image download reference code
297 **  \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-16 09:08:31 GMT mtk01461
298 **  Update TX PATH API
299 **  \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:12:04 GMT mtk01426
300 **  Init for develop
301 **
302 */
303
304 #ifndef _WLAN_LIB_H
305 #define _WLAN_LIB_H
306
307 /*******************************************************************************
308 *                         C O M P I L E R   F L A G S
309 ********************************************************************************
310 */
311
312 /*******************************************************************************
313 *                    E X T E R N A L   R E F E R E N C E S
314 ********************************************************************************
315 */
316 #include "CFG_Wifi_File.h"
317 #include "rlm_domain.h"
318 #include "wlan_typedef.h"
319
320 /*******************************************************************************
321 *                              C O N S T A N T S
322 ********************************************************************************
323 */
324
325 #define MAX_NUM_GROUP_ADDR                      32      /* max number of group addresses */
326
327
328
329 #define TX_CS_TCP_UDP_GEN        BIT(1)
330 #define TX_CS_IP_GEN             BIT(0)
331
332
333 #define CSUM_OFFLOAD_EN_TX_TCP      BIT(0)
334 #define CSUM_OFFLOAD_EN_TX_UDP      BIT(1)
335 #define CSUM_OFFLOAD_EN_TX_IP       BIT(2)
336 #define CSUM_OFFLOAD_EN_RX_TCP      BIT(3)
337 #define CSUM_OFFLOAD_EN_RX_UDP      BIT(4)
338 #define CSUM_OFFLOAD_EN_RX_IPv4     BIT(5)
339 #define CSUM_OFFLOAD_EN_RX_IPv6     BIT(6)
340 #define CSUM_OFFLOAD_EN_TX_MASK     BITS(0,2)
341 #define CSUM_OFFLOAD_EN_ALL         BITS(0,6)
342
343 /* TCP, UDP, IP Checksum */
344 #define RX_CS_TYPE_UDP           BIT(7)
345 #define RX_CS_TYPE_TCP           BIT(6)
346 #define RX_CS_TYPE_IPv6          BIT(5)
347 #define RX_CS_TYPE_IPv4          BIT(4)
348
349 #define RX_CS_STATUS_UDP         BIT(3)
350 #define RX_CS_STATUS_TCP         BIT(2)
351 #define RX_CS_STATUS_IP          BIT(0)
352
353 #define CSUM_NOT_SUPPORTED      0x0
354
355 #define TXPWR_USE_PDSLOPE 0
356
357 /* NVRAM error code definitions */
358 #define NVRAM_ERROR_VERSION_MISMATCH        BIT(1)
359 #define NVRAM_ERROR_INVALID_TXPWR           BIT(2)
360 #define NVRAM_ERROR_INVALID_DPD             BIT(3)
361 #define NVRAM_ERROR_INVALID_MAC_ADDR        BIT(4)
362
363
364 /*******************************************************************************
365 *                             D A T A   T Y P E S
366 ********************************************************************************
367 */
368 typedef WLAN_STATUS (*PFN_OID_HANDLER_FUNC) (
369     IN  P_ADAPTER_T prAdapter,
370     IN  PVOID       pvBuf,
371     IN  UINT_32     u4BufLen,
372     OUT PUINT_32    pu4OutInfoLen
373     );
374
375 typedef enum _ENUM_CSUM_TYPE_T {
376     CSUM_TYPE_IPV4,
377     CSUM_TYPE_IPV6,
378     CSUM_TYPE_TCP,
379     CSUM_TYPE_UDP,
380     CSUM_TYPE_NUM
381 } ENUM_CSUM_TYPE_T, *P_ENUM_CSUM_TYPE_T;
382
383 typedef enum _ENUM_CSUM_RESULT_T {
384     CSUM_RES_NONE,
385     CSUM_RES_SUCCESS,
386     CSUM_RES_FAILED,
387     CSUM_RES_NUM
388 } ENUM_CSUM_RESULT_T, *P_ENUM_CSUM_RESULT_T;
389
390 typedef enum _ENUM_PHY_MODE_T {
391     ENUM_PHY_2G4_CCK,
392     ENUM_PHY_2G4_OFDM_BPSK,
393     ENUM_PHY_2G4_OFDM_QPSK,
394     ENUM_PHY_2G4_OFDM_16QAM,
395     ENUM_PHY_2G4_OFDM_48M,
396     ENUM_PHY_2G4_OFDM_54M,
397     ENUM_PHY_2G4_HT20_BPSK,
398     ENUM_PHY_2G4_HT20_QPSK,
399     ENUM_PHY_2G4_HT20_16QAM,
400     ENUM_PHY_2G4_HT20_MCS5,
401     ENUM_PHY_2G4_HT20_MCS6,
402     ENUM_PHY_2G4_HT20_MCS7,
403     ENUM_PHY_2G4_HT40_BPSK,
404     ENUM_PHY_2G4_HT40_QPSK,
405     ENUM_PHY_2G4_HT40_16QAM,
406     ENUM_PHY_2G4_HT40_MCS5,
407     ENUM_PHY_2G4_HT40_MCS6,
408     ENUM_PHY_2G4_HT40_MCS7,
409     ENUM_PHY_5G_OFDM_BPSK,
410     ENUM_PHY_5G_OFDM_QPSK,
411     ENUM_PHY_5G_OFDM_16QAM,
412     ENUM_PHY_5G_OFDM_48M,
413     ENUM_PHY_5G_OFDM_54M,
414     ENUM_PHY_5G_HT20_BPSK,
415     ENUM_PHY_5G_HT20_QPSK,
416     ENUM_PHY_5G_HT20_16QAM,
417     ENUM_PHY_5G_HT20_MCS5,
418     ENUM_PHY_5G_HT20_MCS6,
419     ENUM_PHY_5G_HT20_MCS7,
420     ENUM_PHY_5G_HT40_BPSK,
421     ENUM_PHY_5G_HT40_QPSK,
422     ENUM_PHY_5G_HT40_16QAM,
423     ENUM_PHY_5G_HT40_MCS5,
424     ENUM_PHY_5G_HT40_MCS6,
425     ENUM_PHY_5G_HT40_MCS7,
426     ENUM_PHY_MODE_NUM
427 } ENUM_PHY_MODE_T, *P_ENUM_PHY_MODE_T;
428
429 typedef enum _ENUM_POWER_SAVE_POLL_MODE_T {
430     ENUM_POWER_SAVE_POLL_DISABLE,
431     ENUM_POWER_SAVE_POLL_LEGACY_NULL,
432     ENUM_POWER_SAVE_POLL_QOS_NULL,
433     ENUM_POWER_SAVE_POLL_NUM
434 } ENUM_POWER_SAVE_POLL_MODE_T, *P_ENUM_POWER_SAVE_POLL_MODE_T;
435
436 typedef enum _ENUM_AC_TYPE_T {
437     ENUM_AC_TYPE_AC0,
438     ENUM_AC_TYPE_AC1,
439     ENUM_AC_TYPE_AC2,
440     ENUM_AC_TYPE_AC3,
441     ENUM_AC_TYPE_AC4,
442     ENUM_AC_TYPE_AC5,
443     ENUM_AC_TYPE_AC6,
444     ENUM_AC_TYPE_BMC,
445     ENUM_AC_TYPE_NUM
446 } ENUM_AC_TYPE_T, *P_ENUM_AC_TYPE_T;
447
448 typedef enum _ENUM_ADV_AC_TYPE_T {
449     ENUM_ADV_AC_TYPE_RX_NSW,
450     ENUM_ADV_AC_TYPE_RX_PTA,
451     ENUM_ADV_AC_TYPE_RX_SP,
452     ENUM_ADV_AC_TYPE_TX_PTA,
453     ENUM_ADV_AC_TYPE_TX_RSP,
454     ENUM_ADV_AC_TYPE_NUM
455 } ENUM_ADV_AC_TYPE_T, *P_ENUM_ADV_AC_TYPE_T;
456
457 typedef enum _ENUM_REG_CH_MAP_T {
458     REG_CH_MAP_COUNTRY_CODE,
459     REG_CH_MAP_TBL_IDX,
460     REG_CH_MAP_CUSTOMIZED,
461     REG_CH_MAP_NUM
462 } ENUM_REG_CH_MAP_T, *P_ENUM_REG_CH_MAP_T;
463
464 typedef struct _SET_TXPWR_CTRL_T{
465     INT_8    c2GLegacyStaPwrOffset;  /* Unit: 0.5dBm, default: 0*/
466     INT_8    c2GHotspotPwrOffset;
467     INT_8    c2GP2pPwrOffset;
468     INT_8    c2GBowPwrOffset;
469     INT_8    c5GLegacyStaPwrOffset;   /* Unit: 0.5dBm, default: 0*/
470     INT_8    c5GHotspotPwrOffset;
471     INT_8    c5GP2pPwrOffset;
472     INT_8    c5GBowPwrOffset;
473     UINT_8  ucConcurrencePolicy;   /* TX power policy when concurrence
474                                                             in the same channel
475                                                             0: Highest power has priority
476                                                             1: Lowest power has priority */
477     INT_8    acReserved1[3];            /* Must be zero */
478
479     /* Power limit by channel for all data rates */
480     INT_8    acTxPwrLimit2G[14];     /* Channel 1~14, Unit: 0.5dBm*/
481     INT_8    acTxPwrLimit5G[4];       /* UNII 1~4 */
482     INT_8    acReserved2[2];            /* Must be zero */
483 } SET_TXPWR_CTRL_T, *P_SET_TXPWR_CTRL_T;
484
485 /* For storing driver initialization value from glue layer */
486 typedef struct _REG_INFO_T {
487     UINT_32     u4SdBlockSize;                      /* SDIO block size */
488     UINT_32     u4SdBusWidth;                       /* SDIO bus width. 1 or 4 */
489     UINT_32     u4SdClockRate;                      /* SDIO clock rate. (in unit of HZ) */
490     UINT_32     u4StartAddress;                     /* Starting address of Wi-Fi Firmware */
491     UINT_32     u4LoadAddress;                      /* Load address of Wi-Fi Firmware */
492     UINT_16     aucFwImgFilename[65];               /* Firmware filename */
493     UINT_16     aucFwImgFilenameE6[65];             /* Firmware filename for E6 */
494     UINT_32     u4StartFreq;                        /* Start Frequency for Ad-Hoc network : in unit of KHz */
495     UINT_32     u4AdhocMode;                        /* Default mode for Ad-Hoc network : ENUM_PARAM_AD_HOC_MODE_T */
496     UINT_32     u4RddStartFreq;
497     UINT_32     u4RddStopFreq;
498     UINT_32     u4RddTestMode;
499     UINT_32     u4RddShutFreq;
500     UINT_32     u4RddDfs;
501     INT_32      i4HighRssiThreshold;
502     INT_32      i4MediumRssiThreshold;
503     INT_32      i4LowRssiThreshold;
504     INT_32      au4TxPriorityTag[ENUM_AC_TYPE_NUM];
505     INT_32      au4RxPriorityTag[ENUM_AC_TYPE_NUM];
506     INT_32      au4AdvPriorityTag[ENUM_ADV_AC_TYPE_NUM];
507     UINT_32     u4FastPSPoll;
508     UINT_32     u4PTA;                              /* 0: disable, 1: enable */
509     UINT_32     u4TXLimit;                          /* 0: disable, 1: enable */
510     UINT_32     u4SilenceWindow;                    /* range: 100 - 625, unit: us */
511     UINT_32     u4TXLimitThreshold;                 /* range: 250 - 1250, unit: us */
512     UINT_32     u4PowerMode;
513     UINT_32     fgEnArpFilter;
514     UINT_32     u4PsCurrentMeasureEn;
515     UINT_32     u4UapsdAcBmp;
516     UINT_32     u4MaxSpLen;
517     UINT_32     fgDisOnlineScan;                    /* 0: enable online scan, non-zero: disable online scan*/
518     UINT_32     fgDisBcnLostDetection;                    /* 0: enable online scan, non-zero: disable online scan*/
519     UINT_32     u4FixedRate;                        /* 0: automatic, non-zero: fixed rate */
520     UINT_32     u4ArSysParam0;
521     UINT_32     u4ArSysParam1;
522     UINT_32     u4ArSysParam2;
523     UINT_32     u4ArSysParam3;
524     UINT_32     fgDisRoaming;                        /* 0:enable roaming 1:disable */
525
526     // NVRAM - MP Data -START-
527     UINT_8              aucMacAddr[6];
528     UINT_16             au2CountryCode[4];          /* Country code (in ISO 3166-1 expression, ex: "US", "TW")  */
529     TX_PWR_PARAM_T      rTxPwr;
530     UINT_8              aucEFUSE[144];
531     UINT_8              ucTxPwrValid;
532     UINT_8              ucSupport5GBand;
533     UINT_8              fg2G4BandEdgePwrUsed;
534     INT_8               cBandEdgeMaxPwrCCK;
535     INT_8               cBandEdgeMaxPwrOFDM20;
536     INT_8               cBandEdgeMaxPwrOFDM40;
537     ENUM_REG_CH_MAP_T   eRegChannelListMap;
538     UINT_8              ucRegChannelListIndex;
539     DOMAIN_INFO_ENTRY   rDomainInfo;
540     // NVRAM - MP Data -END-
541
542     // NVRAM - Functional Data -START-
543     UINT_8              uc2G4BwFixed20M;
544     UINT_8              uc5GBwFixed20M;
545     UINT_8              ucEnable5GBand;
546     // NVRAM - Functional Data -END-
547
548 } REG_INFO_T, *P_REG_INFO_T;
549
550 /* for divided firmware loading */
551 typedef struct _FWDL_SECTION_INFO_T
552 {
553     UINT_32 u4Offset;
554     UINT_32 u4Reserved;
555     UINT_32 u4Length;
556     UINT_32 u4DestAddr;
557 } FWDL_SECTION_INFO_T, *P_FWDL_SECTION_INFO_T;
558
559 typedef struct _FIRMWARE_DIVIDED_DOWNLOAD_T
560 {
561     UINT_32             u4Signature;
562     UINT_32             u4CRC;          /* CRC calculated without first 8 bytes included */
563     UINT_32             u4NumOfEntries;
564     UINT_32             u4Reserved;
565     FWDL_SECTION_INFO_T arSection[];
566 } FIRMWARE_DIVIDED_DOWNLOAD_T, *P_FIRMWARE_DIVIDED_DOWNLOAD_T;
567
568 typedef struct _PARAM_MCR_RW_STRUC_T {
569     UINT_32             u4McrOffset;
570     UINT_32             u4McrData;
571 } PARAM_MCR_RW_STRUC_T, *P_PARAM_MCR_RW_STRUC_T;
572
573
574 /*******************************************************************************
575 *                            P U B L I C   D A T A
576 ********************************************************************************
577 */
578
579 /*******************************************************************************
580 *                           P R I V A T E   D A T A
581 ********************************************************************************
582 */
583
584 /*******************************************************************************
585 *                                 M A C R O S
586 ********************************************************************************
587 */
588 #define BUILD_SIGN(ch0, ch1, ch2, ch3) \
589     ((UINT_32)(UINT_8)(ch0) | ((UINT_32)(UINT_8)(ch1) << 8) |   \
590      ((UINT_32)(UINT_8)(ch2) << 16) | ((UINT_32)(UINT_8)(ch3) << 24 ))
591
592 #define MTK_WIFI_SIGNATURE BUILD_SIGN('M', 'T', 'K', 'W')
593
594 /*******************************************************************************
595 *                   F U N C T I O N   D E C L A R A T I O N S
596 ********************************************************************************
597 */
598
599 P_ADAPTER_T
600 wlanAdapterCreate (
601     IN P_GLUE_INFO_T prGlueInfo
602     );
603
604 VOID
605 wlanAdapterDestroy (
606     IN P_ADAPTER_T prAdapter
607     );
608
609 VOID
610 wlanCardEjected(
611     IN P_ADAPTER_T         prAdapter
612     );
613
614 VOID
615 wlanIST (
616     IN P_ADAPTER_T prAdapter
617     );
618
619 BOOL
620 wlanISR (
621     IN P_ADAPTER_T prAdapter,
622     IN BOOLEAN fgGlobalIntrCtrl
623     );
624
625 WLAN_STATUS
626 wlanProcessCommandQueue (
627     IN P_ADAPTER_T  prAdapter,
628     IN P_QUE_T      prCmdQue
629     );
630
631 WLAN_STATUS
632 wlanSendCommand (
633     IN P_ADAPTER_T  prAdapter,
634     IN P_CMD_INFO_T prCmdInfo
635     );
636
637 VOID
638 wlanReleaseCommand (
639     IN P_ADAPTER_T  prAdapter,
640     IN P_CMD_INFO_T prCmdInfo
641     );
642
643 VOID
644 wlanReleasePendingOid (
645     IN P_ADAPTER_T  prAdapter,
646     IN UINT_32      u4Data
647     );
648
649 VOID
650 wlanReleasePendingCMDbyNetwork(
651     IN P_ADAPTER_T  prAdapter,
652     IN ENUM_NETWORK_TYPE_INDEX_T eNetworkType
653     );
654
655 VOID
656 wlanReturnPacket (
657     IN P_ADAPTER_T prAdapter,
658     IN PVOID pvPacket
659     );
660
661 WLAN_STATUS
662 wlanQueryInformation (
663     IN P_ADAPTER_T          prAdapter,
664     IN PFN_OID_HANDLER_FUNC pfOidQryHandler,
665     IN PVOID                pvInfoBuf,
666     IN UINT_32              u4InfoBufLen,
667     OUT PUINT_32            pu4QryInfoLen
668     );
669
670 WLAN_STATUS
671 wlanSetInformation (
672     IN P_ADAPTER_T          prAdapter,
673     IN PFN_OID_HANDLER_FUNC pfOidSetHandler,
674     IN PVOID                pvInfoBuf,
675     IN UINT_32              u4InfoBufLen,
676     OUT PUINT_32            pu4SetInfoLen
677     );
678
679
680 WLAN_STATUS
681 wlanAdapterStart (
682     IN P_ADAPTER_T  prAdapter,
683     IN P_REG_INFO_T prRegInfo,
684     IN PVOID        pvFwImageMapFile,
685     IN UINT_32      u4FwImageFileLength
686     );
687
688 WLAN_STATUS
689 wlanAdapterStop (
690     IN P_ADAPTER_T prAdapter
691     );
692
693 #if CFG_SUPPORT_WAPI
694 BOOLEAN
695 wlanQueryWapiMode(
696     IN P_ADAPTER_T          prAdapter
697     );
698 #endif
699
700 VOID
701 wlanReturnRxPacket (
702     IN PVOID pvAdapter,
703     IN PVOID pvPacket
704     );
705
706 VOID
707 wlanRxSetBroadcast (
708     IN P_ADAPTER_T  prAdapter,
709     IN BOOLEAN      fgEnableBroadcast
710     );
711
712 BOOLEAN
713 wlanIsHandlerNeedHwAccess (
714     IN PFN_OID_HANDLER_FUNC pfnOidHandler,
715     IN BOOLEAN              fgSetInfo
716     );
717
718 VOID
719 wlanSetPromiscuousMode (
720     IN P_ADAPTER_T  prAdapter,
721     IN BOOLEAN      fgEnablePromiscuousMode
722     );
723
724 #if CFG_ENABLE_FW_DOWNLOAD
725     #if CFG_ENABLE_FW_DOWNLOAD_AGGREGATION
726 WLAN_STATUS
727 wlanImageSectionDownloadAggregated (
728     IN P_ADAPTER_T  prAdapter,
729     IN UINT_32      u4DestAddr,
730     IN UINT_32      u4ImgSecSize,
731     IN PUINT_8      pucImgSecBuf
732     );
733     #endif
734
735 WLAN_STATUS
736 wlanImageSectionDownload (
737     IN P_ADAPTER_T  prAdapter,
738     IN UINT_32      u4DestAddr,
739     IN UINT_32      u4ImgSecSize,
740     IN PUINT_8      pucImgSecBuf
741     );
742
743 #if !CFG_ENABLE_FW_DOWNLOAD_ACK
744 WLAN_STATUS
745 wlanImageQueryStatus(
746     IN P_ADAPTER_T  prAdapter
747     );
748 #else
749 WLAN_STATUS
750 wlanImageSectionDownloadStatus (
751     IN P_ADAPTER_T  prAdapter,
752     IN UINT_8       ucCmdSeqNum
753     );
754 #endif
755
756 WLAN_STATUS
757 wlanConfigWifiFunc (
758     IN P_ADAPTER_T  prAdapter,
759     IN BOOLEAN      fgEnable,
760     IN UINT_32      u4StartAddress
761     );
762
763 UINT_32 wlanCRC32(
764     PUINT_8 buf,
765     UINT_32 len
766     );
767
768 #endif
769
770 WLAN_STATUS
771 wlanSendNicPowerCtrlCmd (
772     IN P_ADAPTER_T  prAdapter,
773     IN UINT_8       ucPowerMode
774     );
775
776 BOOLEAN
777 wlanIsHandlerAllowedInRFTest (
778     IN PFN_OID_HANDLER_FUNC pfnOidHandler,
779     IN BOOLEAN              fgSetInfo
780     );
781
782 WLAN_STATUS
783 wlanProcessQueuedSwRfb (
784     IN P_ADAPTER_T prAdapter,
785     IN P_SW_RFB_T prSwRfbListHead
786     );
787
788 WLAN_STATUS
789 wlanProcessQueuedMsduInfo (
790     IN P_ADAPTER_T prAdapter,
791     IN P_MSDU_INFO_T prMsduInfoListHead
792     );
793
794 BOOLEAN
795 wlanoidTimeoutCheck (
796     IN P_ADAPTER_T prAdapter,
797     IN PFN_OID_HANDLER_FUNC pfnOidHandler
798     );
799
800 VOID
801 wlanoidClearTimeoutCheck (
802     IN P_ADAPTER_T prAdapter
803     );
804
805 WLAN_STATUS
806 wlanUpdateNetworkAddress (
807     IN P_ADAPTER_T prAdapter
808     );
809
810 BOOLEAN
811 wlanQueryTestMode(
812     IN P_ADAPTER_T          prAdapter
813     );
814
815 /* Security Frame Handling */
816 BOOLEAN
817 wlanProcessSecurityFrame(
818     IN P_ADAPTER_T      prAdapter,
819     IN P_NATIVE_PACKET  prPacket
820     );
821
822 VOID
823 wlanSecurityFrameTxDone(
824     IN P_ADAPTER_T  prAdapter,
825     IN P_CMD_INFO_T prCmdInfo,
826     IN PUINT_8      pucEventBuf
827     );
828
829 VOID
830 wlanSecurityFrameTxTimeout(
831     IN P_ADAPTER_T  prAdapter,
832     IN P_CMD_INFO_T prCmdInfo
833     );
834
835 /*----------------------------------------------------------------------------*/
836 /* OID/IOCTL Handling                                                         */
837 /*----------------------------------------------------------------------------*/
838 VOID
839 wlanClearScanningResult(
840     IN P_ADAPTER_T  prAdapter
841     );
842
843 VOID
844 wlanClearBssInScanningResult(
845     IN P_ADAPTER_T      prAdapter,
846     IN PUINT_8          arBSSID
847     );
848
849 #if CFG_TEST_WIFI_DIRECT_GO
850 VOID
851 wlanEnableP2pFunction(
852     IN P_ADAPTER_T prAdapter
853     );
854
855 VOID
856 wlanEnableATGO(
857     IN P_ADAPTER_T prAdapter
858     );
859 #endif
860
861
862 /*----------------------------------------------------------------------------*/
863 /* Address Retreive by Polling                                                */
864 /*----------------------------------------------------------------------------*/
865 WLAN_STATUS
866 wlanQueryPermanentAddress(
867     IN P_ADAPTER_T prAdapter
868     );
869
870
871 /*----------------------------------------------------------------------------*/
872 /* NIC Capability Retrieve by Polling                                         */
873 /*----------------------------------------------------------------------------*/
874 WLAN_STATUS
875 wlanQueryNicCapability(
876     IN P_ADAPTER_T prAdapter
877     );
878
879
880 /*----------------------------------------------------------------------------*/
881 /* PD MCR Retrieve by Polling                                         */
882 /*----------------------------------------------------------------------------*/
883 WLAN_STATUS
884 wlanQueryPdMcr(
885     IN P_ADAPTER_T prAdapter,
886     IN P_PARAM_MCR_RW_STRUC_T prMcrRdInfo
887     );
888 /*----------------------------------------------------------------------------*/
889 /* Loading Manufacture Data                                                   */
890 /*----------------------------------------------------------------------------*/
891 WLAN_STATUS
892 wlanLoadManufactureData (
893     IN P_ADAPTER_T prAdapter,
894     IN P_REG_INFO_T prRegInfo
895     );
896
897
898 /*----------------------------------------------------------------------------*/
899 /* Media Stream Mode                                                          */
900 /*----------------------------------------------------------------------------*/
901 BOOLEAN
902 wlanResetMediaStreamMode(
903     IN P_ADAPTER_T prAdapter
904     );
905
906
907 /*----------------------------------------------------------------------------*/
908 /* Timer Timeout Check (for Glue Layer)                                       */
909 /*----------------------------------------------------------------------------*/
910 WLAN_STATUS
911 wlanTimerTimeoutCheck(
912     IN P_ADAPTER_T prAdapter
913     );
914
915
916 /*----------------------------------------------------------------------------*/
917 /* Mailbox Message Check (for Glue Layer)                                     */
918 /*----------------------------------------------------------------------------*/
919 WLAN_STATUS
920 wlanProcessMboxMessage(
921     IN P_ADAPTER_T prAdapter
922     );
923
924
925 /*----------------------------------------------------------------------------*/
926 /* TX Pending Packets Handling (for Glue Layer)                               */
927 /*----------------------------------------------------------------------------*/
928 WLAN_STATUS
929 wlanEnqueueTxPacket (
930     IN P_ADAPTER_T      prAdapter,
931     IN P_NATIVE_PACKET  prNativePacket
932     );
933
934 WLAN_STATUS
935 wlanFlushTxPendingPackets(
936     IN P_ADAPTER_T prAdapter
937     );
938
939 WLAN_STATUS
940 wlanTxPendingPackets (
941     IN      P_ADAPTER_T prAdapter,
942     IN OUT  PBOOLEAN    pfgHwAccess
943     );
944
945
946 /*----------------------------------------------------------------------------*/
947 /* Low Power Acquire/Release (for Glue Layer)                                 */
948 /*----------------------------------------------------------------------------*/
949 WLAN_STATUS
950 wlanAcquirePowerControl(
951     IN P_ADAPTER_T prAdapter
952     );
953
954 WLAN_STATUS
955 wlanReleasePowerControl(
956     IN P_ADAPTER_T prAdapter
957     );
958
959
960 /*----------------------------------------------------------------------------*/
961 /* Pending Packets Number Reporting (for Glue Layer)                          */
962 /*----------------------------------------------------------------------------*/
963 UINT_32
964 wlanGetTxPendingFrameCount (
965     IN P_ADAPTER_T prAdapter
966     );
967
968
969 /*----------------------------------------------------------------------------*/
970 /* ACPI state inquiry (for Glue Layer)                                        */
971 /*----------------------------------------------------------------------------*/
972 ENUM_ACPI_STATE_T
973 wlanGetAcpiState (
974     IN P_ADAPTER_T prAdapter
975     );
976
977 VOID
978 wlanSetAcpiState (
979     IN P_ADAPTER_T prAdapter,
980     IN ENUM_ACPI_STATE_T ePowerState
981     );
982
983 #if CFG_SUPPORT_OSC_SETTING && defined(MT5931)
984 WLAN_STATUS
985 wlanSetMcuOscStableTime (
986     IN P_ADAPTER_T      prAdapter,
987     IN UINT_16          u2OscStableTime
988     );
989 #endif
990
991 VOID
992 wlanDefTxPowerCfg (
993     IN P_ADAPTER_T      prAdapter
994     );
995
996 /*----------------------------------------------------------------------------*/
997 /* get ECO version from Revision ID register (for Win32)                      */
998 /*----------------------------------------------------------------------------*/
999 UINT_8
1000 wlanGetEcoVersion(
1001     IN P_ADAPTER_T prAdapter
1002     );
1003
1004 /*----------------------------------------------------------------------------*/
1005 /* set preferred band configuration corresponding to network type             */
1006 /*----------------------------------------------------------------------------*/
1007 VOID
1008 wlanSetPreferBandByNetwork (
1009     IN P_ADAPTER_T prAdapter,
1010     IN ENUM_BAND_T eBand,
1011     IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex
1012     );
1013
1014 /*----------------------------------------------------------------------------*/
1015 /* get currently operating channel information                                */
1016 /*----------------------------------------------------------------------------*/
1017 UINT_8
1018 wlanGetChannelNumberByNetwork (
1019     IN P_ADAPTER_T prAdapter,
1020     IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex
1021     );
1022
1023 /*----------------------------------------------------------------------------*/
1024 /* get BSS Descriptor information                                             */
1025 /*----------------------------------------------------------------------------*/
1026 P_BSS_DESC_T
1027 wlanGetTargetBssDescByNetwork (
1028     IN P_ADAPTER_T prAdapter,
1029     IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex
1030     );
1031
1032 /*----------------------------------------------------------------------------*/
1033 /* check for system configuration to generate message on scan list            */
1034 /*----------------------------------------------------------------------------*/
1035 WLAN_STATUS
1036 wlanCheckSystemConfiguration (
1037     IN P_ADAPTER_T prAdapter
1038     );
1039
1040
1041 #endif /* _WLAN_LIB_H */
1042