ACPI: thinkpad-acpi: add development version tag
[linux-2.6/linux-acpi-2.6/ibm-acpi-2.6.git] / drivers / staging / vt6655 / vntwifi.c
blobfbe27a834ce3e912f0aff32386eac8e384e344df
1 /*
2 * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
3 * All rights reserved.
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License along
16 * with this program; if not, write to the Free Software Foundation, Inc.,
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20 * File: vntwifi.c
22 * Purpose: export functions for vntwifi lib
24 * Functions:
26 * Revision History:
28 * Author: Yiching Chen
30 * Date: feb. 2, 2005
34 #include "vntwifi.h"
35 #include "IEEE11h.h"
36 #include "country.h"
37 #include "device.h"
38 #include "wmgr.h"
39 #include "datarate.h"
41 //#define PLICE_DEBUG
43 /*--------------------- Static Definitions -------------------------*/
44 //static int msglevel =MSG_LEVEL_DEBUG;
45 //static int msglevel =MSG_LEVEL_INFO;
47 /*--------------------- Static Classes ----------------------------*/
49 /*--------------------- Static Variables --------------------------*/
51 /*--------------------- Static Functions --------------------------*/
53 /*--------------------- Export Variables --------------------------*/
55 /*--------------------- Export Functions --------------------------*/
57 /*+
59 * Description:
60 * Set Operation Mode
62 * Parameters:
63 * In:
64 * pMgmtHandle - pointer to management object
65 * eOPMode - Opreation Mode
66 * Out:
67 * none
69 * Return Value: none
71 -*/
72 VOID
73 VNTWIFIvSetOPMode (
74 IN PVOID pMgmtHandle,
75 IN WMAC_CONFIG_MODE eOPMode
78 PSMgmtObject pMgmt = (PSMgmtObject)pMgmtHandle;
80 pMgmt->eConfigMode = eOPMode;
84 /*+
86 * Description:
87 * Set Operation Mode
89 * Parameters:
90 * In:
91 * pMgmtHandle - pointer to management object
92 * wBeaconPeriod - Beacon Period
93 * wATIMWindow - ATIM window
94 * uChannel - channel number
95 * Out:
96 * none
98 * Return Value: none
101 VOID
102 VNTWIFIvSetIBSSParameter (
103 IN PVOID pMgmtHandle,
104 IN WORD wBeaconPeriod,
105 IN WORD wATIMWindow,
106 IN UINT uChannel
109 PSMgmtObject pMgmt = (PSMgmtObject)pMgmtHandle;
111 pMgmt->wIBSSBeaconPeriod = wBeaconPeriod;
112 pMgmt->wIBSSATIMWindow = wATIMWindow;
113 pMgmt->uIBSSChannel = uChannel;
118 * Description:
119 * Get current SSID
121 * Parameters:
122 * In:
123 * pMgmtHandle - pointer to management object
124 * Out:
125 * none
127 * Return Value: current SSID pointer.
130 PWLAN_IE_SSID
131 VNTWIFIpGetCurrentSSID (
132 IN PVOID pMgmtHandle
135 PSMgmtObject pMgmt = (PSMgmtObject)pMgmtHandle;
136 return((PWLAN_IE_SSID) pMgmt->abyCurrSSID);
141 * Description:
142 * Get current link channel
144 * Parameters:
145 * In:
146 * pMgmtHandle - pointer to management object
147 * Out:
148 * none
150 * Return Value: current Channel.
153 UINT
154 VNTWIFIpGetCurrentChannel (
155 IN PVOID pMgmtHandle
158 PSMgmtObject pMgmt = (PSMgmtObject)pMgmtHandle;
159 if (pMgmtHandle != NULL) {
160 return (pMgmt->uCurrChannel);
162 return 0;
167 * Description:
168 * Get current Assoc ID
170 * Parameters:
171 * In:
172 * pMgmtHandle - pointer to management object
173 * Out:
174 * none
176 * Return Value: current Assoc ID
179 WORD
180 VNTWIFIwGetAssocID (
181 IN PVOID pMgmtHandle
184 PSMgmtObject pMgmt = (PSMgmtObject)pMgmtHandle;
185 return(pMgmt->wCurrAID);
192 * Description:
193 * This routine return max support rate of IES
195 * Parameters:
196 * In:
197 * pSupportRateIEs
198 * pExtSupportRateIEs
200 * Out:
202 * Return Value: max support rate
205 BYTE
206 VNTWIFIbyGetMaxSupportRate (
207 IN PWLAN_IE_SUPP_RATES pSupportRateIEs,
208 IN PWLAN_IE_SUPP_RATES pExtSupportRateIEs
211 BYTE byMaxSupportRate = RATE_1M;
212 BYTE bySupportRate = RATE_1M;
213 UINT ii = 0;
215 if (pSupportRateIEs) {
216 for (ii = 0; ii < pSupportRateIEs->len; ii++) {
217 bySupportRate = DATARATEbyGetRateIdx(pSupportRateIEs->abyRates[ii]);
218 if (bySupportRate > byMaxSupportRate) {
219 byMaxSupportRate = bySupportRate;
223 if (pExtSupportRateIEs) {
224 for (ii = 0; ii < pExtSupportRateIEs->len; ii++) {
225 bySupportRate = DATARATEbyGetRateIdx(pExtSupportRateIEs->abyRates[ii]);
226 if (bySupportRate > byMaxSupportRate) {
227 byMaxSupportRate = bySupportRate;
232 return byMaxSupportRate;
237 * Description:
238 * This routine return data rate of ACK packtet
240 * Parameters:
241 * In:
242 * byRxDataRate
243 * pSupportRateIEs
244 * pExtSupportRateIEs
246 * Out:
248 * Return Value: max support rate
251 BYTE
252 VNTWIFIbyGetACKTxRate (
253 IN BYTE byRxDataRate,
254 IN PWLAN_IE_SUPP_RATES pSupportRateIEs,
255 IN PWLAN_IE_SUPP_RATES pExtSupportRateIEs
258 BYTE byMaxAckRate;
259 BYTE byBasicRate;
260 UINT ii;
262 if (byRxDataRate <= RATE_11M) {
263 byMaxAckRate = RATE_1M;
264 } else {
265 // 24M is mandatory for 802.11a and 802.11g
266 byMaxAckRate = RATE_24M;
268 if (pSupportRateIEs) {
269 for (ii = 0; ii < pSupportRateIEs->len; ii++) {
270 if (pSupportRateIEs->abyRates[ii] & 0x80) {
271 byBasicRate = DATARATEbyGetRateIdx(pSupportRateIEs->abyRates[ii]);
272 if ((byBasicRate <= byRxDataRate) &&
273 (byBasicRate > byMaxAckRate)) {
274 byMaxAckRate = byBasicRate;
279 if (pExtSupportRateIEs) {
280 for (ii = 0; ii < pExtSupportRateIEs->len; ii++) {
281 if (pExtSupportRateIEs->abyRates[ii] & 0x80) {
282 byBasicRate = DATARATEbyGetRateIdx(pExtSupportRateIEs->abyRates[ii]);
283 if ((byBasicRate <= byRxDataRate) &&
284 (byBasicRate > byMaxAckRate)) {
285 byMaxAckRate = byBasicRate;
291 return byMaxAckRate;
296 * Description:
297 * Set Authentication Mode
299 * Parameters:
300 * In:
301 * pMgmtHandle - pointer to management object
302 * eAuthMode - Authentication mode
303 * Out:
304 * none
306 * Return Value: none
309 VOID
310 VNTWIFIvSetAuthenticationMode (
311 IN PVOID pMgmtHandle,
312 IN WMAC_AUTHENTICATION_MODE eAuthMode
315 PSMgmtObject pMgmt = (PSMgmtObject)pMgmtHandle;
317 pMgmt->eAuthenMode = eAuthMode;
318 if ((eAuthMode == WMAC_AUTH_SHAREKEY) ||
319 (eAuthMode == WMAC_AUTH_AUTO)) {
320 pMgmt->bShareKeyAlgorithm = TRUE;
321 } else {
322 pMgmt->bShareKeyAlgorithm = FALSE;
328 * Description:
329 * Set Encryption Mode
331 * Parameters:
332 * In:
333 * pMgmtHandle - pointer to management object
334 * eAuthMode - Authentication mode
335 * Out:
336 * none
338 * Return Value: none
341 VOID
342 VNTWIFIvSetEncryptionMode (
343 IN PVOID pMgmtHandle,
344 IN WMAC_ENCRYPTION_MODE eEncryptionMode
347 PSMgmtObject pMgmt = (PSMgmtObject)pMgmtHandle;
349 pMgmt->eEncryptionMode = eEncryptionMode;
350 if ((eEncryptionMode == WMAC_ENCRYPTION_WEPEnabled) ||
351 (eEncryptionMode == WMAC_ENCRYPTION_TKIPEnabled) ||
352 (eEncryptionMode == WMAC_ENCRYPTION_AESEnabled) ) {
353 pMgmt->bPrivacyInvoked = TRUE;
354 } else {
355 pMgmt->bPrivacyInvoked = FALSE;
361 BOOL
362 VNTWIFIbConfigPhyMode (
363 IN PVOID pMgmtHandle,
364 IN CARD_PHY_TYPE ePhyType
367 PSMgmtObject pMgmt = (PSMgmtObject)pMgmtHandle;
369 if ((ePhyType != PHY_TYPE_AUTO) &&
370 (ePhyType != pMgmt->eCurrentPHYMode)) {
371 if (CARDbSetPhyParameter(pMgmt->pAdapter, ePhyType, 0, 0, NULL, NULL)==TRUE) {
372 pMgmt->eCurrentPHYMode = ePhyType;
373 } else {
374 return(FALSE);
377 pMgmt->eConfigPHYMode = ePhyType;
378 return(TRUE);
382 VOID
383 VNTWIFIbGetConfigPhyMode (
384 IN PVOID pMgmtHandle,
385 OUT PVOID pePhyType
388 PSMgmtObject pMgmt = (PSMgmtObject)pMgmtHandle;
390 if ((pMgmt != NULL) && (pePhyType != NULL)) {
391 *(PCARD_PHY_TYPE)pePhyType = pMgmt->eConfigPHYMode;
397 * Description:
398 * Clear BSS List Database except current assoc BSS
400 * Parameters:
401 * In:
402 * pMgmtHandle - Management Object structure
403 * bLinkPass - Current Link status
404 * Out:
406 * Return Value: None.
413 * Description:
414 * Query BSS List in management database
416 * Parameters:
417 * In:
418 * pMgmtHandle - Management Object structure
419 * Out:
420 * puBSSCount - BSS count
421 * pvFirstBSS - pointer to first BSS
423 * Return Value: None.
427 VOID
428 VNTWIFIvQueryBSSList (
429 IN PVOID pMgmtHandle,
430 OUT PUINT puBSSCount,
431 OUT PVOID *pvFirstBSS
434 UINT ii = 0;
435 PSMgmtObject pMgmt = (PSMgmtObject)pMgmtHandle;
436 PKnownBSS pBSS = NULL;
437 UINT uCount = 0;
439 *pvFirstBSS = NULL;
441 for (ii = 0; ii < MAX_BSS_NUM; ii++) {
442 pBSS = &(pMgmt->sBSSList[ii]);
443 if (!pBSS->bActive) {
444 continue;
446 if (*pvFirstBSS == NULL) {
447 *pvFirstBSS = &(pMgmt->sBSSList[ii]);
449 uCount++;
451 *puBSSCount = uCount;
457 VOID
458 VNTWIFIvGetNextBSS (
459 IN PVOID pMgmtHandle,
460 IN PVOID pvCurrentBSS,
461 OUT PVOID *pvNextBSS
464 PKnownBSS pBSS = (PKnownBSS) pvCurrentBSS;
465 PSMgmtObject pMgmt = (PSMgmtObject)pMgmtHandle;
467 *pvNextBSS = NULL;
469 while (*pvNextBSS == NULL) {
470 pBSS++;
471 if (pBSS > &(pMgmt->sBSSList[MAX_BSS_NUM])) {
472 return;
474 if (pBSS->bActive == TRUE) {
475 *pvNextBSS = pBSS;
476 return;
487 * Description:
488 * Update Tx attemps, Tx failure counter in Node DB
490 * In:
491 * Out:
492 * none
494 * Return Value: none
497 VOID
498 VNTWIFIvUpdateNodeTxCounter(
499 IN PVOID pMgmtHandle,
500 IN PBYTE pbyDestAddress,
501 IN BOOL bTxOk,
502 IN WORD wRate,
503 IN PBYTE pbyTxFailCount
506 PSMgmtObject pMgmt = (PSMgmtObject)pMgmtHandle;
507 UINT uNodeIndex = 0;
508 UINT ii;
510 if ((pMgmt->eCurrMode == WMAC_MODE_IBSS_STA) ||
511 (pMgmt->eCurrMode == WMAC_MODE_ESS_AP)) {
512 if (BSSDBbIsSTAInNodeDB(pMgmt, pbyDestAddress, &uNodeIndex) == FALSE) {
513 return;
516 pMgmt->sNodeDBTable[uNodeIndex].uTxAttempts++;
517 if (bTxOk == TRUE) {
518 // transmit success, TxAttempts at least plus one
519 pMgmt->sNodeDBTable[uNodeIndex].uTxOk[MAX_RATE]++;
520 pMgmt->sNodeDBTable[uNodeIndex].uTxOk[wRate]++;
521 } else {
522 pMgmt->sNodeDBTable[uNodeIndex].uTxFailures++;
524 pMgmt->sNodeDBTable[uNodeIndex].uTxRetry += pbyTxFailCount[MAX_RATE];
525 for(ii=0;ii<MAX_RATE;ii++) {
526 pMgmt->sNodeDBTable[uNodeIndex].uTxFail[ii] += pbyTxFailCount[ii];
528 return;
532 VOID
533 VNTWIFIvGetTxRate(
534 IN PVOID pMgmtHandle,
535 IN PBYTE pbyDestAddress,
536 OUT PWORD pwTxDataRate,
537 OUT PBYTE pbyACKRate,
538 OUT PBYTE pbyCCKBasicRate,
539 OUT PBYTE pbyOFDMBasicRate
542 PSMgmtObject pMgmt = (PSMgmtObject)pMgmtHandle;
543 UINT uNodeIndex = 0;
544 WORD wTxDataRate = RATE_1M;
545 BYTE byACKRate = RATE_1M;
546 BYTE byCCKBasicRate = RATE_1M;
547 BYTE byOFDMBasicRate = RATE_24M;
548 PWLAN_IE_SUPP_RATES pSupportRateIEs = NULL;
549 PWLAN_IE_SUPP_RATES pExtSupportRateIEs = NULL;
552 if ((pMgmt->eCurrMode == WMAC_MODE_IBSS_STA) ||
553 (pMgmt->eCurrMode == WMAC_MODE_ESS_AP)) {
554 // Adhoc Tx rate decided from node DB
555 if(BSSDBbIsSTAInNodeDB(pMgmt, pbyDestAddress, &uNodeIndex)) {
556 wTxDataRate = (pMgmt->sNodeDBTable[uNodeIndex].wTxDataRate);
557 pSupportRateIEs = (PWLAN_IE_SUPP_RATES) (pMgmt->sNodeDBTable[uNodeIndex].abyCurrSuppRates);
558 pExtSupportRateIEs = (PWLAN_IE_SUPP_RATES) (pMgmt->sNodeDBTable[uNodeIndex].abyCurrExtSuppRates);
559 } else {
560 if (pMgmt->eCurrentPHYMode != PHY_TYPE_11A) {
561 wTxDataRate = RATE_2M;
562 } else {
563 wTxDataRate = RATE_24M;
565 pSupportRateIEs = (PWLAN_IE_SUPP_RATES) pMgmt->abyCurrSuppRates;
566 pExtSupportRateIEs = (PWLAN_IE_SUPP_RATES) pMgmt->abyCurrExtSuppRates;
568 } else { // Infrastructure: rate decided from AP Node, index = 0
570 wTxDataRate = (pMgmt->sNodeDBTable[0].wTxDataRate);
571 #ifdef PLICE_DEBUG
572 printk("GetTxRate:AP MAC is %02x:%02x:%02x:%02x:%02x:%02x,TxRate is %d\n",
573 pMgmt->sNodeDBTable[0].abyMACAddr[0],pMgmt->sNodeDBTable[0].abyMACAddr[1],
574 pMgmt->sNodeDBTable[0].abyMACAddr[2],pMgmt->sNodeDBTable[0].abyMACAddr[3],
575 pMgmt->sNodeDBTable[0].abyMACAddr[4],pMgmt->sNodeDBTable[0].abyMACAddr[5],wTxDataRate);
576 #endif
579 pSupportRateIEs = (PWLAN_IE_SUPP_RATES) pMgmt->abyCurrSuppRates;
580 pExtSupportRateIEs = (PWLAN_IE_SUPP_RATES) pMgmt->abyCurrExtSuppRates;
582 byACKRate = VNTWIFIbyGetACKTxRate( (BYTE) wTxDataRate,
583 pSupportRateIEs,
584 pExtSupportRateIEs
586 if (byACKRate > (BYTE) wTxDataRate) {
587 byACKRate = (BYTE) wTxDataRate;
589 byCCKBasicRate = VNTWIFIbyGetACKTxRate( RATE_11M,
590 pSupportRateIEs,
591 pExtSupportRateIEs
593 byOFDMBasicRate = VNTWIFIbyGetACKTxRate(RATE_54M,
594 pSupportRateIEs,
595 pExtSupportRateIEs
597 *pwTxDataRate = wTxDataRate;
598 *pbyACKRate = byACKRate;
599 *pbyCCKBasicRate = byCCKBasicRate;
600 *pbyOFDMBasicRate = byOFDMBasicRate;
601 return;
604 BYTE
605 VNTWIFIbyGetKeyCypher(
606 IN PVOID pMgmtHandle,
607 IN BOOL bGroupKey
610 PSMgmtObject pMgmt = (PSMgmtObject)pMgmtHandle;
612 if (bGroupKey == TRUE) {
613 return (pMgmt->byCSSGK);
614 } else {
615 return (pMgmt->byCSSPK);
621 BOOL
622 VNTWIFIbInit(
623 IN PVOID pAdapterHandler,
624 OUT PVOID *pMgmtHandler
628 PSMgmtObject pMgmt = NULL;
629 UINT ii;
632 pMgmt = (PSMgmtObject)kmalloc(sizeof(SMgmtObject), (int)GFP_ATOMIC);
633 if (pMgmt == NULL) {
634 *pMgmtHandler = NULL;
635 return FALSE;
638 memset(pMgmt, 0, sizeof(SMgmtObject));
639 pMgmt->pAdapter = (PVOID) pAdapterHandler;
641 // should initial MAC address abyMACAddr
642 for(ii=0;ii<WLAN_BSSID_LEN;ii++) {
643 pMgmt->abyDesireBSSID[ii] = 0xFF;
645 pMgmt->pbyPSPacketPool = &pMgmt->byPSPacketPool[0];
646 pMgmt->pbyMgmtPacketPool = &pMgmt->byMgmtPacketPool[0];
647 pMgmt->byCSSPK = KEY_CTL_NONE;
648 pMgmt->byCSSGK = KEY_CTL_NONE;
649 pMgmt->wIBSSBeaconPeriod = DEFAULT_IBSS_BI;
651 pMgmt->cbFreeCmdQueue = CMD_Q_SIZE;
652 pMgmt->uCmdDequeueIdx = 0;
653 pMgmt->uCmdEnqueueIdx = 0;
654 pMgmt->eCommandState = WLAN_CMD_STATE_IDLE;
655 pMgmt->bCmdStop = FALSE;
656 pMgmt->bCmdRunning = FALSE;
658 *pMgmtHandler = pMgmt;
659 return TRUE;
665 BOOL
666 VNTWIFIbSetPMKIDCache (
667 IN PVOID pMgmtObject,
668 IN ULONG ulCount,
669 IN PVOID pPMKIDInfo
672 PSMgmtObject pMgmt = (PSMgmtObject) pMgmtObject;
674 if (ulCount > MAX_PMKID_CACHE) {
675 return (FALSE);
677 pMgmt->gsPMKIDCache.BSSIDInfoCount = ulCount;
678 memcpy(pMgmt->gsPMKIDCache.BSSIDInfo, pPMKIDInfo, (ulCount*sizeof(PMKIDInfo)));
679 return (TRUE);
684 WORD
685 VNTWIFIwGetMaxSupportRate(
686 IN PVOID pMgmtObject
689 WORD wRate = RATE_54M;
690 PSMgmtObject pMgmt = (PSMgmtObject) pMgmtObject;
692 for(wRate = RATE_54M; wRate > RATE_1M; wRate--) {
693 if (pMgmt->sNodeDBTable[0].wSuppRate & (1<<wRate)) {
694 return (wRate);
697 if (pMgmt->eCurrentPHYMode == PHY_TYPE_11A) {
698 return (RATE_6M);
699 } else {
700 return (RATE_1M);
705 VOID
706 VNTWIFIvSet11h (
707 IN PVOID pMgmtObject,
708 IN BOOL b11hEnable
711 PSMgmtObject pMgmt = (PSMgmtObject) pMgmtObject;
713 pMgmt->b11hEnable = b11hEnable;
716 BOOL
717 VNTWIFIbMeasureReport(
718 IN PVOID pMgmtObject,
719 IN BOOL bEndOfReport,
720 IN PVOID pvMeasureEID,
721 IN BYTE byReportMode,
722 IN BYTE byBasicMap,
723 IN BYTE byCCAFraction,
724 IN PBYTE pbyRPIs
727 PSMgmtObject pMgmt = (PSMgmtObject) pMgmtObject;
728 PBYTE pbyCurrentEID = (PBYTE) (pMgmt->pCurrMeasureEIDRep);
730 //spin_lock_irq(&pDevice->lock);
731 if ((pvMeasureEID != NULL) &&
732 (pMgmt->uLengthOfRepEIDs < (WLAN_A3FR_MAXLEN - sizeof(MEASEURE_REP) - sizeof(WLAN_80211HDR_A3) - 3))
734 pMgmt->pCurrMeasureEIDRep->byElementID = WLAN_EID_MEASURE_REP;
735 pMgmt->pCurrMeasureEIDRep->len = 3;
736 pMgmt->pCurrMeasureEIDRep->byToken = ((PWLAN_IE_MEASURE_REQ) pvMeasureEID)->byToken;
737 pMgmt->pCurrMeasureEIDRep->byMode = byReportMode;
738 pMgmt->pCurrMeasureEIDRep->byType = ((PWLAN_IE_MEASURE_REQ) pvMeasureEID)->byType;
739 switch (pMgmt->pCurrMeasureEIDRep->byType) {
740 case MEASURE_TYPE_BASIC :
741 pMgmt->pCurrMeasureEIDRep->len += sizeof(MEASEURE_REP_BASIC);
742 memcpy( &(pMgmt->pCurrMeasureEIDRep->sRep.sBasic),
743 &(((PWLAN_IE_MEASURE_REQ) pvMeasureEID)->sReq),
744 sizeof(MEASEURE_REQ));
745 pMgmt->pCurrMeasureEIDRep->sRep.sBasic.byMap = byBasicMap;
746 break;
747 case MEASURE_TYPE_CCA :
748 pMgmt->pCurrMeasureEIDRep->len += sizeof(MEASEURE_REP_CCA);
749 memcpy( &(pMgmt->pCurrMeasureEIDRep->sRep.sCCA),
750 &(((PWLAN_IE_MEASURE_REQ) pvMeasureEID)->sReq),
751 sizeof(MEASEURE_REQ));
752 pMgmt->pCurrMeasureEIDRep->sRep.sCCA.byCCABusyFraction = byCCAFraction;
753 break;
754 case MEASURE_TYPE_RPI :
755 pMgmt->pCurrMeasureEIDRep->len += sizeof(MEASEURE_REP_RPI);
756 memcpy( &(pMgmt->pCurrMeasureEIDRep->sRep.sRPI),
757 &(((PWLAN_IE_MEASURE_REQ) pvMeasureEID)->sReq),
758 sizeof(MEASEURE_REQ));
759 memcpy(pMgmt->pCurrMeasureEIDRep->sRep.sRPI.abyRPIdensity, pbyRPIs, 8);
760 break;
761 default :
762 break;
764 pbyCurrentEID += (2 + pMgmt->pCurrMeasureEIDRep->len);
765 pMgmt->uLengthOfRepEIDs += (2 + pMgmt->pCurrMeasureEIDRep->len);
766 pMgmt->pCurrMeasureEIDRep = (PWLAN_IE_MEASURE_REP) pbyCurrentEID;
768 if (bEndOfReport == TRUE) {
769 IEEE11hbMSRRepTx(pMgmt);
771 //spin_unlock_irq(&pDevice->lock);
772 return (TRUE);
776 BOOL
777 VNTWIFIbChannelSwitch(
778 IN PVOID pMgmtObject,
779 IN BYTE byNewChannel
782 PSMgmtObject pMgmt = (PSMgmtObject) pMgmtObject;
784 //spin_lock_irq(&pDevice->lock);
785 pMgmt->uCurrChannel = byNewChannel;
786 pMgmt->bSwitchChannel = FALSE;
787 //spin_unlock_irq(&pDevice->lock);
788 return TRUE;
792 BOOL
793 VNTWIFIbRadarPresent(
794 IN PVOID pMgmtObject,
795 IN BYTE byChannel
798 PSMgmtObject pMgmt = (PSMgmtObject) pMgmtObject;
799 if ((pMgmt->eCurrMode == WMAC_MODE_IBSS_STA) &&
800 (byChannel == (BYTE) pMgmt->uCurrChannel) &&
801 (pMgmt->bSwitchChannel != TRUE) &&
802 (pMgmt->b11hEnable == TRUE)) {
803 if (IS_ETH_ADDRESS_EQUAL(pMgmt->abyIBSSDFSOwner, CARDpGetCurrentAddress(pMgmt->pAdapter))) {
804 pMgmt->byNewChannel = CARDbyAutoChannelSelect(pMgmt->pAdapter,(BYTE) pMgmt->uCurrChannel);
805 pMgmt->bSwitchChannel = TRUE;
807 BEACONbSendBeacon(pMgmt);
808 CARDbChannelSwitch(pMgmt->pAdapter, 0, pMgmt->byNewChannel, 10);
810 return TRUE;