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 * STAvUpdateIstStatCounter - Update ISR statistic counter 29 * STAvUpdate802_11Counter - Update 802.11 mib counter 30 * 31 * Revision History: 32 * 33 */ 34 35#include "mac.h" 36#include "mib.h" 37 38/*--------------------- Static Classes ----------------------------*/ 39 40/*--------------------- Static Variables --------------------------*/ 41 42/*--------------------- Static Functions --------------------------*/ 43 44/*--------------------- Export Variables --------------------------*/ 45 46/*--------------------- Export Functions --------------------------*/ 47 48/* 49 * Description: Update Isr Statistic Counter 50 * 51 * Parameters: 52 * In: 53 * pStatistic - Pointer to Statistic Counter Data Structure 54 * wisr - Interrupt status 55 * Out: 56 * none 57 * 58 * Return Value: none 59 * 60 */ 61void STAvUpdateIsrStatCounter(PSStatCounter pStatistic, unsigned long dwIsr) 62{ 63 /**********************/ 64 /* ABNORMAL interrupt */ 65 /**********************/ 66 /* not any IMR bit invoke irq */ 67 68 if (dwIsr == 0) { 69 pStatistic->ISRStat.dwIsrUnknown++; 70 return; 71 } 72 73/* Added by Kyle */ 74 if (dwIsr & ISR_TXDMA0) /* ISR, bit0 */ 75 pStatistic->ISRStat.dwIsrTx0OK++; /* TXDMA0 successful */ 76 77 if (dwIsr & ISR_AC0DMA) /* ISR, bit1 */ 78 pStatistic->ISRStat.dwIsrAC0TxOK++; /* AC0DMA successful */ 79 80 if (dwIsr & ISR_BNTX) /* ISR, bit2 */ 81 pStatistic->ISRStat.dwIsrBeaconTxOK++; /* BeaconTx successful */ 82 83 if (dwIsr & ISR_RXDMA0) /* ISR, bit3 */ 84 pStatistic->ISRStat.dwIsrRx0OK++; /* Rx0 successful */ 85 86 if (dwIsr & ISR_TBTT) /* ISR, bit4 */ 87 pStatistic->ISRStat.dwIsrTBTTInt++; /* TBTT successful */ 88 89 if (dwIsr & ISR_SOFTTIMER) /* ISR, bit6 */ 90 pStatistic->ISRStat.dwIsrSTIMERInt++; 91 92 if (dwIsr & ISR_WATCHDOG) /* ISR, bit7 */ 93 pStatistic->ISRStat.dwIsrWatchDog++; 94 95 if (dwIsr & ISR_FETALERR) /* ISR, bit8 */ 96 pStatistic->ISRStat.dwIsrUnrecoverableError++; 97 98 if (dwIsr & ISR_SOFTINT) /* ISR, bit9 */ 99 pStatistic->ISRStat.dwIsrSoftInterrupt++; /* software interrupt */ 100 101 if (dwIsr & ISR_MIBNEARFULL) /* ISR, bit10 */ 102 pStatistic->ISRStat.dwIsrMIBNearfull++; 103 104 if (dwIsr & ISR_RXNOBUF) /* ISR, bit11 */ 105 pStatistic->ISRStat.dwIsrRxNoBuf++; /* Rx No Buff */ 106 107 if (dwIsr & ISR_RXDMA1) /* ISR, bit12 */ 108 pStatistic->ISRStat.dwIsrRx1OK++; /* Rx1 successful */ 109 110 if (dwIsr & ISR_SOFTTIMER1) /* ISR, bit21 */ 111 pStatistic->ISRStat.dwIsrSTIMER1Int++; 112} 113 114/* 115 * Description: Update 802.11 mib counter 116 * 117 * Parameters: 118 * In: 119 * p802_11Counter - Pointer to 802.11 mib counter 120 * pStatistic - Pointer to Statistic Counter Data Structure 121 * dwCounter - hardware counter for 802.11 mib 122 * Out: 123 * none 124 * 125 * Return Value: none 126 * 127 */ 128void 129STAvUpdate802_11Counter( 130 PSDot11Counters p802_11Counter, 131 PSStatCounter pStatistic, 132 unsigned long dwCounter 133) 134{ 135 p802_11Counter->RTSSuccessCount += (unsigned long long) (dwCounter & 0x000000ff); 136 p802_11Counter->RTSFailureCount += (unsigned long long) ((dwCounter & 0x0000ff00) >> 8); 137 p802_11Counter->ACKFailureCount += (unsigned long long) ((dwCounter & 0x00ff0000) >> 16); 138 p802_11Counter->FCSErrorCount += (unsigned long long) ((dwCounter & 0xff000000) >> 24); 139} 140