Merge tag 'md-3.6' of git://neil.brown.name/md
[deliverable/linux.git] / drivers / staging / vt6655 / mib.c
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 */
73 void STAvClearAllCounter (PSStatCounter pStatistic)
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 */
179 void STAvUpdateRDStatCounter (PSStatCounter pStatistic,
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 that 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
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
397 )
398 {
399 STAvUpdateRDStatCounter(
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
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
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
523 STAvUpdateTDStatCounterEx (
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
555 STAvUpdate802_11Counter(
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
593 STAvClear802_11Counter(PSDot11Counters p802_11Counter)
594 {
595 // set memory to zero
596 memset(p802_11Counter, 0, sizeof(SDot11Counters));
597 }
This page took 0.045671 seconds and 5 git commands to generate.