Deleted Added
full compact
if_msk.c (187208) if_msk.c (187325)
1/******************************************************************************
2 *
3 * Name : sky2.c
4 * Project: Gigabit Ethernet Driver for FreeBSD 5.x/6.x
5 * Version: $Revision: 1.23 $
6 * Date : $Date: 2005/12/22 09:04:11 $
7 * Purpose: Main driver source file
8 *

--- 85 unchanged lines hidden (view full) ---

94
95/*
96 * Device driver for the Marvell Yukon II Ethernet controller.
97 * Due to lack of documentation, this driver is based on the code from
98 * sk(4) and Marvell's myk(4) driver for FreeBSD 5.x.
99 */
100
101#include <sys/cdefs.h>
1/******************************************************************************
2 *
3 * Name : sky2.c
4 * Project: Gigabit Ethernet Driver for FreeBSD 5.x/6.x
5 * Version: $Revision: 1.23 $
6 * Date : $Date: 2005/12/22 09:04:11 $
7 * Purpose: Main driver source file
8 *

--- 85 unchanged lines hidden (view full) ---

94
95/*
96 * Device driver for the Marvell Yukon II Ethernet controller.
97 * Due to lack of documentation, this driver is based on the code from
98 * sk(4) and Marvell's myk(4) driver for FreeBSD 5.x.
99 */
100
101#include <sys/cdefs.h>
102__FBSDID("$FreeBSD: head/sys/dev/msk/if_msk.c 187208 2009-01-14 05:08:52Z yongari $");
102__FBSDID("$FreeBSD: head/sys/dev/msk/if_msk.c 187325 2009-01-16 08:06:55Z yongari $");
103
104#include <sys/param.h>
105#include <sys/systm.h>
106#include <sys/bus.h>
107#include <sys/endian.h>
108#include <sys/mbuf.h>
109#include <sys/malloc.h>
110#include <sys/kernel.h>

--- 175 unchanged lines hidden (view full) ---

286static int msk_miibus_writereg(device_t, int, int, int);
287static void msk_miibus_statchg(device_t);
288static void msk_link_task(void *, int);
289
290static void msk_setmulti(struct msk_if_softc *);
291static void msk_setvlan(struct msk_if_softc *, struct ifnet *);
292static void msk_setpromisc(struct msk_if_softc *);
293
103
104#include <sys/param.h>
105#include <sys/systm.h>
106#include <sys/bus.h>
107#include <sys/endian.h>
108#include <sys/mbuf.h>
109#include <sys/malloc.h>
110#include <sys/kernel.h>

--- 175 unchanged lines hidden (view full) ---

286static int msk_miibus_writereg(device_t, int, int, int);
287static void msk_miibus_statchg(device_t);
288static void msk_link_task(void *, int);
289
290static void msk_setmulti(struct msk_if_softc *);
291static void msk_setvlan(struct msk_if_softc *, struct ifnet *);
292static void msk_setpromisc(struct msk_if_softc *);
293
294static void msk_stats_clear(struct msk_if_softc *);
295static void msk_stats_update(struct msk_if_softc *);
296static int msk_sysctl_stat32(SYSCTL_HANDLER_ARGS);
297static int msk_sysctl_stat64(SYSCTL_HANDLER_ARGS);
298static void msk_sysctl_node(struct msk_if_softc *);
294static int sysctl_int_range(SYSCTL_HANDLER_ARGS, int, int);
295static int sysctl_hw_msk_proc_limit(SYSCTL_HANDLER_ARGS);
296
297static device_method_t mskc_methods[] = {
298 /* Device interface */
299 DEVMETHOD(device_probe, mskc_probe),
300 DEVMETHOD(device_attach, mskc_attach),
301 DEVMETHOD(device_detach, mskc_detach),

--- 1128 unchanged lines hidden (view full) ---

1430 } else {
1431 sc_if->msk_txq = Q_XA2;
1432 sc_if->msk_txsq = Q_XS2;
1433 sc_if->msk_rxq = Q_R2;
1434 }
1435
1436 callout_init_mtx(&sc_if->msk_tick_ch, &sc_if->msk_softc->msk_mtx, 0);
1437 TASK_INIT(&sc_if->msk_link_task, 0, msk_link_task, sc_if);
299static int sysctl_int_range(SYSCTL_HANDLER_ARGS, int, int);
300static int sysctl_hw_msk_proc_limit(SYSCTL_HANDLER_ARGS);
301
302static device_method_t mskc_methods[] = {
303 /* Device interface */
304 DEVMETHOD(device_probe, mskc_probe),
305 DEVMETHOD(device_attach, mskc_attach),
306 DEVMETHOD(device_detach, mskc_detach),

--- 1128 unchanged lines hidden (view full) ---

1435 } else {
1436 sc_if->msk_txq = Q_XA2;
1437 sc_if->msk_txsq = Q_XS2;
1438 sc_if->msk_rxq = Q_R2;
1439 }
1440
1441 callout_init_mtx(&sc_if->msk_tick_ch, &sc_if->msk_softc->msk_mtx, 0);
1442 TASK_INIT(&sc_if->msk_link_task, 0, msk_link_task, sc_if);
1443 msk_sysctl_node(sc_if);
1438
1439 /* Disable jumbo frame for Yukon FE. */
1440 if (sc_if->msk_softc->msk_hw_id == CHIP_ID_YUKON_FE)
1441 sc_if->msk_flags |= MSK_FLAG_NOJUMBO;
1442
1443 if ((error = msk_txrx_dma_alloc(sc_if) != 0))
1444 goto fail;
1445 msk_rx_dma_jalloc(sc_if);

--- 2093 unchanged lines hidden (view full) ---

3539 * datasheet for Yukon II I wouldn't have encountered this. :-(
3540 */
3541 gmac = GM_GPCR_SPEED_100 | GM_GPCR_SPEED_1000 | GM_GPCR_DUP_FULL;
3542 GMAC_WRITE_2(sc, sc_if->msk_port, GM_GP_CTRL, gmac);
3543
3544 /* Dummy read the Interrupt Source Register. */
3545 CSR_READ_1(sc, MR_ADDR(sc_if->msk_port, GMAC_IRQ_SRC));
3546
1444
1445 /* Disable jumbo frame for Yukon FE. */
1446 if (sc_if->msk_softc->msk_hw_id == CHIP_ID_YUKON_FE)
1447 sc_if->msk_flags |= MSK_FLAG_NOJUMBO;
1448
1449 if ((error = msk_txrx_dma_alloc(sc_if) != 0))
1450 goto fail;
1451 msk_rx_dma_jalloc(sc_if);

--- 2093 unchanged lines hidden (view full) ---

3545 * datasheet for Yukon II I wouldn't have encountered this. :-(
3546 */
3547 gmac = GM_GPCR_SPEED_100 | GM_GPCR_SPEED_1000 | GM_GPCR_DUP_FULL;
3548 GMAC_WRITE_2(sc, sc_if->msk_port, GM_GP_CTRL, gmac);
3549
3550 /* Dummy read the Interrupt Source Register. */
3551 CSR_READ_1(sc, MR_ADDR(sc_if->msk_port, GMAC_IRQ_SRC));
3552
3547 /* Set MIB Clear Counter Mode. */
3548 gmac = GMAC_READ_2(sc, sc_if->msk_port, GM_PHY_ADDR);
3549 GMAC_WRITE_2(sc, sc_if->msk_port, GM_PHY_ADDR, gmac | GM_PAR_MIB_CLR);
3550 /* Read all MIB Counters with Clear Mode set. */
3551 for (i = 0; i < GM_MIB_CNT_SIZE; i++)
3552 GMAC_READ_2(sc, sc_if->msk_port, GM_MIB_CNT_BASE + 8 * i);
3553 /* Clear MIB Clear Counter Mode. */
3554 gmac &= ~GM_PAR_MIB_CLR;
3555 GMAC_WRITE_2(sc, sc_if->msk_port, GM_PHY_ADDR, gmac);
3553 /* Clear MIB stats. */
3554 msk_stats_clear(sc_if);
3556
3557 /* Disable FCS. */
3558 GMAC_WRITE_2(sc, sc_if->msk_port, GM_RX_CTRL, GM_RXCR_CRC_DIS);
3559
3560 /* Setup Transmit Control Register. */
3561 GMAC_WRITE_2(sc, sc_if->msk_port, GM_TX_CTRL, TX_COL_THR(TX_COL_DEF));
3562
3563 /* Setup Transmit Flow Control Register. */

--- 269 unchanged lines hidden (view full) ---

3833 CSR_READ_4(sc, B0_IMSK);
3834
3835 /* Disable Tx/Rx MAC. */
3836 val = GMAC_READ_2(sc, sc_if->msk_port, GM_GP_CTRL);
3837 val &= ~(GM_GPCR_RX_ENA | GM_GPCR_TX_ENA);
3838 GMAC_WRITE_2(sc, sc_if->msk_port, GM_GP_CTRL, val);
3839 /* Read again to ensure writing. */
3840 GMAC_READ_2(sc, sc_if->msk_port, GM_GP_CTRL);
3555
3556 /* Disable FCS. */
3557 GMAC_WRITE_2(sc, sc_if->msk_port, GM_RX_CTRL, GM_RXCR_CRC_DIS);
3558
3559 /* Setup Transmit Control Register. */
3560 GMAC_WRITE_2(sc, sc_if->msk_port, GM_TX_CTRL, TX_COL_THR(TX_COL_DEF));
3561
3562 /* Setup Transmit Flow Control Register. */

--- 269 unchanged lines hidden (view full) ---

3832 CSR_READ_4(sc, B0_IMSK);
3833
3834 /* Disable Tx/Rx MAC. */
3835 val = GMAC_READ_2(sc, sc_if->msk_port, GM_GP_CTRL);
3836 val &= ~(GM_GPCR_RX_ENA | GM_GPCR_TX_ENA);
3837 GMAC_WRITE_2(sc, sc_if->msk_port, GM_GP_CTRL, val);
3838 /* Read again to ensure writing. */
3839 GMAC_READ_2(sc, sc_if->msk_port, GM_GP_CTRL);
3840 /* Update stats and clear counters. */
3841 msk_stats_update(sc_if);
3841
3842 /* Stop Tx BMU. */
3843 CSR_WRITE_4(sc, Q_ADDR(sc_if->msk_txq, Q_CSR), BMU_STOP);
3844 val = CSR_READ_4(sc, Q_ADDR(sc_if->msk_txq, Q_CSR));
3845 for (i = 0; i < MSK_TIMEOUT; i++) {
3846 if ((val & (BMU_STOP | BMU_IDLE)) == 0) {
3847 CSR_WRITE_4(sc, Q_ADDR(sc_if->msk_txq, Q_CSR),
3848 BMU_STOP);

--- 99 unchanged lines hidden (view full) ---

3948
3949 /*
3950 * Mark the interface down.
3951 */
3952 ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
3953 sc_if->msk_link = 0;
3954}
3955
3842
3843 /* Stop Tx BMU. */
3844 CSR_WRITE_4(sc, Q_ADDR(sc_if->msk_txq, Q_CSR), BMU_STOP);
3845 val = CSR_READ_4(sc, Q_ADDR(sc_if->msk_txq, Q_CSR));
3846 for (i = 0; i < MSK_TIMEOUT; i++) {
3847 if ((val & (BMU_STOP | BMU_IDLE)) == 0) {
3848 CSR_WRITE_4(sc, Q_ADDR(sc_if->msk_txq, Q_CSR),
3849 BMU_STOP);

--- 99 unchanged lines hidden (view full) ---

3949
3950 /*
3951 * Mark the interface down.
3952 */
3953 ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
3954 sc_if->msk_link = 0;
3955}
3956
3957/*
3958 * When GM_PAR_MIB_CLR bit of GM_PHY_ADDR is set, reading lower
3959 * counter clears high 16 bits of the counter such that accessing
3960 * lower 16 bits should be the last operation.
3961 */
3962#define MSK_READ_MIB32(x, y) \
3963 (((uint32_t)GMAC_READ_2(sc, x, (y) + 4)) << 16) + \
3964 (uint32_t)GMAC_READ_2(sc, x, y)
3965#define MSK_READ_MIB64(x, y) \
3966 (((uint64_t)MSK_READ_MIB32(x, (y) + 8)) << 32) + \
3967 (uint64_t)MSK_READ_MIB32(x, y)
3968
3969static void
3970msk_stats_clear(struct msk_if_softc *sc_if)
3971{
3972 struct msk_softc *sc;
3973 uint32_t reg;
3974 uint16_t gmac;
3975 int i;
3976
3977 MSK_IF_LOCK_ASSERT(sc_if);
3978
3979 sc = sc_if->msk_softc;
3980 /* Set MIB Clear Counter Mode. */
3981 gmac = GMAC_READ_2(sc, sc_if->msk_port, GM_PHY_ADDR);
3982 GMAC_WRITE_2(sc, sc_if->msk_port, GM_PHY_ADDR, gmac | GM_PAR_MIB_CLR);
3983 /* Read all MIB Counters with Clear Mode set. */
3984 for (i = GM_RXF_UC_OK; i <= GM_TXE_FIFO_UR; i++)
3985 reg = MSK_READ_MIB32(sc_if->msk_port, i);
3986 /* Clear MIB Clear Counter Mode. */
3987 gmac &= ~GM_PAR_MIB_CLR;
3988 GMAC_WRITE_2(sc, sc_if->msk_port, GM_PHY_ADDR, gmac);
3989}
3990
3991static void
3992msk_stats_update(struct msk_if_softc *sc_if)
3993{
3994 struct msk_softc *sc;
3995 struct ifnet *ifp;
3996 struct msk_hw_stats *stats;
3997 uint16_t gmac;
3998 uint32_t reg;
3999
4000 MSK_IF_LOCK_ASSERT(sc_if);
4001
4002 ifp = sc_if->msk_ifp;
4003 if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0)
4004 return;
4005 sc = sc_if->msk_softc;
4006 stats = &sc_if->msk_stats;
4007 /* Set MIB Clear Counter Mode. */
4008 gmac = GMAC_READ_2(sc, sc_if->msk_port, GM_PHY_ADDR);
4009 GMAC_WRITE_2(sc, sc_if->msk_port, GM_PHY_ADDR, gmac | GM_PAR_MIB_CLR);
4010
4011 /* Rx stats. */
4012 stats->rx_ucast_frames +=
4013 MSK_READ_MIB32(sc_if->msk_port, GM_RXF_UC_OK);
4014 stats->rx_bcast_frames +=
4015 MSK_READ_MIB32(sc_if->msk_port, GM_RXF_BC_OK);
4016 stats->rx_pause_frames +=
4017 MSK_READ_MIB32(sc_if->msk_port, GM_RXF_MPAUSE);
4018 stats->rx_mcast_frames +=
4019 MSK_READ_MIB32(sc_if->msk_port, GM_RXF_MC_OK);
4020 stats->rx_crc_errs +=
4021 MSK_READ_MIB32(sc_if->msk_port, GM_RXF_FCS_ERR);
4022 reg = MSK_READ_MIB32(sc_if->msk_port, GM_RXF_SPARE1);
4023 stats->rx_good_octets +=
4024 MSK_READ_MIB64(sc_if->msk_port, GM_RXO_OK_LO);
4025 stats->rx_bad_octets +=
4026 MSK_READ_MIB64(sc_if->msk_port, GM_RXO_ERR_LO);
4027 stats->rx_runts +=
4028 MSK_READ_MIB32(sc_if->msk_port, GM_RXF_SHT);
4029 stats->rx_runt_errs +=
4030 MSK_READ_MIB32(sc_if->msk_port, GM_RXE_FRAG);
4031 stats->rx_pkts_64 +=
4032 MSK_READ_MIB32(sc_if->msk_port, GM_RXF_64B);
4033 stats->rx_pkts_65_127 +=
4034 MSK_READ_MIB32(sc_if->msk_port, GM_RXF_127B);
4035 stats->rx_pkts_128_255 +=
4036 MSK_READ_MIB32(sc_if->msk_port, GM_RXF_255B);
4037 stats->rx_pkts_256_511 +=
4038 MSK_READ_MIB32(sc_if->msk_port, GM_RXF_511B);
4039 stats->rx_pkts_512_1023 +=
4040 MSK_READ_MIB32(sc_if->msk_port, GM_RXF_1023B);
4041 stats->rx_pkts_1024_1518 +=
4042 MSK_READ_MIB32(sc_if->msk_port, GM_RXF_1518B);
4043 stats->rx_pkts_1519_max +=
4044 MSK_READ_MIB32(sc_if->msk_port, GM_RXF_MAX_SZ);
4045 stats->rx_pkts_too_long +=
4046 MSK_READ_MIB32(sc_if->msk_port, GM_RXF_LNG_ERR);
4047 stats->rx_pkts_jabbers +=
4048 MSK_READ_MIB32(sc_if->msk_port, GM_RXF_JAB_PKT);
4049 reg = MSK_READ_MIB32(sc_if->msk_port, GM_RXF_SPARE2);
4050 stats->rx_fifo_oflows +=
4051 MSK_READ_MIB32(sc_if->msk_port, GM_RXE_FIFO_OV);
4052 reg = MSK_READ_MIB32(sc_if->msk_port, GM_RXF_SPARE3);
4053
4054 /* Tx stats. */
4055 stats->tx_ucast_frames +=
4056 MSK_READ_MIB32(sc_if->msk_port, GM_TXF_UC_OK);
4057 stats->tx_bcast_frames +=
4058 MSK_READ_MIB32(sc_if->msk_port, GM_TXF_BC_OK);
4059 stats->tx_pause_frames +=
4060 MSK_READ_MIB32(sc_if->msk_port, GM_TXF_MPAUSE);
4061 stats->tx_mcast_frames +=
4062 MSK_READ_MIB32(sc_if->msk_port, GM_TXF_MC_OK);
4063 stats->tx_octets +=
4064 MSK_READ_MIB64(sc_if->msk_port, GM_TXO_OK_LO);
4065 stats->tx_pkts_64 +=
4066 MSK_READ_MIB32(sc_if->msk_port, GM_TXF_64B);
4067 stats->tx_pkts_65_127 +=
4068 MSK_READ_MIB32(sc_if->msk_port, GM_TXF_127B);
4069 stats->tx_pkts_128_255 +=
4070 MSK_READ_MIB32(sc_if->msk_port, GM_TXF_255B);
4071 stats->tx_pkts_256_511 +=
4072 MSK_READ_MIB32(sc_if->msk_port, GM_TXF_511B);
4073 stats->tx_pkts_512_1023 +=
4074 MSK_READ_MIB32(sc_if->msk_port, GM_TXF_1023B);
4075 stats->tx_pkts_1024_1518 +=
4076 MSK_READ_MIB32(sc_if->msk_port, GM_TXF_1518B);
4077 stats->tx_pkts_1519_max +=
4078 MSK_READ_MIB32(sc_if->msk_port, GM_TXF_MAX_SZ);
4079 reg = MSK_READ_MIB32(sc_if->msk_port, GM_TXF_SPARE1);
4080 stats->tx_colls +=
4081 MSK_READ_MIB32(sc_if->msk_port, GM_TXF_COL);
4082 stats->tx_late_colls +=
4083 MSK_READ_MIB32(sc_if->msk_port, GM_TXF_LAT_COL);
4084 stats->tx_excess_colls +=
4085 MSK_READ_MIB32(sc_if->msk_port, GM_TXF_ABO_COL);
4086 stats->tx_multi_colls +=
4087 MSK_READ_MIB32(sc_if->msk_port, GM_TXF_MUL_COL);
4088 stats->tx_single_colls +=
4089 MSK_READ_MIB32(sc_if->msk_port, GM_TXF_SNG_COL);
4090 stats->tx_underflows +=
4091 MSK_READ_MIB32(sc_if->msk_port, GM_TXE_FIFO_UR);
4092 /* Clear MIB Clear Counter Mode. */
4093 gmac &= ~GM_PAR_MIB_CLR;
4094 GMAC_WRITE_2(sc, sc_if->msk_port, GM_PHY_ADDR, gmac);
4095}
4096
3956static int
4097static int
4098msk_sysctl_stat32(SYSCTL_HANDLER_ARGS)
4099{
4100 struct msk_softc *sc;
4101 struct msk_if_softc *sc_if;
4102 uint32_t result, *stat;
4103 int off;
4104
4105 sc_if = (struct msk_if_softc *)arg1;
4106 sc = sc_if->msk_softc;
4107 off = arg2;
4108 stat = (uint32_t *)((uint8_t *)&sc_if->msk_stats + off);
4109
4110 MSK_IF_LOCK(sc_if);
4111 result = MSK_READ_MIB32(sc_if->msk_port, GM_MIB_CNT_BASE + off * 2);
4112 result += *stat;
4113 MSK_IF_UNLOCK(sc_if);
4114
4115 return (sysctl_handle_int(oidp, &result, 0, req));
4116}
4117
4118static int
4119msk_sysctl_stat64(SYSCTL_HANDLER_ARGS)
4120{
4121 struct msk_softc *sc;
4122 struct msk_if_softc *sc_if;
4123 uint64_t result, *stat;
4124 int off;
4125
4126 sc_if = (struct msk_if_softc *)arg1;
4127 sc = sc_if->msk_softc;
4128 off = arg2;
4129 stat = (uint64_t *)((uint8_t *)&sc_if->msk_stats + off);
4130
4131 MSK_IF_LOCK(sc_if);
4132 result = MSK_READ_MIB64(sc_if->msk_port, GM_MIB_CNT_BASE + off * 2);
4133 result += *stat;
4134 MSK_IF_UNLOCK(sc_if);
4135
4136 return (sysctl_handle_quad(oidp, &result, 0, req));
4137}
4138
4139#undef MSK_READ_MIB32
4140#undef MSK_READ_MIB64
4141
4142#define MSK_SYSCTL_STAT32(sc, c, o, p, n, d) \
4143 SYSCTL_ADD_PROC(c, p, OID_AUTO, o, CTLTYPE_UINT | CTLFLAG_RD, \
4144 sc, offsetof(struct msk_hw_stats, n), msk_sysctl_stat32, \
4145 "IU", d)
4146#define MSK_SYSCTL_STAT64(sc, c, o, p, n, d) \
4147 SYSCTL_ADD_PROC(c, p, OID_AUTO, o, CTLTYPE_UINT | CTLFLAG_RD, \
4148 sc, offsetof(struct msk_hw_stats, n), msk_sysctl_stat64, \
4149 "Q", d)
4150
4151static void
4152msk_sysctl_node(struct msk_if_softc *sc_if)
4153{
4154 struct sysctl_ctx_list *ctx;
4155 struct sysctl_oid_list *child, *schild;
4156 struct sysctl_oid *tree;
4157
4158 ctx = device_get_sysctl_ctx(sc_if->msk_if_dev);
4159 child = SYSCTL_CHILDREN(device_get_sysctl_tree(sc_if->msk_if_dev));
4160
4161 tree = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, "stats", CTLFLAG_RD,
4162 NULL, "MSK Statistics");
4163 schild = child = SYSCTL_CHILDREN(tree);
4164 tree = SYSCTL_ADD_NODE(ctx, schild, OID_AUTO, "rx", CTLFLAG_RD,
4165 NULL, "MSK RX Statistics");
4166 child = SYSCTL_CHILDREN(tree);
4167 MSK_SYSCTL_STAT32(sc_if, ctx, "ucast_frames",
4168 child, rx_ucast_frames, "Good unicast frames");
4169 MSK_SYSCTL_STAT32(sc_if, ctx, "bcast_frames",
4170 child, rx_bcast_frames, "Good broadcast frames");
4171 MSK_SYSCTL_STAT32(sc_if, ctx, "pause_frames",
4172 child, rx_pause_frames, "Pause frames");
4173 MSK_SYSCTL_STAT32(sc_if, ctx, "mcast_frames",
4174 child, rx_mcast_frames, "Multicast frames");
4175 MSK_SYSCTL_STAT32(sc_if, ctx, "crc_errs",
4176 child, rx_crc_errs, "CRC errors");
4177 MSK_SYSCTL_STAT64(sc_if, ctx, "good_octets",
4178 child, rx_good_octets, "Good octets");
4179 MSK_SYSCTL_STAT64(sc_if, ctx, "bad_octets",
4180 child, rx_bad_octets, "Bad octets");
4181 MSK_SYSCTL_STAT32(sc_if, ctx, "frames_64",
4182 child, rx_pkts_64, "64 bytes frames");
4183 MSK_SYSCTL_STAT32(sc_if, ctx, "frames_65_127",
4184 child, rx_pkts_65_127, "65 to 127 bytes frames");
4185 MSK_SYSCTL_STAT32(sc_if, ctx, "frames_128_255",
4186 child, rx_pkts_128_255, "128 to 255 bytes frames");
4187 MSK_SYSCTL_STAT32(sc_if, ctx, "frames_256_511",
4188 child, rx_pkts_256_511, "256 to 511 bytes frames");
4189 MSK_SYSCTL_STAT32(sc_if, ctx, "frames_512_1023",
4190 child, rx_pkts_512_1023, "512 to 1023 bytes frames");
4191 MSK_SYSCTL_STAT32(sc_if, ctx, "frames_1024_1518",
4192 child, rx_pkts_1024_1518, "1024 to 1518 bytes frames");
4193 MSK_SYSCTL_STAT32(sc_if, ctx, "frames_1519_max",
4194 child, rx_pkts_1519_max, "1519 to max frames");
4195 MSK_SYSCTL_STAT32(sc_if, ctx, "frames_too_long",
4196 child, rx_pkts_too_long, "frames too long");
4197 MSK_SYSCTL_STAT32(sc_if, ctx, "jabbers",
4198 child, rx_pkts_jabbers, "Jabber errors");
4199 MSK_SYSCTL_STAT32(sc_if, ctx, "jabbers",
4200 child, rx_fifo_oflows, "FIFO overflows");
4201
4202 tree = SYSCTL_ADD_NODE(ctx, schild, OID_AUTO, "tx", CTLFLAG_RD,
4203 NULL, "MSK TX Statistics");
4204 child = SYSCTL_CHILDREN(tree);
4205 MSK_SYSCTL_STAT32(sc_if, ctx, "ucast_frames",
4206 child, tx_ucast_frames, "Unicast frames");
4207 MSK_SYSCTL_STAT32(sc_if, ctx, "bcast_frames",
4208 child, tx_bcast_frames, "Broadcast frames");
4209 MSK_SYSCTL_STAT32(sc_if, ctx, "pause_frames",
4210 child, tx_pause_frames, "Pause frames");
4211 MSK_SYSCTL_STAT32(sc_if, ctx, "mcast_frames",
4212 child, tx_mcast_frames, "Multicast frames");
4213 MSK_SYSCTL_STAT64(sc_if, ctx, "octets",
4214 child, tx_octets, "Octets");
4215 MSK_SYSCTL_STAT32(sc_if, ctx, "frames_64",
4216 child, tx_pkts_64, "64 bytes frames");
4217 MSK_SYSCTL_STAT32(sc_if, ctx, "frames_65_127",
4218 child, tx_pkts_65_127, "65 to 127 bytes frames");
4219 MSK_SYSCTL_STAT32(sc_if, ctx, "frames_128_255",
4220 child, tx_pkts_128_255, "128 to 255 bytes frames");
4221 MSK_SYSCTL_STAT32(sc_if, ctx, "frames_256_511",
4222 child, tx_pkts_256_511, "256 to 511 bytes frames");
4223 MSK_SYSCTL_STAT32(sc_if, ctx, "frames_512_1023",
4224 child, tx_pkts_512_1023, "512 to 1023 bytes frames");
4225 MSK_SYSCTL_STAT32(sc_if, ctx, "frames_1024_1518",
4226 child, tx_pkts_1024_1518, "1024 to 1518 bytes frames");
4227 MSK_SYSCTL_STAT32(sc_if, ctx, "frames_1519_max",
4228 child, tx_pkts_1519_max, "1519 to max frames");
4229 MSK_SYSCTL_STAT32(sc_if, ctx, "colls",
4230 child, tx_colls, "Collisions");
4231 MSK_SYSCTL_STAT32(sc_if, ctx, "late_colls",
4232 child, tx_late_colls, "Late collisions");
4233 MSK_SYSCTL_STAT32(sc_if, ctx, "excess_colls",
4234 child, tx_excess_colls, "Excessive collisions");
4235 MSK_SYSCTL_STAT32(sc_if, ctx, "multi_colls",
4236 child, tx_multi_colls, "Multiple collisions");
4237 MSK_SYSCTL_STAT32(sc_if, ctx, "single_colls",
4238 child, tx_single_colls, "Single collisions");
4239 MSK_SYSCTL_STAT32(sc_if, ctx, "underflows",
4240 child, tx_underflows, "FIFO underflows");
4241}
4242
4243#undef MSK_SYSCTL_STAT32
4244#undef MSK_SYSCTL_STAT64
4245
4246static int
3957sysctl_int_range(SYSCTL_HANDLER_ARGS, int low, int high)
3958{
3959 int error, value;
3960
3961 if (!arg1)
3962 return (EINVAL);
3963 value = *(int *)arg1;
3964 error = sysctl_handle_int(oidp, &value, 0, req);

--- 16 unchanged lines hidden ---
4247sysctl_int_range(SYSCTL_HANDLER_ARGS, int low, int high)
4248{
4249 int error, value;
4250
4251 if (!arg1)
4252 return (EINVAL);
4253 value = *(int *)arg1;
4254 error = sysctl_handle_int(oidp, &value, 0, req);

--- 16 unchanged lines hidden ---