hypervisor/kvm/
cap.rs

1// Copyright 2017 The ChromiumOS Authors
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5use kvm_sys::*;
6
7/// A capability the kernel's KVM interface can possibly expose.
8#[derive(Clone, Copy, Debug, PartialEq, Eq)]
9#[repr(u32)]
10pub enum KvmCap {
11    Irqchip = KVM_CAP_IRQCHIP,
12    Hlt = KVM_CAP_HLT,
13    MmuShadowCacheControl = KVM_CAP_MMU_SHADOW_CACHE_CONTROL,
14    UserMemory = KVM_CAP_USER_MEMORY,
15    SetTssAddr = KVM_CAP_SET_TSS_ADDR,
16    Vapic = KVM_CAP_VAPIC,
17    ExtCpuid = KVM_CAP_EXT_CPUID,
18    Clocksource = KVM_CAP_CLOCKSOURCE,
19    NrVcpus = KVM_CAP_NR_VCPUS,
20    NrMemslots = KVM_CAP_NR_MEMSLOTS,
21    Pit = KVM_CAP_PIT,
22    NopIoDelay = KVM_CAP_NOP_IO_DELAY,
23    PvMmu = KVM_CAP_PV_MMU,
24    MpState = KVM_CAP_MP_STATE,
25    CoalescedMmio = KVM_CAP_COALESCED_MMIO,
26    SyncMmu = KVM_CAP_SYNC_MMU,
27    Iommu = KVM_CAP_IOMMU,
28    DestroyMemoryRegionWorks = KVM_CAP_DESTROY_MEMORY_REGION_WORKS,
29    UserNmi = KVM_CAP_USER_NMI,
30    #[cfg(any(target_arch = "x86_64", target_arch = "aarch64"))]
31    SetGuestDebug = KVM_CAP_SET_GUEST_DEBUG,
32    #[cfg(target_arch = "x86_64")]
33    ReinjectControl = KVM_CAP_REINJECT_CONTROL,
34    IrqRouting = KVM_CAP_IRQ_ROUTING,
35    IrqInjectStatus = KVM_CAP_IRQ_INJECT_STATUS,
36    AssignDevIrq = KVM_CAP_ASSIGN_DEV_IRQ,
37    JoinMemoryRegionsWorks = KVM_CAP_JOIN_MEMORY_REGIONS_WORKS,
38    #[cfg(target_arch = "x86_64")]
39    Mce = KVM_CAP_MCE,
40    Irqfd = KVM_CAP_IRQFD,
41    #[cfg(target_arch = "x86_64")]
42    Pit2 = KVM_CAP_PIT2,
43    SetBootCpuId = KVM_CAP_SET_BOOT_CPU_ID,
44    #[cfg(target_arch = "x86_64")]
45    PitState2 = KVM_CAP_PIT_STATE2,
46    Ioeventfd = KVM_CAP_IOEVENTFD,
47    SetIdentityMapAddr = KVM_CAP_SET_IDENTITY_MAP_ADDR,
48    #[cfg(target_arch = "x86_64")]
49    XenHvm = KVM_CAP_XEN_HVM,
50    AdjustClock = KVM_CAP_ADJUST_CLOCK,
51    InternalErrorData = KVM_CAP_INTERNAL_ERROR_DATA,
52    #[cfg(target_arch = "x86_64")]
53    VcpuEvents = KVM_CAP_VCPU_EVENTS,
54    S390Psw = KVM_CAP_S390_PSW,
55    PpcSegstate = KVM_CAP_PPC_SEGSTATE,
56    Hyperv = KVM_CAP_HYPERV,
57    HypervVapic = KVM_CAP_HYPERV_VAPIC,
58    HypervSpin = KVM_CAP_HYPERV_SPIN,
59    PciSegment = KVM_CAP_PCI_SEGMENT,
60    PpcPairedSingles = KVM_CAP_PPC_PAIRED_SINGLES,
61    IntrShadow = KVM_CAP_INTR_SHADOW,
62    #[cfg(target_arch = "x86_64")]
63    Debugregs = KVM_CAP_DEBUGREGS,
64    X86RobustSinglestep = KVM_CAP_X86_ROBUST_SINGLESTEP,
65    PpcOsi = KVM_CAP_PPC_OSI,
66    PpcUnsetIrq = KVM_CAP_PPC_UNSET_IRQ,
67    EnableCap = KVM_CAP_ENABLE_CAP,
68    #[cfg(target_arch = "x86_64")]
69    Xsave = KVM_CAP_XSAVE,
70    #[cfg(target_arch = "x86_64")]
71    Xcrs = KVM_CAP_XCRS,
72    PpcGetPvinfo = KVM_CAP_PPC_GET_PVINFO,
73    PpcIrqLevel = KVM_CAP_PPC_IRQ_LEVEL,
74    AsyncPf = KVM_CAP_ASYNC_PF,
75    TscControl = KVM_CAP_TSC_CONTROL,
76    GetTscKhz = KVM_CAP_GET_TSC_KHZ,
77    PpcBookeSregs = KVM_CAP_PPC_BOOKE_SREGS,
78    SpaprTce = KVM_CAP_SPAPR_TCE,
79    PpcSmt = KVM_CAP_PPC_SMT,
80    PpcRma = KVM_CAP_PPC_RMA,
81    MaxVcpus = KVM_CAP_MAX_VCPUS,
82    PpcHior = KVM_CAP_PPC_HIOR,
83    PpcPapr = KVM_CAP_PPC_PAPR,
84    SwTlb = KVM_CAP_SW_TLB,
85    OneReg = KVM_CAP_ONE_REG,
86    S390Gmap = KVM_CAP_S390_GMAP,
87    TscDeadlineTimer = KVM_CAP_TSC_DEADLINE_TIMER,
88    S390Ucontrol = KVM_CAP_S390_UCONTROL,
89    SyncRegs = KVM_CAP_SYNC_REGS,
90    Pci23 = KVM_CAP_PCI_2_3,
91    KvmclockCtrl = KVM_CAP_KVMCLOCK_CTRL,
92    SignalMsi = KVM_CAP_SIGNAL_MSI,
93    PpcGetSmmuInfo = KVM_CAP_PPC_GET_SMMU_INFO,
94    S390Cow = KVM_CAP_S390_COW,
95    PpcAllocHtab = KVM_CAP_PPC_ALLOC_HTAB,
96    ReadonlyMem = KVM_CAP_READONLY_MEM,
97    IrqfdResample = KVM_CAP_IRQFD_RESAMPLE,
98    PpcBookeWatchdog = KVM_CAP_PPC_BOOKE_WATCHDOG,
99    PpcHtabFd = KVM_CAP_PPC_HTAB_FD,
100    S390CssSupport = KVM_CAP_S390_CSS_SUPPORT,
101    PpcEpr = KVM_CAP_PPC_EPR,
102    ArmPsci = KVM_CAP_ARM_PSCI,
103    ArmSetDeviceAddr = KVM_CAP_ARM_SET_DEVICE_ADDR,
104    DeviceCtrl = KVM_CAP_DEVICE_CTRL,
105    IrqMpic = KVM_CAP_IRQ_MPIC,
106    PpcRtas = KVM_CAP_PPC_RTAS,
107    IrqXics = KVM_CAP_IRQ_XICS,
108    ArmEl132bit = KVM_CAP_ARM_EL1_32BIT,
109    SpaprMultitce = KVM_CAP_SPAPR_MULTITCE,
110    ExtEmulCpuid = KVM_CAP_EXT_EMUL_CPUID,
111    HypervTime = KVM_CAP_HYPERV_TIME,
112    IoapicPolarityIgnored = KVM_CAP_IOAPIC_POLARITY_IGNORED,
113    EnableCapVm = KVM_CAP_ENABLE_CAP_VM,
114    S390Irqchip = KVM_CAP_S390_IRQCHIP,
115    IoeventfdNoLength = KVM_CAP_IOEVENTFD_NO_LENGTH,
116    VmAttributes = KVM_CAP_VM_ATTRIBUTES,
117    ArmPsci02 = KVM_CAP_ARM_PSCI_0_2,
118    PpcFixupHcall = KVM_CAP_PPC_FIXUP_HCALL,
119    PpcEnableHcall = KVM_CAP_PPC_ENABLE_HCALL,
120    CheckExtensionVm = KVM_CAP_CHECK_EXTENSION_VM,
121    ImmediateExit = KVM_CAP_IMMEDIATE_EXIT,
122    ArmPmuV3 = KVM_CAP_ARM_PMU_V3,
123    ArmProtectedVm = KVM_CAP_ARM_PROTECTED_VM,
124    X86ProtectedVm = KVM_CAP_X86_PROTECTED_VM,
125    ArmMte = KVM_CAP_ARM_MTE,
126    #[cfg(target_arch = "x86_64")]
127    BusLockDetect = KVM_CAP_X86_BUS_LOCK_EXIT,
128    // TODO(b/388092267): use upstream cap when available
129    MemNoncoherentDma = KVM_CAP_USER_CONFIGURE_NONCOHERENT_DMA_CROS,
130    UserMemory2 = KVM_CAP_USER_MEMORY2,
131    #[cfg(target_arch = "aarch64")]
132    Sve = KVM_CAP_ARM_SVE,
133    MsiDevid = KVM_CAP_MSI_DEVID,
134}