// Copyright 2020 The ChromiumOS Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. /// An enumeration of different hypervisor capabilities. #[derive(Clone, Copy, Debug, Eq, PartialEq)] pub enum HypervisorCap { ArmPmuV3, ImmediateExit, S390UserSigp, TscDeadlineTimer, UserMemory, #[cfg(target_arch = "x86_64")] Xcrs, #[cfg(target_arch = "x86_64")] /// CPUID leaf 0x15 is available on some Intel chips and contains the TSC /// frequency, which can be used to calibrate the guest's TSC clocksource; /// however, it is not typically accurate enough (being off by 1-2% is a /// big problem for a clocksource), and inside the guest, calibration by /// other means is not always reliable. /// /// Hypervisors which do not provide the TSC frequency (e.g. via the kvm /// pvclock) or have another suitable calibration source can declare this /// capability, which causes crosvm to substitute a calibrated value in leaf /// 0x15 that will be accurate enough for use in a clocksource. CalibratedTscLeafRequired, // By default, when swiotlb is enabled, crosvm will only specify its size in the device tree // and allow the guest to decide where to allocate the buffer in guest phsyical memory. // // If this capability is declared, then instead crosvm will allocate space for the swiotlb // outside of guest physical memory and specify both the address and size in the device tree. StaticSwiotlbAllocationRequired, /// Some hypervisors (presently: Gunyah) will configure initial boot-time registers /// for vCPUs without need for CrosVM to specify. /// /// If this capability is declared, then crosvm will not try to initialize vcpu /// registers when creating the VM. HypervisorInitializedBootContext, } /// A capability the `Vm` can possibly expose. #[derive(Clone, Copy, Debug, Eq, PartialEq)] pub enum VmCap { /// Track dirty pages DirtyLog, /// Paravirtualized clock device PvClock, /// VM can be run in protected mode, where the host does not have access to its memory. Protected, /// VM completes initialization of CPUID at creation time, not required after. EarlyInitCpuid, /// VM can detect the bus lock #[cfg(target_arch = "x86_64")] BusLockDetect, /// Supports read-only memory regions. ReadOnlyMemoryRegion, /// VM can set guest memory cache noncoherent DMA flag MemNoncoherentDma, }