bonding: fix rx_handler locking
[linux/fpc-iii.git] / drivers / staging / vt6655 / mib.c
blob1b91a8370954570b930ab2ea11172239f692809b
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.
19 * File: mib.c
21 * Purpose: Implement MIB Data Structure
23 * Author: Tevin Chen
25 * Date: May 21, 1996
27 * Functions:
28 * STAvClearAllCounter - Clear All MIB Counter
29 * STAvUpdateIstStatCounter - Update ISR statistic counter
30 * STAvUpdateRDStatCounter - Update Rx statistic counter
31 * STAvUpdateRDStatCounterEx - Update Rx statistic counter and copy rcv data
32 * STAvUpdateTDStatCounter - Update Tx statistic counter
33 * STAvUpdateTDStatCounterEx - Update Tx statistic counter and copy tx data
34 * STAvUpdate802_11Counter - Update 802.11 mib counter
36 * Revision History:
40 #include "upc.h"
41 #include "mac.h"
42 #include "tether.h"
43 #include "mib.h"
44 #include "wctl.h"
45 #include "baseband.h"
47 /*--------------------- Static Definitions -------------------------*/
48 static int msglevel =MSG_LEVEL_INFO;
49 /*--------------------- Static Classes ----------------------------*/
51 /*--------------------- Static Variables --------------------------*/
53 /*--------------------- Static Functions --------------------------*/
55 /*--------------------- Export Variables --------------------------*/
57 /*--------------------- Export Functions --------------------------*/
62 * Description: Clear All Statistic Counter
64 * Parameters:
65 * In:
66 * pStatistic - Pointer to Statistic Counter Data Structure
67 * Out:
68 * none
70 * Return Value: none
73 void STAvClearAllCounter (PSStatCounter pStatistic)
75 // set memory to zero
76 memset(pStatistic, 0, sizeof(SStatCounter));
81 * Description: Update Isr Statistic Counter
83 * Parameters:
84 * In:
85 * pStatistic - Pointer to Statistic Counter Data Structure
86 * wisr - Interrupt status
87 * Out:
88 * none
90 * Return Value: none
93 void STAvUpdateIsrStatCounter (PSStatCounter pStatistic, unsigned long dwIsr)
95 /**********************/
96 /* ABNORMAL interrupt */
97 /**********************/
98 // not any IMR bit invoke irq
100 if (dwIsr == 0) {
101 pStatistic->ISRStat.dwIsrUnknown++;
102 return;
105 //Added by Kyle
106 if (dwIsr & ISR_TXDMA0) // ISR, bit0
107 pStatistic->ISRStat.dwIsrTx0OK++; // TXDMA0 successful
109 if (dwIsr & ISR_AC0DMA) // ISR, bit1
110 pStatistic->ISRStat.dwIsrAC0TxOK++; // AC0DMA successful
112 if (dwIsr & ISR_BNTX) // ISR, bit2
113 pStatistic->ISRStat.dwIsrBeaconTxOK++; // BeaconTx successful
115 if (dwIsr & ISR_RXDMA0) // ISR, bit3
116 pStatistic->ISRStat.dwIsrRx0OK++; // Rx0 successful
118 if (dwIsr & ISR_TBTT) // ISR, bit4
119 pStatistic->ISRStat.dwIsrTBTTInt++; // TBTT successful
121 if (dwIsr & ISR_SOFTTIMER) // ISR, bit6
122 pStatistic->ISRStat.dwIsrSTIMERInt++;
124 if (dwIsr & ISR_WATCHDOG) // ISR, bit7
125 pStatistic->ISRStat.dwIsrWatchDog++;
127 if (dwIsr & ISR_FETALERR) // ISR, bit8
128 pStatistic->ISRStat.dwIsrUnrecoverableError++;
130 if (dwIsr & ISR_SOFTINT) // ISR, bit9
131 pStatistic->ISRStat.dwIsrSoftInterrupt++; // software interrupt
133 if (dwIsr & ISR_MIBNEARFULL) // ISR, bit10
134 pStatistic->ISRStat.dwIsrMIBNearfull++;
136 if (dwIsr & ISR_RXNOBUF) // ISR, bit11
137 pStatistic->ISRStat.dwIsrRxNoBuf++; // Rx No Buff
139 if (dwIsr & ISR_RXDMA1) // ISR, bit12
140 pStatistic->ISRStat.dwIsrRx1OK++; // Rx1 successful
142 // if (dwIsr & ISR_ATIMTX) // ISR, bit13
143 // pStatistic->ISRStat.dwIsrATIMTxOK++; // ATIMTX successful
145 // if (dwIsr & ISR_SYNCTX) // ISR, bit14
146 // pStatistic->ISRStat.dwIsrSYNCTxOK++; // SYNCTX successful
148 // if (dwIsr & ISR_CFPEND) // ISR, bit18
149 // pStatistic->ISRStat.dwIsrCFPEnd++;
151 // if (dwIsr & ISR_ATIMEND) // ISR, bit19
152 // pStatistic->ISRStat.dwIsrATIMEnd++;
154 // if (dwIsr & ISR_SYNCFLUSHOK) // ISR, bit20
155 // pStatistic->ISRStat.dwIsrSYNCFlushOK++;
157 if (dwIsr & ISR_SOFTTIMER1) // ISR, bit21
158 pStatistic->ISRStat.dwIsrSTIMER1Int++;
164 * Description: Update Rx Statistic Counter
166 * Parameters:
167 * In:
168 * pStatistic - Pointer to Statistic Counter Data Structure
169 * byRSR - Rx Status
170 * byNewRSR - Rx Status
171 * pbyBuffer - Rx Buffer
172 * cbFrameLength - Rx Length
173 * Out:
174 * none
176 * Return Value: none
179 void STAvUpdateRDStatCounter (PSStatCounter pStatistic,
180 unsigned char byRSR, unsigned char byNewRSR, unsigned char byRxRate,
181 unsigned char *pbyBuffer, unsigned int cbFrameLength)
183 //need change
184 PS802_11Header pHeader = (PS802_11Header)pbyBuffer;
186 if (byRSR & RSR_ADDROK)
187 pStatistic->dwRsrADDROk++;
188 if (byRSR & RSR_CRCOK) {
189 pStatistic->dwRsrCRCOk++;
191 pStatistic->ullRsrOK++;
193 if (cbFrameLength >= ETH_ALEN) {
194 // update counters in case that successful transmit
195 if (byRSR & RSR_ADDRBROAD) {
196 pStatistic->ullRxBroadcastFrames++;
197 pStatistic->ullRxBroadcastBytes += (unsigned long long) cbFrameLength;
199 else if (byRSR & RSR_ADDRMULTI) {
200 pStatistic->ullRxMulticastFrames++;
201 pStatistic->ullRxMulticastBytes += (unsigned long long) cbFrameLength;
203 else {
204 pStatistic->ullRxDirectedFrames++;
205 pStatistic->ullRxDirectedBytes += (unsigned long long) cbFrameLength;
210 if(byRxRate==22) {
211 pStatistic->CustomStat.ullRsr11M++;
212 if(byRSR & RSR_CRCOK) {
213 pStatistic->CustomStat.ullRsr11MCRCOk++;
215 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"11M: ALL[%d], OK[%d]:[%02x]\n", (int)pStatistic->CustomStat.ullRsr11M, (int)pStatistic->CustomStat.ullRsr11MCRCOk, byRSR);
217 else if(byRxRate==11) {
218 pStatistic->CustomStat.ullRsr5M++;
219 if(byRSR & RSR_CRCOK) {
220 pStatistic->CustomStat.ullRsr5MCRCOk++;
222 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" 5M: ALL[%d], OK[%d]:[%02x]\n", (int)pStatistic->CustomStat.ullRsr5M, (int)pStatistic->CustomStat.ullRsr5MCRCOk, byRSR);
224 else if(byRxRate==4) {
225 pStatistic->CustomStat.ullRsr2M++;
226 if(byRSR & RSR_CRCOK) {
227 pStatistic->CustomStat.ullRsr2MCRCOk++;
229 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" 2M: ALL[%d], OK[%d]:[%02x]\n", (int)pStatistic->CustomStat.ullRsr2M, (int)pStatistic->CustomStat.ullRsr2MCRCOk, byRSR);
231 else if(byRxRate==2){
232 pStatistic->CustomStat.ullRsr1M++;
233 if(byRSR & RSR_CRCOK) {
234 pStatistic->CustomStat.ullRsr1MCRCOk++;
236 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" 1M: ALL[%d], OK[%d]:[%02x]\n", (int)pStatistic->CustomStat.ullRsr1M, (int)pStatistic->CustomStat.ullRsr1MCRCOk, byRSR);
238 else if(byRxRate==12){
239 pStatistic->CustomStat.ullRsr6M++;
240 if(byRSR & RSR_CRCOK) {
241 pStatistic->CustomStat.ullRsr6MCRCOk++;
243 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" 6M: ALL[%d], OK[%d]\n", (int)pStatistic->CustomStat.ullRsr6M, (int)pStatistic->CustomStat.ullRsr6MCRCOk);
245 else if(byRxRate==18){
246 pStatistic->CustomStat.ullRsr9M++;
247 if(byRSR & RSR_CRCOK) {
248 pStatistic->CustomStat.ullRsr9MCRCOk++;
250 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" 9M: ALL[%d], OK[%d]\n", (int)pStatistic->CustomStat.ullRsr9M, (int)pStatistic->CustomStat.ullRsr9MCRCOk);
252 else if(byRxRate==24){
253 pStatistic->CustomStat.ullRsr12M++;
254 if(byRSR & RSR_CRCOK) {
255 pStatistic->CustomStat.ullRsr12MCRCOk++;
257 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"12M: ALL[%d], OK[%d]\n", (int)pStatistic->CustomStat.ullRsr12M, (int)pStatistic->CustomStat.ullRsr12MCRCOk);
259 else if(byRxRate==36){
260 pStatistic->CustomStat.ullRsr18M++;
261 if(byRSR & RSR_CRCOK) {
262 pStatistic->CustomStat.ullRsr18MCRCOk++;
264 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"18M: ALL[%d], OK[%d]\n", (int)pStatistic->CustomStat.ullRsr18M, (int)pStatistic->CustomStat.ullRsr18MCRCOk);
266 else if(byRxRate==48){
267 pStatistic->CustomStat.ullRsr24M++;
268 if(byRSR & RSR_CRCOK) {
269 pStatistic->CustomStat.ullRsr24MCRCOk++;
271 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"24M: ALL[%d], OK[%d]\n", (int)pStatistic->CustomStat.ullRsr24M, (int)pStatistic->CustomStat.ullRsr24MCRCOk);
273 else if(byRxRate==72){
274 pStatistic->CustomStat.ullRsr36M++;
275 if(byRSR & RSR_CRCOK) {
276 pStatistic->CustomStat.ullRsr36MCRCOk++;
278 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"36M: ALL[%d], OK[%d]\n", (int)pStatistic->CustomStat.ullRsr36M, (int)pStatistic->CustomStat.ullRsr36MCRCOk);
280 else if(byRxRate==96){
281 pStatistic->CustomStat.ullRsr48M++;
282 if(byRSR & RSR_CRCOK) {
283 pStatistic->CustomStat.ullRsr48MCRCOk++;
285 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"48M: ALL[%d], OK[%d]\n", (int)pStatistic->CustomStat.ullRsr48M, (int)pStatistic->CustomStat.ullRsr48MCRCOk);
287 else if(byRxRate==108){
288 pStatistic->CustomStat.ullRsr54M++;
289 if(byRSR & RSR_CRCOK) {
290 pStatistic->CustomStat.ullRsr54MCRCOk++;
292 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"54M: ALL[%d], OK[%d]\n", (int)pStatistic->CustomStat.ullRsr54M, (int)pStatistic->CustomStat.ullRsr54MCRCOk);
294 else {
295 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Unknown: Total[%d], CRCOK[%d]\n", (int)pStatistic->dwRsrRxPacket+1, (int)pStatistic->dwRsrCRCOk);
298 if (byRSR & RSR_BSSIDOK)
299 pStatistic->dwRsrBSSIDOk++;
301 if (byRSR & RSR_BCNSSIDOK)
302 pStatistic->dwRsrBCNSSIDOk++;
303 if (byRSR & RSR_IVLDLEN) //invalid len (> 2312 byte)
304 pStatistic->dwRsrLENErr++;
305 if (byRSR & RSR_IVLDTYP) //invalid packet type
306 pStatistic->dwRsrTYPErr++;
307 if (byRSR & (RSR_IVLDTYP | RSR_IVLDLEN))
308 pStatistic->dwRsrErr++;
310 if (byNewRSR & NEWRSR_DECRYPTOK)
311 pStatistic->dwNewRsrDECRYPTOK++;
312 if (byNewRSR & NEWRSR_CFPIND)
313 pStatistic->dwNewRsrCFP++;
314 if (byNewRSR & NEWRSR_HWUTSF)
315 pStatistic->dwNewRsrUTSF++;
316 if (byNewRSR & NEWRSR_BCNHITAID)
317 pStatistic->dwNewRsrHITAID++;
318 if (byNewRSR & NEWRSR_BCNHITAID0)
319 pStatistic->dwNewRsrHITAID0++;
321 // increase rx packet count
322 pStatistic->dwRsrRxPacket++;
323 pStatistic->dwRsrRxOctet += cbFrameLength;
326 if (IS_TYPE_DATA(pbyBuffer)) {
327 pStatistic->dwRsrRxData++;
328 } else if (IS_TYPE_MGMT(pbyBuffer)){
329 pStatistic->dwRsrRxManage++;
330 } else if (IS_TYPE_CONTROL(pbyBuffer)){
331 pStatistic->dwRsrRxControl++;
334 if (byRSR & RSR_ADDRBROAD)
335 pStatistic->dwRsrBroadcast++;
336 else if (byRSR & RSR_ADDRMULTI)
337 pStatistic->dwRsrMulticast++;
338 else
339 pStatistic->dwRsrDirected++;
341 if (WLAN_GET_FC_MOREFRAG(pHeader->wFrameCtl))
342 pStatistic->dwRsrRxFragment++;
344 if (cbFrameLength < ETH_ZLEN + 4) {
345 pStatistic->dwRsrRunt++;
347 else if (cbFrameLength == ETH_ZLEN + 4) {
348 pStatistic->dwRsrRxFrmLen64++;
350 else if ((65 <= cbFrameLength) && (cbFrameLength <= 127)) {
351 pStatistic->dwRsrRxFrmLen65_127++;
353 else if ((128 <= cbFrameLength) && (cbFrameLength <= 255)) {
354 pStatistic->dwRsrRxFrmLen128_255++;
356 else if ((256 <= cbFrameLength) && (cbFrameLength <= 511)) {
357 pStatistic->dwRsrRxFrmLen256_511++;
359 else if ((512 <= cbFrameLength) && (cbFrameLength <= 1023)) {
360 pStatistic->dwRsrRxFrmLen512_1023++;
362 else if ((1024 <= cbFrameLength) && (cbFrameLength <= ETH_FRAME_LEN + 4)) {
363 pStatistic->dwRsrRxFrmLen1024_1518++;
364 } else if (cbFrameLength > ETH_FRAME_LEN + 4) {
365 pStatistic->dwRsrLong++;
373 * Description: Update Rx Statistic Counter and copy Rx buffer
375 * Parameters:
376 * In:
377 * pStatistic - Pointer to Statistic Counter Data Structure
378 * byRSR - Rx Status
379 * byNewRSR - Rx Status
380 * pbyBuffer - Rx Buffer
381 * cbFrameLength - Rx Length
382 * Out:
383 * none
385 * Return Value: none
389 void
390 STAvUpdateRDStatCounterEx (
391 PSStatCounter pStatistic,
392 unsigned char byRSR,
393 unsigned char byNewRSR,
394 unsigned char byRxRate,
395 unsigned char *pbyBuffer,
396 unsigned int cbFrameLength
399 STAvUpdateRDStatCounter(
400 pStatistic,
401 byRSR,
402 byNewRSR,
403 byRxRate,
404 pbyBuffer,
405 cbFrameLength
408 // rx length
409 pStatistic->dwCntRxFrmLength = cbFrameLength;
410 // rx pattern, we just see 10 bytes for sample
411 memcpy(pStatistic->abyCntRxPattern, (unsigned char *)pbyBuffer, 10);
416 * Description: Update Tx Statistic Counter
418 * Parameters:
419 * In:
420 * pStatistic - Pointer to Statistic Counter Data Structure
421 * byTSR0 - Tx Status
422 * byTSR1 - Tx Status
423 * pbyBuffer - Tx Buffer
424 * cbFrameLength - Tx Length
425 * uIdx - Index of Tx DMA
426 * Out:
427 * none
429 * Return Value: none
432 void
433 STAvUpdateTDStatCounter (
434 PSStatCounter pStatistic,
435 unsigned char byTSR0,
436 unsigned char byTSR1,
437 unsigned char *pbyBuffer,
438 unsigned int cbFrameLength,
439 unsigned int uIdx
442 PWLAN_80211HDR_A4 pHeader;
443 unsigned char *pbyDestAddr;
444 unsigned char byTSR0_NCR = byTSR0 & TSR0_NCR;
448 pHeader = (PWLAN_80211HDR_A4) pbyBuffer;
449 if (WLAN_GET_FC_TODS(pHeader->wFrameCtl) == 0) {
450 pbyDestAddr = &(pHeader->abyAddr1[0]);
452 else {
453 pbyDestAddr = &(pHeader->abyAddr3[0]);
455 // increase tx packet count
456 pStatistic->dwTsrTxPacket[uIdx]++;
457 pStatistic->dwTsrTxOctet[uIdx] += cbFrameLength;
459 if (byTSR0_NCR != 0) {
460 pStatistic->dwTsrRetry[uIdx]++;
461 pStatistic->dwTsrTotalRetry[uIdx] += byTSR0_NCR;
463 if (byTSR0_NCR == 1)
464 pStatistic->dwTsrOnceRetry[uIdx]++;
465 else
466 pStatistic->dwTsrMoreThanOnceRetry[uIdx]++;
469 if ((byTSR1&(TSR1_TERR|TSR1_RETRYTMO|TSR1_TMO|ACK_DATA)) == 0) {
470 pStatistic->ullTsrOK[uIdx]++;
471 pStatistic->CustomStat.ullTsrAllOK =
472 (pStatistic->ullTsrOK[TYPE_AC0DMA] + pStatistic->ullTsrOK[TYPE_TXDMA0]);
473 // update counters in case that successful transmit
474 if (is_broadcast_ether_addr(pbyDestAddr)) {
475 pStatistic->ullTxBroadcastFrames[uIdx]++;
476 pStatistic->ullTxBroadcastBytes[uIdx] += (unsigned long long) cbFrameLength;
478 else if (is_multicast_ether_addr(pbyDestAddr)) {
479 pStatistic->ullTxMulticastFrames[uIdx]++;
480 pStatistic->ullTxMulticastBytes[uIdx] += (unsigned long long) cbFrameLength;
482 else {
483 pStatistic->ullTxDirectedFrames[uIdx]++;
484 pStatistic->ullTxDirectedBytes[uIdx] += (unsigned long long) cbFrameLength;
487 else {
488 if (byTSR1 & TSR1_TERR)
489 pStatistic->dwTsrErr[uIdx]++;
490 if (byTSR1 & TSR1_RETRYTMO)
491 pStatistic->dwTsrRetryTimeout[uIdx]++;
492 if (byTSR1 & TSR1_TMO)
493 pStatistic->dwTsrTransmitTimeout[uIdx]++;
494 if (byTSR1 & ACK_DATA)
495 pStatistic->dwTsrACKData[uIdx]++;
498 if (is_broadcast_ether_addr(pbyDestAddr))
499 pStatistic->dwTsrBroadcast[uIdx]++;
500 else if (is_multicast_ether_addr(pbyDestAddr))
501 pStatistic->dwTsrMulticast[uIdx]++;
502 else
503 pStatistic->dwTsrDirected[uIdx]++;
509 * Description: Update Tx Statistic Counter and copy Tx buffer
511 * Parameters:
512 * In:
513 * pStatistic - Pointer to Statistic Counter Data Structure
514 * pbyBuffer - Tx Buffer
515 * cbFrameLength - Tx Length
516 * Out:
517 * none
519 * Return Value: none
522 void
523 STAvUpdateTDStatCounterEx (
524 PSStatCounter pStatistic,
525 unsigned char *pbyBuffer,
526 unsigned long cbFrameLength
529 unsigned int uPktLength;
531 uPktLength = (unsigned int)cbFrameLength;
533 // tx length
534 pStatistic->dwCntTxBufLength = uPktLength;
535 // tx pattern, we just see 16 bytes for sample
536 memcpy(pStatistic->abyCntTxPattern, pbyBuffer, 16);
541 * Description: Update 802.11 mib counter
543 * Parameters:
544 * In:
545 * p802_11Counter - Pointer to 802.11 mib counter
546 * pStatistic - Pointer to Statistic Counter Data Structure
547 * dwCounter - hardware counter for 802.11 mib
548 * Out:
549 * none
551 * Return Value: none
554 void
555 STAvUpdate802_11Counter(
556 PSDot11Counters p802_11Counter,
557 PSStatCounter pStatistic,
558 unsigned long dwCounter
561 //p802_11Counter->TransmittedFragmentCount
562 p802_11Counter->MulticastTransmittedFrameCount = (unsigned long long) (pStatistic->dwTsrBroadcast[TYPE_AC0DMA] +
563 pStatistic->dwTsrBroadcast[TYPE_TXDMA0] +
564 pStatistic->dwTsrMulticast[TYPE_AC0DMA] +
565 pStatistic->dwTsrMulticast[TYPE_TXDMA0]);
566 p802_11Counter->FailedCount = (unsigned long long) (pStatistic->dwTsrErr[TYPE_AC0DMA] + pStatistic->dwTsrErr[TYPE_TXDMA0]);
567 p802_11Counter->RetryCount = (unsigned long long) (pStatistic->dwTsrRetry[TYPE_AC0DMA] + pStatistic->dwTsrRetry[TYPE_TXDMA0]);
568 p802_11Counter->MultipleRetryCount = (unsigned long long) (pStatistic->dwTsrMoreThanOnceRetry[TYPE_AC0DMA] +
569 pStatistic->dwTsrMoreThanOnceRetry[TYPE_TXDMA0]);
570 //p802_11Counter->FrameDuplicateCount
571 p802_11Counter->RTSSuccessCount += (unsigned long long) (dwCounter & 0x000000ff);
572 p802_11Counter->RTSFailureCount += (unsigned long long) ((dwCounter & 0x0000ff00) >> 8);
573 p802_11Counter->ACKFailureCount += (unsigned long long) ((dwCounter & 0x00ff0000) >> 16);
574 p802_11Counter->FCSErrorCount += (unsigned long long) ((dwCounter & 0xff000000) >> 24);
575 //p802_11Counter->ReceivedFragmentCount
576 p802_11Counter->MulticastReceivedFrameCount = (unsigned long long) (pStatistic->dwRsrBroadcast +
577 pStatistic->dwRsrMulticast);
581 * Description: Clear 802.11 mib counter
583 * Parameters:
584 * In:
585 * p802_11Counter - Pointer to 802.11 mib counter
586 * Out:
587 * none
589 * Return Value: none
592 void
593 STAvClear802_11Counter(PSDot11Counters p802_11Counter)
595 // set memory to zero
596 memset(p802_11Counter, 0, sizeof(SDot11Counters));