# 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 && HAS_DMA
	select DMA_OPS
	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
	select 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.

endif # VDPA