if_bge.c (164769) | if_bge.c (164780) |
---|---|
1/*- 2 * Copyright (c) 2001 Wind River Systems 3 * Copyright (c) 1997, 1998, 1999, 2001 4 * Bill Paul <wpaul@windriver.com>. All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: --- 18 unchanged lines hidden (view full) --- 27 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 28 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 29 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 30 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 31 * THE POSSIBILITY OF SUCH DAMAGE. 32 */ 33 34#include <sys/cdefs.h> | 1/*- 2 * Copyright (c) 2001 Wind River Systems 3 * Copyright (c) 1997, 1998, 1999, 2001 4 * Bill Paul <wpaul@windriver.com>. All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: --- 18 unchanged lines hidden (view full) --- 27 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 28 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 29 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 30 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 31 * THE POSSIBILITY OF SUCH DAMAGE. 32 */ 33 34#include <sys/cdefs.h> |
35__FBSDID("$FreeBSD: head/sys/dev/bge/if_bge.c 164769 2006-11-30 13:40:39Z glebius $"); | 35__FBSDID("$FreeBSD: head/sys/dev/bge/if_bge.c 164780 2006-12-01 01:08:52Z jkim $"); |
36 37/* 38 * Broadcom BCM570x family gigabit ethernet driver for FreeBSD. 39 * 40 * The Broadcom BCM5700 is based on technology originally developed by 41 * Alteon Networks as part of the Tigon I and Tigon II gigabit ethernet 42 * MAC chips. The BCM5700, sometimes refered to as the Tigon III, has 43 * two on-board MIPS R4000 CPUs and can have as much as 16MB of external --- 2930 unchanged lines hidden (view full) --- 2974 bge_watchdog(sc); 2975 2976 callout_reset(&sc->bge_stat_ch, hz, bge_tick, sc); 2977} 2978 2979static void 2980bge_stats_update_regs(struct bge_softc *sc) 2981{ | 36 37/* 38 * Broadcom BCM570x family gigabit ethernet driver for FreeBSD. 39 * 40 * The Broadcom BCM5700 is based on technology originally developed by 41 * Alteon Networks as part of the Tigon I and Tigon II gigabit ethernet 42 * MAC chips. The BCM5700, sometimes refered to as the Tigon III, has 43 * two on-board MIPS R4000 CPUs and can have as much as 16MB of external --- 2930 unchanged lines hidden (view full) --- 2974 bge_watchdog(sc); 2975 2976 callout_reset(&sc->bge_stat_ch, hz, bge_tick, sc); 2977} 2978 2979static void 2980bge_stats_update_regs(struct bge_softc *sc) 2981{ |
2982 struct bge_mac_stats_regs stats; | |
2983 struct ifnet *ifp; | 2982 struct ifnet *ifp; |
2984 uint32_t *s; 2985 u_long cnt; /* current register value */ 2986 int i; | 2983 uint32_t cnt; /* current register value */ |
2987 2988 ifp = sc->bge_ifp; 2989 | 2984 2985 ifp = sc->bge_ifp; 2986 |
2990 s = (uint32_t *)&stats; 2991 for (i = 0; i < sizeof(struct bge_mac_stats_regs); i += 4) { 2992 *s = CSR_READ_4(sc, BGE_RX_STATS + i); 2993 s++; 2994 } 2995 2996 cnt = stats.dot3StatsSingleCollisionFrames + 2997 stats.dot3StatsMultipleCollisionFrames + 2998 stats.dot3StatsExcessiveCollisions + 2999 stats.dot3StatsLateCollisions; 3000 ifp->if_collisions += cnt >= sc->bge_tx_collisions ? 3001 cnt - sc->bge_tx_collisions : cnt; | 2987 cnt = CSR_READ_4(sc, BGE_MAC_STATS + 2988 offsetof(struct bge_mac_stats_regs, etherStatsCollisions)); 2989 ifp->if_collisions += (u_long)(cnt - sc->bge_tx_collisions); |
3002 sc->bge_tx_collisions = cnt; | 2990 sc->bge_tx_collisions = cnt; |
2991 2992 cnt = CSR_READ_4(sc, BGE_RXLP_LOCSTAT_IFIN_DROPS); 2993 ifp->if_ierrors += (u_long)(cnt - sc->bge_rx_discards); 2994 sc->bge_rx_discards = cnt; |
|
3003} 3004 3005static void 3006bge_stats_update(struct bge_softc *sc) 3007{ 3008 struct ifnet *ifp; 3009 bus_size_t stats; | 2995} 2996 2997static void 2998bge_stats_update(struct bge_softc *sc) 2999{ 3000 struct ifnet *ifp; 3001 bus_size_t stats; |
3010 u_long cnt; /* current register value */ | 3002 uint32_t cnt; /* current register value */ |
3011 3012 ifp = sc->bge_ifp; 3013 3014 stats = BGE_MEMWIN_START + BGE_STATS_BLOCK; 3015 3016#define READ_STAT(sc, stats, stat) \ 3017 CSR_READ_4(sc, stats + offsetof(struct bge_stats, stat)) 3018 3019 cnt = READ_STAT(sc, stats, 3020 txstats.dot3StatsSingleCollisionFrames.bge_addr_lo); 3021 cnt += READ_STAT(sc, stats, 3022 txstats.dot3StatsMultipleCollisionFrames.bge_addr_lo); 3023 cnt += READ_STAT(sc, stats, 3024 txstats.dot3StatsExcessiveCollisions.bge_addr_lo); 3025 cnt += READ_STAT(sc, stats, 3026 txstats.dot3StatsLateCollisions.bge_addr_lo); | 3003 3004 ifp = sc->bge_ifp; 3005 3006 stats = BGE_MEMWIN_START + BGE_STATS_BLOCK; 3007 3008#define READ_STAT(sc, stats, stat) \ 3009 CSR_READ_4(sc, stats + offsetof(struct bge_stats, stat)) 3010 3011 cnt = READ_STAT(sc, stats, 3012 txstats.dot3StatsSingleCollisionFrames.bge_addr_lo); 3013 cnt += READ_STAT(sc, stats, 3014 txstats.dot3StatsMultipleCollisionFrames.bge_addr_lo); 3015 cnt += READ_STAT(sc, stats, 3016 txstats.dot3StatsExcessiveCollisions.bge_addr_lo); 3017 cnt += READ_STAT(sc, stats, 3018 txstats.dot3StatsLateCollisions.bge_addr_lo); |
3027 ifp->if_collisions += cnt >= sc->bge_tx_collisions ? 3028 cnt - sc->bge_tx_collisions : cnt; | 3019 ifp->if_collisions += (u_long)(cnt - sc->bge_tx_collisions); |
3029 sc->bge_tx_collisions = cnt; 3030 3031 cnt = READ_STAT(sc, stats, ifInDiscards.bge_addr_lo); | 3020 sc->bge_tx_collisions = cnt; 3021 3022 cnt = READ_STAT(sc, stats, ifInDiscards.bge_addr_lo); |
3032 ifp->if_ierrors += cnt >= sc->bge_rx_discards ? 3033 cnt - sc->bge_rx_discards : cnt; | 3023 ifp->if_ierrors += (u_long)(cnt - sc->bge_rx_discards); |
3034 sc->bge_rx_discards = cnt; 3035 3036 cnt = READ_STAT(sc, stats, txstats.ifOutDiscards.bge_addr_lo); | 3024 sc->bge_rx_discards = cnt; 3025 3026 cnt = READ_STAT(sc, stats, txstats.ifOutDiscards.bge_addr_lo); |
3037 ifp->if_oerrors += cnt >= sc->bge_tx_discards ? 3038 cnt - sc->bge_tx_discards : cnt; | 3027 ifp->if_oerrors += (u_long)(cnt - sc->bge_tx_discards); |
3039 sc->bge_tx_discards = cnt; 3040 3041#undef READ_STAT 3042} 3043 3044/* 3045 * Pad outbound frame to ETHER_MIN_NOPAD for an unusual reason. 3046 * The bge hardware will pad out Tx runts to ETHER_MIN_NOPAD, --- 317 unchanged lines hidden (view full) --- 3364 3365 /* Init jumbo RX ring. */ 3366 if (ifp->if_mtu > (ETHERMTU + ETHER_HDR_LEN + ETHER_CRC_LEN)) 3367 bge_init_rx_ring_jumbo(sc); 3368 3369 /* Init our RX return ring index. */ 3370 sc->bge_rx_saved_considx = 0; 3371 | 3028 sc->bge_tx_discards = cnt; 3029 3030#undef READ_STAT 3031} 3032 3033/* 3034 * Pad outbound frame to ETHER_MIN_NOPAD for an unusual reason. 3035 * The bge hardware will pad out Tx runts to ETHER_MIN_NOPAD, --- 317 unchanged lines hidden (view full) --- 3353 3354 /* Init jumbo RX ring. */ 3355 if (ifp->if_mtu > (ETHERMTU + ETHER_HDR_LEN + ETHER_CRC_LEN)) 3356 bge_init_rx_ring_jumbo(sc); 3357 3358 /* Init our RX return ring index. */ 3359 sc->bge_rx_saved_considx = 0; 3360 |
3361 /* Init our RX/TX stat counters. */ 3362 sc->bge_rx_discards = sc->bge_tx_discards = sc->bge_tx_collisions = 0; 3363 |
|
3372 /* Init TX ring. */ 3373 bge_init_tx_ring(sc); 3374 3375 /* Turn on transmitter. */ 3376 BGE_SETBIT(sc, BGE_TX_MODE, BGE_TXMODE_ENABLE); 3377 3378 /* Turn on receiver. */ 3379 BGE_SETBIT(sc, BGE_RX_MODE, BGE_RXMODE_ENABLE); --- 588 unchanged lines hidden --- | 3364 /* Init TX ring. */ 3365 bge_init_tx_ring(sc); 3366 3367 /* Turn on transmitter. */ 3368 BGE_SETBIT(sc, BGE_TX_MODE, BGE_TXMODE_ENABLE); 3369 3370 /* Turn on receiver. */ 3371 BGE_SETBIT(sc, BGE_RX_MODE, BGE_RXMODE_ENABLE); --- 588 unchanged lines hidden --- |