#
# Cavium ethernet device configuration
#

config NET_VENDOR_CAVIUM
	bool "Cavium ethernet drivers"
	depends on PCI
	default y
	---help---
	  Select this option if you want enable Cavium network support.

	  If you have a Cavium SoC or network adapter, say Y.

if NET_VENDOR_CAVIUM

config THUNDER_NIC_PF
	tristate "Thunder Physical function driver"
	depends on 64BIT
	select THUNDER_NIC_BGX
	---help---
	  This driver supports Thunder's NIC physical function.
	  The NIC provides the controller and DMA engines to
	  move network traffic to/from the memory. The NIC
	  works closely with TNS, BGX and SerDes to implement the
	  functions replacing and virtualizing those of a typical
	  standalone PCIe NIC chip.

config THUNDER_NIC_VF
	tristate "Thunder Virtual function driver"
	depends on 64BIT
	---help---
	  This driver supports Thunder's NIC virtual function

config	THUNDER_NIC_BGX
	tristate "Thunder MAC interface driver (BGX)"
	depends on 64BIT
	select PHYLIB
	select MDIO_THUNDER
	select THUNDER_NIC_RGX
	---help---
	  This driver supports programming and controlling of MAC
	  interface from NIC physical function driver.

config	THUNDER_NIC_RGX
	tristate "Thunder MAC interface driver (RGX)"
	depends on 64BIT
	select PHYLIB
	select MDIO_THUNDER
	---help---
	  This driver supports configuring XCV block of RGX interface
	  present on CN81XX chip.

config LIQUIDIO
	tristate "Cavium LiquidIO support"
	depends on 64BIT
	imply PTP_1588_CLOCK
	select FW_LOADER
	select LIBCRC32C
	---help---
	  This driver supports Cavium LiquidIO Intelligent Server Adapters
	  based on CN66XX, CN68XX and CN23XX chips.

	  To compile this driver as a module, choose M here: the module
	  will be called liquidio.  This is recommended.

config OCTEON_MGMT_ETHERNET
	tristate "Octeon Management port ethernet driver (CN5XXX, CN6XXX)"
	depends on CAVIUM_OCTEON_SOC
	select PHYLIB
	select MDIO_OCTEON
	default y
	help
	  Enable the ethernet driver for the management
	  port on Cavium Networks' Octeon CN57XX, CN56XX, CN55XX,
	  CN54XX, CN52XX, and CN6XXX chips.

config LIQUIDIO_VF
	tristate "Cavium LiquidIO VF support"
	depends on 64BIT && PCI_MSI
	imply PTP_1588_CLOCK
	---help---
	  This driver supports Cavium LiquidIO Intelligent Server Adapter
	  based on CN23XX chips.

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

endif # NET_VENDOR_CAVIUM
