Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
mib.c
Go to the documentation of this file.
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  * File: mib.c
20  *
21  * Purpose: Implement MIB Data Structure
22  *
23  * Author: Tevin Chen
24  *
25  * Date: May 21, 1996
26  *
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
35  *
36  * Revision History:
37  *
38  */
39 
40 #include "upc.h"
41 #include "mac.h"
42 #include "tether.h"
43 #include "mib.h"
44 #include "wctl.h"
45 #include "baseband.h"
46 
47 /*--------------------- Static Definitions -------------------------*/
48 static int msglevel =MSG_LEVEL_INFO;
49 /*--------------------- Static Classes ----------------------------*/
50 
51 /*--------------------- Static Variables --------------------------*/
52 
53 /*--------------------- Static Functions --------------------------*/
54 
55 /*--------------------- Export Variables --------------------------*/
56 
57 /*--------------------- Export Functions --------------------------*/
58 
59 
60 
61 /*
62  * Description: Clear All Statistic Counter
63  *
64  * Parameters:
65  * In:
66  * pStatistic - Pointer to Statistic Counter Data Structure
67  * Out:
68  * none
69  *
70  * Return Value: none
71  *
72  */
74 {
75  // set memory to zero
76  memset(pStatistic, 0, sizeof(SStatCounter));
77 }
78 
79 
80 /*
81  * Description: Update Isr Statistic Counter
82  *
83  * Parameters:
84  * In:
85  * pStatistic - Pointer to Statistic Counter Data Structure
86  * wisr - Interrupt status
87  * Out:
88  * none
89  *
90  * Return Value: none
91  *
92  */
93 void STAvUpdateIsrStatCounter (PSStatCounter pStatistic, unsigned long dwIsr)
94 {
95  /**********************/
96  /* ABNORMAL interrupt */
97  /**********************/
98  // not any IMR bit invoke irq
99 
100  if (dwIsr == 0) {
101  pStatistic->ISRStat.dwIsrUnknown++;
102  return;
103  }
104 
105 //Added by Kyle
106  if (dwIsr & ISR_TXDMA0) // ISR, bit0
107  pStatistic->ISRStat.dwIsrTx0OK++; // TXDMA0 successful
108 
109  if (dwIsr & ISR_AC0DMA) // ISR, bit1
110  pStatistic->ISRStat.dwIsrAC0TxOK++; // AC0DMA successful
111 
112  if (dwIsr & ISR_BNTX) // ISR, bit2
113  pStatistic->ISRStat.dwIsrBeaconTxOK++; // BeaconTx successful
114 
115  if (dwIsr & ISR_RXDMA0) // ISR, bit3
116  pStatistic->ISRStat.dwIsrRx0OK++; // Rx0 successful
117 
118  if (dwIsr & ISR_TBTT) // ISR, bit4
119  pStatistic->ISRStat.dwIsrTBTTInt++; // TBTT successful
120 
121  if (dwIsr & ISR_SOFTTIMER) // ISR, bit6
122  pStatistic->ISRStat.dwIsrSTIMERInt++;
123 
124  if (dwIsr & ISR_WATCHDOG) // ISR, bit7
125  pStatistic->ISRStat.dwIsrWatchDog++;
126 
127  if (dwIsr & ISR_FETALERR) // ISR, bit8
128  pStatistic->ISRStat.dwIsrUnrecoverableError++;
129 
130  if (dwIsr & ISR_SOFTINT) // ISR, bit9
131  pStatistic->ISRStat.dwIsrSoftInterrupt++; // software interrupt
132 
133  if (dwIsr & ISR_MIBNEARFULL) // ISR, bit10
134  pStatistic->ISRStat.dwIsrMIBNearfull++;
135 
136  if (dwIsr & ISR_RXNOBUF) // ISR, bit11
137  pStatistic->ISRStat.dwIsrRxNoBuf++; // Rx No Buff
138 
139  if (dwIsr & ISR_RXDMA1) // ISR, bit12
140  pStatistic->ISRStat.dwIsrRx1OK++; // Rx1 successful
141 
142 // if (dwIsr & ISR_ATIMTX) // ISR, bit13
143 // pStatistic->ISRStat.dwIsrATIMTxOK++; // ATIMTX successful
144 
145 // if (dwIsr & ISR_SYNCTX) // ISR, bit14
146 // pStatistic->ISRStat.dwIsrSYNCTxOK++; // SYNCTX successful
147 
148 // if (dwIsr & ISR_CFPEND) // ISR, bit18
149 // pStatistic->ISRStat.dwIsrCFPEnd++;
150 
151 // if (dwIsr & ISR_ATIMEND) // ISR, bit19
152 // pStatistic->ISRStat.dwIsrATIMEnd++;
153 
154 // if (dwIsr & ISR_SYNCFLUSHOK) // ISR, bit20
155 // pStatistic->ISRStat.dwIsrSYNCFlushOK++;
156 
157  if (dwIsr & ISR_SOFTTIMER1) // ISR, bit21
158  pStatistic->ISRStat.dwIsrSTIMER1Int++;
159 
160 }
161 
162 
163 /*
164  * Description: Update Rx Statistic Counter
165  *
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
175  *
176  * Return Value: none
177  *
178  */
180  unsigned char byRSR, unsigned char byNewRSR, unsigned char byRxRate,
181  unsigned char *pbyBuffer, unsigned int cbFrameLength)
182 {
183  //need change
184  PS802_11Header pHeader = (PS802_11Header)pbyBuffer;
185 
186  if (byRSR & RSR_ADDROK)
187  pStatistic->dwRsrADDROk++;
188  if (byRSR & RSR_CRCOK) {
189  pStatistic->dwRsrCRCOk++;
190 
191  pStatistic->ullRsrOK++;
192 
193  if (cbFrameLength >= ETH_ALEN) {
194  // update counters in case of successful transmit
195  if (byRSR & RSR_ADDRBROAD) {
196  pStatistic->ullRxBroadcastFrames++;
197  pStatistic->ullRxBroadcastBytes += (unsigned long long) cbFrameLength;
198  }
199  else if (byRSR & RSR_ADDRMULTI) {
200  pStatistic->ullRxMulticastFrames++;
201  pStatistic->ullRxMulticastBytes += (unsigned long long) cbFrameLength;
202  }
203  else {
204  pStatistic->ullRxDirectedFrames++;
205  pStatistic->ullRxDirectedBytes += (unsigned long long) cbFrameLength;
206  }
207  }
208  }
209 
210  if(byRxRate==22) {
211  pStatistic->CustomStat.ullRsr11M++;
212  if(byRSR & RSR_CRCOK) {
213  pStatistic->CustomStat.ullRsr11MCRCOk++;
214  }
215  DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"11M: ALL[%d], OK[%d]:[%02x]\n", (int)pStatistic->CustomStat.ullRsr11M, (int)pStatistic->CustomStat.ullRsr11MCRCOk, byRSR);
216  }
217  else if(byRxRate==11) {
218  pStatistic->CustomStat.ullRsr5M++;
219  if(byRSR & RSR_CRCOK) {
220  pStatistic->CustomStat.ullRsr5MCRCOk++;
221  }
222  DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" 5M: ALL[%d], OK[%d]:[%02x]\n", (int)pStatistic->CustomStat.ullRsr5M, (int)pStatistic->CustomStat.ullRsr5MCRCOk, byRSR);
223  }
224  else if(byRxRate==4) {
225  pStatistic->CustomStat.ullRsr2M++;
226  if(byRSR & RSR_CRCOK) {
227  pStatistic->CustomStat.ullRsr2MCRCOk++;
228  }
229  DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" 2M: ALL[%d], OK[%d]:[%02x]\n", (int)pStatistic->CustomStat.ullRsr2M, (int)pStatistic->CustomStat.ullRsr2MCRCOk, byRSR);
230  }
231  else if(byRxRate==2){
232  pStatistic->CustomStat.ullRsr1M++;
233  if(byRSR & RSR_CRCOK) {
234  pStatistic->CustomStat.ullRsr1MCRCOk++;
235  }
236  DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" 1M: ALL[%d], OK[%d]:[%02x]\n", (int)pStatistic->CustomStat.ullRsr1M, (int)pStatistic->CustomStat.ullRsr1MCRCOk, byRSR);
237  }
238  else if(byRxRate==12){
239  pStatistic->CustomStat.ullRsr6M++;
240  if(byRSR & RSR_CRCOK) {
241  pStatistic->CustomStat.ullRsr6MCRCOk++;
242  }
243  DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" 6M: ALL[%d], OK[%d]\n", (int)pStatistic->CustomStat.ullRsr6M, (int)pStatistic->CustomStat.ullRsr6MCRCOk);
244  }
245  else if(byRxRate==18){
246  pStatistic->CustomStat.ullRsr9M++;
247  if(byRSR & RSR_CRCOK) {
248  pStatistic->CustomStat.ullRsr9MCRCOk++;
249  }
250  DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" 9M: ALL[%d], OK[%d]\n", (int)pStatistic->CustomStat.ullRsr9M, (int)pStatistic->CustomStat.ullRsr9MCRCOk);
251  }
252  else if(byRxRate==24){
253  pStatistic->CustomStat.ullRsr12M++;
254  if(byRSR & RSR_CRCOK) {
255  pStatistic->CustomStat.ullRsr12MCRCOk++;
256  }
257  DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"12M: ALL[%d], OK[%d]\n", (int)pStatistic->CustomStat.ullRsr12M, (int)pStatistic->CustomStat.ullRsr12MCRCOk);
258  }
259  else if(byRxRate==36){
260  pStatistic->CustomStat.ullRsr18M++;
261  if(byRSR & RSR_CRCOK) {
262  pStatistic->CustomStat.ullRsr18MCRCOk++;
263  }
264  DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"18M: ALL[%d], OK[%d]\n", (int)pStatistic->CustomStat.ullRsr18M, (int)pStatistic->CustomStat.ullRsr18MCRCOk);
265  }
266  else if(byRxRate==48){
267  pStatistic->CustomStat.ullRsr24M++;
268  if(byRSR & RSR_CRCOK) {
269  pStatistic->CustomStat.ullRsr24MCRCOk++;
270  }
271  DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"24M: ALL[%d], OK[%d]\n", (int)pStatistic->CustomStat.ullRsr24M, (int)pStatistic->CustomStat.ullRsr24MCRCOk);
272  }
273  else if(byRxRate==72){
274  pStatistic->CustomStat.ullRsr36M++;
275  if(byRSR & RSR_CRCOK) {
276  pStatistic->CustomStat.ullRsr36MCRCOk++;
277  }
278  DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"36M: ALL[%d], OK[%d]\n", (int)pStatistic->CustomStat.ullRsr36M, (int)pStatistic->CustomStat.ullRsr36MCRCOk);
279  }
280  else if(byRxRate==96){
281  pStatistic->CustomStat.ullRsr48M++;
282  if(byRSR & RSR_CRCOK) {
283  pStatistic->CustomStat.ullRsr48MCRCOk++;
284  }
285  DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"48M: ALL[%d], OK[%d]\n", (int)pStatistic->CustomStat.ullRsr48M, (int)pStatistic->CustomStat.ullRsr48MCRCOk);
286  }
287  else if(byRxRate==108){
288  pStatistic->CustomStat.ullRsr54M++;
289  if(byRSR & RSR_CRCOK) {
290  pStatistic->CustomStat.ullRsr54MCRCOk++;
291  }
292  DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"54M: ALL[%d], OK[%d]\n", (int)pStatistic->CustomStat.ullRsr54M, (int)pStatistic->CustomStat.ullRsr54MCRCOk);
293  }
294  else {
295  DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Unknown: Total[%d], CRCOK[%d]\n", (int)pStatistic->dwRsrRxPacket+1, (int)pStatistic->dwRsrCRCOk);
296  }
297 
298  if (byRSR & RSR_BSSIDOK)
299  pStatistic->dwRsrBSSIDOk++;
300 
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++;
309 
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++;
320 
321  // increase rx packet count
322  pStatistic->dwRsrRxPacket++;
323  pStatistic->dwRsrRxOctet += cbFrameLength;
324 
325 
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++;
332  }
333 
334  if (byRSR & RSR_ADDRBROAD)
335  pStatistic->dwRsrBroadcast++;
336  else if (byRSR & RSR_ADDRMULTI)
337  pStatistic->dwRsrMulticast++;
338  else
339  pStatistic->dwRsrDirected++;
340 
341  if (WLAN_GET_FC_MOREFRAG(pHeader->wFrameCtl))
342  pStatistic->dwRsrRxFragment++;
343 
344  if (cbFrameLength < ETH_ZLEN + 4) {
345  pStatistic->dwRsrRunt++;
346  }
347  else if (cbFrameLength == ETH_ZLEN + 4) {
348  pStatistic->dwRsrRxFrmLen64++;
349  }
350  else if ((65 <= cbFrameLength) && (cbFrameLength <= 127)) {
351  pStatistic->dwRsrRxFrmLen65_127++;
352  }
353  else if ((128 <= cbFrameLength) && (cbFrameLength <= 255)) {
354  pStatistic->dwRsrRxFrmLen128_255++;
355  }
356  else if ((256 <= cbFrameLength) && (cbFrameLength <= 511)) {
357  pStatistic->dwRsrRxFrmLen256_511++;
358  }
359  else if ((512 <= cbFrameLength) && (cbFrameLength <= 1023)) {
360  pStatistic->dwRsrRxFrmLen512_1023++;
361  }
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++;
366  }
367 
368 }
369 
370 
371 
372 /*
373  * Description: Update Rx Statistic Counter and copy Rx buffer
374  *
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
384  *
385  * Return Value: none
386  *
387  */
388 
389 void
391  PSStatCounter pStatistic,
392  unsigned char byRSR,
393  unsigned char byNewRSR,
394  unsigned char byRxRate,
395  unsigned char *pbyBuffer,
396  unsigned int cbFrameLength
397  )
398 {
400  pStatistic,
401  byRSR,
402  byNewRSR,
403  byRxRate,
404  pbyBuffer,
405  cbFrameLength
406  );
407 
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);
412 }
413 
414 
415 /*
416  * Description: Update Tx Statistic Counter
417  *
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
428  *
429  * Return Value: none
430  *
431  */
432 void
434  PSStatCounter pStatistic,
435  unsigned char byTSR0,
436  unsigned char byTSR1,
437  unsigned char *pbyBuffer,
438  unsigned int cbFrameLength,
439  unsigned int uIdx
440  )
441 {
442  PWLAN_80211HDR_A4 pHeader;
443  unsigned char *pbyDestAddr;
444  unsigned char byTSR0_NCR = byTSR0 & TSR0_NCR;
445 
446 
447 
448  pHeader = (PWLAN_80211HDR_A4) pbyBuffer;
449  if (WLAN_GET_FC_TODS(pHeader->wFrameCtl) == 0) {
450  pbyDestAddr = &(pHeader->abyAddr1[0]);
451  }
452  else {
453  pbyDestAddr = &(pHeader->abyAddr3[0]);
454  }
455  // increase tx packet count
456  pStatistic->dwTsrTxPacket[uIdx]++;
457  pStatistic->dwTsrTxOctet[uIdx] += cbFrameLength;
458 
459  if (byTSR0_NCR != 0) {
460  pStatistic->dwTsrRetry[uIdx]++;
461  pStatistic->dwTsrTotalRetry[uIdx] += byTSR0_NCR;
462 
463  if (byTSR0_NCR == 1)
464  pStatistic->dwTsrOnceRetry[uIdx]++;
465  else
466  pStatistic->dwTsrMoreThanOnceRetry[uIdx]++;
467  }
468 
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;
477  }
478  else if (is_multicast_ether_addr(pbyDestAddr)) {
479  pStatistic->ullTxMulticastFrames[uIdx]++;
480  pStatistic->ullTxMulticastBytes[uIdx] += (unsigned long long) cbFrameLength;
481  }
482  else {
483  pStatistic->ullTxDirectedFrames[uIdx]++;
484  pStatistic->ullTxDirectedBytes[uIdx] += (unsigned long long) cbFrameLength;
485  }
486  }
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]++;
496  }
497 
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]++;
504 
505 }
506 
507 
508 /*
509  * Description: Update Tx Statistic Counter and copy Tx buffer
510  *
511  * Parameters:
512  * In:
513  * pStatistic - Pointer to Statistic Counter Data Structure
514  * pbyBuffer - Tx Buffer
515  * cbFrameLength - Tx Length
516  * Out:
517  * none
518  *
519  * Return Value: none
520  *
521  */
522 void
524  PSStatCounter pStatistic,
525  unsigned char *pbyBuffer,
526  unsigned long cbFrameLength
527  )
528 {
529  unsigned int uPktLength;
530 
531  uPktLength = (unsigned int)cbFrameLength;
532 
533  // tx length
534  pStatistic->dwCntTxBufLength = uPktLength;
535  // tx pattern, we just see 16 bytes for sample
536  memcpy(pStatistic->abyCntTxPattern, pbyBuffer, 16);
537 }
538 
539 
540 /*
541  * Description: Update 802.11 mib counter
542  *
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
550  *
551  * Return Value: none
552  *
553  */
554 void
556  PSDot11Counters p802_11Counter,
557  PSStatCounter pStatistic,
558  unsigned long dwCounter
559  )
560 {
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);
578 }
579 
580 /*
581  * Description: Clear 802.11 mib counter
582  *
583  * Parameters:
584  * In:
585  * p802_11Counter - Pointer to 802.11 mib counter
586  * Out:
587  * none
588  *
589  * Return Value: none
590  *
591  */
592 void
594 {
595  // set memory to zero
596  memset(p802_11Counter, 0, sizeof(SDot11Counters));
597 }