# SPDX-License-Identifier: GPL-2.0-only
config VIRTIO
	tristate
	help
	  This option is selected by any driver which implements the virtio
	  bus, such as CONFIG_VIRTIO_PCI, CONFIG_VIRTIO_MMIO, CONFIG_RPMSG
	  or CONFIG_S390_GUEST.

menuconfig VIRTIO_MENU
	bool "Virtio drivers"
	default y

if VIRTIO_MENU

config VIRTIO_PCI
	tristate "PCI driver for virtio devices"
	depends on PCI
	select VIRTIO
	help
	  This driver provides support for virtio based paravirtual device
	  drivers over PCI.  This requires that your VMM has appropriate PCI
	  virtio backends.  Most QEMU based VMMs should support these devices
	  (like KVM or Xen).

	  If unsure, say M.

config VIRTIO_PCI_LEGACY
	bool "Support for legacy virtio draft 0.9.X and older devices"
	default y
	depends on VIRTIO_PCI
	help
          Virtio PCI Card 0.9.X Draft (circa 2014) and older device support.

	  This option enables building a transitional driver, supporting
	  both devices conforming to Virtio 1 specification, and legacy devices.
	  If disabled, you get a slightly smaller, non-transitional driver,
	  with no legacy compatibility.

          So look out into your driveway.  Do you have a flying car?  If
          so, you can happily disable this option and virtio will not
          break.  Otherwise, leave it set.  Unless you're testing what
          life will be like in The Future.

	  If unsure, say Y.

config VIRTIO_VDPA
	tristate "vDPA driver for virtio devices"
	depends on VDPA
	select VIRTIO
	help
	  This driver provides support for virtio based paravirtual
	  device driver over vDPA bus. For this to be useful, you need
	  an appropriate vDPA device implementation that operates on a
	  physical device to allow the datapath of virtio to be
	  offloaded to hardware.

	  If unsure, say M.

config VIRTIO_PMEM
	tristate "Support for virtio pmem driver"
	depends on VIRTIO
	depends on LIBNVDIMM
	help
	  This driver provides access to virtio-pmem devices, storage devices
	  that are mapped into the physical address space - similar to NVDIMMs
	   - with a virtio-based flushing interface.

	  If unsure, say Y.

config VIRTIO_BALLOON
	tristate "Virtio balloon driver"
	depends on VIRTIO
	select MEMORY_BALLOON
	select PAGE_REPORTING
	help
	 This driver supports increasing and decreasing the amount
	 of memory within a KVM guest.

	 If unsure, say M.

config VIRTIO_MEM
	tristate "Virtio mem driver"
	default m
	depends on X86_64
	depends on VIRTIO
	depends on MEMORY_HOTPLUG_SPARSE
	depends on MEMORY_HOTREMOVE
	depends on CONTIG_ALLOC
	help
	 This driver provides access to virtio-mem paravirtualized memory
	 devices, allowing to hotplug and hotunplug memory.

	 This driver was only tested under x86-64, but should theoretically
	 work on all architectures that support memory hotplug and hotremove.

	 If unsure, say M.

config VIRTIO_INPUT
	tristate "Virtio input driver"
	depends on VIRTIO
	depends on INPUT
	help
	 This driver supports virtio input devices such as
	 keyboards, mice and tablets.

	 If unsure, say M.

config VIRTIO_MMIO
	tristate "Platform bus driver for memory mapped virtio devices"
	depends on HAS_IOMEM && HAS_DMA
	select VIRTIO
	help
	 This drivers provides support for memory mapped virtio
	 platform device driver.

 	 If unsure, say N.

config VIRTIO_MMIO_CMDLINE_DEVICES
	bool "Memory mapped virtio devices parameter parsing"
	depends on VIRTIO_MMIO
	help
	 Allow virtio-mmio devices instantiation via the kernel command line
	 or module parameters. Be aware that using incorrect parameters (base
	 address in particular) can crash your system - you have been warned.
	 See Documentation/admin-guide/kernel-parameters.rst for details.

	 If unsure, say 'N'.

endif # VIRTIO_MENU
