summaryrefslogtreecommitdiffstats
path: root/sys/dev/fxp
diff options
context:
space:
mode:
authormux <mux@FreeBSD.org>2004-06-02 22:52:18 +0000
committermux <mux@FreeBSD.org>2004-06-02 22:52:18 +0000
commitaaf8d85c22e2152aca2bf163140195ce51d71c48 (patch)
tree6ff783c7929295a389fdd97227bbaefc6822487e /sys/dev/fxp
parent0ccfefe220ce5b172c2aa051b96c1391d8928e38 (diff)
downloadFreeBSD-src-aaf8d85c22e2152aca2bf163140195ce51d71c48.zip
FreeBSD-src-aaf8d85c22e2152aca2bf163140195ce51d71c48.tar.gz
Use the device sysctl tree instead of rolling our own. Some of the
sysctls were global (hw.fxp_rnr and hw.fxp_noflow), all of them are now per-device. Sample output of "sysctl dev.fxp0" with this patch, with the standard %foo nodes removed : dev.fxp0.int_delay: 1000 dev.fxp0.bundle_max: 6 dev.fxp0.rnr: 0 dev.fxp0.noflow: 0
Diffstat (limited to 'sys/dev/fxp')
-rw-r--r--sys/dev/fxp/if_fxp.c42
-rw-r--r--sys/dev/fxp/if_fxpvar.h4
2 files changed, 20 insertions, 26 deletions
diff --git a/sys/dev/fxp/if_fxp.c b/sys/dev/fxp/if_fxp.c
index 2257a64..fd87125 100644
--- a/sys/dev/fxp/if_fxp.c
+++ b/sys/dev/fxp/if_fxp.c
@@ -281,13 +281,6 @@ DRIVER_MODULE(fxp, pci, fxp_driver, fxp_devclass, 0, 0);
DRIVER_MODULE(fxp, cardbus, fxp_driver, fxp_devclass, 0, 0);
DRIVER_MODULE(miibus, fxp, miibus_driver, miibus_devclass, 0, 0);
-static int fxp_rnr;
-SYSCTL_INT(_hw, OID_AUTO, fxp_rnr, CTLFLAG_RW, &fxp_rnr, 0, "fxp rnr events");
-
-static int fxp_noflow;
-SYSCTL_INT(_hw, OID_AUTO, fxp_noflow, CTLFLAG_RW, &fxp_noflow, 0, "fxp flow control disabled");
-TUNABLE_INT("hw.fxp_noflow", &fxp_noflow);
-
/*
* Wait for the previous command to be accepted (but not necessarily
* completed).
@@ -412,7 +405,6 @@ fxp_attach(device_t dev)
sc->dev = dev;
callout_init(&sc->stat_ch, CALLOUT_MPSAFE);
- sysctl_ctx_init(&sc->sysctl_ctx);
mtx_init(&sc->sc_mtx, device_get_nameunit(dev), MTX_NETWORK_LOCK,
MTX_DEF);
ifmedia_init(&sc->sc_media, 0, fxp_serial_ifmedia_upd,
@@ -496,34 +488,38 @@ fxp_attach(device_t dev)
(data & FXP_PHY_SERIAL_ONLY))
sc->flags |= FXP_FLAG_SERIAL_MEDIA;
- /*
- * Create the sysctl tree
- */
- sc->sysctl_tree = SYSCTL_ADD_NODE(&sc->sysctl_ctx,
- SYSCTL_STATIC_CHILDREN(_hw), OID_AUTO,
- device_get_nameunit(dev), CTLFLAG_RD, 0, "");
- if (sc->sysctl_tree == NULL) {
- error = ENXIO;
- goto fail;
- }
- SYSCTL_ADD_PROC(&sc->sysctl_ctx, SYSCTL_CHILDREN(sc->sysctl_tree),
+ SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev),
+ SYSCTL_CHILDREN(device_get_sysctl_tree(dev)),
OID_AUTO, "int_delay", CTLTYPE_INT | CTLFLAG_RW,
&sc->tunable_int_delay, 0, sysctl_hw_fxp_int_delay, "I",
"FXP driver receive interrupt microcode bundling delay");
- SYSCTL_ADD_PROC(&sc->sysctl_ctx, SYSCTL_CHILDREN(sc->sysctl_tree),
+ SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev),
+ SYSCTL_CHILDREN(device_get_sysctl_tree(dev)),
OID_AUTO, "bundle_max", CTLTYPE_INT | CTLFLAG_RW,
&sc->tunable_bundle_max, 0, sysctl_hw_fxp_bundle_max, "I",
"FXP driver receive interrupt microcode bundle size limit");
+ SYSCTL_ADD_INT(device_get_sysctl_ctx(dev),
+ SYSCTL_CHILDREN(device_get_sysctl_tree(dev)),
+ OID_AUTO, "rnr", CTLFLAG_RD, &sc->rnr, 0,
+ "FXP RNR events");
+ SYSCTL_ADD_INT(device_get_sysctl_ctx(dev),
+ SYSCTL_CHILDREN(device_get_sysctl_tree(dev)),
+ OID_AUTO, "noflow", CTLFLAG_RW, &sc->tunable_noflow, 0,
+ "FXP flow control disabled");
/*
* Pull in device tunables.
*/
sc->tunable_int_delay = TUNABLE_INT_DELAY;
sc->tunable_bundle_max = TUNABLE_BUNDLE_MAX;
+ sc->tunable_noflow = 0;
(void) resource_int_value(device_get_name(dev), device_get_unit(dev),
"int_delay", &sc->tunable_int_delay);
(void) resource_int_value(device_get_name(dev), device_get_unit(dev),
"bundle_max", &sc->tunable_bundle_max);
+ (void) resource_int_value(device_get_name(dev), device_get_unit(dev),
+ "noflow", &sc->tunable_noflow);
+ sc->rnr = 0;
/*
* Find out the chip revision; lump all 82557 revs together.
@@ -923,8 +919,6 @@ fxp_release(struct fxp_softc *sc)
if (sc->mcs_tag)
bus_dma_tag_destroy(sc->mcs_tag);
- sysctl_ctx_free(&sc->sysctl_ctx);
-
mtx_destroy(&sc->sc_mtx);
}
@@ -1642,7 +1636,7 @@ fxp_intr_body(struct fxp_softc *sc, struct ifnet *ifp, u_int8_t statack,
mtx_assert(&sc->sc_mtx, MA_OWNED);
if (rnr)
- fxp_rnr++;
+ sc->rnr++;
#ifdef DEVICE_POLLING
/* Pick up a deferred RNR condition if `count' ran out last time. */
if (sc->flags & FXP_FLAG_DEFERRED_RNR) {
@@ -2129,7 +2123,7 @@ fxp_init_body(struct fxp_softc *sc)
cbp->mc_all = sc->flags & FXP_FLAG_ALL_MCAST ? 1 : 0;
cbp->gamla_rx = sc->flags & FXP_FLAG_EXT_RFA ? 1 : 0;
- if (fxp_noflow || sc->revision == FXP_REV_82557) {
+ if (sc->tunable_noflow || sc->revision == FXP_REV_82557) {
/*
* The 82557 has no hardware flow control, the values
* below are the defaults for the chip.
diff --git a/sys/dev/fxp/if_fxpvar.h b/sys/dev/fxp/if_fxpvar.h
index 7515861..3471a83 100644
--- a/sys/dev/fxp/if_fxpvar.h
+++ b/sys/dev/fxp/if_fxpvar.h
@@ -180,10 +180,10 @@ struct fxp_softc {
struct ifmedia sc_media; /* media information */
device_t miibus;
device_t dev;
- struct sysctl_ctx_list sysctl_ctx;
- struct sysctl_oid *sysctl_tree;
int tunable_int_delay; /* interrupt delay value for ucode */
int tunable_bundle_max; /* max # frames per interrupt (ucode) */
+ int tunable_noflow; /* flow control disabled */
+ int rnr; /* RNR events */
int eeprom_size; /* size of serial EEPROM */
int suspended; /* 0 = normal 1 = suspended or dead */
int cu_resume_bug;
OpenPOWER on IntegriCloud