config UVMM_SUPPORTED def_bool BUILD_ARCH_arm64 || BUILD_ARCH_arm || BUILD_ARCH_amd64 || BUILD_ARCH_mips || BUILD_ARCH_riscv comment "uvmm is not supported on this architecture" depends on !UVMM_SUPPORTED comment "uvmm requires L4Re libgcc instead of toolchain version" depends on UVMM_SUPPORTED && COMPILER_RT_USE_TOOLCHAIN_LIBGCC menu "uvmm virtual machine monitor" depends on UVMM_SUPPORTED depends on !COMPILER_RT_USE_TOOLCHAIN_LIBGCC config UVMM_MONITOR bool "Monitor interface" depends on !RELEASE_MODE default y help Enables the monitoring interface that can be used to query and manipulate the guest state at runtime. When enabled the interface must also be switched on at runtime using the `mon` command line option. menu "Supported Loaders" config UVMM_LOADER_RAW bool "RAW images" default y help Allows to raw kernel images from an address. The format for the file name is 'raw:addr=0xcaffee:filename' where addr is the address the image should be loaded to, relative to the guest ram base. config UVMM_LOADER_ELF bool "ELF images" default y help Enable loading of elf images. The file found under the file name passed to uvmm must be a valid ELF file for the loader to pick it up. config UVMM_LOADER_PE bool "PE images (error handling only)" default y help Print usefull errors when trying to load PE images. If the file found under the file name passed to uvmm is a PE file uvmm will not load it but provides helpful error messages. config UVMM_LOADER_ROM bool "ROM images (from guest memory locations)" default y help Enable loading of images from a guest memory location. The format for the kernel file name passed to uvmm is 'rom:addr=0xcaffee' where 0xcaffee is a valid address in the memory of the guest. If the format is 'rom:addr=0xcaffee:64bit' then the guest is a 64 bit guest. config UVMM_LOADER_LINUX bool "Linux images (non-elf)" depends on BUILD_ARCH_arm64 || BUILD_ARCH_arm || BUILD_ARCH_amd64 || BUILD_ARCH_riscv default y help Loads a Linux image. config UVMM_LOADER_OPENBSD bool "OpenBSD images" depends on BUILD_ARCH_amd64 default y help Loads an OpenBSD image. config UVMM_LOADER_GZIP bool "GZIP/ZLIB loading for Linux images" depends on (BUILD_ARCH_arm64 || BUILD_ARCH_arm || BUILD_ARCH_riscv) && HAVE_BIDPC_ZLIB && UVMM_LOADER_LINUX default y help Allows to load gzip or zlib compressed kernel images. endmenu comment "GZIP/ZLIB compression not available due to missing zlib package" depends on !HAVE_BIDPC_ZLIB config UVMM_QEMU_FW_IF bool "Qemu firmware configuration device" default y help The device allows guests to gain access to the configuration of the hypervisor or any kind of data like boot/kernel images in a defined way. Some bootloaders make use of this to setup the platform and start the guest OS. For details on the configuration see device/qemu_fw_cfg.cc. config UVMM_FAULT_INJECT bool "Fault injection" depends on BUILD_ARCH_arm64 || BUILD_ARCH_arm comment "Interfacing with L4 applications or physical hardware" config UVMM_VDEV_PSCI bool "PSCI interface support" depends on BUILD_ARCH_arm || BUILD_ARCH_arm64 default y help Emulates a PSCI interface for the guest. config UVMM_VDEV_SMCCC_PROXY bool "Smc device proxy" depends on BUILD_ARCH_arm || BUILD_ARCH_arm64 default y help Proxies Smccc calls. config UVMM_PCI_SUPPORT bool "Support PCI emulation" if BUILD_ARCH_arm64 || BUILD_ARCH_arm default y help Configures if the PCI subsystem (and the corresponding devices using the PCI transport) should be available in uvmm. config UVMM_VDEV_OPTEE bool "OPTEE SMC call forwarding" depends on BUILD_ARCH_arm || BUILD_ARCH_arm64 default y help Allows forwarding of OP-TEE SMC calls either to a running OP-TEE instance or to a native L4 application implementing the protocol. For details on the configuration see device/optee.cc. config UVMM_VDEV_VIRQ bool "Forward L4 interrupts" default y help Add a device for relaying L4 IRQs into the guest. For details on the configuration see device/virq.cc config UVMM_VDEV_MMIO_PROXY bool "Proxy dataspaces and MMIO protocol" default y help Emulate a device that proxies memory accesses to an external dataspace or MMIO space. For details on the configuration see device/mmio_proxy.cc config UVMM_VDEV_SYSCTL bool "System control device" default y help Mmio-based device for triggering system events (shutdown, reboot). The device can be used with the generic syscon device from Linux. For details on the configuration see device/sysctl.cc config UVMM_VDEV_ROM bool "Read-only dataspace based devices" default y help A device for adding L4 dataspaces read-only to the guest. For details on the configuration see device/rom.cc config UVMM_EXTERNAL_RTC bool "l4rtc time source" depends on HAVE_BIDPC_RTC default y help A driver to retrieve wallclock time from an L4Re rtc server. For details on the configuration see device/l4rtc.cc comment "l4rtc time source not available due to missing rtc package" depends on !HAVE_BIDPC_RTC comment "Device Emulation" config UVMM_VDEV_8250 bool "8250-compatible UART" default y help Emulate an 8250 compatible UART for the guest. For details on the configuration see device/uart_8250.cc config UVMM_VDEV_PL011 bool "PL011 UART" default y help Emulate a PrimeCell pl011-compatible UART for the guest. For details on the configuration see device/pl011.cc config UVMM_VDEV_PL031 bool "PL031 RTC" default y depends on BUILD_ARCH_arm64 || BUILD_ARCH_arm help Emluate a simple PL0311 RTC for the guest. This is not a complete device model and does not come with write support. For details on the configuration see device/arm/pl031.cc config UVMM_VDEV_DEVICE_PCI_HOST_ECAM_GENERIC bool "ECAM PCIe host bridge support" default y depends on (BUILD_ARCH_arm || BUILD_ARCH_arm64) && UVMM_PCI_SUPPORT help Emulates a generic PCIe host bridge for ARM platforms. config UVMM_VDEV_DEVICE_FRAMEBUFFER bool "Generic framebuffer device" default y help Emulate a simple generic framebuffer device config UVMM_VDEV_CFI_FLASH bool "CFI flash device" default y help Emulate a simple CFI compliant flash device with the Intel command set. For details on the configuration see device/cfi.cc config UVMM_VDEV_ISA_DEBUG_PORT bool "Bochs debug port" default y depends on BUILD_ARCH_amd64 help Emulate the BOCHS debug IO-port (0x402) to enable guests to print on the vcon device. For details on the configuration see ARCH-amd64/isa_debugport.cc config UVMM_VDEV_BCM2835_MBOX bool "Support for external bcm2835 mailbox service" depends on BUILD_ARCH_arm || BUILD_ARCH_arm64 help Emulate the bcm2835 mailbox device as found on Raspberry Pi 4. config UVMM_VDEV_GIC_V2 def_bool UVMM_VDEV_SEL_GIC_V2 || UVMM_VDEV_SEL_GIC_BOTH config UVMM_VDEV_GIC_V3 def_bool UVMM_VDEV_SEL_GIC_V3 || UVMM_VDEV_SEL_GIC_BOTH choice prompt "GIC Support" depends on BUILD_ARCH_arm || BUILD_ARCH_arm64 help Select which GIC emulations uvmm should support for the virtual interrupt controller. config UVMM_VDEV_SEL_GIC_BOTH bool "GICv2 + GICv3" config UVMM_VDEV_SEL_GIC_V2 bool "GICv2" config UVMM_VDEV_SEL_GIC_V3 bool "GICv3" endchoice config UVMM_VDEV_GIC_ITS bool "Emulate ITS in GICv3 to support MSIs" depends on UVMM_VDEV_GIC_V3 default y config UVMM_IRQ_DIRECT_INJECT bool "Utilize direct guest vIRQ injection" depends on BUILD_ARCH_arm || BUILD_ARCH_arm64 default y help On Arm platforms, the kernel optionally supports forwarding hardware interrupts directly to a guest. This reduces the interrupt latency but the "pending" and "active" bits in the virtual distributor are not updated any more. This usually does not pose any problem, though. It is safe to enable the feature in uvmm even if the kernel does not support it. Uvmm will transparently fall back to regular, IPC based interrupt forwarding. menuconfig UVMM_VDEV_VIRTIO bool "Virtio driver/device support" default y if UVMM_VDEV_VIRTIO config UVMM_VDEV_VIRTIO_CONSOLE bool "Support forwarding vcon as virtio-console to the guest" default y config UVMM_VDEV_VIRTIO_POWER bool "Virtio-input based power events" default y help Support sending power events via Virtio-input. config UVMM_VDEV_VIRTIO_INPUT bool "Forward L4Re::Events via Virtio-input" default y help Support forwarding input device events via Virtio-input. config UVMM_VDEV_VIRTIO_PROXY bool "Support forwarding L4virtio devices to the guest" default y help Support forwarding L4Re virtio devices to the guest. This enables guests to use L4Re drivers e.g., block devices or virtual network bridges. If unsure, say Y. config UVMM_VDEV_DEVICE_PROXY bool "Virtio device proxy" default y help Proxy for virtio devices implemented in the guest. Can be used to export devices driven by a guest using the virtio protocol. For details on the configuration see device/virtio_device_proxy.cc endif endmenu