Allow the ASF feature to be disabled via a tunable. On one of my systems,

bringing up the bge interface results in a complete system freeze when
this feature is enabled.  Leave it enabled by default.
This commit is contained in:
Scott Long 2006-09-23 18:55:49 +00:00
parent 45e6819160
commit f1a7e6d559

View File

@ -79,6 +79,7 @@ __FBSDID("$FreeBSD$");
#include <sys/kernel.h> #include <sys/kernel.h>
#include <sys/module.h> #include <sys/module.h>
#include <sys/socket.h> #include <sys/socket.h>
#include <sys/sysctl.h>
#include <net/if.h> #include <net/if.h>
#include <net/if_arp.h> #include <net/if_arp.h>
@ -419,7 +420,16 @@ DRIVER_MODULE(bge, pci, bge_driver, bge_devclass, 0, 0);
DRIVER_MODULE(miibus, bge, miibus_driver, miibus_devclass, 0, 0); DRIVER_MODULE(miibus, bge, miibus_driver, miibus_devclass, 0, 0);
static int bge_fake_autoneg = 0; static int bge_fake_autoneg = 0;
static int bge_allow_asf = 1;
TUNABLE_INT("hw.bge.fake_autoneg", &bge_fake_autoneg); TUNABLE_INT("hw.bge.fake_autoneg", &bge_fake_autoneg);
TUNABLE_INT("hw.bge.allow_asf", &bge_allow_asf);
SYSCTL_NODE(_hw, OID_AUTO, bge, CTLFLAG_RD, 0, "BGE driver parameters");
SYSCTL_INT(_hw_bge, OID_AUTO, fake_autoneg, CTLFLAG_RD, &bge_fake_autoneg, 0,
"Enable fake autonegotiation for certain blade systems");
SYSCTL_INT(_hw_bge, OID_AUTO, allow_asf, CTLFLAG_RD, &bge_allow_asf, 0,
"Allow ASF mode if available");
static uint32_t static uint32_t
bge_readmem_ind(struct bge_softc *sc, int off) bge_readmem_ind(struct bge_softc *sc, int off)
@ -2179,8 +2189,8 @@ bge_attach(device_t dev)
} }
sc->bge_asf_mode = 0; sc->bge_asf_mode = 0;
if (bge_readmem_ind(sc, BGE_SOFTWARE_GENCOMM_SIG) if (bge_allow_asf && (bge_readmem_ind(sc, BGE_SOFTWARE_GENCOMM_SIG)
== BGE_MAGIC_NUMBER) { == BGE_MAGIC_NUMBER)) {
if (bge_readmem_ind(sc, BGE_SOFTWARE_GENCOMM_NICCFG) if (bge_readmem_ind(sc, BGE_SOFTWARE_GENCOMM_NICCFG)
& BGE_HWCFG_ASF) { & BGE_HWCFG_ASF) {
sc->bge_asf_mode |= ASF_ENABLE; sc->bge_asf_mode |= ASF_ENABLE;