#
# Mellanox driver configuration
#

config MLX5_CORE
	tristate "Mellanox Technologies ConnectX-4 and Connect-IB core driver"
	depends on MAY_USE_DEVLINK
	depends on PCI
	imply PTP_1588_CLOCK
	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
	select PAGE_POOL
	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.

config MLX5_EN_TLS
	bool "TLS cryptography-offload accelaration"
	depends on MLX5_CORE_EN
	depends on TLS_DEVICE
	depends on TLS=y || MLX5_CORE=m
	depends on MLX5_ACCEL
	default n
	---help---
	  Build support for TLS cryptography-offload accelaration in the NIC.
	  Note: Support for hardware with this capability needs to be selected
	  for this option to become available.
