#
# Intel network device configuration
#

config NET_VENDOR_INTEL
	bool "Intel devices"
	default y
	---help---
	  If you have a network (Ethernet) card belonging to this class, say Y.

	  Note that the answer to this question doesn't directly affect the
	  kernel: saying N will just cause the configurator to skip all
	  the questions about Intel cards. If you say Y, you will be asked for
	  your specific card in the following questions.

if NET_VENDOR_INTEL

config E100
	tristate "Intel(R) PRO/100+ support"
	depends on PCI
	select MII
	---help---
	  This driver supports Intel(R) PRO/100 family of adapters.
	  To verify that your adapter is supported, find the board ID number
	  on the adapter. Look for a label that has a barcode and a number
	  in the format 123456-001 (six digits hyphen three digits).

	  Use the above information and the Adapter & Driver ID Guide that
	  can be located at:

	  <http://support.intel.com>

	  to identify the adapter.

	  More specific information on configuring the driver is in
	  <file:Documentation/networking/device_drivers/intel/e100.rst>.

	  To compile this driver as a module, choose M here. The module
	  will be called e100.

config E1000
	tristate "Intel(R) PRO/1000 Gigabit Ethernet support"
	depends on PCI
	---help---
	  This driver supports Intel(R) PRO/1000 gigabit ethernet family of
	  adapters.  For more information on how to identify your adapter, go
	  to the Adapter & Driver ID Guide that can be located at:

	  <http://support.intel.com>

	  More specific information on configuring the driver is in
	  <file:Documentation/networking/device_drivers/intel/e1000.rst>.

	  To compile this driver as a module, choose M here. The module
	  will be called e1000.

config E1000E
	tristate "Intel(R) PRO/1000 PCI-Express Gigabit Ethernet support"
	depends on PCI && (!SPARC32 || BROKEN)
	select CRC32
	imply PTP_1588_CLOCK
	---help---
	  This driver supports the PCI-Express Intel(R) PRO/1000 gigabit
	  ethernet family of adapters. For PCI or PCI-X e1000 adapters,
	  use the regular e1000 driver For more information on how to
	  identify your adapter, go to the Adapter & Driver ID Guide that
	  can be located at:

	  <http://support.intel.com>

	  More specific information on configuring the driver is in
	  <file:Documentation/networking/device_drivers/intel/e1000e.rst>.

	  To compile this driver as a module, choose M here. The module
	  will be called e1000e.

config E1000E_HWTS
	bool "Support HW cross-timestamp on PCH devices"
	default y
	depends on E1000E && X86
	---help---
	 Say Y to enable hardware supported cross-timestamping on PCH
	 devices. The cross-timestamp is available through the PTP clock
	 driver precise cross-timestamp ioctl (PTP_SYS_OFFSET_PRECISE).

config IGB
	tristate "Intel(R) 82575/82576 PCI-Express Gigabit Ethernet support"
	depends on PCI
	imply PTP_1588_CLOCK
	select I2C
	select I2C_ALGOBIT
	---help---
	  This driver supports Intel(R) 82575/82576 gigabit ethernet family of
	  adapters.  For more information on how to identify your adapter, go
	  to the Adapter & Driver ID Guide that can be located at:

	  <http://support.intel.com>

	  More specific information on configuring the driver is in
	  <file:Documentation/networking/device_drivers/intel/igb.rst>.

	  To compile this driver as a module, choose M here. The module
	  will be called igb.

config IGB_HWMON
	bool "Intel(R) PCI-Express Gigabit adapters HWMON support"
	default y
	depends on IGB && HWMON && !(IGB=y && HWMON=m)
	---help---
	  Say Y if you want to expose thermal sensor data on Intel devices.

	  Some of our devices contain thermal sensors, both external and internal.
	  This data is available via the hwmon sysfs interface and exposes
	  the onboard sensors.

config IGB_DCA
	bool "Direct Cache Access (DCA) Support"
	default y
	depends on IGB && DCA && !(IGB=y && DCA=m)
	---help---
	  Say Y here if you want to use Direct Cache Access (DCA) in the
	  driver.  DCA is a method for warming the CPU cache before data
	  is used, with the intent of lessening the impact of cache misses.

config IGBVF
	tristate "Intel(R) 82576 Virtual Function Ethernet support"
	depends on PCI
	---help---
	  This driver supports Intel(R) 82576 virtual functions.  For more
	  information on how to identify your adapter, go to the Adapter &
	  Driver ID Guide that can be located at:

	  <http://support.intel.com>

	  More specific information on configuring the driver is in
	  <file:Documentation/networking/device_drivers/intel/igbvf.rst>.

	  To compile this driver as a module, choose M here. The module
	  will be called igbvf.

config IXGB
	tristate "Intel(R) PRO/10GbE support"
	depends on PCI
	---help---
	  This driver supports Intel(R) PRO/10GbE family of adapters for
	  PCI-X type cards. For PCI-E type cards, use the "ixgbe" driver
	  instead. For more information on how to identify your adapter, go
	  to the Adapter & Driver ID Guide that can be located at:

	  <http://support.intel.com>

	  More specific information on configuring the driver is in
	  <file:Documentation/networking/device_drivers/intel/ixgb.rst>.

	  To compile this driver as a module, choose M here. The module
	  will be called ixgb.

config IXGBE
	tristate "Intel(R) 10GbE PCI Express adapters support"
	depends on PCI
	select MDIO
	select PHYLIB
	imply PTP_1588_CLOCK
	---help---
	  This driver supports Intel(R) 10GbE PCI Express family of
	  adapters.  For more information on how to identify your adapter, go
	  to the Adapter & Driver ID Guide that can be located at:

	  <http://support.intel.com>

	  More specific information on configuring the driver is in
	  <file:Documentation/networking/device_drivers/intel/ixgbe.rst>.

	  To compile this driver as a module, choose M here. The module
	  will be called ixgbe.

config IXGBE_HWMON
	bool "Intel(R) 10GbE PCI Express adapters HWMON support"
	default y
	depends on IXGBE && HWMON && !(IXGBE=y && HWMON=m)
	---help---
	  Say Y if you want to expose the thermal sensor data on some of
	  our cards, via a hwmon sysfs interface.

config IXGBE_DCA
	bool "Direct Cache Access (DCA) Support"
	default y
	depends on IXGBE && DCA && !(IXGBE=y && DCA=m)
	---help---
	  Say Y here if you want to use Direct Cache Access (DCA) in the
	  driver.  DCA is a method for warming the CPU cache before data
	  is used, with the intent of lessening the impact of cache misses.

config IXGBE_DCB
	bool "Data Center Bridging (DCB) Support"
	default n
	depends on IXGBE && DCB
	---help---
	  Say Y here if you want to use Data Center Bridging (DCB) in the
	  driver.

	  If unsure, say N.

config IXGBE_IPSEC
	bool "IPSec XFRM cryptography-offload acceleration"
	depends on IXGBE
	depends on XFRM_OFFLOAD
	default y
	select XFRM_ALGO
	---help---
	  Enable support for IPSec offload in ixgbe.ko

config IXGBEVF
	tristate "Intel(R) 10GbE PCI Express Virtual Function Ethernet support"
	depends on PCI_MSI
	---help---
	  This driver supports Intel(R) PCI Express virtual functions for the
	  Intel(R) ixgbe driver.  For more information on how to identify your
	  adapter, go to the Adapter & Driver ID Guide that can be located at:

	  <http://support.intel.com>

	  More specific information on configuring the driver is in
	  <file:Documentation/networking/device_drivers/intel/ixgbevf.rst>.

	  To compile this driver as a module, choose M here. The module
	  will be called ixgbevf.  MSI-X interrupt support is required
	  for this driver to work correctly.

config IXGBEVF_IPSEC
	bool "IPSec XFRM cryptography-offload acceleration"
	depends on IXGBEVF
	depends on XFRM_OFFLOAD
	default y
	select XFRM_ALGO
	---help---
	  Enable support for IPSec offload in ixgbevf.ko

config I40E
	tristate "Intel(R) Ethernet Controller XL710 Family support"
	imply PTP_1588_CLOCK
	depends on PCI
	---help---
	  This driver supports Intel(R) Ethernet Controller XL710 Family of
	  devices.  For more information on how to identify your adapter, go
	  to the Adapter & Driver ID Guide that can be located at:

	  <http://support.intel.com>

	  More specific information on configuring the driver is in
	  <file:Documentation/networking/device_drivers/intel/i40e.rst>.

	  To compile this driver as a module, choose M here. The module
	  will be called i40e.

config I40E_DCB
	bool "Data Center Bridging (DCB) Support"
	default n
	depends on I40E && DCB
	---help---
	  Say Y here if you want to use Data Center Bridging (DCB) in the
	  driver.

	  If unsure, say N.

# this is here to allow seamless migration from I40EVF --> IAVF name
# so that CONFIG_IAVF symbol will always mirror the state of CONFIG_I40EVF
config IAVF
	tristate
config I40EVF
	tristate "Intel(R) Ethernet Adaptive Virtual Function support"
	select IAVF
	depends on PCI_MSI
	---help---
	  This driver supports virtual functions for Intel XL710,
	  X710, X722, XXV710, and all devices advertising support for
	  Intel Ethernet Adaptive Virtual Function devices. For more
	  information on how to identify your adapter, go to the Adapter
	  & Driver ID Guide that can be located at:

	  <https://support.intel.com>

	  This driver was formerly named i40evf.

	  More specific information on configuring the driver is in
	  <file:Documentation/networking/device_drivers/intel/iavf.rst>.

	  To compile this driver as a module, choose M here. The module
	  will be called iavf.  MSI-X interrupt support is required
	  for this driver to work correctly.

config ICE
	tristate "Intel(R) Ethernet Connection E800 Series Support"
	default n
	depends on PCI_MSI
	---help---
	  This driver supports Intel(R) Ethernet Connection E800 Series of
	  devices.  For more information on how to identify your adapter, go
	  to the Adapter & Driver ID Guide that can be located at:

	  <http://support.intel.com>

	  More specific information on configuring the driver is in
	  <file:Documentation/networking/device_drivers/intel/ice.rst>.

	  To compile this driver as a module, choose M here. The module
	  will be called ice.

config FM10K
	tristate "Intel(R) FM10000 Ethernet Switch Host Interface Support"
	default n
	depends on PCI_MSI
	imply PTP_1588_CLOCK
	---help---
	  This driver supports Intel(R) FM10000 Ethernet Switch Host
	  Interface.  For more information on how to identify your adapter,
	  go to the Adapter & Driver ID Guide that can be located at:

	  <http://support.intel.com>

	  More specific information on configuring the driver is in
	  <file:Documentation/networking/device_drivers/intel/fm10k.rst>.

	  To compile this driver as a module, choose M here. The module
	  will be called fm10k.  MSI-X interrupt support is required

config IGC
	tristate "Intel(R) Ethernet Controller I225-LM/I225-V support"
	default n
	depends on PCI
	---help---
	  This driver supports Intel(R) Ethernet Controller I225-LM/I225-V
	  family of adapters.

	  For more information on how to identify your adapter, go
	  to the Adapter & Driver ID Guide that can be located at:

	  <http://support.intel.com>

	  To compile this driver as a module, choose M here. The module
	  will be called igc.

endif # NET_VENDOR_INTEL
