# SPDX-License-Identifier: GPL-2.0-only
menuconfig VFIO
	tristate "VFIO Non-Privileged userspace driver framework"
	select IOMMU_API
	depends on IOMMUFD || !IOMMUFD
	select INTERVAL_TREE
	select VFIO_GROUP if SPAPR_TCE_IOMMU || IOMMUFD=n
	select VFIO_DEVICE_CDEV if !VFIO_GROUP
	select VFIO_CONTAINER if IOMMUFD=n
	help
	  VFIO provides a framework for secure userspace device drivers.
	  See Documentation/driver-api/vfio.rst for more details.

	  If you don't know what to do here, say N.

if VFIO
config VFIO_DEVICE_CDEV
	bool "Support for the VFIO cdev /dev/vfio/devices/vfioX"
	depends on IOMMUFD && !SPAPR_TCE_IOMMU
	default !VFIO_GROUP
	help
	  The VFIO device cdev is another way for userspace to get device
	  access. Userspace gets device fd by opening device cdev under
	  /dev/vfio/devices/vfioX, and then bind the device fd with an iommufd
	  to set up secure DMA context for device access.

	  If you don't know what to do here, say N.

config VFIO_GROUP
	bool "Support for the VFIO group /dev/vfio/$group_id"
	default y
	help
	   VFIO group support provides the traditional model for accessing
	   devices through VFIO and is used by the majority of userspace
	   applications and drivers making use of VFIO.

	   If you don't know what to do here, say Y.

config VFIO_CONTAINER
	bool "Support for the VFIO container /dev/vfio/vfio"
	select VFIO_IOMMU_TYPE1 if MMU && (X86 || S390 || ARM || ARM64)
	depends on VFIO_GROUP
	default y
	help
	  The VFIO container is the classic interface to VFIO for establishing
	  IOMMU mappings. If N is selected here then IOMMUFD must be used to
	  manage the mappings.

	  Unless testing IOMMUFD say Y here.

if VFIO_CONTAINER
config VFIO_IOMMU_TYPE1
	tristate
	default n

config VFIO_IOMMU_SPAPR_TCE
	tristate
	depends on SPAPR_TCE_IOMMU
	default VFIO
endif

config VFIO_NOIOMMU
	bool "VFIO No-IOMMU support"
	depends on VFIO_GROUP || (VFIO_DEVICE_CDEV && !GENERIC_ATOMIC64)
	depends on !VFIO_GROUP || VFIO_CONTAINER || IOMMUFD_VFIO_CONTAINER
	select IOMMUFD_NOIOMMU if VFIO_DEVICE_CDEV && !GENERIC_ATOMIC64
	help
	  VFIO is built on the ability to isolate devices using the IOMMU.
	  Only with an IOMMU can userspace access to DMA capable devices be
	  considered secure.  VFIO No-IOMMU mode enables IOMMU groups for
	  devices without IOMMU backing for the purpose of re-using the VFIO
	  infrastructure in a non-secure mode.  Use of this mode will result
	  in an unsupportable kernel and will therefore taint the kernel.
	  Device assignment to virtual machines is also not possible with
	  this mode since there is no IOMMU to provide DMA translation.

	  If you don't know what to do here, say N.

config VFIO_VIRQFD
	bool
	select EVENTFD
	default n

config VFIO_DEBUGFS
	bool "Export VFIO internals in DebugFS"
	depends on DEBUG_FS
	help
	  Allows exposure of VFIO device internals. This option enables
	  the use of debugfs by VFIO drivers as required. The device can
	  cause the VFIO code create a top-level debug/vfio directory
	  during initialization, and then populate a subdirectory with
	  entries as required.

source "drivers/vfio/pci/Kconfig"
source "drivers/vfio/platform/Kconfig"
source "drivers/vfio/mdev/Kconfig"
source "drivers/vfio/fsl-mc/Kconfig"
source "drivers/vfio/cdx/Kconfig"
endif

source "virt/lib/Kconfig"
