Skip to main content

kvm_ioctls/
cap.rs

1// Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2// SPDX-License-Identifier: Apache-2.0 OR MIT
3//
4// Portions Copyright 2017 The Chromium OS Authors. All rights reserved.
5// Use of this source code is governed by a BSD-style license that can be
6// found in the THIRD-PARTY file.
7
8use kvm_bindings::*;
9
10/// Capabilities exposed by KVM.
11///
12/// The capabilities list can be used in conjunction with
13/// [Kvm::check_extension()](struct.Kvm.html#method.check_extension) to check if a particular
14/// capability is available.
15///
16/// The list of capabilities is based on the the KVM_CAP_* defines from the
17/// [Linux KVM header](https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/kvm.h).
18#[derive(Clone, Copy, Debug)]
19#[repr(u32)]
20// We are allowing docs to be missing here because this enum is a wrapper
21// over auto-generated code.
22#[allow(missing_docs)]
23#[derive(PartialEq, Eq)]
24pub enum Cap {
25    Irqchip = KVM_CAP_IRQCHIP,
26    Hlt = KVM_CAP_HLT,
27    MmuShadowCacheControl = KVM_CAP_MMU_SHADOW_CACHE_CONTROL,
28    UserMemory = KVM_CAP_USER_MEMORY,
29    SetTssAddr = KVM_CAP_SET_TSS_ADDR,
30    Vapic = KVM_CAP_VAPIC,
31    ExtCpuid = KVM_CAP_EXT_CPUID,
32    Clocksource = KVM_CAP_CLOCKSOURCE,
33    NrVcpus = KVM_CAP_NR_VCPUS,
34    NrMemslots = KVM_CAP_NR_MEMSLOTS,
35    Pit = KVM_CAP_PIT,
36    NopIoDelay = KVM_CAP_NOP_IO_DELAY,
37    PvMmu = KVM_CAP_PV_MMU,
38    MpState = KVM_CAP_MP_STATE,
39    CoalescedMmio = KVM_CAP_COALESCED_MMIO,
40    SyncMmu = KVM_CAP_SYNC_MMU,
41    Iommu = KVM_CAP_IOMMU,
42    DestroyMemoryRegionWorks = KVM_CAP_DESTROY_MEMORY_REGION_WORKS,
43    UserNmi = KVM_CAP_USER_NMI,
44    #[cfg(any(target_arch = "x86_64", target_arch = "aarch64", target_arch = "s390x"))]
45    SetGuestDebug = KVM_CAP_SET_GUEST_DEBUG,
46    #[cfg(target_arch = "x86_64")]
47    ReinjectControl = KVM_CAP_REINJECT_CONTROL,
48    IrqRouting = KVM_CAP_IRQ_ROUTING,
49    IrqInjectStatus = KVM_CAP_IRQ_INJECT_STATUS,
50    AssignDevIrq = KVM_CAP_ASSIGN_DEV_IRQ,
51    JoinMemoryRegionsWorks = KVM_CAP_JOIN_MEMORY_REGIONS_WORKS,
52    #[cfg(target_arch = "x86_64")]
53    Mce = KVM_CAP_MCE,
54    Irqfd = KVM_CAP_IRQFD,
55    #[cfg(target_arch = "x86_64")]
56    Pit2 = KVM_CAP_PIT2,
57    SetBootCpuId = KVM_CAP_SET_BOOT_CPU_ID,
58    #[cfg(target_arch = "x86_64")]
59    PitState2 = KVM_CAP_PIT_STATE2,
60    Ioeventfd = KVM_CAP_IOEVENTFD,
61    SetIdentityMapAddr = KVM_CAP_SET_IDENTITY_MAP_ADDR,
62    #[cfg(target_arch = "x86_64")]
63    XenHvm = KVM_CAP_XEN_HVM,
64    AdjustClock = KVM_CAP_ADJUST_CLOCK,
65    InternalErrorData = KVM_CAP_INTERNAL_ERROR_DATA,
66    #[cfg(any(target_arch = "x86_64", target_arch = "aarch64"))]
67    VcpuEvents = KVM_CAP_VCPU_EVENTS,
68    S390Psw = KVM_CAP_S390_PSW,
69    PpcSegstate = KVM_CAP_PPC_SEGSTATE,
70    Hyperv = KVM_CAP_HYPERV,
71    HypervVapic = KVM_CAP_HYPERV_VAPIC,
72    HypervSpin = KVM_CAP_HYPERV_SPIN,
73    PciSegment = KVM_CAP_PCI_SEGMENT,
74    PpcPairedSingles = KVM_CAP_PPC_PAIRED_SINGLES,
75    IntrShadow = KVM_CAP_INTR_SHADOW,
76    #[cfg(target_arch = "x86_64")]
77    Debugregs = KVM_CAP_DEBUGREGS,
78    X86RobustSinglestep = KVM_CAP_X86_ROBUST_SINGLESTEP,
79    PpcOsi = KVM_CAP_PPC_OSI,
80    PpcUnsetIrq = KVM_CAP_PPC_UNSET_IRQ,
81    EnableCap = KVM_CAP_ENABLE_CAP,
82    #[cfg(target_arch = "x86_64")]
83    Xsave = KVM_CAP_XSAVE,
84    #[cfg(target_arch = "x86_64")]
85    Xsave2 = KVM_CAP_XSAVE2,
86    #[cfg(target_arch = "x86_64")]
87    Xcrs = KVM_CAP_XCRS,
88    PpcGetPvinfo = KVM_CAP_PPC_GET_PVINFO,
89    PpcIrqLevel = KVM_CAP_PPC_IRQ_LEVEL,
90    AsyncPf = KVM_CAP_ASYNC_PF,
91    TscControl = KVM_CAP_TSC_CONTROL,
92    GetTscKhz = KVM_CAP_GET_TSC_KHZ,
93    PpcBookeSregs = KVM_CAP_PPC_BOOKE_SREGS,
94    SpaprTce = KVM_CAP_SPAPR_TCE,
95    PpcSmt = KVM_CAP_PPC_SMT,
96    PpcRma = KVM_CAP_PPC_RMA,
97    MaxVcpus = KVM_CAP_MAX_VCPUS,
98    MaxVcpuId = KVM_CAP_MAX_VCPU_ID,
99    PpcHior = KVM_CAP_PPC_HIOR,
100    PpcPapr = KVM_CAP_PPC_PAPR,
101    SwTlb = KVM_CAP_SW_TLB,
102    OneReg = KVM_CAP_ONE_REG,
103    S390Gmap = KVM_CAP_S390_GMAP,
104    TscDeadlineTimer = KVM_CAP_TSC_DEADLINE_TIMER,
105    S390Ucontrol = KVM_CAP_S390_UCONTROL,
106    SyncRegs = KVM_CAP_SYNC_REGS,
107    Pci23 = KVM_CAP_PCI_2_3,
108    KvmclockCtrl = KVM_CAP_KVMCLOCK_CTRL,
109    SignalMsi = KVM_CAP_SIGNAL_MSI,
110    PpcGetSmmuInfo = KVM_CAP_PPC_GET_SMMU_INFO,
111    S390Cow = KVM_CAP_S390_COW,
112    PpcAllocHtab = KVM_CAP_PPC_ALLOC_HTAB,
113    ReadonlyMem = KVM_CAP_READONLY_MEM,
114    IrqfdResample = KVM_CAP_IRQFD_RESAMPLE,
115    PpcBookeWatchdog = KVM_CAP_PPC_BOOKE_WATCHDOG,
116    PpcHtabFd = KVM_CAP_PPC_HTAB_FD,
117    S390CssSupport = KVM_CAP_S390_CSS_SUPPORT,
118    PpcEpr = KVM_CAP_PPC_EPR,
119    ArmPsci = KVM_CAP_ARM_PSCI,
120    ArmSetDeviceAddr = KVM_CAP_ARM_SET_DEVICE_ADDR,
121    DeviceCtrl = KVM_CAP_DEVICE_CTRL,
122    IrqMpic = KVM_CAP_IRQ_MPIC,
123    PpcRtas = KVM_CAP_PPC_RTAS,
124    IrqXics = KVM_CAP_IRQ_XICS,
125    ArmEl132bit = KVM_CAP_ARM_EL1_32BIT,
126    SpaprMultitce = KVM_CAP_SPAPR_MULTITCE,
127    ExtEmulCpuid = KVM_CAP_EXT_EMUL_CPUID,
128    HypervTime = KVM_CAP_HYPERV_TIME,
129    IoapicPolarityIgnored = KVM_CAP_IOAPIC_POLARITY_IGNORED,
130    EnableCapVm = KVM_CAP_ENABLE_CAP_VM,
131    S390Irqchip = KVM_CAP_S390_IRQCHIP,
132    IoeventfdNoLength = KVM_CAP_IOEVENTFD_NO_LENGTH,
133    VmAttributes = KVM_CAP_VM_ATTRIBUTES,
134    ArmPsci02 = KVM_CAP_ARM_PSCI_0_2,
135    PpcFixupHcall = KVM_CAP_PPC_FIXUP_HCALL,
136    PpcEnableHcall = KVM_CAP_PPC_ENABLE_HCALL,
137    CheckExtensionVm = KVM_CAP_CHECK_EXTENSION_VM,
138    S390UserSigp = KVM_CAP_S390_USER_SIGP,
139    #[cfg(target_arch = "x86_64")]
140    X86Smm = KVM_CAP_X86_SMM,
141    #[cfg(target_arch = "x86_64")]
142    SplitIrqchip = KVM_CAP_SPLIT_IRQCHIP,
143    ArmPmuV3 = KVM_CAP_ARM_PMU_V3,
144    ImmediateExit = KVM_CAP_IMMEDIATE_EXIT,
145    ArmVmIPASize = KVM_CAP_ARM_VM_IPA_SIZE,
146    MsiDevid = KVM_CAP_MSI_DEVID,
147    HypervSynic = KVM_CAP_HYPERV_SYNIC,
148    HypervSynic2 = KVM_CAP_HYPERV_SYNIC2,
149    DebugHwBps = KVM_CAP_GUEST_DEBUG_HW_BPS,
150    DebugHwWps = KVM_CAP_GUEST_DEBUG_HW_WPS,
151    GetMsrFeatures = KVM_CAP_GET_MSR_FEATURES,
152    CoalescedPio = KVM_CAP_COALESCED_PIO,
153    #[cfg(target_arch = "aarch64")]
154    ArmSve = KVM_CAP_ARM_SVE,
155    #[cfg(target_arch = "aarch64")]
156    ArmPtrAuthAddress = KVM_CAP_ARM_PTRAUTH_ADDRESS,
157    #[cfg(target_arch = "aarch64")]
158    ArmPtrAuthGeneric = KVM_CAP_ARM_PTRAUTH_GENERIC,
159    #[cfg(target_arch = "x86_64")]
160    X86UserSpaceMsr = KVM_CAP_X86_USER_SPACE_MSR,
161    #[cfg(target_arch = "x86_64")]
162    X86MsrFilter = KVM_CAP_X86_MSR_FILTER,
163    #[cfg(target_arch = "x86_64")]
164    ExitHypercall = KVM_CAP_EXIT_HYPERCALL,
165    #[cfg(target_arch = "x86_64")]
166    MemoryFaultInfo = KVM_CAP_MEMORY_FAULT_INFO,
167    CounterOffset = KVM_CAP_COUNTER_OFFSET,
168    UserMemory2 = KVM_CAP_USER_MEMORY2,
169    GuestMemfd = KVM_CAP_GUEST_MEMFD,
170    MemoryAttributes = KVM_CAP_MEMORY_ATTRIBUTES,
171    #[cfg(target_arch = "x86_64")]
172    NestedState = KVM_CAP_NESTED_STATE,
173    #[cfg(target_arch = "x86_64")]
174    X2ApicApi = KVM_CAP_X2APIC_API,
175    DirtyLogRing = KVM_CAP_DIRTY_LOG_RING,
176}