diff options
-rw-r--r-- | sys/dev/bge/if_bge.c | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/sys/dev/bge/if_bge.c b/sys/dev/bge/if_bge.c index 095d72e..a861b3b 100644 --- a/sys/dev/bge/if_bge.c +++ b/sys/dev/bge/if_bge.c @@ -2755,6 +2755,14 @@ bge_rxeof(struct bge_softc *sc) CSR_WRITE_4(sc, BGE_MBX_RX_STD_PROD_LO, sc->bge_std); if (jumbocnt) CSR_WRITE_4(sc, BGE_MBX_RX_JUMBO_PROD_LO, sc->bge_jumbo); +#ifdef notyet + /* + * This register wraps very quickly under heavy packet drops. + * If you need correct statistics, you can enable this check. + */ + if (BGE_IS_5705_PLUS(sc)) + ifp->if_ierrors += CSR_READ_4(sc, BGE_RXLP_LOCSTAT_IFIN_DROPS); +#endif } static void @@ -2967,18 +2975,13 @@ static void bge_stats_update_regs(struct bge_softc *sc) { struct ifnet *ifp; - uint32_t cnt; /* current register value */ ifp = sc->bge_ifp; - cnt = CSR_READ_4(sc, BGE_MAC_STATS + + ifp->if_collisions += CSR_READ_4(sc, BGE_MAC_STATS + offsetof(struct bge_mac_stats_regs, etherStatsCollisions)); - ifp->if_collisions += (u_long)(cnt - sc->bge_tx_collisions); - sc->bge_tx_collisions = cnt; - cnt = CSR_READ_4(sc, BGE_RXLP_LOCSTAT_IFIN_DROPS); - ifp->if_ierrors += (u_long)(cnt - sc->bge_rx_discards); - sc->bge_rx_discards = cnt; + ifp->if_ierrors += CSR_READ_4(sc, BGE_RXLP_LOCSTAT_IFIN_DROPS); } static void @@ -3003,15 +3006,15 @@ bge_stats_update(struct bge_softc *sc) txstats.dot3StatsExcessiveCollisions.bge_addr_lo); cnt += READ_STAT(sc, stats, txstats.dot3StatsLateCollisions.bge_addr_lo); - ifp->if_collisions += (u_long)(cnt - sc->bge_tx_collisions); + ifp->if_collisions += (uint32_t)(cnt - sc->bge_tx_collisions); sc->bge_tx_collisions = cnt; cnt = READ_STAT(sc, stats, ifInDiscards.bge_addr_lo); - ifp->if_ierrors += (u_long)(cnt - sc->bge_rx_discards); + ifp->if_ierrors += (uint32_t)(cnt - sc->bge_rx_discards); sc->bge_rx_discards = cnt; cnt = READ_STAT(sc, stats, txstats.ifOutDiscards.bge_addr_lo); - ifp->if_oerrors += (u_long)(cnt - sc->bge_tx_discards); + ifp->if_oerrors += (uint32_t)(cnt - sc->bge_tx_discards); sc->bge_tx_discards = cnt; #undef READ_STAT |