# 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
	select 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
