summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrwatson <rwatson@FreeBSD.org>2003-05-16 01:13:16 +0000
committerrwatson <rwatson@FreeBSD.org>2003-05-16 01:13:16 +0000
commit49ec42645b698a2d1d13ce453d2f135046098070 (patch)
tree33e5e974317a9b4e671b864795eec9782b5ebfb0
parent19a94ea3a38a44ec60c6ebec5f3a8d99d066c45f (diff)
downloadFreeBSD-src-49ec42645b698a2d1d13ce453d2f135046098070.zip
FreeBSD-src-49ec42645b698a2d1d13ce453d2f135046098070.tar.gz
Add a tunable/sysctl "hw.fxp_noflow" which disables flow control support
on if_fxp cards. When flow control is enabled, if the operating system doesn't acknowledge the packet buffer filling, the card will begin to generate ethernet quench packets, but appears to get into a feedback loop of some sort, hosing local switches. This is a temporary workaround for 5.1: the ability to configure flow control should probably be exposed by some or another management interface on ethernet link layer devices. Approved by: re (bmah) Reviewed by: mux
-rw-r--r--sys/dev/fxp/if_fxp.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/sys/dev/fxp/if_fxp.c b/sys/dev/fxp/if_fxp.c
index 772ba01..1124ede 100644
--- a/sys/dev/fxp/if_fxp.c
+++ b/sys/dev/fxp/if_fxp.c
@@ -264,6 +264,10 @@ 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).
@@ -2051,7 +2055,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 (sc->revision == FXP_REV_82557) {
+ if (fxp_noflow || sc->revision == FXP_REV_82557) {
/*
* The 82557 has no hardware flow control, the values
* below are the defaults for the chip.
OpenPOWER on IntegriCloud