2 ** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/nic/nic.h#1 $
6 \brief The declaration of nic functions
16 ** 03 11 2014 eason.tsai
17 ** [ALPS01070904] [Need Patch] [Volunteer Patch][MT6630][Driver]MT6630 Wi-Fi Patch
18 ** update rssi command
20 ** 08 13 2013 terry.wu
21 ** [BORA00002207] [MT6630 Wi-Fi] TXM & MQM Implementation
22 ** 1. Assign TXD.PID by wlan index
26 ** [BORA00002227] [MT6630 Wi-Fi][Driver] Update for Makefile and HIFSYS modifications
27 ** update MAC address handling logic
30 ** [BORA00002253] [MT6630 Wi-Fi][Driver][Firmware] Add NLO and timeout mechanism to SCN module
31 ** modify AIS behavior: stop join trial if failed
34 ** [BORA00002253] [MT6630 Wi-Fi][Driver][Firmware] Add NLO and timeout mechanism to SCN module
35 ** modification for ucBssIndex migration
37 ** 01 21 2013 terry.wu
38 ** [BORA00002207] [MT6630 Wi-Fi] TXM & MQM Implementation
39 ** Update TX path based on new ucBssIndex modifications.
41 ** 01 17 2013 cm.chang
42 ** [BORA00002149] [MT6630 Wi-Fi] Initial software development
43 ** Use ucBssIndex to replace eNetworkTypeIndex
45 ** 09 17 2012 cm.chang
46 ** [BORA00002149] [MT6630 Wi-Fi] Initial software development
47 ** Duplicate source from MT6620 v2.3 driver branch
48 ** (Davinci label: MT6620_WIFI_Driver_V2_3_120913_1942_As_MT6630_Base)
50 * 11 01 2011 chinglan.wang
52 * Modify the Wi-Fi method of the flush TX queue when disconnect the AP.
53 * If disconnect the AP and flush all the data frame in the TX queue, WPS cannot do the 4-way handshake to connect to the AP..
55 * 07 18 2011 chinghwa.yu
56 * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm
57 * Add CMD/Event for RDD and BWCS.
60 * [WCXRP00000718] [MT6620 Wi-Fi] modify the behavior of setting tx power
61 * ACPI APIs migrate to wlan_lib.c for glue layer to invoke.
63 * 04 11 2011 yuche.tsai
64 * [WCXRP00000627] [Volunteer Patch][MT6620][Driver] Pending MMPUD of P2P Network may crash system issue.
65 * Fix kernel panic issue when MMPDU of P2P is pending in driver.
68 * [WCXRP00000503] [MT6620 Wi-Fi][Driver] Take RCPI brought by association response as initial RSSI right after connection is built.
69 * use RCPI brought by ASSOC-RESP after connection is built as initial RCPI to avoid using a uninitialized MAC-RX RCPI.
72 * [WCXRP00000415] [MT6620 Wi-Fi][Driver] Check if any memory leakage happens when uninitializing in DGB mode
75 * 01 27 2011 tsaiyuan.hsu
76 * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support
78 * 1. not support 11r, only use strength of signal to determine roaming.
79 * 2. not enable CFG_SUPPORT_ROAMING until completion of full test.
80 * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw
81 * 4. assume that change of link quality in smooth way.
84 * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000137] [MT6620 Wi-Fi] [FW] Support NIC capability query command
85 * 1) update NVRAM content template to ver 1.02
86 * 2) add compile option for querying NIC capability (default: off)
87 * 3) modify AIS 5GHz support to run-time option, which could be turned on by registry or NVRAM setting
88 * 4) correct auto-rate compiler error under linux (treat warning as error)
89 * 5) simplify usage of NVRAM and REG_INFO_T
90 * 6) add version checking between driver and firmware
92 * 10 26 2010 eddie.chen
93 * [WCXRP00000134] [MT6620 Wi-Fi][Driver] Add a registry to enable auto rate for SQA test by using E1 EVB
94 * Add auto rate parameter in registry.
97 * [WCXRP00000084] [MT6620 Wi-Fi][Driver][FW] Add fixed rate support for distance test
98 * add HT (802.11n) fixed rate support.
101 * [WCXRP00000084] [MT6620 Wi-Fi][Driver][FW] Add fixed rate support for distance test
102 * adding fixed rate support for distance test. (from registry setting)
105 * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check
106 * 1) add NVRAM access API
107 * 2) fake scanning result when NVRAM doesn't exist and/or version mismatch. (off by compiler option)
108 * 3) add OID implementation for NVRAM read/write service
111 * [WCXRP00000077] [MT6620 Wi-Fi][Driver][FW] Eliminate use of ENUM_NETWORK_TYPE_T and replaced by ENUM_NETWORK_TYPE_INDEX_T only
112 * remove ENUM_NETWORK_TYPE_T definitions
115 * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated
116 * Do a complete reset with STA-REC null checking for RF test re-entry
120 * use static memory pool for storing IEs of scanning result.
124 * HIFSYS Clock Source Workaround
126 * 08 25 2010 george.huang
128 * update OID/ registry control path for PM related settings
132 * [AIS-FSM] honor registry setting for adhoc running mode. (A/B/G)
136 * Centralize mgmt/system service procedures into independent calls.
140 * 1) eliminate redundant variable eOPMode in prAdapter->rWlanInfo
141 * 2) change nicMediaStateChange() API prototype
143 * 07 14 2010 yarco.yang
145 * 1. Remove CFG_MQM_MIGRATION
146 * 2. Add CMD_UPDATE_WMM_PARMS command
150 * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository.
152 * 07 06 2010 george.huang
153 * [WPD00001556]Basic power managemenet function
154 * Update arguments for nicUpdateBeaconIETemplate()
157 * [WPD00003833][MT6620 and MT5931] Driver migration
158 * STA-REC is maintained by CNM only.
161 * [WPD00003833][MT6620 and MT5931] Driver migration
162 * 1) ignore RSN checking when RSN is not turned on.
163 * 2) set STA-REC deactivation callback as NULL
164 * 3) add variable initialization API based on PHY configuration
167 * [WPD00003833][MT6620 and MT5931] Driver migration
168 * sync. with CMD/EVENT document ver0.07.
171 * [WPD00003833][MT6620 and MT5931] Driver migration
172 * 1) sync to. CMD/EVENT document v0.03
173 * 2) simplify DTIM period parsing in scan.c only, bss.c no longer parses it again.
174 * 3) send command packet to indicate FW-PM after
175 * a) 1st beacon is received after AIS has connected to an AP
176 * b) IBSS-ALONE has been created
177 * c) IBSS-MERGE has occured
179 * 06 25 2010 george.huang
180 * [WPD00001556]Basic power managemenet function
181 * Create beacon update path, with expose bssUpdateBeaconContent()
184 * [WPD00003833][MT6620 and MT5931] Driver migration
185 * 1) add command warpper for STA-REC/BSS-INFO sync.
186 * 2) enhance command packet sending procedure for non-oid part
187 * 3) add command packet definitions for STA-REC/BSS-INFO sync.
190 * [WPD00003833][MT6620 and MT5931] Driver migration
191 * implement TX_DONE callback path.
194 * [WPD00003833][MT6620 and MT5931] Driver migration
195 * 1) migrate assoc.c.
196 * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness
197 * 3) add configuration options for CNM_MEM and RSN modules
198 * 4) add data path for management frames
199 * 5) eliminate rPacketInfo of MSDU_INFO_T
202 * [WPD00003833][MT6620 and MT5931] Driver migration
203 * 1) eliminate CFG_CMD_EVENT_VERSION_0_9
204 * 2) when disconnected, indicate nic directly (no event is needed)
206 * 06 06 2010 kevin.huang
207 * [WPD00003832][MT6620 5931] Create driver base
208 * [MT6620 5931] Create driver base
211 * [WPD00001943]Create WiFi test driver framework on WinXP
212 * 1) surpress compiler warning
213 * 2) when acqruing LP-own, keep writing WHLPCR whenever OWN is not acquired yet
216 * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support
217 * add framework for BT-over-Wi-Fi support.
218 * * * * * * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability
219 * * * * * * * * * 2) command sequence number is now increased atomically
220 * * * * * * * * * 3) private data could be hold and taken use for other purpose
223 * [WPD00001943]Create WiFi test driver framework on WinXP
224 * add channel frequency <-> number conversion
227 * [WPD00001943]Create WiFi test driver framework on WinXP
228 * 1) add ACPI D0/D3 state switching support
229 * * * * * 2) use more formal way to handle interrupt when the status is retrieved from enhanced RX response
232 * [WPD00001943]Create WiFi test driver framework on WinXP
233 * always process TX interrupt first then RX interrupt.
236 * [WPD00001943]Create WiFi test driver framework on WinXP
237 * correct behavior to prevent duplicated RX handling for RX0_DONE and RX1_DONE
240 * [WPD00001943]Create WiFi test driver framework on WinXP
241 * add checksum offloading support.
242 ** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-10-13 21:58:58 GMT mtk01084
243 ** update for new HW architecture design
244 ** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-04-24 21:12:55 GMT mtk01104
245 ** Add function prototype nicRestoreSpiDefMode()
246 ** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-19 18:32:54 GMT mtk01084
247 ** update for basic power management functions
248 ** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:16:32 GMT mtk01426
256 /*******************************************************************************
257 * C O M P I L E R F L A G S
258 ********************************************************************************
261 /*******************************************************************************
263 ********************************************************************************
266 /*******************************************************************************
268 ********************************************************************************
272 struct _REG_ENTRY_T
{
277 struct _TABLE_ENTRY_T
{
278 P_REG_ENTRY_T pu4TablePtr
;
282 /*! INT status to event map */
283 typedef struct _INT_EVENT_MAP_T
{
286 } INT_EVENT_MAP_T
, *P_INT_EVENT_MAP_T
;
289 enum ENUM_INT_EVENT_T
{
297 typedef enum _ENUM_IE_UPD_METHOD_T
{
298 IE_UPD_METHOD_UPDATE_RANDOM
,
299 IE_UPD_METHOD_UPDATE_ALL
,
300 IE_UPD_METHOD_DELETE_ALL
,
301 } ENUM_IE_UPD_METHOD_T
, *P_ENUM_IE_UPD_METHOD_T
;
304 /*******************************************************************************
305 * E X T E R N A L R E F E R E N C E S
306 ********************************************************************************
309 /*******************************************************************************
310 * P U B L I C D A T A
311 ********************************************************************************
314 /*******************************************************************************
315 * P R I V A T E D A T A
316 ********************************************************************************
319 /*******************************************************************************
321 ********************************************************************************
325 /*******************************************************************************
326 * F U N C T I O N D E C L A R A T I O N S
327 ********************************************************************************
329 /*----------------------------------------------------------------------------*/
330 /* Routines in nic.c */
331 /*----------------------------------------------------------------------------*/
332 WLAN_STATUS
nicAllocateAdapterMemory(IN P_ADAPTER_T prAdapter
);
334 VOID
nicReleaseAdapterMemory(IN P_ADAPTER_T prAdapter
);
336 VOID
nicDisableInterrupt(IN P_ADAPTER_T prAdapter
);
338 VOID
nicEnableInterrupt(IN P_ADAPTER_T prAdapter
);
340 WLAN_STATUS
nicProcessIST(IN P_ADAPTER_T prAdapter
);
342 WLAN_STATUS
nicProcessIST_impl(IN P_ADAPTER_T prAdapter
, IN UINT_32 u4IntStatus
);
344 WLAN_STATUS
nicInitializeAdapter(IN P_ADAPTER_T prAdapter
);
346 VOID
nicMCRInit(IN P_ADAPTER_T prAdapter
);
348 BOOL
nicVerifyChipID(IN P_ADAPTER_T prAdapter
);
351 #if CFG_SDIO_INTR_ENHANCE
352 VOID
nicSDIOInit(IN P_ADAPTER_T prAdapter
);
354 VOID
nicSDIOReadIntStatus(IN P_ADAPTER_T prAdapter
, OUT PUINT_32 pu4IntStatus
);
357 VOID
nicPmTriggerDriverOwn(IN P_ADAPTER_T prAdapter
);
359 BOOLEAN
nicpmSetDriverOwn(IN P_ADAPTER_T prAdapter
);
361 VOID
nicpmSetFWOwn(IN P_ADAPTER_T prAdapter
, IN BOOLEAN fgEnableGlobalInt
);
363 BOOLEAN
nicpmSetAcpiPowerD0(IN P_ADAPTER_T prAdapter
);
365 BOOLEAN
nicpmSetAcpiPowerD3(IN P_ADAPTER_T prAdapter
);
368 #if defined(_HIF_SPI)
369 void nicRestoreSpiDefMode(IN P_ADAPTER_T prAdapter
);
372 VOID
nicProcessSoftwareInterrupt(IN P_ADAPTER_T prAdapter
);
374 VOID
nicProcessAbnormalInterrupt(IN P_ADAPTER_T prAdapter
);
376 VOID
nicPutMailbox(IN P_ADAPTER_T prAdapter
, IN UINT_32 u4MailboxNum
, IN UINT_32 u4Data
);
378 VOID
nicGetMailbox(IN P_ADAPTER_T prAdapter
, IN UINT_32 u4MailboxNum
, OUT PUINT_32 pu4Data
);
380 VOID
nicSetSwIntr(IN P_ADAPTER_T prAdapter
, IN UINT_32 u4SwIntrBitmap
);
382 P_CMD_INFO_T
nicGetPendingCmdInfo(IN P_ADAPTER_T prAdapter
, IN UINT_8 ucSeqNum
);
385 nicGetPendingTxMsduInfo(IN P_ADAPTER_T prAdapter
, IN UINT_8 ucWlanIndex
, IN UINT_8 ucSeqNum
);
387 P_MSDU_INFO_T
nicGetPendingStaMMPDU(IN P_ADAPTER_T prAdapter
, IN UINT_8 ucStaRecIdx
);
389 VOID
nicFreePendingTxMsduInfoByBssIdx(IN P_ADAPTER_T prAdapter
, IN UINT_8 ucBssIndex
);
391 UINT_8
nicIncreaseCmdSeqNum(IN P_ADAPTER_T prAdapter
);
393 UINT_8
nicIncreaseTxSeqNum(IN P_ADAPTER_T prAdapter
);
395 /* Media State Change */
397 nicMediaStateChange(IN P_ADAPTER_T prAdapter
,
398 IN UINT_8 ucBssIndex
, IN P_EVENT_CONNECTION_STATUS prConnectionStatus
);
401 nicMediaJoinFailure(IN P_ADAPTER_T prAdapter
, IN UINT_8 ucBssIndex
, IN WLAN_STATUS rStatus
);
403 /* Utility function for channel number conversion */
404 UINT_32
nicChannelNum2Freq(IN UINT_32 u4ChannelNum
);
406 UINT_32
nicFreq2ChannelNum(IN UINT_32 u4FreqInKHz
);
408 UINT_8
nicGetVhtS1 (IN UINT_8 ucPrimaryChannel
);
411 /* firmware command wrapper */
412 /* NETWORK (WIFISYS) */
413 WLAN_STATUS
nicActivateNetwork(IN P_ADAPTER_T prAdapter
, IN UINT_8 ucBssIndex
);
415 WLAN_STATUS
nicDeactivateNetwork(IN P_ADAPTER_T prAdapter
, IN UINT_8 ucBssIndex
);
419 WLAN_STATUS
nicUpdateBss(IN P_ADAPTER_T prAdapter
, IN UINT_8 ucBssIndex
);
421 /* BSS-INFO Indication (PM) */
422 WLAN_STATUS
nicPmIndicateBssCreated(IN P_ADAPTER_T prAdapter
, IN UINT_8 ucBssIndex
);
424 WLAN_STATUS
nicPmIndicateBssConnected(IN P_ADAPTER_T prAdapter
, IN UINT_8 ucBssIndex
);
426 WLAN_STATUS
nicPmIndicateBssAbort(IN P_ADAPTER_T prAdapter
, IN UINT_8 ucBssIndex
);
428 /* Beacon Template Update */
430 nicUpdateBeaconIETemplate(IN P_ADAPTER_T prAdapter
,
431 IN ENUM_IE_UPD_METHOD_T eIeUpdMethod
,
432 IN UINT_8 ucBssIndex
,
433 IN UINT_16 u2Capability
, IN PUINT_8 aucIe
, IN UINT_16 u2IELen
);
435 WLAN_STATUS
nicQmUpdateWmmParms(IN P_ADAPTER_T prAdapter
, IN UINT_8 ucBssIndex
);
437 WLAN_STATUS
nicSetAutoTxPower(IN P_ADAPTER_T prAdapter
, IN P_CMD_AUTO_POWER_PARAM_T prAutoPwrParam
);
439 /*----------------------------------------------------------------------------*/
440 /* Calibration Control */
441 /*----------------------------------------------------------------------------*/
442 WLAN_STATUS
nicUpdateTxPower(IN P_ADAPTER_T prAdapter
, IN P_CMD_TX_PWR_T prTxPwrParam
);
444 WLAN_STATUS
nicUpdate5GOffset(IN P_ADAPTER_T prAdapter
, IN P_CMD_5G_PWR_OFFSET_T pr5GPwrOffset
);
446 WLAN_STATUS
nicUpdateDPD(IN P_ADAPTER_T prAdapter
, IN P_CMD_PWR_PARAM_T prDpdCalResult
);
449 /*----------------------------------------------------------------------------*/
450 /* PHY configuration */
451 /*----------------------------------------------------------------------------*/
452 VOID
nicSetAvailablePhyTypeSet(IN P_ADAPTER_T prAdapter
);
454 /*----------------------------------------------------------------------------*/
455 /* MGMT and System Service Control */
456 /*----------------------------------------------------------------------------*/
457 VOID
nicInitSystemService(IN P_ADAPTER_T prAdapter
);
459 VOID
nicResetSystemService(IN P_ADAPTER_T prAdapter
);
461 VOID
nicUninitSystemService(IN P_ADAPTER_T prAdapter
);
463 VOID
nicInitMGMT(IN P_ADAPTER_T prAdapter
, IN P_REG_INFO_T prRegInfo
);
465 VOID
nicUninitMGMT(IN P_ADAPTER_T prAdapter
);
468 nicConfigPowerSaveProfile(IN P_ADAPTER_T prAdapter
,
469 UINT_8 ucBssIndex
, PARAM_POWER_MODE ePwrMode
, BOOLEAN fgEnCmdEvent
);
471 WLAN_STATUS
nicEnterCtiaMode(IN P_ADAPTER_T prAdapter
, BOOLEAN fgEnterCtia
, BOOLEAN fgEnCmdEvent
);
473 /*----------------------------------------------------------------------------*/
474 /* Scan Result Processing */
475 /*----------------------------------------------------------------------------*/
477 nicAddScanResult(IN P_ADAPTER_T prAdapter
,
478 IN PARAM_MAC_ADDRESS rMacAddr
,
479 IN P_PARAM_SSID_T prSsid
,
480 IN UINT_32 u4Privacy
,
482 IN ENUM_PARAM_NETWORK_TYPE_T eNetworkType
,
483 IN P_PARAM_802_11_CONFIG_T prConfiguration
,
484 IN ENUM_PARAM_OP_MODE_T eOpMode
,
485 IN PARAM_RATES_EX rSupportedRates
, IN UINT_16 u2IELength
, IN PUINT_8 pucIEBuf
);
487 VOID
nicFreeScanResultIE(IN P_ADAPTER_T prAdapter
, IN UINT_32 u4Idx
);
489 /*----------------------------------------------------------------------------*/
490 /* Fixed Rate Hacking */
491 /*----------------------------------------------------------------------------*/
493 nicUpdateRateParams(IN P_ADAPTER_T prAdapter
,
494 IN ENUM_REGISTRY_FIXED_RATE_T eRateSetting
,
495 IN PUINT_8 pucDesiredPhyTypeSet
,
496 IN PUINT_16 pu2DesiredNonHTRateSet
,
497 IN PUINT_16 pu2BSSBasicRateSet
,
498 IN PUINT_8 pucMcsSet
, IN PUINT_8 pucSupMcs32
, IN PUINT_16 u2HtCapInfo
);
500 /*----------------------------------------------------------------------------*/
501 /* Write registers */
502 /*----------------------------------------------------------------------------*/
503 WLAN_STATUS
nicWriteMcr(IN P_ADAPTER_T prAdapter
, IN UINT_32 u4Address
, IN UINT_32 u4Value
);
505 /*----------------------------------------------------------------------------*/
506 /* Update auto rate */
507 /*----------------------------------------------------------------------------*/
509 nicRlmArUpdateParms(IN P_ADAPTER_T prAdapter
,
510 IN UINT_32 u4ArSysParam0
,
511 IN UINT_32 u4ArSysParam1
, IN UINT_32 u4ArSysParam2
, IN UINT_32 u4ArSysParam3
);
513 /*----------------------------------------------------------------------------*/
514 /* Enable/Disable Roaming */
515 /*----------------------------------------------------------------------------*/
516 WLAN_STATUS
nicRoamingUpdateParams(IN P_ADAPTER_T prAdapter
, IN UINT_32 u4EnableRoaming
);
519 VOID
nicPrintFirmwareAssertInfo(IN P_ADAPTER_T prAdapter
);
521 /*----------------------------------------------------------------------------*/
522 /* Link Quality Updating */
523 /*----------------------------------------------------------------------------*/
525 nicUpdateLinkQuality(IN P_ADAPTER_T prAdapter
,
526 IN UINT_8 ucBssIndex
, IN P_EVENT_LINK_QUALITY_V2 prEventLinkQuality
);
529 nicUpdateRSSI(IN P_ADAPTER_T prAdapter
,
530 IN UINT_8 ucBssIndex
, IN INT_8 cRssi
, IN INT_8 cLinkQuality
);
532 VOID
nicUpdateLinkSpeed(IN P_ADAPTER_T prAdapter
, IN UINT_8 ucBssIndex
, IN UINT_16 u2LinkSpeed
);
534 #if CFG_SUPPORT_RDD_TEST_MODE
535 WLAN_STATUS
nicUpdateRddTestMode(IN P_ADAPTER_T prAdapter
, IN P_CMD_RDD_CH_T prRddChParam
);
538 /*----------------------------------------------------------------------------*/
539 /* Address Setting Apply */
540 /*----------------------------------------------------------------------------*/
541 WLAN_STATUS
nicApplyNetworkAddress(IN P_ADAPTER_T prAdapter
);