Date: Thu, 2 Nov 2006 07:15:57 GMT From: Warner Losh <imp@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 109011 for review Message-ID: <200611020715.kA27FvAI081012@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=109011 Change 109011 by imp@imp_lighthouse on 2006/11/02 07:15:29 Properly account for tx and rx packets, as well as collisions. Affected files ... .. //depot/projects/arm/src/sys/arm/at91/if_ate.c#58 edit Differences ... ==== //depot/projects/arm/src/sys/arm/at91/if_ate.c#58 (text+ko) ==== @@ -492,8 +492,10 @@ ate_tick(void *xsc) { struct ate_softc *sc = xsc; + struct ifnet *ifp = sc->ifp; struct mii_data *mii; int active; + uint32_t c; /* * The KB920x boot loader tests ETH_SR & ETH_SR_LINK and will ask @@ -535,16 +537,25 @@ * the dot3Stats mib, so for those we just count them as general * errors. Stats for iframes, ibutes, oframes and obytes are * collected elsewhere. These registers zero on a read to prevent - * races. + * races. For all the collision stats, also update the collision + * stats for the interface. */ sc->mibdata.dot3StatsAlignmentErrors += RD4(sc, ETH_ALE); sc->mibdata.dot3StatsFCSErrors += RD4(sc, ETH_SEQE); - sc->mibdata.dot3StatsSingleCollisionFrames += RD4(sc, ETH_SCOL); - sc->mibdata.dot3StatsMultipleCollisionFrames += RD4(sc, ETH_MCOL); + c = RD4(sc, ETH_SCOL); + ifp->if_collisions += c; + sc->mibdata.dot3StatsSingleCollisionFrames += c; + c = RD4(sc, ETH_MCOL); + sc->mibdata.dot3StatsMultipleCollisionFrames += c; + ifp->if_collisions += c; sc->mibdata.dot3StatsSQETestErrors += RD4(sc, ETH_SQEE); sc->mibdata.dot3StatsDeferredTransmissions += RD4(sc, ETH_DTE); - sc->mibdata.dot3StatsLateCollisions += RD4(sc, ETH_LCOL); - sc->mibdata.dot3StatsExcessiveCollisions += RD4(sc, ETH_ECOL); + c = RD4(sc, ETH_LCOL); + sc->mibdata.dot3StatsLateCollisions += c; + ifp->if_collisions += c; + c = RD4(sc, ETH_ECOL); + sc->mibdata.dot3StatsExcessiveCollisions += c; + ifp->if_collisions += c; sc->mibdata.dot3StatsCarrierSenseErrors += RD4(sc, ETH_CSE); sc->mibdata.dot3StatsFrameTooLongs += RD4(sc, ETH_ELR); sc->mibdata.dot3StatsInternalMacReceiveErrors += RD4(sc, ETH_DRFC); @@ -552,7 +563,7 @@ * not sure where to lump these, so count them against the errors * for the interface. */ - sc->ifp->if_oerrors += RD4(sc, ETH_CSE) + RD4(sc, ETH_TUE); + sc->ifp->if_oerrors += RD4(sc, ETH_TUE); sc->ifp->if_ierrors += RD4(sc, ETH_CDE) + RD4(sc, ETH_RJB) + RD4(sc, ETH_USF); @@ -595,6 +606,7 @@ ate_intr(void *xsc) { struct ate_softc *sc = xsc; + struct ifnet *ifp = sc->ifp; int status; int i; void *bp; @@ -630,25 +642,30 @@ */ mb = m_devget(sc->rx_buf[i], (rx_stat & ETH_LEN_MASK) - ETHER_CRC_LEN, - ETHER_ALIGN, sc->ifp, NULL); + ETHER_ALIGN, ifp, NULL); sc->rx_descs[i].addr &= ~ETH_CPU_OWNER; bus_dmamap_sync(sc->rx_desc_tag, sc->rx_desc_map, BUS_DMASYNC_PREWRITE); bus_dmamap_sync(sc->rxtag, sc->rx_map[i], BUS_DMASYNC_PREREAD); - if (mb != NULL) - (*sc->ifp->if_input)(sc->ifp, mb); + if (mb != NULL) { + ifp->if_ipackets++; + (*ifp->if_input)(ifp, mb); + } + } } if (status & ETH_ISR_TCOM) { ATE_LOCK(sc); if (sc->sent_mbuf[0]) { m_freem(sc->sent_mbuf[0]); + ifp->if_opackets++; sc->sent_mbuf[0] = NULL; } if (sc->sent_mbuf[1]) { if (RD4(sc, ETH_TSR) & ETH_TSR_IDLE) { m_freem(sc->sent_mbuf[1]); + ifp->if_opackets++; sc->txcur = 0; sc->sent_mbuf[0] = sc->sent_mbuf[1] = NULL; } else {
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200611020715.kA27FvAI081012>