# SPDX-License-Identifier: GPL-2.0

menu "Microsoft Hyper-V guest support"

config HYPERV
	bool "Microsoft Hyper-V core hypervisor support"
	depends on (X86 && X86_LOCAL_APIC && HYPERVISOR_GUEST) \
		|| (ARM64 && !CPU_BIG_ENDIAN)
	select PARAVIRT
	select X86_HV_CALLBACK_VECTOR if X86
	select OF_EARLY_FLATTREE if OF
	select IRQ_MSI_LIB if X86
	help
	  Select this option to run Linux as a Hyper-V client operating
	  system.

config HYPERV_VTL_MODE
	bool "Enable Linux to boot in VTL context"
	depends on (X86_64 && HAVE_STATIC_CALL) || ARM64
	depends on HYPERV
	depends on SMP
	default n
	help
	  Virtual Secure Mode (VSM) is a set of hypervisor capabilities and
	  enlightenments offered to host and guest partitions which enables
	  the creation and management of new security boundaries within
	  operating system software.

	  VSM achieves and maintains isolation through Virtual Trust Levels
	  (VTLs). Virtual Trust Levels are hierarchical, with higher levels
	  being more privileged than lower levels. VTL0 is the least privileged
	  level, and currently only other level supported is VTL2.

	  Select this option to build a Linux kernel to run at a VTL other than
	  the normal VTL0, which currently is only VTL2.  This option
	  initializes the kernel to run in VTL2, and adds the ability to boot
	  secondary CPUs directly into 64-bit context as required for VTLs other
	  than 0.  A kernel built with this option must run at VTL2, and will
	  not run as a normal guest.

	  If unsure, say N

config HYPERV_TIMER
	def_bool HYPERV && X86

config HYPERV_UTILS
	tristate "Microsoft Hyper-V Utilities driver"
	depends on HYPERV_VMBUS && CONNECTOR && NLS
	depends on PTP_1588_CLOCK_OPTIONAL
	help
	  Select this option to enable the Hyper-V Utilities.

config HYPERV_BALLOON
	tristate "Microsoft Hyper-V Balloon driver"
	depends on HYPERV_VMBUS
	select PAGE_REPORTING
	help
	  Select this option to enable Hyper-V Balloon driver.

config HYPERV_VMBUS
	tristate "Microsoft Hyper-V VMBus driver"
	depends on HYPERV
	default HYPERV
	select SYSFB if EFI && !HYPERV_VTL_MODE
	help
	  Select this option to enable Hyper-V Vmbus driver.

config MSHV_ROOT
	tristate "Microsoft Hyper-V root partition support"
	depends on HYPERV && (X86_64 || ARM64)
	depends on !HYPERV_VTL_MODE
	# The hypervisor interface operates on 4k pages. Enforcing it here
	# simplifies many assumptions in the root partition code.
	# e.g. When withdrawing memory, the hypervisor gives back 4k pages in
	# no particular order, making it impossible to reassemble larger pages
	depends on PAGE_SIZE_4KB
	select EVENTFD
	select VIRT_XFER_TO_GUEST_WORK
	select HMM_MIRROR
	select MMU_NOTIFIER
	default n
	help
	  Select this option to enable support for booting and running as root
	  partition on Microsoft Hyper-V.

	  If unsure, say N.

config MSHV_VTL
	tristate "Microsoft Hyper-V VTL driver"
	depends on X86_64 && HYPERV_VTL_MODE
	depends on HYPERV_VMBUS
	# Mapping VTL0 memory to a userspace process in VTL2 is supported in OpenHCL.
	# VTL2 for OpenHCL makes use of Huge Pages to improve performance on VMs,
	# specially with large memory requirements.
	depends on TRANSPARENT_HUGEPAGE
	# MTRRs are controlled by VTL0, and are not specific to individual VTLs.
	# Therefore, do not attempt to access or modify MTRRs here.
	depends on !MTRR
	select CPUMASK_OFFSTACK
	select VIRT_XFER_TO_GUEST_WORK
	default n
	help
	  Select this option to enable Hyper-V VTL driver support.
	  This driver provides interfaces for Virtual Machine Manager (VMM) running in VTL2
	  userspace to create VTLs and partitions, setup and manage VTL0 memory and
	  allow userspace to make direct hypercalls. This also allows to map VTL0's address
	  space to a usermode process in VTL2 and supports getting new VMBus messages and channel
	  events in VTL2.

	  If unsure, say N.

endmenu
