svn commit: r209602 - head/sys/dev/ixgbe
Jack F Vogel
jfv at FreeBSD.org
Wed Jun 30 01:01:06 UTC 2010
Author: jfv
Date: Wed Jun 30 01:01:06 2010
New Revision: 209602
URL: http://svn.freebsd.org/changeset/base/209602
Log:
Add a new sysctl option, this will allow one to
limit the advertised speed of an SFP+ to 1G, effectively
"forcing" link at that lower speed. It is off by default
and is enabled by sysctl dev.ix.0.force_gig=1, 0 will
set it back to the norm.
Modified:
head/sys/dev/ixgbe/ixgbe.c
Modified: head/sys/dev/ixgbe/ixgbe.c
==============================================================================
--- head/sys/dev/ixgbe/ixgbe.c Tue Jun 29 23:08:33 2010 (r209601)
+++ head/sys/dev/ixgbe/ixgbe.c Wed Jun 30 01:01:06 2010 (r209602)
@@ -239,6 +239,15 @@ static int ixgbe_flow_control = ixgbe_fc
TUNABLE_INT("hw.ixgbe.flow_control", &ixgbe_flow_control);
/*
+** These adapters do not really autoneg, but slower
+** speed can be set by forcing the advertised value
+** to only 1G. Default to 0, set it to 1 to
+** force 1G link.
+*/
+static int ixgbe_force_speed = 0;
+TUNABLE_INT("hw.ixgbe.force_speed", &ixgbe_force_speed);
+
+/*
** Smart speed setting, default to on
** this only works as a compile option
** right now as its during attach, set
@@ -464,6 +473,11 @@ ixgbe_attach(device_t dev)
OID_AUTO, "flow_control", CTLTYPE_INT | CTLFLAG_RW,
adapter, 0, ixgbe_set_flowcntl, "I", "Flow Control");
+ SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev),
+ SYSCTL_CHILDREN(device_get_sysctl_tree(dev)),
+ OID_AUTO, "force_gig", CTLTYPE_INT | CTLFLAG_RW,
+ adapter, 0, ixgbe_set_gigspeed, "I", "Force 1G Speed");
+
SYSCTL_ADD_INT(device_get_sysctl_ctx(dev),
SYSCTL_CHILDREN(device_get_sysctl_tree(dev)),
OID_AUTO, "enable_aim", CTLTYPE_INT|CTLFLAG_RW,
@@ -4942,6 +4956,34 @@ ixgbe_sysctl_debug(SYSCTL_HANDLER_ARGS)
}
/*
+** Set link advertisement to 1G:
+** 0 - off
+** 1 - off
+*/
+static int
+ixgbe_set_gigspeed(SYSCTL_HANDLER_ARGS)
+{
+ struct adapter *adapter;
+ struct ixgbe_hw *hw;
+ int error;
+
+ error = sysctl_handle_int(oidp, &ixgbe_force_speed, 0, req);
+
+ if (error)
+ return (error);
+
+ adapter = (struct adapter *) arg1;
+ hw = &adapter->hw;
+ if (ixgbe_force_speed)
+ hw->phy.autoneg_advertised = IXGBE_LINK_SPEED_1GB_FULL;
+ else
+ hw->phy.autoneg_advertised = IXGBE_LINK_SPEED_10GB_FULL;
+
+ return error;
+}
+
+
+/*
** Set flow control using sysctl:
** Flow control values:
** 0 - off
More information about the svn-src-head
mailing list