# 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.  This interface does
	  not support noiommu.

	  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
	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"
