Deleted Added
full compact
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 ---