# 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_ADMIN_LEGACY
	bool
	depends on VIRTIO_PCI && (X86 || COMPILE_TEST)
	default y

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
