# SPDX-License-Identifier: GPL-2.0-only
menu "Xen driver support"
	depends on XEN

config XEN_BALLOON
	bool "Xen memory balloon driver"
	default y
	help
	  The balloon driver allows the Xen domain to request more memory from
	  the system to expand the domain's memory allocation, or alternatively
	  return unneeded memory to the system.

config XEN_BALLOON_MEMORY_HOTPLUG
	bool "Memory hotplug support for Xen balloon driver"
	depends on XEN_BALLOON && MEMORY_HOTPLUG
	default y
	help
	  Memory hotplug support for Xen balloon driver allows expanding memory
	  available for the system above limit declared at system startup.
	  It is very useful on critical systems which require long
	  run without rebooting.

	  It's also very useful for non PV domains to obtain unpopulated physical
	  memory ranges to use in order to map foreign memory or grants.

	  Memory could be hotplugged in following steps:

	    1) target domain: ensure that memory auto online policy is in
	       effect by checking /sys/devices/system/memory/auto_online_blocks
	       file (should be 'online').

	    2) control domain: xl mem-max <target-domain> <maxmem>
	       where <maxmem> is >= requested memory size,

	    3) control domain: xl mem-set <target-domain> <memory>
	       where <memory> is requested memory size; alternatively memory
	       could be added by writing proper value to
	       /sys/devices/system/xen_memory/xen_memory0/target or
	       /sys/devices/system/xen_memory/xen_memory0/target_kb on the
	       target domain.

	  Alternatively, if memory auto onlining was not requested at step 1
	  the newly added memory can be manually onlined in the target domain
	  by doing the following:

		for i in /sys/devices/system/memory/memory*/state; do \
		  [ "`cat "$i"`" = offline ] && echo online > "$i"; done

	  or by adding the following line to udev rules:

	  SUBSYSTEM=="memory", ACTION=="add", RUN+="/bin/sh -c '[ -f /sys$devpath/state ] && echo online > /sys$devpath/state'"

config XEN_MEMORY_HOTPLUG_LIMIT
	int "Hotplugged memory limit (in GiB) for a PV guest"
	default 512
	depends on XEN_HAVE_PVMMU
	depends on MEMORY_HOTPLUG
	help
	  Maximum amount of memory (in GiB) that a PV guest can be
	  expanded to when using memory hotplug.

	  A PV guest can have more memory than this limit if is
	  started with a larger maximum.

	  This value is used to allocate enough space in internal
	  tables needed for physical memory administration.

config XEN_SCRUB_PAGES_DEFAULT
	bool "Scrub pages before returning them to system by default"
	depends on XEN_BALLOON
	default y
	help
	  Scrub pages before returning them to the system for reuse by
	  other domains.  This makes sure that any confidential data
	  is not accidentally visible to other domains.  It is more
	  secure, but slightly less efficient. This can be controlled with
	  xen_scrub_pages=0 parameter and
	  /sys/devices/system/xen_memory/xen_memory0/scrub_pages.
	  This option only sets the default value.

	  If in doubt, say yes.

config XEN_DEV_EVTCHN
	tristate "Xen /dev/xen/evtchn device"
	default y
	help
	  The evtchn driver allows a userspace process to trigger event
	  channels and to receive notification of an event channel
	  firing.
	  If in doubt, say yes.

config XEN_BACKEND
	bool "Backend driver support"
	default XEN_DOM0
	help
	  Support for backend device drivers that provide I/O services
	  to other virtual machines.

config XENFS
	tristate "Xen filesystem"
	select XEN_PRIVCMD
	default y
	help
	  The xen filesystem provides a way for domains to share
	  information with each other and with the hypervisor.
	  For example, by reading and writing the "xenbus" file, guests
	  may pass arbitrary information to the initial domain.
	  If in doubt, say yes.

config XEN_COMPAT_XENFS
	bool "Create compatibility mount point /proc/xen"
	depends on XENFS
	default y
	help
	  The old xenstore userspace tools expect to find "xenbus"
	  under /proc/xen, but "xenbus" is now found at the root of the
	  xenfs filesystem.  Selecting this causes the kernel to create
	  the compatibility mount point /proc/xen if it is running on
	  a xen platform.
	  If in doubt, say yes.

config XEN_SYS_HYPERVISOR
	bool "Create xen entries under /sys/hypervisor"
	depends on SYSFS
	select SYS_HYPERVISOR
	default y
	help
	  Create entries under /sys/hypervisor describing the Xen
	  hypervisor environment.  When running native or in another
	  virtual environment, /sys/hypervisor will still be present,
	  but will have no xen contents.

config XEN_XENBUS_FRONTEND
	tristate

config XEN_GNTDEV
	tristate "userspace grant access device driver"
	depends on XEN
	default m
	select MMU_NOTIFIER
	help
	  Allows userspace processes to use grants.

config XEN_GNTDEV_DMABUF
	bool "Add support for dma-buf grant access device driver extension"
	depends on XEN_GNTDEV && XEN_GRANT_DMA_ALLOC
	select DMA_SHARED_BUFFER
	help
	  Allows userspace processes and kernel modules to use Xen backed
	  dma-buf implementation. With this extension grant references to
	  the pages of an imported dma-buf can be exported for other domain
	  use and grant references coming from a foreign domain can be
	  converted into a local dma-buf for local export.

config XEN_GRANT_DEV_ALLOC
	tristate "User-space grant reference allocator driver"
	depends on XEN
	default m
	help
	  Allows userspace processes to create pages with access granted
	  to other domains. This can be used to implement frontend drivers
	  or as part of an inter-domain shared memory channel.

config XEN_GRANT_DMA_ALLOC
	bool "Allow allocating DMA capable buffers with grant reference module"
	depends on XEN && HAS_DMA
	help
	  Extends grant table module API to allow allocating DMA capable
	  buffers and mapping foreign grant references on top of it.
	  The resulting buffer is similar to one allocated by the balloon
	  driver in that proper memory reservation is made by
	  ({increase|decrease}_reservation and VA mappings are updated if
	  needed).
	  This is useful for sharing foreign buffers with HW drivers which
	  cannot work with scattered buffers provided by the balloon driver,
	  but require DMAable memory instead.

config SWIOTLB_XEN
	def_bool y
	depends on ARCH_HAS_DMA_OPS
	depends on XEN_PV || ARM || ARM64
	select SWIOTLB

config XEN_PCI_STUB
	bool

config XEN_PCIDEV_STUB
	tristate "Xen PCI-device stub driver"
	depends on PCI && !X86 && XEN
	depends on XEN_BACKEND
	select XEN_PCI_STUB
	default m
	help
	  The PCI device stub driver provides limited version of the PCI
	  device backend driver without para-virtualized support for guests.
	  If you select this to be a module, you will need to make sure no
	  other driver has bound to the device(s) you want to make visible to
	  other guests.

	  The "hide" parameter (only applicable if backend driver is compiled
	  into the kernel) allows you to bind the PCI devices to this module
	  from the default device drivers. The argument is the list of PCI BDFs:
	  xen-pciback.hide=(03:00.0)(04:00.0)

	  If in doubt, say m.

config XEN_PCIDEV_BACKEND
	tristate "Xen PCI-device backend driver"
	depends on PCI && X86 && XEN
	depends on XEN_BACKEND
	select XEN_PCI_STUB
	default m
	help
	  The PCI device backend driver allows the kernel to export arbitrary
	  PCI devices to other guests. If you select this to be a module, you
	  will need to make sure no other driver has bound to the device(s)
	  you want to make visible to other guests.

	  The parameter "passthrough" allows you specify how you want the PCI
	  devices to appear in the guest. You can choose the default (0) where
	  PCI topology starts at 00.00.0, or (1) for passthrough if you want
	  the PCI devices topology appear the same as in the host.

	  The "hide" parameter (only applicable if backend driver is compiled
	  into the kernel) allows you to bind the PCI devices to this module
	  from the default device drivers. The argument is the list of PCI BDFs:
	  xen-pciback.hide=(03:00.0)(04:00.0)

	  If in doubt, say m.

config XEN_PVCALLS_FRONTEND
	tristate "XEN PV Calls frontend driver"
	depends on INET && XEN
	select XEN_XENBUS_FRONTEND
	help
	  Experimental frontend for the Xen PV Calls protocol
	  (https://xenbits.xen.org/docs/unstable/misc/pvcalls.html). It
	  sends a small set of POSIX calls to the backend, which
	  implements them.

config XEN_PVCALLS_BACKEND
	tristate "XEN PV Calls backend driver"
	depends on INET && XEN && XEN_BACKEND
	help
	  Experimental backend for the Xen PV Calls protocol
	  (https://xenbits.xen.org/docs/unstable/misc/pvcalls.html). It
	  allows PV Calls frontends to send POSIX calls to the backend,
	  which implements them.

	  If in doubt, say n.

config XEN_SCSI_BACKEND
	tristate "XEN SCSI backend driver"
	depends on XEN && XEN_BACKEND && TARGET_CORE
	help
	  The SCSI backend driver allows the kernel to export its SCSI Devices
	  to other guests via a high-performance shared-memory interface.
	  Only needed for systems running as XEN driver domains (e.g. Dom0) and
	  if guests need generic access to SCSI devices.

config XEN_PRIVCMD
	tristate "Xen hypercall passthrough driver"
	depends on XEN
	imply XEN_PCIDEV_BACKEND
	default m
	help
	  The hypercall passthrough driver allows privileged user programs to
	  perform Xen hypercalls. This driver is normally required for systems
	  running as Dom0 to perform privileged operations, but in some
	  disaggregated Xen setups this driver might be needed for other
	  domains, too.

config XEN_PRIVCMD_EVENTFD
	bool "Xen Ioeventfd and irqfd support"
	depends on XEN_PRIVCMD && XEN_VIRTIO && EVENTFD
	help
	  Using the ioeventfd / irqfd mechanism a virtio backend running in a
	  daemon can speed up interrupt delivery from / to a guest.

config XEN_ACPI_PROCESSOR
	tristate "Xen ACPI processor"
	depends on XEN && XEN_PV_DOM0 && X86 && ACPI_PROCESSOR && CPU_FREQ
	default m
	help
	  This ACPI processor uploads Power Management information to the Xen
	  hypervisor.

	  To do that the driver parses the Power Management data and uploads
	  said information to the Xen hypervisor. Then the Xen hypervisor can
	  select the proper Cx and Pxx states. It also registers itself as the
	  SMM so that other drivers (such as ACPI cpufreq scaling driver) will
	  not load.

	  To compile this driver as a module, choose M here: the module will be
	  called xen_acpi_processor  If you do not know what to choose, select
	  M here. If the CPUFREQ drivers are built in, select Y here.

config XEN_MCE_LOG
	bool "Xen platform mcelog"
	depends on XEN_PV_DOM0 && X86_MCE
	help
	  Allow kernel fetching MCE error from Xen platform and
	  converting it into Linux mcelog format for mcelog tools

config XEN_HAVE_PVMMU
	bool

config XEN_EFI
	def_bool y
	depends on (ARM || ARM64 || X86_64) && EFI

config XEN_AUTO_XLATE
	def_bool y
	depends on ARM || ARM64 || XEN_PVHVM
	help
	  Support for auto-translated physmap guests.

config XEN_ACPI
	def_bool y
	depends on X86 && ACPI

config XEN_SYMS
	bool "Xen symbols"
	depends on X86 && XEN_DOM0 && XENFS
	default y if KALLSYMS
	help
	  Exports hypervisor symbols (along with their types and addresses) via
	  /proc/xen/xensyms file, similar to /proc/kallsyms

config XEN_HAVE_VPMU
	bool

config XEN_FRONT_PGDIR_SHBUF
	tristate

config XEN_UNPOPULATED_ALLOC
	bool "Use unpopulated memory ranges for guest mappings"
	depends on ZONE_DEVICE
	default XEN_BACKEND || XEN_GNTDEV || XEN_DOM0
	help
	  Use unpopulated memory ranges in order to create mappings for guest
	  memory regions, including grant maps and foreign pages. This avoids
	  having to balloon out RAM regions in order to obtain physical memory
	  space to create such mappings.

config XEN_GRANT_DMA_IOMMU
	bool
	select IOMMU_API

config XEN_GRANT_DMA_OPS
	bool

config XEN_VIRTIO
	bool "Xen virtio support"
	depends on ARCH_HAS_DMA_OPS
	depends on VIRTIO
	select XEN_GRANT_DMA_OPS
	select XEN_GRANT_DMA_IOMMU if OF
	help
	  Enable virtio support for running as Xen guest. Depending on the
	  guest type this will require special support on the backend side
	  (qemu or kernel, depending on the virtio device types used).

	  If in doubt, say n.

config XEN_VIRTIO_FORCE_GRANT
	bool "Require Xen virtio support to use grants"
	depends on XEN_VIRTIO
	help
	  Require virtio for Xen guests to use grant mappings.
	  This will avoid the need to give the backend the right to map all
	  of the guest memory. This will need support on the backend side
	  (e.g. qemu or kernel, depending on the virtio device types used).

endmenu
