# SPDX-License-Identifier: GPL-2.0-only
#
# Mellanox driver configuration
#

config MLX5_CORE
	tristate "Mellanox 5th generation network adapters (ConnectX series) core driver"
	depends on PCI
	select AUXILIARY_BUS
	select NET_DEVLINK
	depends on VXLAN || !VXLAN
	depends on MLXFW || !MLXFW
	depends on PTP_1588_CLOCK_OPTIONAL
	depends on PCI_HYPERV_INTERFACE || !PCI_HYPERV_INTERFACE
	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 5th generation network adapters (ConnectX series) Ethernet support"
	depends on NETDEVICES && ETHERNET && INET && PCI && MLX5_CORE
	select PAGE_POOL
	select DIMLIB
	help
	  Ethernet support in Mellanox Technologies ConnectX-4 NIC.

config MLX5_EN_ARFS
	bool "Mellanox MLX5 ethernet accelerated receive flow steering (ARFS) support"
	depends on MLX5_CORE_EN && RFS_ACCEL
	default y
	help
	  Mellanox MLX5 ethernet hardware-accelerated receive flow steering support,
	  Enables ethernet netdevice arfs support and ntuple filtering.

config MLX5_EN_RXNFC
	bool "Mellanox MLX5 ethernet rx nfc flow steering support"
	depends on MLX5_CORE_EN
	default y
	help
	  Mellanox MLX5 ethernet rx nfc flow steering support
	  Enables ethtool receive network flow classification, which allows user defined
	  flow rules to direct traffic into arbitrary rx queue via ethtool set/get_rxnfc
	  API.

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_BRIDGE
	bool
	depends on MLX5_ESWITCH && BRIDGE
	default y
	help
	  mlx5 ConnectX offloads support for Ethernet Bridging (BRIDGE).
	  Enable adding representors of mlx5 uplink and VF ports to Bridge and
	  offloading rules for traffic between such ports. Supports VLANs (trunk and
	  access modes).

config MLX5_CLS_ACT
	bool "MLX5 TC classifier action support"
	depends on MLX5_ESWITCH && NET_CLS_ACT
	default y
	help
	  mlx5 ConnectX offloads support for TC classifier action (NET_CLS_ACT),
	  works in both native NIC mode and Switchdev SRIOV mode.
	  Actions get attached to a Hardware offloaded classifiers and are
	  invoked after a successful classification. Actions are used to
	  overwrite the classification result, instantly drop or redirect and/or
	  reformat packets in wire speeds without involving the host cpu.

	  If set to N, TC offloads in both NIC and switchdev modes will be disabled.
	  If unsure, set to Y

config MLX5_TC_CT
	bool "MLX5 TC connection tracking offload support"
	depends on MLX5_CLS_ACT && NF_FLOW_TABLE && NET_ACT_CT && NET_TC_SKB_EXT
	default y
	help
	  Say Y here if you want to support offloading connection tracking rules
	  via tc ct action.

	  If unsure, set to Y

config MLX5_TC_SAMPLE
	bool "MLX5 TC sample offload support"
	depends on MLX5_CLS_ACT
	depends on PSAMPLE=y || PSAMPLE=n || MLX5_CORE=m
	default y
	help
	  Say Y here if you want to support offloading sample rules via tc
	  sample action.
	  If set to N, will not be able to configure tc rules with sample
	  action.

	  If unsure, set to Y

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 5th generation network adapters (connectX series) IPoIB offloads support"
	depends on MLX5_CORE_EN
	help
	  MLX5 IPoIB offloads & acceleration support.

config MLX5_FPGA_IPSEC
	bool "Mellanox Technologies IPsec Innova support"
	depends on MLX5_CORE
	depends on MLX5_FPGA
	help
	Build IPsec 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_IPSEC
	bool "Mellanox Technologies IPsec Connect-X support"
	depends on MLX5_CORE_EN
	depends on XFRM_OFFLOAD
	depends on INET_ESP_OFFLOAD || INET6_ESP_OFFLOAD
	select MLX5_ACCEL
	help
	Build IPsec support for the Connect-X family of network cards by Mellanox
	Technologies.
	Note: If you select this option, the mlx5_core driver will include
	IPsec support for the Connect-X family.

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

config MLX5_EN_MACSEC
	bool "Connect-X support for MACSec offload"
	depends on MLX5_CORE_EN
	depends on MACSEC
	default n
	help
	  Build support for MACsec cryptography-offload acceleration in the NIC.

config MLX5_FPGA_TLS
	bool "Mellanox Technologies TLS Innova support"
	depends on TLS_DEVICE
	depends on TLS=y || MLX5_CORE=m
	depends on MLX5_CORE_EN
	depends on MLX5_FPGA
	select MLX5_EN_TLS
	help
	Build TLS 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_TLS
	bool "Mellanox Technologies TLS Connect-X support"
	depends on TLS_DEVICE
	depends on TLS=y || MLX5_CORE=m
	depends on MLX5_CORE_EN
	select MLX5_ACCEL
	select MLX5_EN_TLS
	help
	Build TLS support for the Connect-X family of network cards by Mellanox
	Technologies.

config MLX5_EN_TLS
	bool
	help
	Build support for TLS cryptography-offload acceleration in the NIC.
	Note: Support for hardware with this capability needs to be selected
	for this option to become available.

config MLX5_SW_STEERING
	bool "Mellanox Technologies software-managed steering"
	depends on MLX5_CORE_EN && MLX5_ESWITCH
	select CRC32
	default y
	help
	Build support for software-managed steering in the NIC.

config MLX5_SF
	bool "Mellanox Technologies subfunction device support using auxiliary device"
	depends on MLX5_CORE && MLX5_CORE_EN
	help
	Build support for subfuction device in the NIC. A Mellanox subfunction
	device can support RDMA, netdevice and vdpa device.
	It is similar to a SRIOV VF but it doesn't require SRIOV support.

config MLX5_SF_MANAGER
	bool
	depends on MLX5_SF && MLX5_ESWITCH
	default y
	help
	Build support for subfuction port in the NIC. A Mellanox subfunction
	port is managed through devlink.  A subfunction supports RDMA, netdevice
	and vdpa device. It is similar to a SRIOV VF but it doesn't require
	SRIOV support.
