#
# Mellanox driver configuration
#

config MLX5_CORE
	tristate "Mellanox Technologies ConnectX-4 and Connect-IB core driver"
	depends on MAY_USE_DEVLINK
	depends on PCI
	default n
	---help---
	  Core driver for low level functionality of the ConnectX-4 and
	  Connect-IB cards by Mellanox Technologies.

config MLX5_ACCEL
	bool

config MLX5_FPGA
        bool "Mellanox Technologies Innova support"
        depends on MLX5_CORE
	select MLX5_ACCEL
        ---help---
          Build support for the Innova family of network cards by Mellanox
          Technologies. Innova network cards are comprised of a ConnectX chip
          and an FPGA chip on one board. If you select this option, the
          mlx5_core driver will include the Innova FPGA core and allow building
          sandbox-specific client drivers.

config MLX5_CORE_EN
	bool "Mellanox Technologies ConnectX-4 Ethernet support"
	depends on NETDEVICES && ETHERNET && INET && PCI && MLX5_CORE
	depends on IPV6=y || IPV6=n || MLX5_CORE=m
	imply PTP_1588_CLOCK
	default n
	---help---
	  Ethernet support in Mellanox Technologies ConnectX-4 NIC.

config MLX5_MPFS
        bool "Mellanox Technologies MLX5 MPFS support"
        depends on MLX5_CORE_EN
	default y
        ---help---
	  Mellanox Technologies Ethernet Multi-Physical Function Switch (MPFS)
          support in ConnectX NIC. MPFs is required for when multi-PF configuration
          is enabled to allow passing user configured unicast MAC addresses to the
          requesting PF.

config MLX5_ESWITCH
	bool "Mellanox Technologies MLX5 SRIOV E-Switch support"
	depends on MLX5_CORE_EN && NET_SWITCHDEV
	default y
	---help---
	  Mellanox Technologies Ethernet SRIOV E-Switch support in ConnectX NIC.
          E-Switch provides internal SRIOV packet steering and switching for the
          enabled VFs and PF in two available modes:
                Legacy SRIOV mode (L2 mac vlan steering based).
                Switchdev mode (eswitch offloads).

config MLX5_CORE_EN_DCB
	bool "Data Center Bridging (DCB) Support"
	default y
	depends on MLX5_CORE_EN && DCB
	---help---
	  Say Y here if you want to use Data Center Bridging (DCB) in the
	  driver.
	  If set to N, will not be able to configure QoS and ratelimit attributes.
	  This flag is depended on the kernel's DCB support.

	  If unsure, set to Y

config MLX5_CORE_IPOIB
	bool "Mellanox Technologies ConnectX-4 IPoIB offloads support"
	depends on MLX5_CORE_EN
	default n
	---help---
	  MLX5 IPoIB offloads & acceleration support.

config MLX5_EN_IPSEC
	bool "IPSec XFRM cryptography-offload accelaration"
	depends on MLX5_ACCEL
	depends on MLX5_CORE_EN
	depends on XFRM_OFFLOAD
	depends on INET_ESP_OFFLOAD || INET6_ESP_OFFLOAD
	default n
	---help---
	  Build support for IPsec cryptography-offload accelaration in the NIC.
	  Note: Support for hardware with this capability needs to be selected
	  for this option to become available.
