# SPDX-License-Identifier: GPL-2.0-only
menuconfig VDPA
	tristate "vDPA drivers"
	depends on NET
	help
	  Enable this module to support vDPA device that uses a
	  datapath which complies with virtio specifications with
	  vendor specific control path.

if VDPA

config VDPA_SIM
	tristate "vDPA device simulator core"
	depends on RUNTIME_TESTING_MENU
	select VHOST_RING
	select IOMMU_IOVA
	help
	  Enable this module to support vDPA device simulators. These devices
	  are used for testing, prototyping and development of vDPA.

config VDPA_SIM_NET
	tristate "vDPA simulator for networking device"
	depends on VDPA_SIM
	select GENERIC_NET_UTILS
	help
	  vDPA networking device simulator which loops TX traffic back to RX.

config VDPA_SIM_BLOCK
	tristate "vDPA simulator for block device"
	depends on VDPA_SIM
	help
	  vDPA block device simulator which terminates IO request in a
	  memory buffer.

config VDPA_USER
	tristate "VDUSE (vDPA Device in Userspace) support"
	depends on EVENTFD && MMU && HAS_DMA
	#
	# This driver incorrectly tries to override the dma_ops.  It should
	# never have done that, but for now keep it working on architectures
	# that use dma ops
	#
	depends on ARCH_HAS_DMA_OPS
	select VHOST_IOTLB
	select IOMMU_IOVA
	help
	  With VDUSE it is possible to emulate a vDPA Device
	  in a userspace program.

config IFCVF
	tristate "Intel IFC VF vDPA driver"
	depends on PCI_MSI
	help
	  This kernel module can drive Intel IFC VF NIC to offload
	  virtio dataplane traffic to hardware.
	  To compile this driver as a module, choose M here: the module will
	  be called ifcvf.

config MLX5_VDPA
	bool
	select VHOST_IOTLB
	help
	  Support library for Mellanox VDPA drivers. Provides code that is
	  common for all types of VDPA drivers. The following drivers are planned:
	  net, block.

config MLX5_VDPA_NET
	tristate "vDPA driver for ConnectX devices"
	select MLX5_VDPA
	select VHOST_RING
	depends on MLX5_CORE
	help
	  VDPA network driver for ConnectX6 and newer. Provides offloading
	  of virtio net datapath such that descriptors put on the ring will
	  be executed by the hardware. It also supports a variety of stateless
	  offloads depending on the actual device used and firmware version.

config MLX5_VDPA_STEERING_DEBUG
	bool "expose steering counters on debugfs"
	select MLX5_VDPA
	help
	  Expose RX steering counters in debugfs to aid in debugging. For each VLAN
	  or non VLAN interface, two hardware counters are added to the RX flow
	  table: one for unicast and one for multicast.
	  The counters counts the number of packets and bytes and exposes them in
	  debugfs. Once can read the counters using, e.g.:
	  cat /sys/kernel/debug/mlx5/mlx5_core.sf.1/vdpa-0/rx/untagged/ucast/packets
	  cat /sys/kernel/debug/mlx5/mlx5_core.sf.1/vdpa-0/rx/untagged/mcast/bytes

config VP_VDPA
	tristate "Virtio PCI bridge vDPA driver"
	select VIRTIO_PCI_LIB
	depends on PCI_MSI
	help
	  This kernel module bridges virtio PCI device to vDPA bus.

config ALIBABA_ENI_VDPA
	tristate "vDPA driver for Alibaba ENI"
	select VIRTIO_PCI_LIB_LEGACY
	depends on PCI_MSI && X86
	help
	  VDPA driver for Alibaba ENI (Elastic Network Interface) which is built upon
	  virtio 0.9.5 specification.

 config SNET_VDPA
	tristate "SolidRun's vDPA driver for SolidNET"
	depends on PCI_MSI && PCI_IOV && (HWMON || HWMON=n)

	# This driver MAY create a HWMON device.
	# Depending on (HWMON || HWMON=n) ensures that:
	# If HWMON=n the driver can be compiled either as a module or built-in.
	# If HWMON=y the driver can be compiled either as a module or built-in.
	# If HWMON=m the driver is forced to be compiled as a module.
	# By doing so, IS_ENABLED can be used instead of IS_REACHABLE

	help
	  vDPA driver for SolidNET DPU.
	  With this driver, the VirtIO dataplane can be
	  offloaded to a SolidNET DPU.
	  This driver includes a HW monitor device that
	  reads health values from the DPU.

config PDS_VDPA
	tristate "vDPA driver for AMD/Pensando DSC devices"
	select VIRTIO_PCI_LIB
	depends on PCI_MSI
	depends on PDS_CORE
	help
	  vDPA network driver for AMD/Pensando's PDS Core devices.
	  With this driver, the VirtIO dataplane can be
	  offloaded to an AMD/Pensando DSC device.

config OCTEONEP_VDPA
	tristate "vDPA driver for Octeon DPU devices"
	depends on m
	depends on PCI_MSI
	help
	  This is a vDPA driver designed for Marvell's Octeon DPU devices.
	  This driver enables the offloading of the VirtIO dataplane to an
	  Octeon DPU device.
	  Please note that this driver must be built as a module and it
	  cannot be loaded until the Octeon emulation software is running.

endif # VDPA
