Merge git://git.infradead.org/mtd-2.6
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / drivers / staging / vt6655 / vntwifi.c
CommitLineData
5449c685
FB
1/*
2 * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
3 * All rights reserved.
4 *
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.
9 *
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.
14 *
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.
18 *
19 *
20 * File: vntwifi.c
21 *
22 * Purpose: export functions for vntwifi lib
23 *
24 * Functions:
25 *
26 * Revision History:
27 *
28 * Author: Yiching Chen
29 *
30 * Date: feb. 2, 2005
31 *
32 */
33
5449c685 34#include "vntwifi.h"
5449c685 35#include "IEEE11h.h"
5449c685 36#include "country.h"
5449c685 37#include "device.h"
5449c685 38#include "wmgr.h"
5449c685 39#include "datarate.h"
a7ad322a 40
5449c685
FB
41//#define PLICE_DEBUG
42
43/*--------------------- Static Definitions -------------------------*/
44//static int msglevel =MSG_LEVEL_DEBUG;
45//static int msglevel =MSG_LEVEL_INFO;
46
47/*--------------------- Static Classes ----------------------------*/
48
49/*--------------------- Static Variables --------------------------*/
50
51/*--------------------- Static Functions --------------------------*/
52
53/*--------------------- Export Variables --------------------------*/
54
55/*--------------------- Export Functions --------------------------*/
56
57/*+
58 *
59 * Description:
60 * Set Operation Mode
61 *
62 * Parameters:
63 * In:
64 * pMgmtHandle - pointer to management object
65 * eOPMode - Opreation Mode
66 * Out:
67 * none
68 *
69 * Return Value: none
70 *
71-*/
72VOID
73VNTWIFIvSetOPMode (
74 IN PVOID pMgmtHandle,
75 IN WMAC_CONFIG_MODE eOPMode
76 )
77{
78 PSMgmtObject pMgmt = (PSMgmtObject)pMgmtHandle;
79
80 pMgmt->eConfigMode = eOPMode;
81}
82
83
84/*+
85 *
86 * Description:
87 * Set Operation Mode
88 *
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
97 *
98 * Return Value: none
99 *
100-*/
101VOID
102VNTWIFIvSetIBSSParameter (
103 IN PVOID pMgmtHandle,
104 IN WORD wBeaconPeriod,
105 IN WORD wATIMWindow,
106 IN UINT uChannel
107 )
108{
109 PSMgmtObject pMgmt = (PSMgmtObject)pMgmtHandle;
110
111 pMgmt->wIBSSBeaconPeriod = wBeaconPeriod;
112 pMgmt->wIBSSATIMWindow = wATIMWindow;
113 pMgmt->uIBSSChannel = uChannel;
114}
115
116/*+
117 *
118 * Description:
119 * Get current SSID
120 *
121 * Parameters:
122 * In:
123 * pMgmtHandle - pointer to management object
124 * Out:
125 * none
126 *
127 * Return Value: current SSID pointer.
128 *
129-*/
130PWLAN_IE_SSID
131VNTWIFIpGetCurrentSSID (
132 IN PVOID pMgmtHandle
133 )
134{
135 PSMgmtObject pMgmt = (PSMgmtObject)pMgmtHandle;
136 return((PWLAN_IE_SSID) pMgmt->abyCurrSSID);
137}
138
139/*+
140 *
141 * Description:
142 * Get current link channel
143 *
144 * Parameters:
145 * In:
146 * pMgmtHandle - pointer to management object
147 * Out:
148 * none
149 *
150 * Return Value: current Channel.
151 *
152-*/
153UINT
154VNTWIFIpGetCurrentChannel (
155 IN PVOID pMgmtHandle
156 )
157{
158 PSMgmtObject pMgmt = (PSMgmtObject)pMgmtHandle;
159 if (pMgmtHandle != NULL) {
160 return (pMgmt->uCurrChannel);
161 }
162 return 0;
163}
164
165/*+
166 *
167 * Description:
168 * Get current Assoc ID
169 *
170 * Parameters:
171 * In:
172 * pMgmtHandle - pointer to management object
173 * Out:
174 * none
175 *
176 * Return Value: current Assoc ID
177 *
178-*/
179WORD
180VNTWIFIwGetAssocID (
181 IN PVOID pMgmtHandle
182 )
183{
184 PSMgmtObject pMgmt = (PSMgmtObject)pMgmtHandle;
185 return(pMgmt->wCurrAID);
186}
187
188
189
190/*+
191 *
192 * Description:
193 * This routine return max support rate of IES
194 *
195 * Parameters:
196 * In:
197 * pSupportRateIEs
198 * pExtSupportRateIEs
199 *
200 * Out:
201 *
202 * Return Value: max support rate
203 *
204-*/
205BYTE
206VNTWIFIbyGetMaxSupportRate (
207 IN PWLAN_IE_SUPP_RATES pSupportRateIEs,
208 IN PWLAN_IE_SUPP_RATES pExtSupportRateIEs
209 )
210{
211 BYTE byMaxSupportRate = RATE_1M;
212 BYTE bySupportRate = RATE_1M;
213 UINT ii = 0;
214
215 if (pSupportRateIEs) {
216 for (ii = 0; ii < pSupportRateIEs->len; ii++) {
217 bySupportRate = DATARATEbyGetRateIdx(pSupportRateIEs->abyRates[ii]);
218 if (bySupportRate > byMaxSupportRate) {
219 byMaxSupportRate = bySupportRate;
220 }
221 }
222 }
223 if (pExtSupportRateIEs) {
224 for (ii = 0; ii < pExtSupportRateIEs->len; ii++) {
225 bySupportRate = DATARATEbyGetRateIdx(pExtSupportRateIEs->abyRates[ii]);
226 if (bySupportRate > byMaxSupportRate) {
227 byMaxSupportRate = bySupportRate;
228 }
229 }
230 }
231
232 return byMaxSupportRate;
233}
234
235/*+
236 *
237 * Description:
238 * This routine return data rate of ACK packtet
239 *
240 * Parameters:
241 * In:
242 * byRxDataRate
243 * pSupportRateIEs
244 * pExtSupportRateIEs
245 *
246 * Out:
247 *
248 * Return Value: max support rate
249 *
250-*/
251BYTE
252VNTWIFIbyGetACKTxRate (
253 IN BYTE byRxDataRate,
254 IN PWLAN_IE_SUPP_RATES pSupportRateIEs,
255 IN PWLAN_IE_SUPP_RATES pExtSupportRateIEs
256 )
257{
258 BYTE byMaxAckRate;
259 BYTE byBasicRate;
260 UINT ii;
261
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;
267 }
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;
275 }
276 }
277 }
278 }
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;
286 }
287 }
288 }
289 }
290
291 return byMaxAckRate;
292}
293
294/*+
295 *
296 * Description:
297 * Set Authentication Mode
298 *
299 * Parameters:
300 * In:
301 * pMgmtHandle - pointer to management object
302 * eAuthMode - Authentication mode
303 * Out:
304 * none
305 *
306 * Return Value: none
307 *
308-*/
309VOID
310VNTWIFIvSetAuthenticationMode (
311 IN PVOID pMgmtHandle,
312 IN WMAC_AUTHENTICATION_MODE eAuthMode
313 )
314{
315 PSMgmtObject pMgmt = (PSMgmtObject)pMgmtHandle;
316
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;
323 }
324}
325
326/*+
327 *
328 * Description:
329 * Set Encryption Mode
330 *
331 * Parameters:
332 * In:
333 * pMgmtHandle - pointer to management object
334 * eAuthMode - Authentication mode
335 * Out:
336 * none
337 *
338 * Return Value: none
339 *
340-*/
341VOID
342VNTWIFIvSetEncryptionMode (
343 IN PVOID pMgmtHandle,
344 IN WMAC_ENCRYPTION_MODE eEncryptionMode
345 )
346{
347 PSMgmtObject pMgmt = (PSMgmtObject)pMgmtHandle;
348
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;
356 }
357}
358
359
360
361BOOL
362VNTWIFIbConfigPhyMode (
363 IN PVOID pMgmtHandle,
364 IN CARD_PHY_TYPE ePhyType
365 )
366{
367 PSMgmtObject pMgmt = (PSMgmtObject)pMgmtHandle;
368
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);
375 }
376 }
377 pMgmt->eConfigPHYMode = ePhyType;
378 return(TRUE);
379}
380
381
382VOID
383VNTWIFIbGetConfigPhyMode (
384 IN PVOID pMgmtHandle,
385 OUT PVOID pePhyType
386 )
387{
388 PSMgmtObject pMgmt = (PSMgmtObject)pMgmtHandle;
389
390 if ((pMgmt != NULL) && (pePhyType != NULL)) {
391 *(PCARD_PHY_TYPE)pePhyType = pMgmt->eConfigPHYMode;
392 }
393}
394
395/*+
396 *
397 * Description:
398 * Clear BSS List Database except current assoc BSS
399 *
400 * Parameters:
401 * In:
402 * pMgmtHandle - Management Object structure
403 * bLinkPass - Current Link status
404 * Out:
405 *
406 * Return Value: None.
407 *
408-*/
409
410
411/*+
412 *
413 * Description:
414 * Query BSS List in management database
415 *
416 * Parameters:
417 * In:
418 * pMgmtHandle - Management Object structure
419 * Out:
420 * puBSSCount - BSS count
421 * pvFirstBSS - pointer to first BSS
422 *
423 * Return Value: None.
424 *
425-*/
426
427VOID
428VNTWIFIvQueryBSSList (
429 IN PVOID pMgmtHandle,
430 OUT PUINT puBSSCount,
431 OUT PVOID *pvFirstBSS
432 )
433{
434 UINT ii = 0;
435 PSMgmtObject pMgmt = (PSMgmtObject)pMgmtHandle;
436 PKnownBSS pBSS = NULL;
437 UINT uCount = 0;
438
439 *pvFirstBSS = NULL;
440
441 for (ii = 0; ii < MAX_BSS_NUM; ii++) {
442 pBSS = &(pMgmt->sBSSList[ii]);
443 if (!pBSS->bActive) {
444 continue;
445 }
446 if (*pvFirstBSS == NULL) {
447 *pvFirstBSS = &(pMgmt->sBSSList[ii]);
448 }
449 uCount++;
450 }
451 *puBSSCount = uCount;
452}
453
454
455
456
457VOID
458VNTWIFIvGetNextBSS (
459 IN PVOID pMgmtHandle,
460 IN PVOID pvCurrentBSS,
461 OUT PVOID *pvNextBSS
462 )
463{
464 PKnownBSS pBSS = (PKnownBSS) pvCurrentBSS;
465 PSMgmtObject pMgmt = (PSMgmtObject)pMgmtHandle;
466
467 *pvNextBSS = NULL;
468
469 while (*pvNextBSS == NULL) {
470 pBSS++;
471 if (pBSS > &(pMgmt->sBSSList[MAX_BSS_NUM])) {
472 return;
473 }
474 if (pBSS->bActive == TRUE) {
475 *pvNextBSS = pBSS;
476 return;
477 }
478 }
479}
480
481
482
483
484
485/*+
486 *
487 * Description:
488 * Update Tx attemps, Tx failure counter in Node DB
489 *
490 * In:
491 * Out:
492 * none
493 *
494 * Return Value: none
495 *
496-*/
497VOID
498VNTWIFIvUpdateNodeTxCounter(
499 IN PVOID pMgmtHandle,
500 IN PBYTE pbyDestAddress,
501 IN BOOL bTxOk,
502 IN WORD wRate,
503 IN PBYTE pbyTxFailCount
504 )
505{
506 PSMgmtObject pMgmt = (PSMgmtObject)pMgmtHandle;
507 UINT uNodeIndex = 0;
508 UINT ii;
509
510 if ((pMgmt->eCurrMode == WMAC_MODE_IBSS_STA) ||
511 (pMgmt->eCurrMode == WMAC_MODE_ESS_AP)) {
512 if (BSSDBbIsSTAInNodeDB(pMgmt, pbyDestAddress, &uNodeIndex) == FALSE) {
513 return;
514 }
515 }
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++;
523 }
524 pMgmt->sNodeDBTable[uNodeIndex].uTxRetry += pbyTxFailCount[MAX_RATE];
525 for(ii=0;ii<MAX_RATE;ii++) {
526 pMgmt->sNodeDBTable[uNodeIndex].uTxFail[ii] += pbyTxFailCount[ii];
527 }
528 return;
529}
530
531
532VOID
533VNTWIFIvGetTxRate(
534 IN PVOID pMgmtHandle,
535 IN PBYTE pbyDestAddress,
536 OUT PWORD pwTxDataRate,
537 OUT PBYTE pbyACKRate,
538 OUT PBYTE pbyCCKBasicRate,
539 OUT PBYTE pbyOFDMBasicRate
540 )
541{
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;
550
551
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;
564 }
565 pSupportRateIEs = (PWLAN_IE_SUPP_RATES) pMgmt->abyCurrSuppRates;
566 pExtSupportRateIEs = (PWLAN_IE_SUPP_RATES) pMgmt->abyCurrExtSuppRates;
567 }
568 } else { // Infrastructure: rate decided from AP Node, index = 0
569
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
577
578
579 pSupportRateIEs = (PWLAN_IE_SUPP_RATES) pMgmt->abyCurrSuppRates;
580 pExtSupportRateIEs = (PWLAN_IE_SUPP_RATES) pMgmt->abyCurrExtSuppRates;
581 }
582 byACKRate = VNTWIFIbyGetACKTxRate( (BYTE) wTxDataRate,
583 pSupportRateIEs,
584 pExtSupportRateIEs
585 );
586 if (byACKRate > (BYTE) wTxDataRate) {
587 byACKRate = (BYTE) wTxDataRate;
588 }
589 byCCKBasicRate = VNTWIFIbyGetACKTxRate( RATE_11M,
590 pSupportRateIEs,
591 pExtSupportRateIEs
592 );
593 byOFDMBasicRate = VNTWIFIbyGetACKTxRate(RATE_54M,
594 pSupportRateIEs,
595 pExtSupportRateIEs
596 );
597 *pwTxDataRate = wTxDataRate;
598 *pbyACKRate = byACKRate;
599 *pbyCCKBasicRate = byCCKBasicRate;
600 *pbyOFDMBasicRate = byOFDMBasicRate;
601 return;
602}
603
604BYTE
605VNTWIFIbyGetKeyCypher(
606 IN PVOID pMgmtHandle,
607 IN BOOL bGroupKey
608 )
609{
610 PSMgmtObject pMgmt = (PSMgmtObject)pMgmtHandle;
611
612 if (bGroupKey == TRUE) {
613 return (pMgmt->byCSSGK);
614 } else {
615 return (pMgmt->byCSSPK);
616 }
617}
618
619
620/*
621BOOL
622VNTWIFIbInit(
623 IN PVOID pAdapterHandler,
624 OUT PVOID *pMgmtHandler
625 )
626{
627
628 PSMgmtObject pMgmt = NULL;
629 UINT ii;
630
631
632 pMgmt = (PSMgmtObject)kmalloc(sizeof(SMgmtObject), (int)GFP_ATOMIC);
633 if (pMgmt == NULL) {
634 *pMgmtHandler = NULL;
635 return FALSE;
636 }
637
638 memset(pMgmt, 0, sizeof(SMgmtObject));
639 pMgmt->pAdapter = (PVOID) pAdapterHandler;
640
641 // should initial MAC address abyMACAddr
642 for(ii=0;ii<WLAN_BSSID_LEN;ii++) {
643 pMgmt->abyDesireBSSID[ii] = 0xFF;
644 }
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;
650
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;
657
658 *pMgmtHandler = pMgmt;
659 return TRUE;
660}
661*/
662
663
664
665BOOL
666VNTWIFIbSetPMKIDCache (
667 IN PVOID pMgmtObject,
668 IN ULONG ulCount,
669 IN PVOID pPMKIDInfo
670 )
671{
672 PSMgmtObject pMgmt = (PSMgmtObject) pMgmtObject;
673
674 if (ulCount > MAX_PMKID_CACHE) {
675 return (FALSE);
676 }
677 pMgmt->gsPMKIDCache.BSSIDInfoCount = ulCount;
51b6d9c2 678 memcpy(pMgmt->gsPMKIDCache.BSSIDInfo, pPMKIDInfo, (ulCount*sizeof(PMKIDInfo)));
5449c685
FB
679 return (TRUE);
680}
681
682
683
684WORD
685VNTWIFIwGetMaxSupportRate(
686 IN PVOID pMgmtObject
687 )
688{
689 WORD wRate = RATE_54M;
690 PSMgmtObject pMgmt = (PSMgmtObject) pMgmtObject;
691
692 for(wRate = RATE_54M; wRate > RATE_1M; wRate--) {
256a816b 693 if (pMgmt->sNodeDBTable[0].wSuppRate & (1<<wRate)) {
5449c685
FB
694 return (wRate);
695 }
696 }
697 if (pMgmt->eCurrentPHYMode == PHY_TYPE_11A) {
698 return (RATE_6M);
699 } else {
700 return (RATE_1M);
701 }
702}
703
704
705VOID
706VNTWIFIvSet11h (
707 IN PVOID pMgmtObject,
708 IN BOOL b11hEnable
709 )
710{
711 PSMgmtObject pMgmt = (PSMgmtObject) pMgmtObject;
712
713 pMgmt->b11hEnable = b11hEnable;
714}
715
716BOOL
717VNTWIFIbMeasureReport(
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
725 )
726{
727 PSMgmtObject pMgmt = (PSMgmtObject) pMgmtObject;
728 PBYTE pbyCurrentEID = (PBYTE) (pMgmt->pCurrMeasureEIDRep);
729
730 //spin_lock_irq(&pDevice->lock);
731 if ((pvMeasureEID != NULL) &&
732 (pMgmt->uLengthOfRepEIDs < (WLAN_A3FR_MAXLEN - sizeof(MEASEURE_REP) - sizeof(WLAN_80211HDR_A3) - 3))
733 ) {
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);
51b6d9c2 742 memcpy( &(pMgmt->pCurrMeasureEIDRep->sRep.sBasic),
5449c685
FB
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);
51b6d9c2 749 memcpy( &(pMgmt->pCurrMeasureEIDRep->sRep.sCCA),
5449c685
FB
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);
51b6d9c2 756 memcpy( &(pMgmt->pCurrMeasureEIDRep->sRep.sRPI),
5449c685
FB
757 &(((PWLAN_IE_MEASURE_REQ) pvMeasureEID)->sReq),
758 sizeof(MEASEURE_REQ));
51b6d9c2 759 memcpy(pMgmt->pCurrMeasureEIDRep->sRep.sRPI.abyRPIdensity, pbyRPIs, 8);
5449c685
FB
760 break;
761 default :
762 break;
763 }
764 pbyCurrentEID += (2 + pMgmt->pCurrMeasureEIDRep->len);
765 pMgmt->uLengthOfRepEIDs += (2 + pMgmt->pCurrMeasureEIDRep->len);
766 pMgmt->pCurrMeasureEIDRep = (PWLAN_IE_MEASURE_REP) pbyCurrentEID;
767 }
768 if (bEndOfReport == TRUE) {
769 IEEE11hbMSRRepTx(pMgmt);
770 }
771 //spin_unlock_irq(&pDevice->lock);
772 return (TRUE);
773}
774
775
776BOOL
777VNTWIFIbChannelSwitch(
778 IN PVOID pMgmtObject,
779 IN BYTE byNewChannel
780 )
781{
782 PSMgmtObject pMgmt = (PSMgmtObject) pMgmtObject;
783
784 //spin_lock_irq(&pDevice->lock);
785 pMgmt->uCurrChannel = byNewChannel;
786 pMgmt->bSwitchChannel = FALSE;
787 //spin_unlock_irq(&pDevice->lock);
788 return TRUE;
789}
790
791/*
792BOOL
793VNTWIFIbRadarPresent(
794 IN PVOID pMgmtObject,
795 IN BYTE byChannel
796 )
797{
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;
806 }
807 BEACONbSendBeacon(pMgmt);
808 CARDbChannelSwitch(pMgmt->pAdapter, 0, pMgmt->byNewChannel, 10);
809 }
810 return TRUE;
811}
812*/
813