# SPDX-License-Identifier: GPL-2.0-only
config VIRTIO_ANCHOR
	bool

config VIRTIO
	tristate
	select VIRTIO_ANCHOR
	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.

config VIRTIO_PCI_LIB
	tristate
	help
	  Modern PCI device implementation. This module implements the
	  basic probe and control for devices which are based on modern
	  PCI device with possible vendor specific extensions. Any
	  module that selects this module must depend on PCI.

config VIRTIO_PCI_LIB_LEGACY
	tristate
	help
	  Legacy PCI device (Virtio PCI Card 0.9.x Draft and older device)
	  implementation.
	  This module implements the basic probe and control for devices
	  which are based on legacy PCI device. Any module that selects this
	  module must depend on PCI.

menuconfig VIRTIO_MENU
	bool "Virtio drivers"
	default y

if VIRTIO_MENU

config VIRTIO_HARDEN_NOTIFICATION
        bool "Harden virtio notification"
        depends on BROKEN
        help
          Enable this to harden the device notifications and suppress
          those that happen at a time where notifications are illegal.

          Experimental: Note that several drivers still have issues that
          may cause crashes or hangs when correct handling of
          notifications is enforced; depending on the subset of
          drivers and devices you use, this may or may not work.

          If unsure, say N.

config VIRTIO_PCI
	tristate "PCI driver for virtio devices"
	depends on PCI
	select VIRTIO_PCI_LIB
	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
	select VIRTIO_PCI_LIB_LEGACY
	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"
	depends on X86_64 || ARM64
	depends on VIRTIO
	depends on MEMORY_HOTPLUG
	depends on MEMORY_HOTREMOVE
	depends on CONTIG_ALLOC
	depends on EXCLUSIVE_SYSTEM_RAM
	help
	 This driver provides access to virtio-mem paravirtualized memory
	 devices, allowing to hotplug and hotunplug memory.

	 This driver currently only supports x86-64 and arm64. Although it
	 should compile on other architectures that implement memory
	 hot(un)plug, architecture-specific and/or common
	 code changes may be required for virtio-mem, kdump and kexec to work as
	 expected.

	 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'.

config VIRTIO_DMA_SHARED_BUFFER
	tristate
	depends on DMA_SHARED_BUFFER
	help
	 This option adds a flavor of dma buffers that are backed by
	 virtio resources.

endif # VIRTIO_MENU
