From owner-svn-src-all@FreeBSD.ORG Wed Jun 30 01:10:08 2010 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id C81E81065670; Wed, 30 Jun 2010 01:10:08 +0000 (UTC) (envelope-from jfv@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id ABBD68FC0C; Wed, 30 Jun 2010 01:10:08 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o5U1A8FK090812; Wed, 30 Jun 2010 01:10:08 GMT (envelope-from jfv@svn.freebsd.org) Received: (from jfv@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o5U1A8VK090810; Wed, 30 Jun 2010 01:10:08 GMT (envelope-from jfv@svn.freebsd.org) Message-Id: <201006300110.o5U1A8VK090810@svn.freebsd.org> From: Jack F Vogel Date: Wed, 30 Jun 2010 01:10:08 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r209603 - head/sys/dev/ixgbe X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 30 Jun 2010 01:10:09 -0000 Author: jfv Date: Wed Jun 30 01:10:08 2010 New Revision: 209603 URL: http://svn.freebsd.org/changeset/base/209603 Log: BAH, I apologize, the wrong version of the code got fat fingered in place, this is the correct version that actually works... MFC: in a week Modified: head/sys/dev/ixgbe/ixgbe.c Modified: head/sys/dev/ixgbe/ixgbe.c ============================================================================== --- head/sys/dev/ixgbe/ixgbe.c Wed Jun 30 01:01:06 2010 (r209602) +++ head/sys/dev/ixgbe/ixgbe.c Wed Jun 30 01:10:08 2010 (r209603) @@ -46,7 +46,7 @@ int ixgbe_display_debug_stat /********************************************************************* * Driver version *********************************************************************/ -char ixgbe_driver_version[] = "2.2.1"; +char ixgbe_driver_version[] = "2.2.3"; /********************************************************************* * PCI Device ID Table @@ -154,6 +154,7 @@ static int ixgbe_xmit(struct tx_rin static int ixgbe_sysctl_stats(SYSCTL_HANDLER_ARGS); static int ixgbe_sysctl_debug(SYSCTL_HANDLER_ARGS); static int ixgbe_set_flowcntl(SYSCTL_HANDLER_ARGS); +static int ixgbe_set_advertise(SYSCTL_HANDLER_ARGS); static int ixgbe_dma_malloc(struct adapter *, bus_size_t, struct ixgbe_dma_alloc *, int); static void ixgbe_dma_free(struct adapter *, struct ixgbe_dma_alloc *); @@ -239,15 +240,6 @@ 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 @@ -475,8 +467,8 @@ ixgbe_attach(device_t dev) 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"); + OID_AUTO, "advertise_gig", CTLTYPE_INT | CTLFLAG_RW, + adapter, 0, ixgbe_set_advertise, "I", "1G Link"); SYSCTL_ADD_INT(device_get_sysctl_ctx(dev), SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), @@ -4956,34 +4948,6 @@ 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 @@ -5027,3 +4991,44 @@ ixgbe_add_rx_process_limit(struct adapte SYSCTL_CHILDREN(device_get_sysctl_tree(adapter->dev)), OID_AUTO, name, CTLTYPE_INT|CTLFLAG_RW, limit, value, description); } + +/* +** Control link advertise speed: +** 0 - normal +** 1 - advertise only 1G +*/ +static int +ixgbe_set_advertise(SYSCTL_HANDLER_ARGS) +{ + int error; + struct adapter *adapter; + struct ixgbe_hw *hw; + ixgbe_link_speed speed, last; + + adapter = (struct adapter *) arg1; + hw = &adapter->hw; + last = hw->phy.autoneg_advertised; + + error = sysctl_handle_int(oidp, &adapter->advertise, 0, req); + + if ((error) || (adapter->advertise == -1)) + return (error); + + if (!((hw->phy.media_type == ixgbe_media_type_copper) || + (hw->phy.multispeed_fiber))) + return (error); + + if (adapter->advertise == 1) + speed = IXGBE_LINK_SPEED_1GB_FULL; + else + speed = IXGBE_LINK_SPEED_1GB_FULL | + IXGBE_LINK_SPEED_10GB_FULL; + + if (speed == last) /* no change */ + return (error); + + hw->mac.autotry_restart = TRUE; + hw->mac.ops.setup_link(hw, speed, TRUE, TRUE); + + return (error); +}