xref: /aosp_15_r20/external/crosvm/hypervisor/src/kvm/cap.rs (revision bb4ee6a4ae7042d18b07a98463b9c8b875e44b39)
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 
5 use kvm_sys::*;
6 
7 /// A capability the kernel's KVM interface can possibly expose.
8 #[derive(Clone, Copy, Debug, PartialEq, Eq)]
9 #[repr(u32)]
10 pub 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 = "arm", 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     S390UserSigp = KVM_CAP_S390_USER_SIGP,
122     ImmediateExit = KVM_CAP_IMMEDIATE_EXIT,
123     ArmPmuV3 = KVM_CAP_ARM_PMU_V3,
124     ArmProtectedVm = KVM_CAP_ARM_PROTECTED_VM,
125     ArmMte = KVM_CAP_ARM_MTE,
126     #[cfg(target_arch = "x86_64")]
127     BusLockDetect = KVM_CAP_X86_BUS_LOCK_EXIT,
128     MemNoncoherentDma = KVM_CAP_USER_CONFIGURE_NONCOHERENT_DMA,
129 }
130