Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/dev/pci - Sync with FreeBSD r320688 (and up to r322865):
details: https://anonhg.NetBSD.org/src/rev/cee08eff37d1
branches: trunk
changeset: 356067:cee08eff37d1
user: msaitoh <msaitoh%NetBSD.org@localhost>
date: Wed Aug 30 08:49:18 2017 +0000
description:
- Sync with FreeBSD r320688 (and up to r322865):
- Add C3000(Denvertion(-NS)) support.
- Add bypass function support for bypass adapters. Sysctls are provided.
Not tested because I have no any bypass adapter.
- ixv(4): set RSS mapping.
- Change EEE sysctl.
- ixv(4): Add TSOv6.
- ixv(4): Mailbox API 1.2 and more are implemented and comment says it
negotiate with 1.2 but it really does 1.1...
- Remove thermal test sysctl.
- Fix unknown bugs.
- Print driver feature capabilities and enable bits when verbose boot.
diffstat:
sys/dev/pci/files.pci | 4 +-
sys/dev/pci/ixgbe/if_bypass.c | 821 ++++++
sys/dev/pci/ixgbe/if_fdir.c | 160 +
sys/dev/pci/ixgbe/if_sriov.c | 914 +++++++
sys/dev/pci/ixgbe/ix_txrx.c | 1408 +++++-----
sys/dev/pci/ixgbe/ixgbe.c | 4373 +++++++++++++++-------------------
sys/dev/pci/ixgbe/ixgbe.h | 583 +---
sys/dev/pci/ixgbe/ixgbe_82598.c | 54 +-
sys/dev/pci/ixgbe/ixgbe_82598.h | 49 +-
sys/dev/pci/ixgbe/ixgbe_82599.c | 95 +-
sys/dev/pci/ixgbe/ixgbe_82599.h | 46 +-
sys/dev/pci/ixgbe/ixgbe_api.c | 249 +-
sys/dev/pci/ixgbe/ixgbe_api.h | 74 +-
sys/dev/pci/ixgbe/ixgbe_bypass.h | 51 +
sys/dev/pci/ixgbe/ixgbe_common.c | 961 +++++--
sys/dev/pci/ixgbe/ixgbe_common.h | 67 +-
sys/dev/pci/ixgbe/ixgbe_dcb.c | 52 +-
sys/dev/pci/ixgbe/ixgbe_dcb.h | 42 +-
sys/dev/pci/ixgbe/ixgbe_dcb_82598.c | 42 +-
sys/dev/pci/ixgbe/ixgbe_dcb_82598.h | 42 +-
sys/dev/pci/ixgbe/ixgbe_dcb_82599.c | 42 +-
sys/dev/pci/ixgbe/ixgbe_dcb_82599.h | 42 +-
sys/dev/pci/ixgbe/ixgbe_fdir.h | 58 +
sys/dev/pci/ixgbe/ixgbe_features.h | 83 +
sys/dev/pci/ixgbe/ixgbe_mbx.c | 166 +-
sys/dev/pci/ixgbe/ixgbe_mbx.h | 67 +-
sys/dev/pci/ixgbe/ixgbe_netmap.c | 521 ++++
sys/dev/pci/ixgbe/ixgbe_netmap.h | 59 +
sys/dev/pci/ixgbe/ixgbe_osdep.c | 9 +-
sys/dev/pci/ixgbe/ixgbe_osdep.h | 20 +-
sys/dev/pci/ixgbe/ixgbe_phy.c | 467 +--
sys/dev/pci/ixgbe/ixgbe_phy.h | 55 +-
sys/dev/pci/ixgbe/ixgbe_rss.h | 64 +
sys/dev/pci/ixgbe/ixgbe_sriov.h | 102 +
sys/dev/pci/ixgbe/ixgbe_type.h | 522 +++-
sys/dev/pci/ixgbe/ixgbe_vf.c | 183 +-
sys/dev/pci/ixgbe/ixgbe_vf.h | 18 +-
sys/dev/pci/ixgbe/ixgbe_x540.c | 138 +-
sys/dev/pci/ixgbe/ixgbe_x540.h | 45 +-
sys/dev/pci/ixgbe/ixgbe_x550.c | 2421 +++++++++++++++---
sys/dev/pci/ixgbe/ixgbe_x550.h | 69 +-
sys/dev/pci/ixgbe/ixv.c | 1617 +++++++-----
42 files changed, 10758 insertions(+), 6097 deletions(-)
diffs (truncated from 24130 to 300 lines):
diff -r 1fff8dc3c85c -r cee08eff37d1 sys/dev/pci/files.pci
--- a/sys/dev/pci/files.pci Wed Aug 30 08:24:57 2017 +0000
+++ b/sys/dev/pci/files.pci Wed Aug 30 08:49:18 2017 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: files.pci,v 1.389 2017/08/02 08:39:14 cherry Exp $
+# $NetBSD: files.pci,v 1.390 2017/08/30 08:49:18 msaitoh Exp $
#
# Config file and device description for machine-independent PCI code.
# Included by ports that need it. Requires that the SCSI files be
@@ -680,6 +680,8 @@
file dev/pci/ixgbe/ixgbe_osdep.c ixg | ixv
file dev/pci/ixgbe/ixgbe_phy.c ixg | ixv
file dev/pci/ixgbe/ixgbe_vf.c ixg | ixv
+file dev/pci/ixgbe/if_bypass.c ixg | ixv
+file dev/pci/ixgbe/if_fdir.c ixg | ixv
# This appears to be the driver for virtual instances of i82599.
device ixv: ether, ifnet, arp
diff -r 1fff8dc3c85c -r cee08eff37d1 sys/dev/pci/ixgbe/if_bypass.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sys/dev/pci/ixgbe/if_bypass.c Wed Aug 30 08:49:18 2017 +0000
@@ -0,0 +1,821 @@
+/******************************************************************************
+
+ Copyright (c) 2001-2017, Intel Corporation
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ 3. Neither the name of the Intel Corporation nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+
+******************************************************************************/
+/*$FreeBSD: head/sys/dev/ixgbe/if_bypass.c 320688 2017-07-05 17:27:03Z erj $*/
+
+
+#include "ixgbe.h"
+
+/************************************************************************
+ * ixgbe_bypass_mutex_enter
+ *
+ * Mutex support for the bypass feature. Using a dual lock
+ * to facilitate a privileged access to the watchdog update
+ * over other threads.
+ ************************************************************************/
+static void
+ixgbe_bypass_mutex_enter(struct adapter *adapter)
+{
+ while (atomic_cas_uint(&adapter->bypass.low, 0, 1) == 0)
+ usec_delay(3000);
+ while (atomic_cas_uint(&adapter->bypass.high, 0, 1) == 0)
+ usec_delay(3000);
+ return;
+} /* ixgbe_bypass_mutex_enter */
+
+/************************************************************************
+ * ixgbe_bypass_mutex_clear
+ ************************************************************************/
+static void
+ixgbe_bypass_mutex_clear(struct adapter *adapter)
+{
+ while (atomic_cas_uint(&adapter->bypass.high, 1, 0) == 0)
+ usec_delay(6000);
+ while (atomic_cas_uint(&adapter->bypass.low, 1, 0) == 0)
+ usec_delay(6000);
+ return;
+} /* ixgbe_bypass_mutex_clear */
+
+/************************************************************************
+ * ixgbe_bypass_wd_mutex_enter
+ *
+ * Watchdog entry is allowed to simply grab the high priority
+ ************************************************************************/
+static void
+ixgbe_bypass_wd_mutex_enter(struct adapter *adapter)
+{
+ while (atomic_cas_uint(&adapter->bypass.high, 0, 1) == 0)
+ usec_delay(3000);
+ return;
+} /* ixgbe_bypass_wd_mutex_enter */
+
+/************************************************************************
+ * ixgbe_bypass_wd_mutex_clear
+ ************************************************************************/
+static void
+ixgbe_bypass_wd_mutex_clear(struct adapter *adapter)
+{
+ while (atomic_cas_uint(&adapter->bypass.high, 1, 0) == 0)
+ usec_delay(6000);
+ return;
+} /* ixgbe_bypass_wd_mutex_clear */
+
+/************************************************************************
+ * ixgbe_get_bypass_time
+ ************************************************************************/
+static void
+ixgbe_get_bypass_time(u32 *year, u32 *sec)
+{
+ struct timespec current;
+
+ *year = 1970; /* time starts at 01/01/1970 */
+ nanotime(¤t);
+ *sec = current.tv_sec;
+
+ while(*sec > SEC_THIS_YEAR(*year)) {
+ *sec -= SEC_THIS_YEAR(*year);
+ (*year)++;
+ }
+} /* ixgbe_get_bypass_time */
+
+/************************************************************************
+ * ixgbe_bp_version
+ *
+ * Display the feature version
+ ************************************************************************/
+static int
+ixgbe_bp_version(SYSCTLFN_ARGS)
+{
+ struct sysctlnode node = *rnode;
+ struct adapter *adapter = (struct adapter *)node.sysctl_data;
+ struct ixgbe_hw *hw = &adapter->hw;
+ int error = 0;
+ static int featversion = 0;
+ u32 cmd;
+
+ ixgbe_bypass_mutex_enter(adapter);
+ cmd = BYPASS_PAGE_CTL2 | BYPASS_WE;
+ cmd |= (BYPASS_EEPROM_VER_ADD << BYPASS_CTL2_OFFSET_SHIFT) &
+ BYPASS_CTL2_OFFSET_M;
+ if ((error = hw->mac.ops.bypass_rw(hw, cmd, &featversion) != 0))
+ goto err;
+ msec_delay(100);
+ cmd &= ~BYPASS_WE;
+ if ((error = hw->mac.ops.bypass_rw(hw, cmd, &featversion) != 0))
+ goto err;
+ ixgbe_bypass_mutex_clear(adapter);
+ featversion &= BYPASS_CTL2_DATA_M;
+ error = sysctl_lookup(SYSCTLFN_CALL(&node));
+ return (error);
+err:
+ ixgbe_bypass_mutex_clear(adapter);
+ return (error);
+
+} /* ixgbe_bp_version */
+
+/************************************************************************
+ * ixgbe_bp_set_state
+ *
+ * Show/Set the Bypass State:
+ * 1 = NORMAL
+ * 2 = BYPASS
+ * 3 = ISOLATE
+ *
+ * With no argument the state is displayed,
+ * passing a value will set it.
+ ************************************************************************/
+static int
+ixgbe_bp_set_state(SYSCTLFN_ARGS)
+{
+ struct sysctlnode node = *rnode;
+ struct adapter *adapter = (struct adapter *)node.sysctl_data;
+ struct ixgbe_hw *hw = &adapter->hw;
+ int error = 0;
+ static int state = 0;
+
+ /* Get the current state */
+ ixgbe_bypass_mutex_enter(adapter);
+ error = hw->mac.ops.bypass_rw(hw,
+ BYPASS_PAGE_CTL0, &state);
+ ixgbe_bypass_mutex_clear(adapter);
+ if (error)
+ return (error);
+ state = (state >> BYPASS_STATUS_OFF_SHIFT) & 0x3;
+
+ error = sysctl_lookup(SYSCTLFN_CALL(&node));
+ if ((error) || (newp == NULL))
+ return (error);
+
+ /* Sanity check new state */
+ switch (state) {
+ case BYPASS_NORM:
+ case BYPASS_BYPASS:
+ case BYPASS_ISOLATE:
+ break;
+ default:
+ return (EINVAL);
+ }
+ ixgbe_bypass_mutex_enter(adapter);
+ if ((error = hw->mac.ops.bypass_set(hw, BYPASS_PAGE_CTL0,
+ BYPASS_MODE_OFF_M, state) != 0))
+ goto out;
+ /* Set AUTO back on so FW can receive events */
+ error = hw->mac.ops.bypass_set(hw, BYPASS_PAGE_CTL0,
+ BYPASS_MODE_OFF_M, BYPASS_AUTO);
+out:
+ ixgbe_bypass_mutex_clear(adapter);
+ usec_delay(6000);
+ return (error);
+} /* ixgbe_bp_set_state */
+
+/************************************************************************
+ * The following routines control the operational
+ * "rules" of the feature, what behavior will occur
+ * when particular events occur.
+ * Values are:
+ * 0 - no change for the event (NOP)
+ * 1 - go to Normal operation
+ * 2 - go to Bypass operation
+ * 3 - go to Isolate operation
+ * Calling the entry with no argument just displays
+ * the current rule setting.
+ ************************************************************************/
+
+/************************************************************************
+ * ixgbe_bp_timeout
+ *
+ * This is to set the Rule for the watchdog,
+ * not the actual watchdog timeout value.
+ ************************************************************************/
+static int
+ixgbe_bp_timeout(SYSCTLFN_ARGS)
+{
+ struct sysctlnode node = *rnode;
+ struct adapter *adapter = (struct adapter *)node.sysctl_data;
+ struct ixgbe_hw *hw = &adapter->hw;
+ int error = 0;
+ static int timeout = 0;
+
+ /* Get the current value */
+ ixgbe_bypass_mutex_enter(adapter);
+ error = hw->mac.ops.bypass_rw(hw, BYPASS_PAGE_CTL0, &timeout);
+ ixgbe_bypass_mutex_clear(adapter);
+ if (error)
+ return (error);
+ timeout = (timeout >> BYPASS_WDTIMEOUT_SHIFT) & 0x3;
+
+ error = sysctl_lookup(SYSCTLFN_CALL(&node));
+ if ((error) || (newp == NULL))
+ return (error);
+
+ /* Sanity check on the setting */
+ switch (timeout) {
+ case BYPASS_NOP:
+ case BYPASS_NORM:
+ case BYPASS_BYPASS:
+ case BYPASS_ISOLATE:
+ break;
+ default:
+ return (EINVAL);
+ }
+
+ /* Set the new state */
+ ixgbe_bypass_mutex_enter(adapter);
+ error = hw->mac.ops.bypass_set(hw, BYPASS_PAGE_CTL0,
+ BYPASS_WDTIMEOUT_M, timeout << BYPASS_WDTIMEOUT_SHIFT);
+ ixgbe_bypass_mutex_clear(adapter);
+ usec_delay(6000);
+ return (error);
+} /* ixgbe_bp_timeout */
+
+/************************************************************************
+ * ixgbe_bp_main_on
+ ************************************************************************/
+static int
+ixgbe_bp_main_on(SYSCTLFN_ARGS)
+{
+ struct sysctlnode node = *rnode;
+ struct adapter *adapter = (struct adapter *)node.sysctl_data;
+ struct ixgbe_hw *hw = &adapter->hw;
+ int error = 0;
+ static int main_on = 0;
+
+ ixgbe_bypass_mutex_enter(adapter);
+ error = hw->mac.ops.bypass_rw(hw, BYPASS_PAGE_CTL0, &main_on);
+ main_on = (main_on >> BYPASS_MAIN_ON_SHIFT) & 0x3;
+ ixgbe_bypass_mutex_clear(adapter);
+ if (error)
+ return (error);
+
Home |
Main Index |
Thread Index |
Old Index