Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/ale/if_ale.c
Show All 12 Lines | |||||
struct ale_hw_stats *stats; | struct ale_hw_stats *stats; | ||||
int error; | int error; | ||||
stats = &sc->ale_stats; | stats = &sc->ale_stats; | ||||
ctx = device_get_sysctl_ctx(sc->ale_dev); | ctx = device_get_sysctl_ctx(sc->ale_dev); | ||||
child = SYSCTL_CHILDREN(device_get_sysctl_tree(sc->ale_dev)); | child = SYSCTL_CHILDREN(device_get_sysctl_tree(sc->ale_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->ale_int_rx_mod, 0, | CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, &sc->ale_int_rx_mod, | ||||
sysctl_hw_ale_int_mod, "I", "ale Rx interrupt moderation"); | 0, sysctl_hw_ale_int_mod, "I", "ale 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->ale_int_tx_mod, 0, | CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, &sc->ale_int_tx_mod, | ||||
sysctl_hw_ale_int_mod, "I", "ale Tx interrupt moderation"); | 0, sysctl_hw_ale_int_mod, "I", "ale Tx interrupt moderation"); | ||||
/* Pull in device tunables. */ | /* Pull in device tunables. */ | ||||
sc->ale_int_rx_mod = ALE_IM_RX_TIMER_DEFAULT; | sc->ale_int_rx_mod = ALE_IM_RX_TIMER_DEFAULT; | ||||
error = resource_int_value(device_get_name(sc->ale_dev), | error = resource_int_value(device_get_name(sc->ale_dev), | ||||
device_get_unit(sc->ale_dev), "int_rx_mod", &sc->ale_int_rx_mod); | device_get_unit(sc->ale_dev), "int_rx_mod", &sc->ale_int_rx_mod); | ||||
if (error == 0) { | if (error == 0) { | ||||
if (sc->ale_int_rx_mod < ALE_IM_TIMER_MIN || | if (sc->ale_int_rx_mod < ALE_IM_TIMER_MIN || | ||||
sc->ale_int_rx_mod > ALE_IM_TIMER_MAX) { | sc->ale_int_rx_mod > ALE_IM_TIMER_MAX) { | ||||
device_printf(sc->ale_dev, "int_rx_mod value out of " | device_printf(sc->ale_dev, "int_rx_mod value out of " | ||||
Show All 10 Lines | |||||
sc->ale_int_tx_mod > ALE_IM_TIMER_MAX) { | sc->ale_int_tx_mod > ALE_IM_TIMER_MAX) { | ||||
device_printf(sc->ale_dev, "int_tx_mod value out of " | device_printf(sc->ale_dev, "int_tx_mod value out of " | ||||
"range; using default: %d\n", | "range; using default: %d\n", | ||||
ALE_IM_TX_TIMER_DEFAULT); | ALE_IM_TX_TIMER_DEFAULT); | ||||
sc->ale_int_tx_mod = ALE_IM_TX_TIMER_DEFAULT; | sc->ale_int_tx_mod = ALE_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->ale_process_limit, 0, | CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, | ||||
sysctl_hw_ale_proc_limit, "I", | &sc->ale_process_limit, 0, sysctl_hw_ale_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->ale_process_limit = ALE_PROC_DEFAULT; | sc->ale_process_limit = ALE_PROC_DEFAULT; | ||||
error = resource_int_value(device_get_name(sc->ale_dev), | error = resource_int_value(device_get_name(sc->ale_dev), | ||||
device_get_unit(sc->ale_dev), "process_limit", | device_get_unit(sc->ale_dev), "process_limit", | ||||
&sc->ale_process_limit); | &sc->ale_process_limit); | ||||
if (error == 0) { | if (error == 0) { | ||||
if (sc->ale_process_limit < ALE_PROC_MIN || | if (sc->ale_process_limit < ALE_PROC_MIN || | ||||
sc->ale_process_limit > ALE_PROC_MAX) { | sc->ale_process_limit > ALE_PROC_MAX) { | ||||
device_printf(sc->ale_dev, | device_printf(sc->ale_dev, | ||||
"process_limit value out of range; " | "process_limit value out of range; " | ||||
"using default: %d\n", ALE_PROC_DEFAULT); | "using default: %d\n", ALE_PROC_DEFAULT); | ||||
sc->ale_process_limit = ALE_PROC_DEFAULT; | sc->ale_process_limit = ALE_PROC_DEFAULT; | ||||
} | } | ||||
} | } | ||||
/* Misc statistics. */ | /* Misc statistics. */ | ||||
ALE_SYSCTL_STAT_ADD32(ctx, child, "reset_brk_seq", | ALE_SYSCTL_STAT_ADD32(ctx, child, "reset_brk_seq", | ||||
&stats->reset_brk_seq, | &stats->reset_brk_seq, | ||||
"Controller resets due to broken Rx sequnce number"); | "Controller resets due to broken Rx sequnce number"); | ||||
tree = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, "stats", CTLFLAG_RD, | tree = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, "stats", | ||||
NULL, "ATE statistics"); | CTLFLAG_RD | CTLFLAG_MPSAFE, NULL, "ATE 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); | ||||
ALE_SYSCTL_STAT_ADD32(ctx, child, "good_frames", | ALE_SYSCTL_STAT_ADD32(ctx, child, "good_frames", | ||||
&stats->rx_frames, "Good frames"); | &stats->rx_frames, "Good frames"); | ||||
ALE_SYSCTL_STAT_ADD32(ctx, child, "good_bcast_frames", | ALE_SYSCTL_STAT_ADD32(ctx, child, "good_bcast_frames", | ||||
&stats->rx_bcast_frames, "Good broadcast frames"); | &stats->rx_bcast_frames, "Good broadcast frames"); | ||||
ALE_SYSCTL_STAT_ADD32(ctx, child, "good_mcast_frames", | ALE_SYSCTL_STAT_ADD32(ctx, child, "good_mcast_frames", | ||||
&stats->rx_mcast_frames, "Good multicast frames"); | &stats->rx_mcast_frames, "Good multicast frames"); | ||||
ALE_SYSCTL_STAT_ADD32(ctx, child, "pause_frames", | ALE_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"); | ||||
ALE_SYSCTL_STAT_ADD32(ctx, child, "align_errs", | ALE_SYSCTL_STAT_ADD32(ctx, child, "align_errs", | ||||
&stats->rx_alignerrs, "Alignment errors"); | &stats->rx_alignerrs, "Alignment errors"); | ||||
ALE_SYSCTL_STAT_ADD32(ctx, child, "filtered", | ALE_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); | ||||
ALE_SYSCTL_STAT_ADD32(ctx, child, "good_frames", | ALE_SYSCTL_STAT_ADD32(ctx, child, "good_frames", | ||||
&stats->tx_frames, "Good frames"); | &stats->tx_frames, "Good frames"); | ||||
ALE_SYSCTL_STAT_ADD32(ctx, child, "good_bcast_frames", | ALE_SYSCTL_STAT_ADD32(ctx, child, "good_bcast_frames", | ||||
&stats->tx_bcast_frames, "Good broadcast frames"); | &stats->tx_bcast_frames, "Good broadcast frames"); | ||||
ALE_SYSCTL_STAT_ADD32(ctx, child, "good_mcast_frames", | ALE_SYSCTL_STAT_ADD32(ctx, child, "good_mcast_frames", | ||||
&stats->tx_mcast_frames, "Good multicast frames"); | &stats->tx_mcast_frames, "Good multicast frames"); | ||||
ALE_SYSCTL_STAT_ADD32(ctx, child, "pause_frames", | ALE_SYSCTL_STAT_ADD32(ctx, child, "pause_frames", | ||||
Show All 12 Lines |