Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/alc/if_alc.c
Show All 12 Lines | |||||
struct alc_hw_stats *stats; | struct alc_hw_stats *stats; | ||||
int error; | int error; | ||||
stats = &sc->alc_stats; | stats = &sc->alc_stats; | ||||
ctx = device_get_sysctl_ctx(sc->alc_dev); | ctx = device_get_sysctl_ctx(sc->alc_dev); | ||||
child = SYSCTL_CHILDREN(device_get_sysctl_tree(sc->alc_dev)); | child = SYSCTL_CHILDREN(device_get_sysctl_tree(sc->alc_dev)); | ||||
SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "int_rx_mod", | SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "int_rx_mod", | ||||
CTLTYPE_INT | CTLFLAG_RW, &sc->alc_int_rx_mod, 0, | CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, &sc->alc_int_rx_mod, | ||||
sysctl_hw_alc_int_mod, "I", "alc Rx interrupt moderation"); | 0, sysctl_hw_alc_int_mod, "I", "alc Rx interrupt moderation"); | ||||
SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "int_tx_mod", | SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "int_tx_mod", | ||||
CTLTYPE_INT | CTLFLAG_RW, &sc->alc_int_tx_mod, 0, | CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, &sc->alc_int_tx_mod, | ||||
sysctl_hw_alc_int_mod, "I", "alc Tx interrupt moderation"); | 0, sysctl_hw_alc_int_mod, "I", "alc Tx interrupt moderation"); | ||||
/* Pull in device tunables. */ | /* Pull in device tunables. */ | ||||
sc->alc_int_rx_mod = ALC_IM_RX_TIMER_DEFAULT; | sc->alc_int_rx_mod = ALC_IM_RX_TIMER_DEFAULT; | ||||
error = resource_int_value(device_get_name(sc->alc_dev), | error = resource_int_value(device_get_name(sc->alc_dev), | ||||
device_get_unit(sc->alc_dev), "int_rx_mod", &sc->alc_int_rx_mod); | device_get_unit(sc->alc_dev), "int_rx_mod", &sc->alc_int_rx_mod); | ||||
if (error == 0) { | if (error == 0) { | ||||
if (sc->alc_int_rx_mod < ALC_IM_TIMER_MIN || | if (sc->alc_int_rx_mod < ALC_IM_TIMER_MIN || | ||||
sc->alc_int_rx_mod > ALC_IM_TIMER_MAX) { | sc->alc_int_rx_mod > ALC_IM_TIMER_MAX) { | ||||
device_printf(sc->alc_dev, "int_rx_mod value out of " | device_printf(sc->alc_dev, "int_rx_mod value out of " | ||||
Show All 10 Lines | |||||
sc->alc_int_tx_mod > ALC_IM_TIMER_MAX) { | sc->alc_int_tx_mod > ALC_IM_TIMER_MAX) { | ||||
device_printf(sc->alc_dev, "int_tx_mod value out of " | device_printf(sc->alc_dev, "int_tx_mod value out of " | ||||
"range; using default: %d\n", | "range; using default: %d\n", | ||||
ALC_IM_TX_TIMER_DEFAULT); | ALC_IM_TX_TIMER_DEFAULT); | ||||
sc->alc_int_tx_mod = ALC_IM_TX_TIMER_DEFAULT; | sc->alc_int_tx_mod = ALC_IM_TX_TIMER_DEFAULT; | ||||
} | } | ||||
} | } | ||||
SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "process_limit", | SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "process_limit", | ||||
CTLTYPE_INT | CTLFLAG_RW, &sc->alc_process_limit, 0, | CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, | ||||
sysctl_hw_alc_proc_limit, "I", | &sc->alc_process_limit, 0, sysctl_hw_alc_proc_limit, "I", | ||||
"max number of Rx events to process"); | "max number of Rx events to process"); | ||||
/* Pull in device tunables. */ | /* Pull in device tunables. */ | ||||
sc->alc_process_limit = ALC_PROC_DEFAULT; | sc->alc_process_limit = ALC_PROC_DEFAULT; | ||||
error = resource_int_value(device_get_name(sc->alc_dev), | error = resource_int_value(device_get_name(sc->alc_dev), | ||||
device_get_unit(sc->alc_dev), "process_limit", | device_get_unit(sc->alc_dev), "process_limit", | ||||
&sc->alc_process_limit); | &sc->alc_process_limit); | ||||
if (error == 0) { | if (error == 0) { | ||||
if (sc->alc_process_limit < ALC_PROC_MIN || | if (sc->alc_process_limit < ALC_PROC_MIN || | ||||
sc->alc_process_limit > ALC_PROC_MAX) { | sc->alc_process_limit > ALC_PROC_MAX) { | ||||
device_printf(sc->alc_dev, | device_printf(sc->alc_dev, | ||||
"process_limit value out of range; " | "process_limit value out of range; " | ||||
"using default: %d\n", ALC_PROC_DEFAULT); | "using default: %d\n", ALC_PROC_DEFAULT); | ||||
sc->alc_process_limit = ALC_PROC_DEFAULT; | sc->alc_process_limit = ALC_PROC_DEFAULT; | ||||
} | } | ||||
} | } | ||||
tree = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, "stats", CTLFLAG_RD, | tree = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, "stats", | ||||
NULL, "ALC statistics"); | CTLFLAG_RD | CTLFLAG_MPSAFE, NULL, "ALC statistics"); | ||||
parent = SYSCTL_CHILDREN(tree); | parent = SYSCTL_CHILDREN(tree); | ||||
/* Rx statistics. */ | /* Rx statistics. */ | ||||
tree = SYSCTL_ADD_NODE(ctx, parent, OID_AUTO, "rx", CTLFLAG_RD, | tree = SYSCTL_ADD_NODE(ctx, parent, OID_AUTO, "rx", | ||||
NULL, "Rx MAC statistics"); | CTLFLAG_RD | CTLFLAG_MPSAFE, NULL, "Rx MAC statistics"); | ||||
child = SYSCTL_CHILDREN(tree); | child = SYSCTL_CHILDREN(tree); | ||||
ALC_SYSCTL_STAT_ADD32(ctx, child, "good_frames", | ALC_SYSCTL_STAT_ADD32(ctx, child, "good_frames", | ||||
&stats->rx_frames, "Good frames"); | &stats->rx_frames, "Good frames"); | ||||
ALC_SYSCTL_STAT_ADD32(ctx, child, "good_bcast_frames", | ALC_SYSCTL_STAT_ADD32(ctx, child, "good_bcast_frames", | ||||
&stats->rx_bcast_frames, "Good broadcast frames"); | &stats->rx_bcast_frames, "Good broadcast frames"); | ||||
ALC_SYSCTL_STAT_ADD32(ctx, child, "good_mcast_frames", | ALC_SYSCTL_STAT_ADD32(ctx, child, "good_mcast_frames", | ||||
&stats->rx_mcast_frames, "Good multicast frames"); | &stats->rx_mcast_frames, "Good multicast frames"); | ||||
ALC_SYSCTL_STAT_ADD32(ctx, child, "pause_frames", | ALC_SYSCTL_STAT_ADD32(ctx, child, "pause_frames", | ||||
Show All 24 Lines | |||||
&stats->rx_rrs_errs, "Return status write-back errors"); | &stats->rx_rrs_errs, "Return status write-back errors"); | ||||
ALC_SYSCTL_STAT_ADD32(ctx, child, "align_errs", | ALC_SYSCTL_STAT_ADD32(ctx, child, "align_errs", | ||||
&stats->rx_alignerrs, "Alignment errors"); | &stats->rx_alignerrs, "Alignment errors"); | ||||
ALC_SYSCTL_STAT_ADD32(ctx, child, "filtered", | ALC_SYSCTL_STAT_ADD32(ctx, child, "filtered", | ||||
&stats->rx_pkts_filtered, | &stats->rx_pkts_filtered, | ||||
"Frames dropped due to address filtering"); | "Frames dropped due to address filtering"); | ||||
/* Tx statistics. */ | /* Tx statistics. */ | ||||
tree = SYSCTL_ADD_NODE(ctx, parent, OID_AUTO, "tx", CTLFLAG_RD, | tree = SYSCTL_ADD_NODE(ctx, parent, OID_AUTO, "tx", | ||||
NULL, "Tx MAC statistics"); | CTLFLAG_RD | CTLFLAG_MPSAFE, NULL, "Tx MAC statistics"); | ||||
child = SYSCTL_CHILDREN(tree); | child = SYSCTL_CHILDREN(tree); | ||||
ALC_SYSCTL_STAT_ADD32(ctx, child, "good_frames", | ALC_SYSCTL_STAT_ADD32(ctx, child, "good_frames", | ||||
&stats->tx_frames, "Good frames"); | &stats->tx_frames, "Good frames"); | ||||
ALC_SYSCTL_STAT_ADD32(ctx, child, "good_bcast_frames", | ALC_SYSCTL_STAT_ADD32(ctx, child, "good_bcast_frames", | ||||
&stats->tx_bcast_frames, "Good broadcast frames"); | &stats->tx_bcast_frames, "Good broadcast frames"); | ||||
ALC_SYSCTL_STAT_ADD32(ctx, child, "good_mcast_frames", | ALC_SYSCTL_STAT_ADD32(ctx, child, "good_mcast_frames", | ||||
&stats->tx_mcast_frames, "Good multicast frames"); | &stats->tx_mcast_frames, "Good multicast frames"); | ||||
ALC_SYSCTL_STAT_ADD32(ctx, child, "pause_frames", | ALC_SYSCTL_STAT_ADD32(ctx, child, "pause_frames", | ||||
Show All 12 Lines |