# SPDX-License-Identifier: GPL-2.0-only
config VHOST_IOTLB
	tristate
	help
	  Generic IOTLB implementation for vhost and vringh.
	  This option is selected by any driver which needs to support
	  an IOMMU in software.

config VHOST_RING
	tristate
	select VHOST_IOTLB
	help
	  This option is selected by any driver which needs to access
	  the host side of a virtio ring.

config VHOST_DPN
	bool
	depends on !ARM || AEABI
	default y
	help
	  Anything selecting VHOST or VHOST_RING must depend on VHOST_DPN.
	  This excludes the deprecated ARM ABI since that forces a 4 byte
	  alignment on all structs - incompatible with virtio spec requirements.

config VHOST
	tristate
	select VHOST_IOTLB
	help
	  This option is selected by any driver which needs to access
	  the core of vhost.

menuconfig VHOST_MENU
	bool "VHOST drivers"
	default y

if VHOST_MENU

config VHOST_NET
	tristate "Host kernel accelerator for virtio net"
	depends on NET && EVENTFD && (TUN || !TUN) && (TAP || !TAP) && VHOST_DPN
	select VHOST
	---help---
	  This kernel module can be loaded in host kernel to accelerate
	  guest networking with virtio_net. Not to be confused with virtio_net
	  module itself which needs to be loaded in guest kernel.

	  To compile this driver as a module, choose M here: the module will
	  be called vhost_net.

config VHOST_SCSI
	tristate "VHOST_SCSI TCM fabric driver"
	depends on TARGET_CORE && EVENTFD && VHOST_DPN
	select VHOST
	default n
	---help---
	Say M here to enable the vhost_scsi TCM fabric module
	for use with virtio-scsi guests

config VHOST_VSOCK
	tristate "vhost virtio-vsock driver"
	depends on VSOCKETS && EVENTFD && VHOST_DPN
	select VHOST
	select VIRTIO_VSOCKETS_COMMON
	default n
	---help---
	This kernel module can be loaded in the host kernel to provide AF_VSOCK
	sockets for communicating with guests.  The guests must have the
	virtio_transport.ko driver loaded to use the virtio-vsock device.

	To compile this driver as a module, choose M here: the module will be called
	vhost_vsock.

config VHOST_VDPA
	tristate "Vhost driver for vDPA-based backend"
	depends on EVENTFD && VHOST_DPN
	select VHOST
	depends on VDPA
	help
	  This kernel module can be loaded in host kernel to accelerate
	  guest virtio devices with the vDPA-based backends.

	  To compile this driver as a module, choose M here: the module
	  will be called vhost_vdpa.

config VHOST_CROSS_ENDIAN_LEGACY
	bool "Cross-endian support for vhost"
	default n
	---help---
	  This option allows vhost to support guests with a different byte
	  ordering from host while using legacy virtio.

	  Userspace programs can control the feature using the
	  VHOST_SET_VRING_ENDIAN and VHOST_GET_VRING_ENDIAN ioctls.

	  This is only useful on a few platforms (ppc64 and arm64). Since it
	  adds some overhead, it is disabled by default.

	  If unsure, say "N".

endif
