# 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_BALLOON
	tristate "Virtio balloon driver"
	depends on VIRTIO
	select MEMORY_BALLOON
	---help---
	 This driver supports increasing and decreasing the amount
	 of memory within a KVM guest.

	 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
