linux/drivers/staging/vt6656/mib.c
<<
>>
Prefs
   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 -------------------------*/
  48static 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 */
  73void 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 */
  93void STAvUpdateIsrStatCounter (PSStatCounter pStatistic, BYTE byIsr0, BYTE byIsr1)
  94{
  95    /**********************/
  96    /* ABNORMAL interrupt */
  97    /**********************/
  98    // not any IMR bit invoke irq
  99    if (byIsr0 == 0) {
 100        pStatistic->ISRStat.dwIsrUnknown++;
 101        return;
 102    }
 103
 104
 105    if (byIsr0 & ISR_ACTX)              // ISR, bit0
 106        pStatistic->ISRStat.dwIsrTx0OK++;           // TXDMA0 successful
 107
 108    if (byIsr0 & ISR_BNTX)              // ISR, bit2
 109        pStatistic->ISRStat.dwIsrBeaconTxOK++;      // BeaconTx successful
 110
 111    if (byIsr0 & ISR_RXDMA0)            // ISR, bit3
 112        pStatistic->ISRStat.dwIsrRx0OK++;           // Rx0 successful
 113
 114    if (byIsr0 & ISR_TBTT)              // ISR, bit4
 115        pStatistic->ISRStat.dwIsrTBTTInt++;         // TBTT successful
 116
 117    if (byIsr0 & ISR_SOFTTIMER)         // ISR, bit6
 118        pStatistic->ISRStat.dwIsrSTIMERInt++;
 119
 120    if (byIsr0 & ISR_WATCHDOG)          // ISR, bit7
 121        pStatistic->ISRStat.dwIsrWatchDog++;
 122
 123
 124    if (byIsr1 & ISR_FETALERR)              // ISR, bit8
 125        pStatistic->ISRStat.dwIsrUnrecoverableError++;
 126
 127    if (byIsr1 & ISR_SOFTINT)               // ISR, bit9
 128        pStatistic->ISRStat.dwIsrSoftInterrupt++;       // software interrupt
 129
 130    if (byIsr1 & ISR_MIBNEARFULL)           // ISR, bit10
 131        pStatistic->ISRStat.dwIsrMIBNearfull++;
 132
 133    if (byIsr1 & ISR_RXNOBUF)               // ISR, bit11
 134        pStatistic->ISRStat.dwIsrRxNoBuf++;             // Rx No Buff
 135
 136}
 137
 138
 139/*
 140 * Description: Update Rx Statistic Counter
 141 *
 142 * Parameters:
 143 *  In:
 144 *      pStatistic      - Pointer to Statistic Counter Data Structure
 145 *      byRSR           - Rx Status
 146 *      byNewRSR        - Rx Status
 147 *      pbyBuffer       - Rx Buffer
 148 *      cbFrameLength   - Rx Length
 149 *  Out:
 150 *      none
 151 *
 152 * Return Value: none
 153 *
 154 */
 155void STAvUpdateRDStatCounter(PSStatCounter pStatistic,
 156                             BYTE byRSR, BYTE byNewRSR,
 157                             BYTE byRxSts, BYTE byRxRate,
 158                             PBYTE pbyBuffer, unsigned int cbFrameLength)
 159{
 160        /* need change */
 161        PS802_11Header pHeader = (PS802_11Header)pbyBuffer;
 162
 163        if (byRSR & RSR_ADDROK)
 164                pStatistic->dwRsrADDROk++;
 165        if (byRSR & RSR_CRCOK) {
 166                pStatistic->dwRsrCRCOk++;
 167                pStatistic->ullRsrOK++;
 168
 169                if (cbFrameLength >= ETH_ALEN) {
 170                        /* update counters in case of successful transmission */
 171            if (byRSR & RSR_ADDRBROAD) {
 172                pStatistic->ullRxBroadcastFrames++;
 173                pStatistic->ullRxBroadcastBytes +=
 174                  (unsigned long long) cbFrameLength;
 175            }
 176            else if (byRSR & RSR_ADDRMULTI) {
 177                pStatistic->ullRxMulticastFrames++;
 178                pStatistic->ullRxMulticastBytes +=
 179                  (unsigned long long) cbFrameLength;
 180            }
 181            else {
 182                pStatistic->ullRxDirectedFrames++;
 183                pStatistic->ullRxDirectedBytes +=
 184                  (unsigned long long) cbFrameLength;
 185            }
 186        }
 187    }
 188
 189    if(byRxRate==22) {
 190        pStatistic->CustomStat.ullRsr11M++;
 191        if(byRSR & RSR_CRCOK) {
 192            pStatistic->CustomStat.ullRsr11MCRCOk++;
 193        }
 194        DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "11M: ALL[%d], OK[%d]:[%02x]\n",
 195                (signed int) pStatistic->CustomStat.ullRsr11M,
 196                (signed int) pStatistic->CustomStat.ullRsr11MCRCOk, byRSR);
 197    }
 198    else if(byRxRate==11) {
 199        pStatistic->CustomStat.ullRsr5M++;
 200        if(byRSR & RSR_CRCOK) {
 201            pStatistic->CustomStat.ullRsr5MCRCOk++;
 202        }
 203        DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " 5M: ALL[%d], OK[%d]:[%02x]\n",
 204                (signed int) pStatistic->CustomStat.ullRsr5M,
 205                (signed int) pStatistic->CustomStat.ullRsr5MCRCOk, byRSR);
 206    }
 207    else if(byRxRate==4) {
 208        pStatistic->CustomStat.ullRsr2M++;
 209        if(byRSR & RSR_CRCOK) {
 210            pStatistic->CustomStat.ullRsr2MCRCOk++;
 211        }
 212        DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " 2M: ALL[%d], OK[%d]:[%02x]\n",
 213                (signed int) pStatistic->CustomStat.ullRsr2M,
 214                (signed int) pStatistic->CustomStat.ullRsr2MCRCOk, byRSR);
 215    }
 216    else if(byRxRate==2){
 217        pStatistic->CustomStat.ullRsr1M++;
 218        if(byRSR & RSR_CRCOK) {
 219            pStatistic->CustomStat.ullRsr1MCRCOk++;
 220        }
 221        DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " 1M: ALL[%d], OK[%d]:[%02x]\n",
 222                (signed int) pStatistic->CustomStat.ullRsr1M,
 223                (signed int) pStatistic->CustomStat.ullRsr1MCRCOk, byRSR);
 224    }
 225    else if(byRxRate==12){
 226        pStatistic->CustomStat.ullRsr6M++;
 227        if(byRSR & RSR_CRCOK) {
 228            pStatistic->CustomStat.ullRsr6MCRCOk++;
 229        }
 230        DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " 6M: ALL[%d], OK[%d]\n",
 231                (signed int) pStatistic->CustomStat.ullRsr6M,
 232                (signed int) pStatistic->CustomStat.ullRsr6MCRCOk);
 233    }
 234    else if(byRxRate==18){
 235        pStatistic->CustomStat.ullRsr9M++;
 236        if(byRSR & RSR_CRCOK) {
 237            pStatistic->CustomStat.ullRsr9MCRCOk++;
 238        }
 239        DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " 9M: ALL[%d], OK[%d]\n",
 240                (signed int) pStatistic->CustomStat.ullRsr9M,
 241                (signed int) pStatistic->CustomStat.ullRsr9MCRCOk);
 242    }
 243    else if(byRxRate==24){
 244        pStatistic->CustomStat.ullRsr12M++;
 245        if(byRSR & RSR_CRCOK) {
 246            pStatistic->CustomStat.ullRsr12MCRCOk++;
 247        }
 248        DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "12M: ALL[%d], OK[%d]\n",
 249                (signed int) pStatistic->CustomStat.ullRsr12M,
 250                (signed int) pStatistic->CustomStat.ullRsr12MCRCOk);
 251    }
 252    else if(byRxRate==36){
 253        pStatistic->CustomStat.ullRsr18M++;
 254        if(byRSR & RSR_CRCOK) {
 255            pStatistic->CustomStat.ullRsr18MCRCOk++;
 256        }
 257        DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "18M: ALL[%d], OK[%d]\n",
 258                (signed int) pStatistic->CustomStat.ullRsr18M,
 259                (signed int) pStatistic->CustomStat.ullRsr18MCRCOk);
 260    }
 261    else if(byRxRate==48){
 262        pStatistic->CustomStat.ullRsr24M++;
 263        if(byRSR & RSR_CRCOK) {
 264            pStatistic->CustomStat.ullRsr24MCRCOk++;
 265        }
 266        DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "24M: ALL[%d], OK[%d]\n",
 267                (signed int) pStatistic->CustomStat.ullRsr24M,
 268                (signed int) pStatistic->CustomStat.ullRsr24MCRCOk);
 269    }
 270    else if(byRxRate==72){
 271        pStatistic->CustomStat.ullRsr36M++;
 272        if(byRSR & RSR_CRCOK) {
 273            pStatistic->CustomStat.ullRsr36MCRCOk++;
 274        }
 275        DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "36M: ALL[%d], OK[%d]\n",
 276                (signed int) pStatistic->CustomStat.ullRsr36M,
 277                (signed int) pStatistic->CustomStat.ullRsr36MCRCOk);
 278    }
 279    else if(byRxRate==96){
 280        pStatistic->CustomStat.ullRsr48M++;
 281        if(byRSR & RSR_CRCOK) {
 282            pStatistic->CustomStat.ullRsr48MCRCOk++;
 283        }
 284        DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "48M: ALL[%d], OK[%d]\n",
 285                (signed int) pStatistic->CustomStat.ullRsr48M,
 286                (signed int) pStatistic->CustomStat.ullRsr48MCRCOk);
 287    }
 288    else if(byRxRate==108){
 289        pStatistic->CustomStat.ullRsr54M++;
 290        if(byRSR & RSR_CRCOK) {
 291            pStatistic->CustomStat.ullRsr54MCRCOk++;
 292        }
 293        DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "54M: ALL[%d], OK[%d]\n",
 294                (signed int) pStatistic->CustomStat.ullRsr54M,
 295                (signed int) pStatistic->CustomStat.ullRsr54MCRCOk);
 296    }
 297    else {
 298            DBG_PRT(MSG_LEVEL_DEBUG,
 299                    KERN_INFO "Unknown: Total[%d], CRCOK[%d]\n",
 300                    (signed int) pStatistic->dwRsrRxPacket+1,
 301                    (signed int)pStatistic->dwRsrCRCOk);
 302    }
 303
 304    if (byRSR & RSR_BSSIDOK)
 305        pStatistic->dwRsrBSSIDOk++;
 306
 307    if (byRSR & RSR_BCNSSIDOK)
 308        pStatistic->dwRsrBCNSSIDOk++;
 309    if (byRSR & RSR_IVLDLEN)  //invalid len (> 2312 byte)
 310        pStatistic->dwRsrLENErr++;
 311    if (byRSR & RSR_IVLDTYP)  //invalid packet type
 312        pStatistic->dwRsrTYPErr++;
 313    if ((byRSR & (RSR_IVLDTYP | RSR_IVLDLEN)) || !(byRSR & RSR_CRCOK))
 314        pStatistic->dwRsrErr++;
 315
 316    if (byNewRSR & NEWRSR_DECRYPTOK)
 317        pStatistic->dwNewRsrDECRYPTOK++;
 318    if (byNewRSR & NEWRSR_CFPIND)
 319        pStatistic->dwNewRsrCFP++;
 320    if (byNewRSR & NEWRSR_HWUTSF)
 321        pStatistic->dwNewRsrUTSF++;
 322    if (byNewRSR & NEWRSR_BCNHITAID)
 323        pStatistic->dwNewRsrHITAID++;
 324    if (byNewRSR & NEWRSR_BCNHITAID0)
 325        pStatistic->dwNewRsrHITAID0++;
 326
 327    // increase rx packet count
 328    pStatistic->dwRsrRxPacket++;
 329    pStatistic->dwRsrRxOctet += cbFrameLength;
 330
 331
 332    if (IS_TYPE_DATA(pbyBuffer)) {
 333        pStatistic->dwRsrRxData++;
 334    } else if (IS_TYPE_MGMT(pbyBuffer)){
 335        pStatistic->dwRsrRxManage++;
 336    } else if (IS_TYPE_CONTROL(pbyBuffer)){
 337        pStatistic->dwRsrRxControl++;
 338    }
 339
 340    if (byRSR & RSR_ADDRBROAD)
 341        pStatistic->dwRsrBroadcast++;
 342    else if (byRSR & RSR_ADDRMULTI)
 343        pStatistic->dwRsrMulticast++;
 344    else
 345        pStatistic->dwRsrDirected++;
 346
 347    if (WLAN_GET_FC_MOREFRAG(pHeader->wFrameCtl))
 348        pStatistic->dwRsrRxFragment++;
 349
 350    if (cbFrameLength < ETH_ZLEN + 4) {
 351        pStatistic->dwRsrRunt++;
 352    } else if (cbFrameLength == ETH_ZLEN + 4) {
 353        pStatistic->dwRsrRxFrmLen64++;
 354    }
 355    else if ((65 <= cbFrameLength) && (cbFrameLength <= 127)) {
 356        pStatistic->dwRsrRxFrmLen65_127++;
 357    }
 358    else if ((128 <= cbFrameLength) && (cbFrameLength <= 255)) {
 359        pStatistic->dwRsrRxFrmLen128_255++;
 360    }
 361    else if ((256 <= cbFrameLength) && (cbFrameLength <= 511)) {
 362        pStatistic->dwRsrRxFrmLen256_511++;
 363    }
 364    else if ((512 <= cbFrameLength) && (cbFrameLength <= 1023)) {
 365        pStatistic->dwRsrRxFrmLen512_1023++;
 366    } else if ((1024 <= cbFrameLength) &&
 367               (cbFrameLength <= ETH_FRAME_LEN + 4)) {
 368        pStatistic->dwRsrRxFrmLen1024_1518++;
 369    } else if (cbFrameLength > ETH_FRAME_LEN + 4) {
 370        pStatistic->dwRsrLong++;
 371    }
 372}
 373
 374/*
 375 * Description: Update Rx Statistic Counter and copy Rx buffer
 376 *
 377 * Parameters:
 378 *  In:
 379 *      pStatistic      - Pointer to Statistic Counter Data Structure
 380 *      byRSR           - Rx Status
 381 *      byNewRSR        - Rx Status
 382 *      pbyBuffer       - Rx Buffer
 383 *      cbFrameLength   - Rx Length
 384 *  Out:
 385 *      none
 386 *
 387 * Return Value: none
 388 *
 389 */
 390
 391void
 392STAvUpdateRDStatCounterEx (
 393    PSStatCounter   pStatistic,
 394    BYTE            byRSR,
 395    BYTE            byNewRSR,
 396    BYTE            byRxSts,
 397    BYTE            byRxRate,
 398    PBYTE           pbyBuffer,
 399    unsigned int            cbFrameLength
 400    )
 401{
 402    STAvUpdateRDStatCounter(
 403                    pStatistic,
 404                    byRSR,
 405                    byNewRSR,
 406                    byRxSts,
 407                    byRxRate,
 408                    pbyBuffer,
 409                    cbFrameLength
 410                    );
 411
 412    // rx length
 413    pStatistic->dwCntRxFrmLength = cbFrameLength;
 414    // rx pattern, we just see 10 bytes for sample
 415    memcpy(pStatistic->abyCntRxPattern, (PBYTE)pbyBuffer, 10);
 416}
 417
 418
 419/*
 420 * Description: Update Tx Statistic Counter
 421 *
 422 * Parameters:
 423 *  In:
 424 *      pStatistic      - Pointer to Statistic Counter Data Structure
 425 *      byTSR0          - Tx Status
 426 *      byTSR1          - Tx Status
 427 *      pbyBuffer       - Tx Buffer
 428 *      cbFrameLength   - Tx Length
 429 *      uIdx            - Index of Tx DMA
 430 *  Out:
 431 *      none
 432 *
 433 * Return Value: none
 434 *
 435 */
 436void
 437STAvUpdateTDStatCounter (
 438    PSStatCounter   pStatistic,
 439    BYTE            byPktNum,
 440    BYTE            byRate,
 441    BYTE            byTSR
 442    )
 443{
 444    BYTE    byRetyCnt;
 445    // increase tx packet count
 446    pStatistic->dwTsrTxPacket++;
 447
 448    byRetyCnt = (byTSR & 0xF0) >> 4;
 449    if (byRetyCnt != 0) {
 450        pStatistic->dwTsrRetry++;
 451        pStatistic->dwTsrTotalRetry += byRetyCnt;
 452        pStatistic->dwTxFail[byRate]+= byRetyCnt;
 453        pStatistic->dwTxFail[MAX_RATE] += byRetyCnt;
 454
 455        if ( byRetyCnt == 0x1)
 456            pStatistic->dwTsrOnceRetry++;
 457        else
 458            pStatistic->dwTsrMoreThanOnceRetry++;
 459
 460        if (byRetyCnt <= 8)
 461            pStatistic->dwTxRetryCount[byRetyCnt-1]++;
 462
 463    }
 464    if ( !(byTSR & (TSR_TMO | TSR_RETRYTMO))) {
 465
 466   if (byRetyCnt < 2)
 467        pStatistic->TxNoRetryOkCount ++;
 468   else
 469        pStatistic->TxRetryOkCount ++;
 470
 471        pStatistic->ullTsrOK++;
 472        pStatistic->CustomStat.ullTsrAllOK++;
 473        // update counters in case that successful transmit
 474        pStatistic->dwTxOk[byRate]++;
 475        pStatistic->dwTxOk[MAX_RATE]++;
 476
 477        if ( pStatistic->abyTxPktInfo[byPktNum].byBroadMultiUni == TX_PKT_BROAD )  {
 478            pStatistic->ullTxBroadcastFrames++;
 479            pStatistic->ullTxBroadcastBytes += pStatistic->abyTxPktInfo[byPktNum].wLength;
 480        } else if ( pStatistic->abyTxPktInfo[byPktNum].byBroadMultiUni == TX_PKT_MULTI ) {
 481            pStatistic->ullTxMulticastFrames++;
 482            pStatistic->ullTxMulticastBytes += pStatistic->abyTxPktInfo[byPktNum].wLength;
 483        } else if ( pStatistic->abyTxPktInfo[byPktNum].byBroadMultiUni == TX_PKT_UNI ) {
 484            pStatistic->ullTxDirectedFrames++;
 485            pStatistic->ullTxDirectedBytes += pStatistic->abyTxPktInfo[byPktNum].wLength;
 486        }
 487    }
 488    else {
 489
 490        pStatistic->TxFailCount ++;
 491
 492        pStatistic->dwTsrErr++;
 493        if (byTSR & TSR_RETRYTMO)
 494            pStatistic->dwTsrRetryTimeout++;
 495        if (byTSR & TSR_TMO)
 496            pStatistic->dwTsrTransmitTimeout++;
 497    }
 498
 499    if ( pStatistic->abyTxPktInfo[byPktNum].byBroadMultiUni == TX_PKT_BROAD )  {
 500        pStatistic->dwTsrBroadcast++;
 501    } else if ( pStatistic->abyTxPktInfo[byPktNum].byBroadMultiUni == TX_PKT_MULTI ) {
 502        pStatistic->dwTsrMulticast++;
 503    } else if ( pStatistic->abyTxPktInfo[byPktNum].byBroadMultiUni == TX_PKT_UNI ) {
 504        pStatistic->dwTsrDirected++;
 505    }
 506}
 507
 508
 509
 510/*
 511 * Description: Update 802.11 mib counter
 512 *
 513 * Parameters:
 514 *  In:
 515 *      p802_11Counter  - Pointer to 802.11 mib counter
 516 *      pStatistic      - Pointer to Statistic Counter Data Structure
 517 *      dwCounter       - hardware counter for 802.11 mib
 518 *  Out:
 519 *      none
 520 *
 521 * Return Value: none
 522 *
 523 */
 524void
 525STAvUpdate802_11Counter(
 526    PSDot11Counters         p802_11Counter,
 527    PSStatCounter           pStatistic,
 528    BYTE                    byRTSSuccess,
 529    BYTE                    byRTSFail,
 530    BYTE                    byACKFail,
 531    BYTE                    byFCSErr
 532    )
 533{
 534    //p802_11Counter->TransmittedFragmentCount
 535    p802_11Counter->MulticastTransmittedFrameCount =
 536      (unsigned long long) (pStatistic->dwTsrBroadcast +
 537                            pStatistic->dwTsrMulticast);
 538    p802_11Counter->FailedCount = (unsigned long long) (pStatistic->dwTsrErr);
 539    p802_11Counter->RetryCount = (unsigned long long) (pStatistic->dwTsrRetry);
 540    p802_11Counter->MultipleRetryCount =
 541      (unsigned long long) (pStatistic->dwTsrMoreThanOnceRetry);
 542    //p802_11Counter->FrameDuplicateCount
 543    p802_11Counter->RTSSuccessCount += (unsigned long long) byRTSSuccess;
 544    p802_11Counter->RTSFailureCount += (unsigned long long) byRTSFail;
 545    p802_11Counter->ACKFailureCount += (unsigned long long) byACKFail;
 546    p802_11Counter->FCSErrorCount +=   (unsigned long long) byFCSErr;
 547    //p802_11Counter->ReceivedFragmentCount
 548    p802_11Counter->MulticastReceivedFrameCount =
 549      (unsigned long long) (pStatistic->dwRsrBroadcast +
 550                            pStatistic->dwRsrMulticast);
 551}
 552
 553/*
 554 * Description: Clear 802.11 mib counter
 555 *
 556 * Parameters:
 557 *  In:
 558 *      p802_11Counter  - Pointer to 802.11 mib counter
 559 *  Out:
 560 *      none
 561 *
 562 * Return Value: none
 563 *
 564 */
 565void
 566STAvClear802_11Counter(PSDot11Counters p802_11Counter)
 567{
 568    // set memory to zero
 569        memset(p802_11Counter, 0, sizeof(SDot11Counters));
 570}
 571
 572/*
 573 * Description: Clear 802.11 mib counter
 574 *
 575 * Parameters:
 576 *  In:
 577 *      pUsbCounter  - Pointer to USB mib counter
 578 *      ntStatus - URB status
 579 *  Out:
 580 *      none
 581 *
 582 * Return Value: none
 583 *
 584 */
 585
 586void STAvUpdateUSBCounter(PSUSBCounter pUsbCounter, int ntStatus)
 587{
 588
 589//    if ( ntStatus == USBD_STATUS_CRC ) {
 590        pUsbCounter->dwCrc++;
 591//    }
 592
 593}
 594