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