# SPDX-License-Identifier: GPL-2.0-only

menuconfig HAVEN_DRIVERS
	bool "Haven Virtualization drivers"
	depends on ARM64
	help
	  The Haven drivers are the helper interfaces that runs on the
	  virtual machines that provides support such as memory/device
	  sharing, IRQ sharing, IPC/signalling mechanisms, and so on.

	  Say Y here to enable the drivers needed to work on Haven
	  virtualization environment.

	  If you say N, all options in this submenu will be skipped and disabled.

if HAVEN_DRIVERS

config HH_CTRL
	tristate "Create Haven entries under /sys/hypervisor"
	depends on SYSFS
	select SYS_HYPERVISOR
	help
	  Create entries under /sys/hypervisor for the Haven hypervisor.
	  The driver also provides a facility for controlling
	  hypervisor debug features.
	  See Documentation/ABI/testing/sysfs-hypervisor-haven for more details.

config HH_MSGQ
	tristate "Haven Message Queue driver"
	help
	  Haven offers message-queues as one of the IPC mechanisms to
	  communicate among the Virtual Machines. The message queue drivers
	  runs on the Virtual machines to provide an interface to the clients
	  who wish to communicate to other clients on a different VM. Currently,
	  the services offered by the drivers is simply to send and receive
	  messages in a blocking manner.

config HH_RM_DRV
	tristate "Haven Resource Manager driver"
	help
	  The Haven Resource Manager driver is used to communicate with the
	  Resource Manager Virtual Machine (RM-VM). The RM-VM acts as a mediator
	  and provides numerous services to the other VMs running in the system,
	  such as notifying when a particular VM is up, resource (IRQ/device)
	  sharing between VMs, information about the IPC mechanisms, and so on.

	  The Resource Manager driver runs on the Virtual Machine and acts as an
	  interface to other driver in order to obtain the services provided by
	  the RM-VM.

config HH_DBL
	tristate "Haven Doorbell driver"
	help
	  Haven offers a simple inter VMs(Virtual Machines) communication
	  through the use of doorbell interrupts. A single doorbell instance
	  provides an unidirectional communication between two VMs and it acts
	  like either a source(Tx) or generate(Rx). Individual VMs make use of
	  these doorbells by calling send and/or a receive primitives exposed by
	  driver and trigger an interrupt to each other and exchange the data.

config HH_IRQ_LEND
	tristate "Haven IRQ Lending Framework"
	depends on HH_RM_DRV
	help
	  Haven Resource Manager permits interrupts to be shared between
	  virtual machines. This config enables a framework which
	  supports sharing these interrupts. The follows RM recommended
	  protocol.

config HH_MEM_NOTIFIER
	tristate "Haven Memory Resource Notification Framework"
	depends on HH_RM_DRV
	help
	  The Haven Resource Manager allows for different memory resources
	  to be transferred across virtual machines with different notification
	  labels assigned to each resource to aid in distinguishing them.
	  Enabling the Haven Memory Resource Notification Framework provides an
	  interface for clients to transmit memory resources between virtual
	  machines, and register callbacks that get invoked only when
	  notifications pertaining to their memory resources arrive.

config HH_VIRT_WATCHDOG
	tristate "Haven Virtual Watchdog Driver"
	depends on QCOM_WDT_CORE
	help
	  This enables the Qualcomm Technologies, Inc. watchdog module for
	  the Haven hypervisor. It provides an interface to perform watchdog
	  actions such as setting the bark/bite time and also petting the
	  watchdog in the hypervisor.

endif
