2 ** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_2/nic/nic_cmd_event.c#1 $
5 /*! \file nic_cmd_event.c
6 \brief Callback functions for Command packets.
8 Various Event packet handlers which will be setup in the callback function of
12 /*******************************************************************************
13 * Copyright (c) 2007 MediaTek Inc.
15 * All rights reserved. Copying, compilation, modification, distribution
16 * or any other use whatsoever of this material is strictly prohibited
17 * except in accordance with a Software License Agreement with
19 ********************************************************************************
22 /*******************************************************************************
25 * BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND
26 * AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK
27 * SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE
28 * PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY
29 * DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT
30 * LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
31 * PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE
32 * ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY
33 * WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK
34 * SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY
35 * WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE
36 * FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO
37 * CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
39 * BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
40 * LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL
41 * BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT
42 * ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY
43 * BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
45 * THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
46 * WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT
47 * OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING
48 * THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN
49 * FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE
51 ********************************************************************************
55 ** $Log: nic_cmd_event.c $
57 * 01 27 2012 yuche.tsai
58 * [ALPS00118350] [ALPS.ICS][WiFi Direct] Dirver update for wifi direct connection
59 * Fix compile warning & update latest driver 2.2.
60 * Davinci Label: 20120127_ALPS_WIFI_P2P_DRIVER_V2_1
63 * [WCXRP00000785] [MT6620 Wi-Fi][Driver][FW] P2P/BOW MAC address is XOR with AIS MAC address
64 * P2P/BOW mac address XOR with local bit instead of OR
67 * [WCXRP00000577] [MT6620 Wi-Fi][Driver][FW] Create V2.0 branch for firmware and driver
68 * create V2.0 driver release based on label "MT6620_WIFI_DRIVER_V2_0_110318_1600" from main trunk
71 * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code
72 * add the code to get the check rsponse and indicate to app.
75 * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code
76 * Add security check code.
79 * [WCXRP00000493] [MT6620 Wi-Fi][Driver] Do not indicate redundant disconnection to host when entering into RF test mode
80 * only indicate DISCONNECTION to host when entering RF test if necessary (connected -> disconnected cases)
82 * 01 20 2011 eddie.chen
83 * [WCXRP00000374] [MT6620 Wi-Fi][DRV] SW debug control
84 * Add Oid for sw control debug command
87 * [WCXRP00000335] [MT6620 Wi-Fi][Driver] change to use milliseconds sleep instead of delay to avoid blocking to system scheduling
88 * change to use msleep() and shorten waiting interval to reduce blocking to other task while Wi-Fi driver is being loaded
91 * [WCXRP00000223] MT6620 Wi-Fi][Driver][FW] Adopt NVRAM parameters when enter/exit RF test mode
92 * reload NVRAM settings before entering RF test mode and leaving from RF test mode.
95 * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000150] [MT6620 Wi-Fi][Driver] Add implementation for querying current TX rate from firmware auto rate module
96 * 1) Query link speed (TX rate) from firmware directly with buffering mechanism to reduce overhead
97 * 2) Remove CNM CH-RECOVER event handling
98 * 3) cfg read/write API renamed with kal prefix for unified naming rules.
101 * [WCXRP00000117] [MT6620 Wi-Fi][Driver] Add logic for suspending driver when MT6620 is not responding anymore
102 * use OID_CUSTOM_TEST_MODE as indication for driver reset
103 * by dropping pending TX packets
106 * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000086] [MT6620 Wi-Fi][Driver] The mac address is all zero at android
107 * complete implementation of Android NVRAM access
110 * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated
111 * Do a complete reset with STA-REC null checking for RF test re-entry
113 * 09 15 2010 yuche.tsai
115 * Start to test AT GO only when P2P state is not IDLE.
117 * 09 09 2010 yuche.tsai
119 * Add AT GO Test mode after MAC address available.
121 * 09 03 2010 kevin.huang
123 * Refine #include sequence and solve recursive/nested #include issue
127 * eliminate klockwork errors
131 * Replace CFG_SUPPORT_BOW by CFG_ENABLE_BT_OVER_WIFI.
132 * There is no CFG_SUPPORT_BOW in driver domain source.
136 * [AIS-FSM] honor registry setting for adhoc running mode. (A/B/G)
138 * 08 11 2010 yuche.tsai
140 * Add support for P2P Device Address query from FW.
144 * Centralize mgmt/system service procedures into independent calls.
148 * reset FSMs before entering RF test mode.
152 * 1) refine AIS-FSM indent.
153 * 2) when entering RF Test mode, flush 802.1X frames as well
154 * 3) when entering D3 state, flush 802.1X frames as well
158 * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository.
161 * [WPD00003833][MT6620 and MT5931] Driver migration
162 * 1) change fake BSS_DESC from channel 6 to channel 1 due to channel switching is not done yet.
163 * 2) after MAC address is queried from firmware, all related variables in driver domain should be updated as well
166 * [WPD00003840][MT6620 5931] Security migration
167 * remove duplicate variable for migration.
169 * 06 06 2010 kevin.huang
170 * [WPD00003832][MT6620 5931] Create driver base
171 * [MT6620 5931] Create driver base
174 * [WPD00001943]Create WiFi test driver framework on WinXP
175 * change upon request: indicate as disconnected in driver domain when leaving from RF test mode
178 * [WPD00001943]Create WiFi test driver framework on WinXP
179 * do not clear scanning list array after disassociation
182 * [WPD00001943]Create WiFi test driver framework on WinXP
183 * 1) disable NETWORK_LAYER_ADDRESSES handling temporally.
184 * 2) finish statistics OIDs
187 * [WPD00001943]Create WiFi test driver framework on WinXP
188 * change OID behavior to meet WHQL requirement.
191 * [WPD00001943]Create WiFi test driver framework on WinXP
192 * 1) integrate OID_GEN_NETWORK_LAYER_ADDRESSES with CMD_ID_SET_IP_ADDRESS
193 * 2) buffer statistics data for 2 seconds
194 * 3) use default value for adhoc parameters instead of 0
197 * [WPD00001943]Create WiFi test driver framework on WinXP
198 * 1) do not take timeout mechanism for power mode oids
199 * 2) retrieve network type from connection status
200 * 3) after disassciation, set radio state to off
201 * 4) TCP option over IPv6 is supported
204 * [WPD00001943]Create WiFi test driver framework on WinXP
205 * correct OID_802_11_DISASSOCIATE handling.
208 * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support
209 * 1) add timeout handler mechanism for pending command packets
210 * 2) add p2p add/removal key
213 * [WPD00001943]Create WiFi test driver framework on WinXP
214 * treat BUS access failure as kind of card removal.
217 * [WPD00001943]Create WiFi test driver framework on WinXP
218 * information buffer for query oid/ioctl is now buffered in prCmdInfo
219 * * * * * * instead of glue-layer variable to improve multiple oid/ioctl capability
222 * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support
223 * add framework for BT-over-Wi-Fi support.
224 * * * * * * * * * * * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability
225 * * * * * * * * * * * * * * 2) command sequence number is now increased atomically
226 * * * * * * * * * * * * * * 3) private data could be hold and taken use for other purpose
229 * [WPD00001943]Create WiFi test driver framework on WinXP
230 * accessing to firmware load/start address, and access to OID handling information
231 * are now handled in glue layer
234 * [WPD00001943]Create WiFi test driver framework on WinXP
235 * rWlanInfo should be placed at adapter rather than glue due to most operations
236 * * * * are done in adapter layer.
239 * [WPD00001943]Create WiFi test driver framework on WinXP
240 * add KAL API: kalFlushPendingTxPackets(), and take use of the API
243 * [WPD00001943]Create WiFi test driver framework on WinXP
244 * eliminate direct access to prGlueInfo->rWlanInfo.eLinkAttr.ucMediaStreamMode from non-glue layer.
246 * 04 06 2010 jeffrey.chang
247 * [WPD00003826]Initial import for Linux port
248 * improve none-glude code portability
251 * [WPD00001943]Create WiFi test driver framework on WinXP
252 * sync statistics data structure definition with firmware implementation
255 * [WPD00001943]Create WiFi test driver framework on WinXP
256 * code refine: fgTestMode should be at adapter rather than glue due to the device/fw is also involved
259 * [WPD00001943]Create WiFi test driver framework on WinXP
260 * eliminate direct access for prGlueInfo->fgIsCardRemoved in non-glue layer
263 * [WPD00001943]Create WiFi test driver framework on WinXP
264 * statistics information OIDs are now handled by querying from firmware domain
267 * [WPD00001943]Create WiFi test driver framework on WinXP
268 * indicate media stream mode after set is done
270 * 03 24 2010 jeffrey.chang
271 * [WPD00003826]Initial import for Linux port
272 * initial import for Linux port
275 * [WPD00001943]Create WiFi test driver framework on WinXP
276 * implement custom OID: EEPROM read/write access
279 * [WPD00001943]Create WiFi test driver framework on WinXP
280 * implement OID_802_3_MULTICAST_LIST oid handling
283 * [WPD00001943]Create WiFi test driver framework on WinXP
284 * limit RSSI return value to microsoft defined range.
287 * [WPD00001943]Create WiFi test driver framework on WinXP
288 * 1. Permanent and current MAC address are now retrieved by CMD/EVENT packets instead of hard-coded address
289 * * * * * * * 2. follow MSDN defined behavior when associates to another AP
290 * * * * * * * 3. for firmware download, packet size could be up to 2048 bytes
293 * [WPD00001943]Create WiFi test driver framework on WinXP
294 * block until firmware finished RF test enter/leave then indicate completion to upper layer
297 * [WPD00001943]Create WiFi test driver framework on WinXP
298 * when entering RF test mode and leaving from RF test mode, wait for W_FUNC_RDY bit to be asserted forever until it is set or card is removed.
301 * [WPD00001943]Create WiFi test driver framework on WinXP
302 * 1. eliminate improper variable in rHifInfo
303 * * * * * * * * 2. block TX/ordinary OID when RF test mode is engaged
304 * * * * * * * * 3. wait until firmware finish operation when entering into and leaving from RF test mode
305 * * * * * * * * 4. correct some HAL implementation
308 * [WPD00001943]Create WiFi test driver framework on WinXP
309 * Under WinXP with SDIO, use prGlueInfo->rHifInfo.pvInformationBuffer instead of prGlueInfo->pvInformationBuffer
312 * [WPD00001943]Create WiFi test driver framework on WinXP
313 * implement following 802.11 OIDs:
314 * * * * * OID_802_11_RSSI,
315 * * * * * OID_802_11_RSSI_TRIGGER,
316 * * * * * OID_802_11_STATISTICS,
317 * * * * * OID_802_11_DISASSOCIATE,
318 * * * * * OID_802_11_POWER_MODE
321 * [WPD00001943]Create WiFi test driver framework on WinXP
322 * implement OID_802_11_MEDIA_STREAM_MODE
325 * [WPD00001943]Create WiFi test driver framework on WinXP
326 * 1) According to CMD/EVENT documentation v0.8,
327 * * * * * * * * OID_CUSTOM_TEST_RX_STATUS & OID_CUSTOM_TEST_TX_STATUS is no longer used,
328 * * * * * * * * and result is retrieved by get ATInfo instead
329 * * * * * * * * 2) add 4 counter for recording aggregation statistics
330 ** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-12-10 16:47:47 GMT mtk02752
331 ** only handle MCR read when accessing FW domain register
332 ** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-12-08 17:37:28 GMT mtk02752
333 ** * refine nicCmdEventQueryMcrRead
334 ** + add TxStatus/RxStatus for RF test QueryInformation OIDs
335 ** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-12-02 22:05:45 GMT mtk02752
336 ** kalOidComplete() will decrease i4OidPendingCount
337 ** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-12-01 23:02:57 GMT mtk02752
338 ** remove unnecessary spin locks
339 ** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-12-01 22:51:18 GMT mtk02752
340 ** maintein i4OidPendingCount
341 ** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-11-30 10:55:03 GMT mtk02752
342 ** modify for compatibility
343 ** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-11-23 14:46:32 GMT mtk02752
344 ** add another version of command-done handler upon new event structure
345 ** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-04-29 15:42:33 GMT mtk01461
347 ** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-04-21 19:32:42 GMT mtk01461
348 ** Add nicCmdEventSetCommon() for general set OID
349 ** \main\maintrunk.MT6620WiFiDriver_Prj\1 2009-04-21 01:40:35 GMT mtk01461
350 ** Command Done Handler
353 /*******************************************************************************
354 * C O M P I L E R F L A G S
355 ********************************************************************************
358 /*******************************************************************************
359 * E X T E R N A L R E F E R E N C E S
360 ********************************************************************************
365 /*******************************************************************************
367 ********************************************************************************
370 /*******************************************************************************
372 ********************************************************************************
375 /*******************************************************************************
376 * P U B L I C D A T A
377 ********************************************************************************
381 nicCmdEventQueryMcrRead (
382 IN P_ADAPTER_T prAdapter,
383 IN P_CMD_INFO_T prCmdInfo,
384 IN PUINT_8 pucEventBuf
387 UINT_32 u4QueryInfoLen;
388 P_PARAM_CUSTOM_MCR_RW_STRUC_T prMcrRdInfo;
389 P_GLUE_INFO_T prGlueInfo;
390 P_CMD_ACCESS_REG prCmdAccessReg;
397 //4 <2> Update information of OID
398 if (prCmdInfo->fgIsOid) {
399 prGlueInfo = prAdapter->prGlueInfo;
400 prCmdAccessReg = (P_CMD_ACCESS_REG)(pucEventBuf);
402 u4QueryInfoLen = sizeof(PARAM_CUSTOM_MCR_RW_STRUC_T);
404 prMcrRdInfo = (P_PARAM_CUSTOM_MCR_RW_STRUC_T) prCmdInfo->pvInformationBuffer;
405 prMcrRdInfo->u4McrOffset = prCmdAccessReg->u4Address;
406 prMcrRdInfo->u4McrData = prCmdAccessReg->u4Data;
408 kalOidComplete(prGlueInfo, prCmdInfo->fgSetQuery, u4QueryInfoLen, WLAN_STATUS_SUCCESS);
417 nicCmdEventQuerySwCtrlRead (
418 IN P_ADAPTER_T prAdapter,
419 IN P_CMD_INFO_T prCmdInfo,
420 IN PUINT_8 pucEventBuf
423 UINT_32 u4QueryInfoLen;
424 P_PARAM_CUSTOM_SW_CTRL_STRUC_T prSwCtrlInfo;
425 P_GLUE_INFO_T prGlueInfo;
426 P_CMD_SW_DBG_CTRL_T prCmdSwCtrl;
432 //4 <2> Update information of OID
433 if (prCmdInfo->fgIsOid) {
434 prGlueInfo = prAdapter->prGlueInfo;
435 prCmdSwCtrl = (P_CMD_SW_DBG_CTRL_T)(pucEventBuf);
437 u4QueryInfoLen = sizeof(PARAM_CUSTOM_SW_CTRL_STRUC_T);
439 prSwCtrlInfo = (P_PARAM_CUSTOM_SW_CTRL_STRUC_T) prCmdInfo->pvInformationBuffer;
440 prSwCtrlInfo->u4Id = prCmdSwCtrl->u4Id;
441 prSwCtrlInfo->u4Data = prCmdSwCtrl->u4Data;
443 kalOidComplete(prGlueInfo, prCmdInfo->fgSetQuery, u4QueryInfoLen, WLAN_STATUS_SUCCESS);
453 nicCmdEventSetCommon (
454 IN P_ADAPTER_T prAdapter,
455 IN P_CMD_INFO_T prCmdInfo,
456 IN PUINT_8 pucEventBuf
462 if (prCmdInfo->fgIsOid) {
463 /* Update Set Infomation Length */
464 kalOidComplete(prAdapter->prGlueInfo,
465 prCmdInfo->fgSetQuery,
466 prCmdInfo->u4InformationBufferLength,
467 WLAN_STATUS_SUCCESS);
474 nicCmdEventSetDisassociate (
475 IN P_ADAPTER_T prAdapter,
476 IN P_CMD_INFO_T prCmdInfo,
477 IN PUINT_8 pucEventBuf
483 if (prCmdInfo->fgIsOid) {
484 /* Update Set Infomation Length */
485 kalOidComplete(prAdapter->prGlueInfo,
486 prCmdInfo->fgSetQuery,
488 WLAN_STATUS_SUCCESS);
491 kalIndicateStatusAndComplete(prAdapter->prGlueInfo,
492 WLAN_STATUS_MEDIA_DISCONNECT,
497 prAdapter->fgIsRadioOff = TRUE;
504 nicCmdEventSetIpAddress (
505 IN P_ADAPTER_T prAdapter,
506 IN P_CMD_INFO_T prCmdInfo,
507 IN PUINT_8 pucEventBuf
515 u4Count = (prCmdInfo->u4SetInfoLen - OFFSET_OF(CMD_SET_NETWORK_ADDRESS_LIST, arNetAddress))
516 / sizeof(IPV4_NETWORK_ADDRESS) ;
518 if (prCmdInfo->fgIsOid) {
519 /* Update Set Infomation Length */
520 kalOidComplete(prAdapter->prGlueInfo,
521 prCmdInfo->fgSetQuery,
522 OFFSET_OF(PARAM_NETWORK_ADDRESS_LIST, arAddress) + u4Count *
523 (OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress) + sizeof(PARAM_NETWORK_ADDRESS_IP)),
524 WLAN_STATUS_SUCCESS);
531 nicCmdEventQueryRfTestATInfo(
532 IN P_ADAPTER_T prAdapter,
533 IN P_CMD_INFO_T prCmdInfo,
534 IN PUINT_8 pucEventBuf
537 P_EVENT_TEST_STATUS prTestStatus, prQueryBuffer;
538 P_GLUE_INFO_T prGlueInfo;
539 UINT_32 u4QueryInfoLen;
544 prTestStatus = (P_EVENT_TEST_STATUS)pucEventBuf;
546 if (prCmdInfo->fgIsOid) {
547 prGlueInfo = prAdapter->prGlueInfo;
548 prQueryBuffer = (P_EVENT_TEST_STATUS) prCmdInfo->pvInformationBuffer;
550 kalMemCopy(prQueryBuffer, prTestStatus, sizeof(EVENT_TEST_STATUS));
552 u4QueryInfoLen = sizeof(EVENT_TEST_STATUS);
554 /* Update Query Infomation Length */
555 kalOidComplete(prGlueInfo,
556 prCmdInfo->fgSetQuery,
558 WLAN_STATUS_SUCCESS);
565 nicCmdEventQueryLinkQuality(
566 IN P_ADAPTER_T prAdapter,
567 IN P_CMD_INFO_T prCmdInfo,
568 IN PUINT_8 pucEventBuf
571 PARAM_RSSI rRssi, *prRssi;
572 P_EVENT_LINK_QUALITY prLinkQuality;
573 P_GLUE_INFO_T prGlueInfo;
574 UINT_32 u4QueryInfoLen;
579 prLinkQuality = (P_EVENT_LINK_QUALITY)pucEventBuf;
581 rRssi = (PARAM_RSSI)prLinkQuality->cRssi; // ranged from (-128 ~ 30) in unit of dBm
583 if(rRssi > PARAM_WHQL_RSSI_MAX_DBM)
584 rRssi = PARAM_WHQL_RSSI_MAX_DBM;
585 else if(rRssi < PARAM_WHQL_RSSI_MIN_DBM)
586 rRssi = PARAM_WHQL_RSSI_MIN_DBM;
588 if (prCmdInfo->fgIsOid) {
589 prGlueInfo = prAdapter->prGlueInfo;
590 prRssi = (PARAM_RSSI *) prCmdInfo->pvInformationBuffer;
592 kalMemCopy(prRssi, &rRssi, sizeof(PARAM_RSSI));
593 u4QueryInfoLen = sizeof(PARAM_RSSI);
595 kalOidComplete(prGlueInfo,
596 prCmdInfo->fgSetQuery,
598 WLAN_STATUS_SUCCESS);
603 /*----------------------------------------------------------------------------*/
605 * @brief This routine is in response of OID_GEN_LINK_SPEED query request
607 * @param prAdapter Pointer to the Adapter structure.
608 * @param prCmdInfo Pointer to the pending command info
613 /*----------------------------------------------------------------------------*/
615 nicCmdEventQueryLinkSpeed(
616 IN P_ADAPTER_T prAdapter,
617 IN P_CMD_INFO_T prCmdInfo,
618 IN PUINT_8 pucEventBuf
621 P_EVENT_LINK_QUALITY prLinkQuality;
622 P_GLUE_INFO_T prGlueInfo;
623 UINT_32 u4QueryInfoLen;
624 PUINT_32 pu4LinkSpeed;
629 prLinkQuality = (P_EVENT_LINK_QUALITY)pucEventBuf;
631 if (prCmdInfo->fgIsOid) {
632 prGlueInfo = prAdapter->prGlueInfo;
633 pu4LinkSpeed = (PUINT_32)(prCmdInfo->pvInformationBuffer);
635 if(prLinkQuality->u2LinkSpeed == 0) {
636 *pu4LinkSpeed = 10000; /* 10K * 100bps = 1Mbps */
639 *pu4LinkSpeed = prLinkQuality->u2LinkSpeed * 5000;
642 u4QueryInfoLen = sizeof(UINT_32);
644 kalOidComplete(prGlueInfo,
645 prCmdInfo->fgSetQuery,
647 WLAN_STATUS_SUCCESS);
653 nicCmdEventQueryStatistics(
654 IN P_ADAPTER_T prAdapter,
655 IN P_CMD_INFO_T prCmdInfo,
656 IN PUINT_8 pucEventBuf
659 P_PARAM_802_11_STATISTICS_STRUCT_T prStatistics;
660 P_EVENT_STATISTICS prEventStatistics;
661 P_GLUE_INFO_T prGlueInfo;
662 UINT_32 u4QueryInfoLen;
667 prEventStatistics = (P_EVENT_STATISTICS)pucEventBuf;
669 if (prCmdInfo->fgIsOid) {
670 prGlueInfo = prAdapter->prGlueInfo;
672 u4QueryInfoLen = sizeof(PARAM_802_11_STATISTICS_STRUCT_T);
673 prStatistics = (P_PARAM_802_11_STATISTICS_STRUCT_T) prCmdInfo->pvInformationBuffer;
675 prStatistics->u4Length = sizeof(PARAM_802_11_STATISTICS_STRUCT_T);
676 prStatistics->rTransmittedFragmentCount
677 = prEventStatistics->rTransmittedFragmentCount;
678 prStatistics->rMulticastTransmittedFrameCount
679 = prEventStatistics->rMulticastTransmittedFrameCount;
680 prStatistics->rFailedCount
681 = prEventStatistics->rFailedCount;
682 prStatistics->rRetryCount
683 = prEventStatistics->rRetryCount;
684 prStatistics->rMultipleRetryCount
685 = prEventStatistics->rMultipleRetryCount;
686 prStatistics->rRTSSuccessCount
687 = prEventStatistics->rRTSSuccessCount;
688 prStatistics->rRTSFailureCount
689 = prEventStatistics->rRTSFailureCount;
690 prStatistics->rACKFailureCount
691 = prEventStatistics->rACKFailureCount;
692 prStatistics->rFrameDuplicateCount
693 = prEventStatistics->rFrameDuplicateCount;
694 prStatistics->rReceivedFragmentCount
695 = prEventStatistics->rReceivedFragmentCount;
696 prStatistics->rMulticastReceivedFrameCount
697 = prEventStatistics->rMulticastReceivedFrameCount;
698 prStatistics->rFCSErrorCount
699 = prEventStatistics->rFCSErrorCount;
700 prStatistics->rTKIPLocalMICFailures.QuadPart
702 prStatistics->rTKIPICVErrors.QuadPart
704 prStatistics->rTKIPCounterMeasuresInvoked.QuadPart
706 prStatistics->rTKIPReplays.QuadPart
708 prStatistics->rCCMPFormatErrors.QuadPart
710 prStatistics->rCCMPReplays.QuadPart
712 prStatistics->rCCMPDecryptErrors.QuadPart
714 prStatistics->rFourWayHandshakeFailures.QuadPart
716 prStatistics->rWEPUndecryptableCount.QuadPart
718 prStatistics->rWEPICVErrorCount.QuadPart
720 prStatistics->rDecryptSuccessCount.QuadPart
722 prStatistics->rDecryptFailureCount.QuadPart
725 kalOidComplete(prGlueInfo,
726 prCmdInfo->fgSetQuery,
728 WLAN_STATUS_SUCCESS);
733 nicCmdEventEnterRfTest(
734 IN P_ADAPTER_T prAdapter,
735 IN P_CMD_INFO_T prCmdInfo,
736 IN PUINT_8 pucEventBuf
739 UINT_32 u4WHISR = 0, u4Value = 0;
740 UINT_8 aucTxCount[8];
746 prAdapter->fgTestMode = TRUE;
748 // 0. always indicate disconnection
749 if(kalGetMediaStateIndicated(prAdapter->prGlueInfo) != PARAM_MEDIA_STATE_DISCONNECTED) {
750 kalIndicateStatusAndComplete(prAdapter->prGlueInfo,
751 WLAN_STATUS_MEDIA_DISCONNECT,
756 // 1. Remove pending TX
757 nicTxRelease(prAdapter);
759 // 1.1 clear pending Security / Management Frames
760 kalClearSecurityFrames(prAdapter->prGlueInfo);
761 kalClearMgmtFrames(prAdapter->prGlueInfo);
763 // 1.2 clear pending TX packet queued in glue layer
764 kalFlushPendingTxPackets(prAdapter->prGlueInfo);
766 // 2. Reset driver-domain FSMs
767 nicUninitMGMT(prAdapter);
769 nicResetSystemService(prAdapter);
770 nicInitMGMT(prAdapter, NULL);
772 // 3. Disable Interrupt
773 HAL_INTR_DISABLE(prAdapter);
775 // 4. Block til firmware completed entering into RF test mode
778 HAL_MCR_RD(prAdapter, MCR_WCIR, &u4Value);
780 if (u4Value & WCIR_WLAN_READY) {
783 else if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE
784 || fgIsBusAccessFailed == TRUE) {
785 if (prCmdInfo->fgIsOid) {
786 /* Update Set Infomation Length */
787 kalOidComplete(prAdapter->prGlueInfo,
788 prCmdInfo->fgSetQuery,
789 prCmdInfo->u4SetInfoLen,
790 WLAN_STATUS_NOT_SUPPORTED);
799 // 5. Clear Interrupt Status
800 HAL_READ_INTR_STATUS(prAdapter, 4, (PUINT_8)&u4WHISR);
801 if(HAL_IS_TX_DONE_INTR(u4WHISR)) {
802 HAL_READ_TX_RELEASED_COUNT(prAdapter, aucTxCount);
805 // 6. Reset TX Counter
806 nicTxResetResource(prAdapter);
808 // 7. Re-enable Interrupt
809 HAL_INTR_ENABLE(prAdapter);
811 // 8. completion indication
812 if (prCmdInfo->fgIsOid) {
813 /* Update Set Infomation Length */
814 kalOidComplete(prAdapter->prGlueInfo,
815 prCmdInfo->fgSetQuery,
816 prCmdInfo->u4SetInfoLen,
817 WLAN_STATUS_SUCCESS);
820 #if CFG_SUPPORT_NVRAM
821 // 9. load manufacture data
822 wlanLoadManufactureData(prAdapter, kalGetConfiguration(prAdapter->prGlueInfo));
829 nicCmdEventLeaveRfTest(
830 IN P_ADAPTER_T prAdapter,
831 IN P_CMD_INFO_T prCmdInfo,
832 IN PUINT_8 pucEventBuf
835 UINT_32 u4WHISR = 0, u4Value = 0;
836 UINT_8 aucTxCount[8];
841 // 1. Disable Interrupt
842 HAL_INTR_DISABLE(prAdapter);
844 // 2. Block til firmware completed leaving from RF test mode
847 HAL_MCR_RD(prAdapter, MCR_WCIR, &u4Value);
849 if (u4Value & WCIR_WLAN_READY) {
852 else if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE
853 || fgIsBusAccessFailed == TRUE) {
854 if (prCmdInfo->fgIsOid) {
855 /* Update Set Infomation Length */
856 kalOidComplete(prAdapter->prGlueInfo,
857 prCmdInfo->fgSetQuery,
858 prCmdInfo->u4SetInfoLen,
859 WLAN_STATUS_NOT_SUPPORTED);
869 // 3. Clear Interrupt Status
870 HAL_READ_INTR_STATUS(prAdapter, 4, (PUINT_8)&u4WHISR);
871 if(HAL_IS_TX_DONE_INTR(u4WHISR)) {
872 HAL_READ_TX_RELEASED_COUNT(prAdapter, aucTxCount);
875 // 4. Reset TX Counter
876 nicTxResetResource(prAdapter);
878 // 5. Re-enable Interrupt
879 HAL_INTR_ENABLE(prAdapter);
881 // 6. set driver-land variable
882 prAdapter->fgTestMode = FALSE;
884 // 7. completion indication
885 if (prCmdInfo->fgIsOid) {
886 /* Update Set Infomation Length */
887 kalOidComplete(prAdapter->prGlueInfo,
888 prCmdInfo->fgSetQuery,
889 prCmdInfo->u4SetInfoLen,
890 WLAN_STATUS_SUCCESS);
893 /* 8. Indicate as disconnected */
894 if(kalGetMediaStateIndicated(prAdapter->prGlueInfo) != PARAM_MEDIA_STATE_DISCONNECTED) {
896 kalIndicateStatusAndComplete(prAdapter->prGlueInfo,
897 WLAN_STATUS_MEDIA_DISCONNECT,
901 prAdapter->rWlanInfo.u4SysTime = kalGetTimeTick();
904 #if CFG_SUPPORT_NVRAM
905 /* 9. load manufacture data */
906 wlanLoadManufactureData(prAdapter, kalGetConfiguration(prAdapter->prGlueInfo));
909 /* 10. Override network address */
910 wlanUpdateNetworkAddress(prAdapter);
916 nicCmdEventQueryAddress(
917 IN P_ADAPTER_T prAdapter,
918 IN P_CMD_INFO_T prCmdInfo,
919 IN PUINT_8 pucEventBuf
922 UINT_32 u4QueryInfoLen;
923 P_GLUE_INFO_T prGlueInfo;
924 P_EVENT_BASIC_CONFIG prEventBasicConfig;
930 prEventBasicConfig = (P_EVENT_BASIC_CONFIG)(pucEventBuf);
933 kalMemCopy(&(prAdapter->rMyMacAddr), &(prEventBasicConfig->rMyMacAddr), MAC_ADDR_LEN);
935 //4 <2> Update information of OID
936 if (prCmdInfo->fgIsOid) {
937 prGlueInfo = prAdapter->prGlueInfo;
939 kalMemCopy(prCmdInfo->pvInformationBuffer, &(prEventBasicConfig->rMyMacAddr), MAC_ADDR_LEN);
940 u4QueryInfoLen = MAC_ADDR_LEN;
942 kalOidComplete(prGlueInfo, prCmdInfo->fgSetQuery, u4QueryInfoLen, WLAN_STATUS_SUCCESS);
945 //4 <3> Update new MAC address and all 3 networks
946 COPY_MAC_ADDR(prAdapter->rWifiVar.aucMacAddress, prAdapter->rMyMacAddr);
947 COPY_MAC_ADDR(prAdapter->rWifiVar.aucDeviceAddress, prAdapter->rMyMacAddr);
948 prAdapter->rWifiVar.aucDeviceAddress[0] ^= MAC_ADDR_LOCAL_ADMIN;
950 COPY_MAC_ADDR(prAdapter->rWifiVar.aucInterfaceAddress, prAdapter->rMyMacAddr);
951 prAdapter->rWifiVar.aucInterfaceAddress[0] ^= MAC_ADDR_LOCAL_ADMIN;
953 COPY_MAC_ADDR(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX].aucOwnMacAddr,
954 prAdapter->rMyMacAddr);
956 #if CFG_ENABLE_WIFI_DIRECT
957 if(prAdapter->fgIsP2PRegistered) {
958 COPY_MAC_ADDR(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX].aucOwnMacAddr,
959 prAdapter->rWifiVar.aucDeviceAddress);
963 #if CFG_ENABLE_BT_OVER_WIFI
964 COPY_MAC_ADDR(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX].aucOwnMacAddr,
965 prAdapter->rWifiVar.aucDeviceAddress);
968 #if CFG_TEST_WIFI_DIRECT_GO
969 if (prAdapter->rWifiVar.prP2pFsmInfo->eCurrentState == P2P_STATE_IDLE) {
970 wlanEnableP2pFunction(prAdapter);
972 wlanEnableATGO(prAdapter);
976 kalUpdateMACAddress(prAdapter->prGlueInfo, prAdapter->rWifiVar.aucMacAddress);
982 nicCmdEventQueryMcastAddr(
983 IN P_ADAPTER_T prAdapter,
984 IN P_CMD_INFO_T prCmdInfo,
985 IN PUINT_8 pucEventBuf
988 UINT_32 u4QueryInfoLen;
989 P_GLUE_INFO_T prGlueInfo;
990 P_EVENT_MAC_MCAST_ADDR prEventMacMcastAddr;
996 //4 <2> Update information of OID
997 if (prCmdInfo->fgIsOid) {
998 prGlueInfo = prAdapter->prGlueInfo;
999 prEventMacMcastAddr = (P_EVENT_MAC_MCAST_ADDR)(pucEventBuf);
1001 u4QueryInfoLen = prEventMacMcastAddr->u4NumOfGroupAddr * MAC_ADDR_LEN;
1003 // buffer length check
1004 if (prCmdInfo->u4InformationBufferLength < u4QueryInfoLen) {
1005 kalOidComplete(prGlueInfo, prCmdInfo->fgSetQuery, u4QueryInfoLen, WLAN_STATUS_BUFFER_TOO_SHORT);
1008 kalMemCopy(prCmdInfo->pvInformationBuffer,
1009 prEventMacMcastAddr->arAddress,
1010 prEventMacMcastAddr->u4NumOfGroupAddr * MAC_ADDR_LEN);
1012 kalOidComplete(prGlueInfo, prCmdInfo->fgSetQuery, u4QueryInfoLen, WLAN_STATUS_SUCCESS);
1018 nicCmdEventQueryEepromRead(
1019 IN P_ADAPTER_T prAdapter,
1020 IN P_CMD_INFO_T prCmdInfo,
1021 IN PUINT_8 pucEventBuf
1024 UINT_32 u4QueryInfoLen;
1025 P_PARAM_CUSTOM_EEPROM_RW_STRUC_T prEepromRdInfo;
1026 P_GLUE_INFO_T prGlueInfo;
1027 P_EVENT_ACCESS_EEPROM prEventAccessEeprom;
1031 ASSERT(pucEventBuf);
1033 //4 <2> Update information of OID
1034 if (prCmdInfo->fgIsOid) {
1035 prGlueInfo = prAdapter->prGlueInfo;
1036 prEventAccessEeprom = (P_EVENT_ACCESS_EEPROM)(pucEventBuf);
1038 u4QueryInfoLen = sizeof(PARAM_CUSTOM_EEPROM_RW_STRUC_T);
1040 prEepromRdInfo = (P_PARAM_CUSTOM_EEPROM_RW_STRUC_T) prCmdInfo->pvInformationBuffer;
1041 prEepromRdInfo->ucEepromIndex = (UINT_8)(prEventAccessEeprom->u2Offset);
1042 prEepromRdInfo->u2EepromData = prEventAccessEeprom->u2Data;
1044 kalOidComplete(prGlueInfo, prCmdInfo->fgSetQuery, u4QueryInfoLen, WLAN_STATUS_SUCCESS);
1053 nicCmdEventSetMediaStreamMode(
1054 IN P_ADAPTER_T prAdapter,
1055 IN P_CMD_INFO_T prCmdInfo,
1056 IN PUINT_8 pucEventBuf
1059 PARAM_MEDIA_STREAMING_INDICATION rParamMediaStreamIndication;
1064 if (prCmdInfo->fgIsOid) {
1065 /* Update Set Infomation Length */
1066 kalOidComplete(prAdapter->prGlueInfo,
1067 prCmdInfo->fgSetQuery,
1068 prCmdInfo->u4SetInfoLen,
1069 WLAN_STATUS_SUCCESS);
1072 rParamMediaStreamIndication.rStatus.eStatusType =
1073 ENUM_STATUS_TYPE_MEDIA_STREAM_MODE;
1074 rParamMediaStreamIndication.eMediaStreamMode =
1075 prAdapter->rWlanInfo.eLinkAttr.ucMediaStreamMode == 0 ?
1076 ENUM_MEDIA_STREAM_OFF : ENUM_MEDIA_STREAM_ON;
1078 kalIndicateStatusAndComplete(prAdapter->prGlueInfo,
1079 WLAN_STATUS_MEDIA_SPECIFIC_INDICATION,
1080 (PVOID)&rParamMediaStreamIndication,
1081 sizeof(PARAM_MEDIA_STREAMING_INDICATION));
1085 /* Statistics responder */
1087 nicCmdEventQueryXmitOk(
1088 IN P_ADAPTER_T prAdapter,
1089 IN P_CMD_INFO_T prCmdInfo,
1090 IN PUINT_8 pucEventBuf
1093 P_EVENT_STATISTICS prEventStatistics;
1094 P_GLUE_INFO_T prGlueInfo;
1095 UINT_32 u4QueryInfoLen;
1102 prEventStatistics = (P_EVENT_STATISTICS)pucEventBuf;
1104 if (prCmdInfo->fgIsOid) {
1105 prGlueInfo = prAdapter->prGlueInfo;
1107 if(prCmdInfo->u4InformationBufferLength == sizeof(UINT_32)) {
1108 u4QueryInfoLen = sizeof(UINT_32);
1110 pu4Data = (PUINT_32) prCmdInfo->pvInformationBuffer;
1111 *pu4Data = (UINT_32) prEventStatistics->rTransmittedFragmentCount.QuadPart;
1114 u4QueryInfoLen = sizeof(UINT_64);
1116 pu8Data = (PUINT_64) prCmdInfo->pvInformationBuffer;
1117 *pu8Data = prEventStatistics->rTransmittedFragmentCount.QuadPart;
1120 kalOidComplete(prGlueInfo,
1121 prCmdInfo->fgSetQuery,
1123 WLAN_STATUS_SUCCESS);
1129 nicCmdEventQueryRecvOk(
1130 IN P_ADAPTER_T prAdapter,
1131 IN P_CMD_INFO_T prCmdInfo,
1132 IN PUINT_8 pucEventBuf
1135 P_EVENT_STATISTICS prEventStatistics;
1136 P_GLUE_INFO_T prGlueInfo;
1137 UINT_32 u4QueryInfoLen;
1144 prEventStatistics = (P_EVENT_STATISTICS)pucEventBuf;
1146 if (prCmdInfo->fgIsOid) {
1147 prGlueInfo = prAdapter->prGlueInfo;
1149 if(prCmdInfo->u4InformationBufferLength == sizeof(UINT_32)) {
1150 u4QueryInfoLen = sizeof(UINT_32);
1152 pu4Data = (PUINT_32) prCmdInfo->pvInformationBuffer;
1153 *pu4Data = (UINT_32) prEventStatistics->rReceivedFragmentCount.QuadPart;
1156 u4QueryInfoLen = sizeof(UINT_64);
1158 pu8Data = (PUINT_64) prCmdInfo->pvInformationBuffer;
1159 *pu8Data = prEventStatistics->rReceivedFragmentCount.QuadPart;
1162 kalOidComplete(prGlueInfo,
1163 prCmdInfo->fgSetQuery,
1165 WLAN_STATUS_SUCCESS);
1170 nicCmdEventQueryXmitError(
1171 IN P_ADAPTER_T prAdapter,
1172 IN P_CMD_INFO_T prCmdInfo,
1173 IN PUINT_8 pucEventBuf
1176 P_EVENT_STATISTICS prEventStatistics;
1177 P_GLUE_INFO_T prGlueInfo;
1178 UINT_32 u4QueryInfoLen;
1185 prEventStatistics = (P_EVENT_STATISTICS)pucEventBuf;
1187 if (prCmdInfo->fgIsOid) {
1188 prGlueInfo = prAdapter->prGlueInfo;
1190 if(prCmdInfo->u4InformationBufferLength == sizeof(UINT_32)) {
1191 u4QueryInfoLen = sizeof(UINT_32);
1193 pu4Data = (PUINT_32) prCmdInfo->pvInformationBuffer;
1194 *pu4Data = (UINT_32) prEventStatistics->rFailedCount.QuadPart;
1197 u4QueryInfoLen = sizeof(UINT_64);
1199 pu8Data = (PUINT_64) prCmdInfo->pvInformationBuffer;
1200 *pu8Data = (UINT_64) prEventStatistics->rFailedCount.QuadPart;
1203 kalOidComplete(prGlueInfo,
1204 prCmdInfo->fgSetQuery,
1206 WLAN_STATUS_SUCCESS);
1212 nicCmdEventQueryRecvError(
1213 IN P_ADAPTER_T prAdapter,
1214 IN P_CMD_INFO_T prCmdInfo,
1215 IN PUINT_8 pucEventBuf
1218 P_EVENT_STATISTICS prEventStatistics;
1219 P_GLUE_INFO_T prGlueInfo;
1220 UINT_32 u4QueryInfoLen;
1227 prEventStatistics = (P_EVENT_STATISTICS)pucEventBuf;
1229 if (prCmdInfo->fgIsOid) {
1230 prGlueInfo = prAdapter->prGlueInfo;
1232 if(prCmdInfo->u4InformationBufferLength == sizeof(UINT_32)) {
1233 u4QueryInfoLen = sizeof(UINT_32);
1235 pu4Data = (PUINT_32) prCmdInfo->pvInformationBuffer;
1236 *pu4Data = (UINT_32) prEventStatistics->rFCSErrorCount.QuadPart;
1237 // @FIXME, RX_ERROR_DROP_COUNT/RX_FIFO_FULL_DROP_COUNT is not calculated
1240 u4QueryInfoLen = sizeof(UINT_64);
1242 pu8Data = (PUINT_64) prCmdInfo->pvInformationBuffer;
1243 *pu8Data = prEventStatistics->rFCSErrorCount.QuadPart;
1244 // @FIXME, RX_ERROR_DROP_COUNT/RX_FIFO_FULL_DROP_COUNT is not calculated
1247 kalOidComplete(prGlueInfo,
1248 prCmdInfo->fgSetQuery,
1250 WLAN_STATUS_SUCCESS);
1256 nicCmdEventQueryRecvNoBuffer(
1257 IN P_ADAPTER_T prAdapter,
1258 IN P_CMD_INFO_T prCmdInfo,
1259 IN PUINT_8 pucEventBuf
1262 P_EVENT_STATISTICS prEventStatistics;
1263 P_GLUE_INFO_T prGlueInfo;
1264 UINT_32 u4QueryInfoLen;
1271 prEventStatistics = (P_EVENT_STATISTICS)pucEventBuf;
1273 if (prCmdInfo->fgIsOid) {
1274 prGlueInfo = prAdapter->prGlueInfo;
1276 if(prCmdInfo->u4InformationBufferLength == sizeof(UINT_32)) {
1277 u4QueryInfoLen = sizeof(UINT_32);
1279 pu4Data = (PUINT_32) prCmdInfo->pvInformationBuffer;
1280 *pu4Data = 0; // @FIXME?
1283 u4QueryInfoLen = sizeof(UINT_64);
1285 pu8Data = (PUINT_64) prCmdInfo->pvInformationBuffer;
1286 *pu8Data = 0; //@FIXME?
1289 kalOidComplete(prGlueInfo,
1290 prCmdInfo->fgSetQuery,
1292 WLAN_STATUS_SUCCESS);
1298 nicCmdEventQueryRecvCrcError(
1299 IN P_ADAPTER_T prAdapter,
1300 IN P_CMD_INFO_T prCmdInfo,
1301 IN PUINT_8 pucEventBuf
1304 P_EVENT_STATISTICS prEventStatistics;
1305 P_GLUE_INFO_T prGlueInfo;
1306 UINT_32 u4QueryInfoLen;
1313 prEventStatistics = (P_EVENT_STATISTICS)pucEventBuf;
1315 if (prCmdInfo->fgIsOid) {
1316 prGlueInfo = prAdapter->prGlueInfo;
1318 if(prCmdInfo->u4InformationBufferLength == sizeof(UINT_32)) {
1319 u4QueryInfoLen = sizeof(UINT_32);
1321 pu4Data = (PUINT_32) prCmdInfo->pvInformationBuffer;
1322 *pu4Data = (UINT_32) prEventStatistics->rFCSErrorCount.QuadPart;
1325 u4QueryInfoLen = sizeof(UINT_64);
1327 pu8Data = (PUINT_64) prCmdInfo->pvInformationBuffer;
1328 *pu8Data = prEventStatistics->rFCSErrorCount.QuadPart;
1331 kalOidComplete(prGlueInfo,
1332 prCmdInfo->fgSetQuery,
1334 WLAN_STATUS_SUCCESS);
1340 nicCmdEventQueryRecvErrorAlignment(
1341 IN P_ADAPTER_T prAdapter,
1342 IN P_CMD_INFO_T prCmdInfo,
1343 IN PUINT_8 pucEventBuf
1346 P_EVENT_STATISTICS prEventStatistics;
1347 P_GLUE_INFO_T prGlueInfo;
1348 UINT_32 u4QueryInfoLen;
1355 prEventStatistics = (P_EVENT_STATISTICS)pucEventBuf;
1357 if (prCmdInfo->fgIsOid) {
1358 prGlueInfo = prAdapter->prGlueInfo;
1360 if(prCmdInfo->u4InformationBufferLength == sizeof(UINT_32)) {
1361 u4QueryInfoLen = sizeof(UINT_32);
1363 pu4Data = (PUINT_32) prCmdInfo->pvInformationBuffer;
1364 *pu4Data = (UINT_32) 0; //@FIXME
1367 u4QueryInfoLen = sizeof(UINT_64);
1369 pu8Data = (PUINT_64) prCmdInfo->pvInformationBuffer;
1370 *pu8Data = 0; //@FIXME
1373 kalOidComplete(prGlueInfo,
1374 prCmdInfo->fgSetQuery,
1376 WLAN_STATUS_SUCCESS);
1382 nicCmdEventQueryXmitOneCollision(
1383 IN P_ADAPTER_T prAdapter,
1384 IN P_CMD_INFO_T prCmdInfo,
1385 IN PUINT_8 pucEventBuf
1388 P_EVENT_STATISTICS prEventStatistics;
1389 P_GLUE_INFO_T prGlueInfo;
1390 UINT_32 u4QueryInfoLen;
1397 prEventStatistics = (P_EVENT_STATISTICS)pucEventBuf;
1399 if (prCmdInfo->fgIsOid) {
1400 prGlueInfo = prAdapter->prGlueInfo;
1402 if(prCmdInfo->u4InformationBufferLength == sizeof(UINT_32)) {
1403 u4QueryInfoLen = sizeof(UINT_32);
1405 pu4Data = (PUINT_32) prCmdInfo->pvInformationBuffer;
1406 *pu4Data = (UINT_32) (prEventStatistics->rMultipleRetryCount.QuadPart - prEventStatistics->rRetryCount.QuadPart);
1409 u4QueryInfoLen = sizeof(UINT_64);
1411 pu8Data = (PUINT_64) prCmdInfo->pvInformationBuffer;
1412 *pu8Data = (UINT_64) (prEventStatistics->rMultipleRetryCount.QuadPart - prEventStatistics->rRetryCount.QuadPart);
1415 kalOidComplete(prGlueInfo,
1416 prCmdInfo->fgSetQuery,
1418 WLAN_STATUS_SUCCESS);
1424 nicCmdEventQueryXmitMoreCollisions(
1425 IN P_ADAPTER_T prAdapter,
1426 IN P_CMD_INFO_T prCmdInfo,
1427 IN PUINT_8 pucEventBuf
1430 P_EVENT_STATISTICS prEventStatistics;
1431 P_GLUE_INFO_T prGlueInfo;
1432 UINT_32 u4QueryInfoLen;
1439 prEventStatistics = (P_EVENT_STATISTICS)pucEventBuf;
1441 if (prCmdInfo->fgIsOid) {
1442 prGlueInfo = prAdapter->prGlueInfo;
1444 if(prCmdInfo->u4InformationBufferLength == sizeof(UINT_32)) {
1445 u4QueryInfoLen = sizeof(UINT_32);
1447 pu4Data = (PUINT_32) prCmdInfo->pvInformationBuffer;
1448 *pu4Data = (UINT_32) prEventStatistics->rMultipleRetryCount.QuadPart;
1451 u4QueryInfoLen = sizeof(UINT_64);
1453 pu8Data = (PUINT_64) prCmdInfo->pvInformationBuffer;
1454 *pu8Data = (UINT_64) prEventStatistics->rMultipleRetryCount.QuadPart;
1457 kalOidComplete(prGlueInfo,
1458 prCmdInfo->fgSetQuery,
1460 WLAN_STATUS_SUCCESS);
1466 nicCmdEventQueryXmitMaxCollisions(
1467 IN P_ADAPTER_T prAdapter,
1468 IN P_CMD_INFO_T prCmdInfo,
1469 IN PUINT_8 pucEventBuf
1472 P_EVENT_STATISTICS prEventStatistics;
1473 P_GLUE_INFO_T prGlueInfo;
1474 UINT_32 u4QueryInfoLen;
1481 prEventStatistics = (P_EVENT_STATISTICS)pucEventBuf;
1483 if (prCmdInfo->fgIsOid) {
1484 prGlueInfo = prAdapter->prGlueInfo;
1486 if(prCmdInfo->u4InformationBufferLength == sizeof(UINT_32)) {
1487 u4QueryInfoLen = sizeof(UINT_32);
1489 pu4Data = (PUINT_32) prCmdInfo->pvInformationBuffer;
1490 *pu4Data = (UINT_32) prEventStatistics->rFailedCount.QuadPart;
1493 u4QueryInfoLen = sizeof(UINT_64);
1495 pu8Data = (PUINT_64) prCmdInfo->pvInformationBuffer;
1496 *pu8Data = (UINT_64) prEventStatistics->rFailedCount.QuadPart;
1499 kalOidComplete(prGlueInfo,
1500 prCmdInfo->fgSetQuery,
1502 WLAN_STATUS_SUCCESS);
1507 /*----------------------------------------------------------------------------*/
1509 * @brief This function is called when command by OID/ioctl has been timeout
1511 * @param prAdapter Pointer to the Adapter structure.
1512 * @param prCmdInfo Pointer to the command information
1517 /*----------------------------------------------------------------------------*/
1519 nicOidCmdTimeoutCommon (
1520 IN P_ADAPTER_T prAdapter,
1521 IN P_CMD_INFO_T prCmdInfo
1526 kalOidComplete(prAdapter->prGlueInfo,
1527 prCmdInfo->fgSetQuery,
1529 WLAN_STATUS_FAILURE);
1533 /*----------------------------------------------------------------------------*/
1535 * @brief This function is a generic command timeout handler
1537 * @param pfnOidHandler Pointer to the OID handler
1541 /*----------------------------------------------------------------------------*/
1543 nicCmdTimeoutCommon (
1544 IN P_ADAPTER_T prAdapter,
1545 IN P_CMD_INFO_T prCmdInfo
1552 /*----------------------------------------------------------------------------*/
1554 * @brief This function is called when command for entering RF test has
1555 * failed sending due to timeout (highly possibly by firmware crash)
1557 * @param prAdapter Pointer to the Adapter structure.
1558 * @param prCmdInfo Pointer to the command information
1563 /*----------------------------------------------------------------------------*/
1565 nicOidCmdEnterRFTestTimeout (
1566 IN P_ADAPTER_T prAdapter,
1567 IN P_CMD_INFO_T prCmdInfo
1572 // 1. Remove pending TX frames
1573 nicTxRelease(prAdapter);
1575 // 1.1 clear pending Security / Management Frames
1576 kalClearSecurityFrames(prAdapter->prGlueInfo);
1577 kalClearMgmtFrames(prAdapter->prGlueInfo);
1579 // 1.2 clear pending TX packet queued in glue layer
1580 kalFlushPendingTxPackets(prAdapter->prGlueInfo);
1582 // 2. indiate for OID failure
1583 kalOidComplete(prAdapter->prGlueInfo,
1584 prCmdInfo->fgSetQuery,
1586 WLAN_STATUS_FAILURE);