1a9643ea8Slogwang /*- 2*22ce4affSfengbojiang * SPDX-License-Identifier: BSD-2-Clause-FreeBSD 3*22ce4affSfengbojiang * 4a9643ea8Slogwang * Copyright (c) 2011 NetApp, Inc. 5a9643ea8Slogwang * All rights reserved. 6a9643ea8Slogwang * 7a9643ea8Slogwang * Redistribution and use in source and binary forms, with or without 8a9643ea8Slogwang * modification, are permitted provided that the following conditions 9a9643ea8Slogwang * are met: 10a9643ea8Slogwang * 1. Redistributions of source code must retain the above copyright 11a9643ea8Slogwang * notice, this list of conditions and the following disclaimer. 12a9643ea8Slogwang * 2. Redistributions in binary form must reproduce the above copyright 13a9643ea8Slogwang * notice, this list of conditions and the following disclaimer in the 14a9643ea8Slogwang * documentation and/or other materials provided with the distribution. 15a9643ea8Slogwang * 16a9643ea8Slogwang * THIS SOFTWARE IS PROVIDED BY NETAPP, INC ``AS IS'' AND 17a9643ea8Slogwang * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18a9643ea8Slogwang * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19a9643ea8Slogwang * ARE DISCLAIMED. IN NO EVENT SHALL NETAPP, INC OR CONTRIBUTORS BE LIABLE 20a9643ea8Slogwang * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21a9643ea8Slogwang * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22a9643ea8Slogwang * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23a9643ea8Slogwang * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24a9643ea8Slogwang * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25a9643ea8Slogwang * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26a9643ea8Slogwang * SUCH DAMAGE. 27a9643ea8Slogwang * 28a9643ea8Slogwang * $FreeBSD$ 29a9643ea8Slogwang */ 30a9643ea8Slogwang 31a9643ea8Slogwang #ifndef _VMM_DEV_H_ 32a9643ea8Slogwang #define _VMM_DEV_H_ 33a9643ea8Slogwang 34*22ce4affSfengbojiang struct vm_snapshot_meta; 35*22ce4affSfengbojiang 36a9643ea8Slogwang #ifdef _KERNEL 37a9643ea8Slogwang void vmmdev_init(void); 38a9643ea8Slogwang int vmmdev_cleanup(void); 39a9643ea8Slogwang #endif 40a9643ea8Slogwang 41a9643ea8Slogwang struct vm_memmap { 42a9643ea8Slogwang vm_paddr_t gpa; 43a9643ea8Slogwang int segid; /* memory segment */ 44a9643ea8Slogwang vm_ooffset_t segoff; /* offset into memory segment */ 45a9643ea8Slogwang size_t len; /* mmap length */ 46a9643ea8Slogwang int prot; /* RWX */ 47a9643ea8Slogwang int flags; 48a9643ea8Slogwang }; 49a9643ea8Slogwang #define VM_MEMMAP_F_WIRED 0x01 50a9643ea8Slogwang #define VM_MEMMAP_F_IOMMU 0x02 51a9643ea8Slogwang 52a9643ea8Slogwang #define VM_MEMSEG_NAME(m) ((m)->name[0] != '\0' ? (m)->name : NULL) 53a9643ea8Slogwang struct vm_memseg { 54a9643ea8Slogwang int segid; 55a9643ea8Slogwang size_t len; 56*22ce4affSfengbojiang char name[VM_MAX_SUFFIXLEN + 1]; 57a9643ea8Slogwang }; 58a9643ea8Slogwang 59*22ce4affSfengbojiang struct vm_memseg_fbsd12 { 60*22ce4affSfengbojiang int segid; 61*22ce4affSfengbojiang size_t len; 62*22ce4affSfengbojiang char name[64]; 63*22ce4affSfengbojiang }; 64*22ce4affSfengbojiang _Static_assert(sizeof(struct vm_memseg_fbsd12) == 80, "COMPAT_FREEBSD12 ABI"); 65*22ce4affSfengbojiang 66a9643ea8Slogwang struct vm_register { 67a9643ea8Slogwang int cpuid; 68a9643ea8Slogwang int regnum; /* enum vm_reg_name */ 69a9643ea8Slogwang uint64_t regval; 70a9643ea8Slogwang }; 71a9643ea8Slogwang 72a9643ea8Slogwang struct vm_seg_desc { /* data or code segment */ 73a9643ea8Slogwang int cpuid; 74a9643ea8Slogwang int regnum; /* enum vm_reg_name */ 75a9643ea8Slogwang struct seg_desc desc; 76a9643ea8Slogwang }; 77a9643ea8Slogwang 78*22ce4affSfengbojiang struct vm_register_set { 79*22ce4affSfengbojiang int cpuid; 80*22ce4affSfengbojiang unsigned int count; 81*22ce4affSfengbojiang const int *regnums; /* enum vm_reg_name */ 82*22ce4affSfengbojiang uint64_t *regvals; 83*22ce4affSfengbojiang }; 84*22ce4affSfengbojiang 85a9643ea8Slogwang struct vm_run { 86a9643ea8Slogwang int cpuid; 87a9643ea8Slogwang struct vm_exit vm_exit; 88a9643ea8Slogwang }; 89a9643ea8Slogwang 90a9643ea8Slogwang struct vm_exception { 91a9643ea8Slogwang int cpuid; 92a9643ea8Slogwang int vector; 93a9643ea8Slogwang uint32_t error_code; 94a9643ea8Slogwang int error_code_valid; 95a9643ea8Slogwang int restart_instruction; 96a9643ea8Slogwang }; 97a9643ea8Slogwang 98a9643ea8Slogwang struct vm_lapic_msi { 99a9643ea8Slogwang uint64_t msg; 100a9643ea8Slogwang uint64_t addr; 101a9643ea8Slogwang }; 102a9643ea8Slogwang 103a9643ea8Slogwang struct vm_lapic_irq { 104a9643ea8Slogwang int cpuid; 105a9643ea8Slogwang int vector; 106a9643ea8Slogwang }; 107a9643ea8Slogwang 108a9643ea8Slogwang struct vm_ioapic_irq { 109a9643ea8Slogwang int irq; 110a9643ea8Slogwang }; 111a9643ea8Slogwang 112a9643ea8Slogwang struct vm_isa_irq { 113a9643ea8Slogwang int atpic_irq; 114a9643ea8Slogwang int ioapic_irq; 115a9643ea8Slogwang }; 116a9643ea8Slogwang 117a9643ea8Slogwang struct vm_isa_irq_trigger { 118a9643ea8Slogwang int atpic_irq; 119a9643ea8Slogwang enum vm_intr_trigger trigger; 120a9643ea8Slogwang }; 121a9643ea8Slogwang 122a9643ea8Slogwang struct vm_capability { 123a9643ea8Slogwang int cpuid; 124a9643ea8Slogwang enum vm_cap_type captype; 125a9643ea8Slogwang int capval; 126a9643ea8Slogwang int allcpus; 127a9643ea8Slogwang }; 128a9643ea8Slogwang 129a9643ea8Slogwang struct vm_pptdev { 130a9643ea8Slogwang int bus; 131a9643ea8Slogwang int slot; 132a9643ea8Slogwang int func; 133a9643ea8Slogwang }; 134a9643ea8Slogwang 135a9643ea8Slogwang struct vm_pptdev_mmio { 136a9643ea8Slogwang int bus; 137a9643ea8Slogwang int slot; 138a9643ea8Slogwang int func; 139a9643ea8Slogwang vm_paddr_t gpa; 140a9643ea8Slogwang vm_paddr_t hpa; 141a9643ea8Slogwang size_t len; 142a9643ea8Slogwang }; 143a9643ea8Slogwang 144a9643ea8Slogwang struct vm_pptdev_msi { 145a9643ea8Slogwang int vcpu; 146a9643ea8Slogwang int bus; 147a9643ea8Slogwang int slot; 148a9643ea8Slogwang int func; 149a9643ea8Slogwang int numvec; /* 0 means disabled */ 150a9643ea8Slogwang uint64_t msg; 151a9643ea8Slogwang uint64_t addr; 152a9643ea8Slogwang }; 153a9643ea8Slogwang 154a9643ea8Slogwang struct vm_pptdev_msix { 155a9643ea8Slogwang int vcpu; 156a9643ea8Slogwang int bus; 157a9643ea8Slogwang int slot; 158a9643ea8Slogwang int func; 159a9643ea8Slogwang int idx; 160a9643ea8Slogwang uint64_t msg; 161a9643ea8Slogwang uint32_t vector_control; 162a9643ea8Slogwang uint64_t addr; 163a9643ea8Slogwang }; 164a9643ea8Slogwang 165a9643ea8Slogwang struct vm_nmi { 166a9643ea8Slogwang int cpuid; 167a9643ea8Slogwang }; 168a9643ea8Slogwang 169a9643ea8Slogwang #define MAX_VM_STATS 64 170a9643ea8Slogwang struct vm_stats { 171a9643ea8Slogwang int cpuid; /* in */ 172a9643ea8Slogwang int num_entries; /* out */ 173a9643ea8Slogwang struct timeval tv; 174a9643ea8Slogwang uint64_t statbuf[MAX_VM_STATS]; 175a9643ea8Slogwang }; 176a9643ea8Slogwang 177a9643ea8Slogwang struct vm_stat_desc { 178a9643ea8Slogwang int index; /* in */ 179a9643ea8Slogwang char desc[128]; /* out */ 180a9643ea8Slogwang }; 181a9643ea8Slogwang 182a9643ea8Slogwang struct vm_x2apic { 183a9643ea8Slogwang int cpuid; 184a9643ea8Slogwang enum x2apic_state state; 185a9643ea8Slogwang }; 186a9643ea8Slogwang 187a9643ea8Slogwang struct vm_gpa_pte { 188a9643ea8Slogwang uint64_t gpa; /* in */ 189a9643ea8Slogwang uint64_t pte[4]; /* out */ 190a9643ea8Slogwang int ptenum; 191a9643ea8Slogwang }; 192a9643ea8Slogwang 193a9643ea8Slogwang struct vm_hpet_cap { 194a9643ea8Slogwang uint32_t capabilities; /* lower 32 bits of HPET capabilities */ 195a9643ea8Slogwang }; 196a9643ea8Slogwang 197a9643ea8Slogwang struct vm_suspend { 198a9643ea8Slogwang enum vm_suspend_how how; 199a9643ea8Slogwang }; 200a9643ea8Slogwang 201a9643ea8Slogwang struct vm_gla2gpa { 202a9643ea8Slogwang int vcpuid; /* inputs */ 203a9643ea8Slogwang int prot; /* PROT_READ or PROT_WRITE */ 204a9643ea8Slogwang uint64_t gla; 205a9643ea8Slogwang struct vm_guest_paging paging; 206a9643ea8Slogwang int fault; /* outputs */ 207a9643ea8Slogwang uint64_t gpa; 208a9643ea8Slogwang }; 209a9643ea8Slogwang 210a9643ea8Slogwang struct vm_activate_cpu { 211a9643ea8Slogwang int vcpuid; 212a9643ea8Slogwang }; 213a9643ea8Slogwang 214a9643ea8Slogwang struct vm_cpuset { 215a9643ea8Slogwang int which; 216a9643ea8Slogwang int cpusetsize; 217a9643ea8Slogwang cpuset_t *cpus; 218a9643ea8Slogwang }; 219a9643ea8Slogwang #define VM_ACTIVE_CPUS 0 220a9643ea8Slogwang #define VM_SUSPENDED_CPUS 1 221*22ce4affSfengbojiang #define VM_DEBUG_CPUS 2 222a9643ea8Slogwang 223a9643ea8Slogwang struct vm_intinfo { 224a9643ea8Slogwang int vcpuid; 225a9643ea8Slogwang uint64_t info1; 226a9643ea8Slogwang uint64_t info2; 227a9643ea8Slogwang }; 228a9643ea8Slogwang 229a9643ea8Slogwang struct vm_rtc_time { 230a9643ea8Slogwang time_t secs; 231a9643ea8Slogwang }; 232a9643ea8Slogwang 233a9643ea8Slogwang struct vm_rtc_data { 234a9643ea8Slogwang int offset; 235a9643ea8Slogwang uint8_t value; 236a9643ea8Slogwang }; 237a9643ea8Slogwang 238*22ce4affSfengbojiang struct vm_cpu_topology { 239*22ce4affSfengbojiang uint16_t sockets; 240*22ce4affSfengbojiang uint16_t cores; 241*22ce4affSfengbojiang uint16_t threads; 242*22ce4affSfengbojiang uint16_t maxcpus; 243*22ce4affSfengbojiang }; 244*22ce4affSfengbojiang 245*22ce4affSfengbojiang struct vm_readwrite_kernemu_device { 246*22ce4affSfengbojiang int vcpuid; 247*22ce4affSfengbojiang unsigned access_width : 3; 248*22ce4affSfengbojiang unsigned _unused : 29; 249*22ce4affSfengbojiang uint64_t gpa; 250*22ce4affSfengbojiang uint64_t value; 251*22ce4affSfengbojiang }; 252*22ce4affSfengbojiang _Static_assert(sizeof(struct vm_readwrite_kernemu_device) == 24, "ABI"); 253*22ce4affSfengbojiang 254a9643ea8Slogwang enum { 255a9643ea8Slogwang /* general routines */ 256a9643ea8Slogwang IOCNUM_ABIVERS = 0, 257a9643ea8Slogwang IOCNUM_RUN = 1, 258a9643ea8Slogwang IOCNUM_SET_CAPABILITY = 2, 259a9643ea8Slogwang IOCNUM_GET_CAPABILITY = 3, 260a9643ea8Slogwang IOCNUM_SUSPEND = 4, 261a9643ea8Slogwang IOCNUM_REINIT = 5, 262a9643ea8Slogwang 263a9643ea8Slogwang /* memory apis */ 264a9643ea8Slogwang IOCNUM_MAP_MEMORY = 10, /* deprecated */ 265a9643ea8Slogwang IOCNUM_GET_MEMORY_SEG = 11, /* deprecated */ 266a9643ea8Slogwang IOCNUM_GET_GPA_PMAP = 12, 267a9643ea8Slogwang IOCNUM_GLA2GPA = 13, 268a9643ea8Slogwang IOCNUM_ALLOC_MEMSEG = 14, 269a9643ea8Slogwang IOCNUM_GET_MEMSEG = 15, 270a9643ea8Slogwang IOCNUM_MMAP_MEMSEG = 16, 271a9643ea8Slogwang IOCNUM_MMAP_GETNEXT = 17, 272*22ce4affSfengbojiang IOCNUM_GLA2GPA_NOFAULT = 18, 273a9643ea8Slogwang 274a9643ea8Slogwang /* register/state accessors */ 275a9643ea8Slogwang IOCNUM_SET_REGISTER = 20, 276a9643ea8Slogwang IOCNUM_GET_REGISTER = 21, 277a9643ea8Slogwang IOCNUM_SET_SEGMENT_DESCRIPTOR = 22, 278a9643ea8Slogwang IOCNUM_GET_SEGMENT_DESCRIPTOR = 23, 279*22ce4affSfengbojiang IOCNUM_SET_REGISTER_SET = 24, 280*22ce4affSfengbojiang IOCNUM_GET_REGISTER_SET = 25, 281*22ce4affSfengbojiang IOCNUM_GET_KERNEMU_DEV = 26, 282*22ce4affSfengbojiang IOCNUM_SET_KERNEMU_DEV = 27, 283a9643ea8Slogwang 284a9643ea8Slogwang /* interrupt injection */ 285a9643ea8Slogwang IOCNUM_GET_INTINFO = 28, 286a9643ea8Slogwang IOCNUM_SET_INTINFO = 29, 287a9643ea8Slogwang IOCNUM_INJECT_EXCEPTION = 30, 288a9643ea8Slogwang IOCNUM_LAPIC_IRQ = 31, 289a9643ea8Slogwang IOCNUM_INJECT_NMI = 32, 290a9643ea8Slogwang IOCNUM_IOAPIC_ASSERT_IRQ = 33, 291a9643ea8Slogwang IOCNUM_IOAPIC_DEASSERT_IRQ = 34, 292a9643ea8Slogwang IOCNUM_IOAPIC_PULSE_IRQ = 35, 293a9643ea8Slogwang IOCNUM_LAPIC_MSI = 36, 294a9643ea8Slogwang IOCNUM_LAPIC_LOCAL_IRQ = 37, 295a9643ea8Slogwang IOCNUM_IOAPIC_PINCOUNT = 38, 296a9643ea8Slogwang IOCNUM_RESTART_INSTRUCTION = 39, 297a9643ea8Slogwang 298a9643ea8Slogwang /* PCI pass-thru */ 299a9643ea8Slogwang IOCNUM_BIND_PPTDEV = 40, 300a9643ea8Slogwang IOCNUM_UNBIND_PPTDEV = 41, 301a9643ea8Slogwang IOCNUM_MAP_PPTDEV_MMIO = 42, 302a9643ea8Slogwang IOCNUM_PPTDEV_MSI = 43, 303a9643ea8Slogwang IOCNUM_PPTDEV_MSIX = 44, 304*22ce4affSfengbojiang IOCNUM_PPTDEV_DISABLE_MSIX = 45, 305a9643ea8Slogwang 306a9643ea8Slogwang /* statistics */ 307a9643ea8Slogwang IOCNUM_VM_STATS = 50, 308a9643ea8Slogwang IOCNUM_VM_STAT_DESC = 51, 309a9643ea8Slogwang 310a9643ea8Slogwang /* kernel device state */ 311a9643ea8Slogwang IOCNUM_SET_X2APIC_STATE = 60, 312a9643ea8Slogwang IOCNUM_GET_X2APIC_STATE = 61, 313a9643ea8Slogwang IOCNUM_GET_HPET_CAPABILITIES = 62, 314a9643ea8Slogwang 315*22ce4affSfengbojiang /* CPU Topology */ 316*22ce4affSfengbojiang IOCNUM_SET_TOPOLOGY = 63, 317*22ce4affSfengbojiang IOCNUM_GET_TOPOLOGY = 64, 318*22ce4affSfengbojiang 319a9643ea8Slogwang /* legacy interrupt injection */ 320a9643ea8Slogwang IOCNUM_ISA_ASSERT_IRQ = 80, 321a9643ea8Slogwang IOCNUM_ISA_DEASSERT_IRQ = 81, 322a9643ea8Slogwang IOCNUM_ISA_PULSE_IRQ = 82, 323a9643ea8Slogwang IOCNUM_ISA_SET_IRQ_TRIGGER = 83, 324a9643ea8Slogwang 325a9643ea8Slogwang /* vm_cpuset */ 326a9643ea8Slogwang IOCNUM_ACTIVATE_CPU = 90, 327a9643ea8Slogwang IOCNUM_GET_CPUSET = 91, 328*22ce4affSfengbojiang IOCNUM_SUSPEND_CPU = 92, 329*22ce4affSfengbojiang IOCNUM_RESUME_CPU = 93, 330a9643ea8Slogwang 331a9643ea8Slogwang /* RTC */ 332a9643ea8Slogwang IOCNUM_RTC_READ = 100, 333a9643ea8Slogwang IOCNUM_RTC_WRITE = 101, 334a9643ea8Slogwang IOCNUM_RTC_SETTIME = 102, 335a9643ea8Slogwang IOCNUM_RTC_GETTIME = 103, 336*22ce4affSfengbojiang 337*22ce4affSfengbojiang /* checkpoint */ 338*22ce4affSfengbojiang IOCNUM_SNAPSHOT_REQ = 113, 339*22ce4affSfengbojiang 340*22ce4affSfengbojiang IOCNUM_RESTORE_TIME = 115 341a9643ea8Slogwang }; 342a9643ea8Slogwang 343a9643ea8Slogwang #define VM_RUN \ 344a9643ea8Slogwang _IOWR('v', IOCNUM_RUN, struct vm_run) 345a9643ea8Slogwang #define VM_SUSPEND \ 346a9643ea8Slogwang _IOW('v', IOCNUM_SUSPEND, struct vm_suspend) 347a9643ea8Slogwang #define VM_REINIT \ 348a9643ea8Slogwang _IO('v', IOCNUM_REINIT) 349*22ce4affSfengbojiang #define VM_ALLOC_MEMSEG_FBSD12 \ 350*22ce4affSfengbojiang _IOW('v', IOCNUM_ALLOC_MEMSEG, struct vm_memseg_fbsd12) 351a9643ea8Slogwang #define VM_ALLOC_MEMSEG \ 352a9643ea8Slogwang _IOW('v', IOCNUM_ALLOC_MEMSEG, struct vm_memseg) 353*22ce4affSfengbojiang #define VM_GET_MEMSEG_FBSD12 \ 354*22ce4affSfengbojiang _IOWR('v', IOCNUM_GET_MEMSEG, struct vm_memseg_fbsd12) 355a9643ea8Slogwang #define VM_GET_MEMSEG \ 356a9643ea8Slogwang _IOWR('v', IOCNUM_GET_MEMSEG, struct vm_memseg) 357a9643ea8Slogwang #define VM_MMAP_MEMSEG \ 358a9643ea8Slogwang _IOW('v', IOCNUM_MMAP_MEMSEG, struct vm_memmap) 359a9643ea8Slogwang #define VM_MMAP_GETNEXT \ 360a9643ea8Slogwang _IOWR('v', IOCNUM_MMAP_GETNEXT, struct vm_memmap) 361a9643ea8Slogwang #define VM_SET_REGISTER \ 362a9643ea8Slogwang _IOW('v', IOCNUM_SET_REGISTER, struct vm_register) 363a9643ea8Slogwang #define VM_GET_REGISTER \ 364a9643ea8Slogwang _IOWR('v', IOCNUM_GET_REGISTER, struct vm_register) 365a9643ea8Slogwang #define VM_SET_SEGMENT_DESCRIPTOR \ 366a9643ea8Slogwang _IOW('v', IOCNUM_SET_SEGMENT_DESCRIPTOR, struct vm_seg_desc) 367a9643ea8Slogwang #define VM_GET_SEGMENT_DESCRIPTOR \ 368a9643ea8Slogwang _IOWR('v', IOCNUM_GET_SEGMENT_DESCRIPTOR, struct vm_seg_desc) 369*22ce4affSfengbojiang #define VM_SET_REGISTER_SET \ 370*22ce4affSfengbojiang _IOW('v', IOCNUM_SET_REGISTER_SET, struct vm_register_set) 371*22ce4affSfengbojiang #define VM_GET_REGISTER_SET \ 372*22ce4affSfengbojiang _IOWR('v', IOCNUM_GET_REGISTER_SET, struct vm_register_set) 373*22ce4affSfengbojiang #define VM_SET_KERNEMU_DEV \ 374*22ce4affSfengbojiang _IOW('v', IOCNUM_SET_KERNEMU_DEV, \ 375*22ce4affSfengbojiang struct vm_readwrite_kernemu_device) 376*22ce4affSfengbojiang #define VM_GET_KERNEMU_DEV \ 377*22ce4affSfengbojiang _IOWR('v', IOCNUM_GET_KERNEMU_DEV, \ 378*22ce4affSfengbojiang struct vm_readwrite_kernemu_device) 379a9643ea8Slogwang #define VM_INJECT_EXCEPTION \ 380a9643ea8Slogwang _IOW('v', IOCNUM_INJECT_EXCEPTION, struct vm_exception) 381a9643ea8Slogwang #define VM_LAPIC_IRQ \ 382a9643ea8Slogwang _IOW('v', IOCNUM_LAPIC_IRQ, struct vm_lapic_irq) 383a9643ea8Slogwang #define VM_LAPIC_LOCAL_IRQ \ 384a9643ea8Slogwang _IOW('v', IOCNUM_LAPIC_LOCAL_IRQ, struct vm_lapic_irq) 385a9643ea8Slogwang #define VM_LAPIC_MSI \ 386a9643ea8Slogwang _IOW('v', IOCNUM_LAPIC_MSI, struct vm_lapic_msi) 387a9643ea8Slogwang #define VM_IOAPIC_ASSERT_IRQ \ 388a9643ea8Slogwang _IOW('v', IOCNUM_IOAPIC_ASSERT_IRQ, struct vm_ioapic_irq) 389a9643ea8Slogwang #define VM_IOAPIC_DEASSERT_IRQ \ 390a9643ea8Slogwang _IOW('v', IOCNUM_IOAPIC_DEASSERT_IRQ, struct vm_ioapic_irq) 391a9643ea8Slogwang #define VM_IOAPIC_PULSE_IRQ \ 392a9643ea8Slogwang _IOW('v', IOCNUM_IOAPIC_PULSE_IRQ, struct vm_ioapic_irq) 393a9643ea8Slogwang #define VM_IOAPIC_PINCOUNT \ 394a9643ea8Slogwang _IOR('v', IOCNUM_IOAPIC_PINCOUNT, int) 395a9643ea8Slogwang #define VM_ISA_ASSERT_IRQ \ 396a9643ea8Slogwang _IOW('v', IOCNUM_ISA_ASSERT_IRQ, struct vm_isa_irq) 397a9643ea8Slogwang #define VM_ISA_DEASSERT_IRQ \ 398a9643ea8Slogwang _IOW('v', IOCNUM_ISA_DEASSERT_IRQ, struct vm_isa_irq) 399a9643ea8Slogwang #define VM_ISA_PULSE_IRQ \ 400a9643ea8Slogwang _IOW('v', IOCNUM_ISA_PULSE_IRQ, struct vm_isa_irq) 401a9643ea8Slogwang #define VM_ISA_SET_IRQ_TRIGGER \ 402a9643ea8Slogwang _IOW('v', IOCNUM_ISA_SET_IRQ_TRIGGER, struct vm_isa_irq_trigger) 403a9643ea8Slogwang #define VM_SET_CAPABILITY \ 404a9643ea8Slogwang _IOW('v', IOCNUM_SET_CAPABILITY, struct vm_capability) 405a9643ea8Slogwang #define VM_GET_CAPABILITY \ 406a9643ea8Slogwang _IOWR('v', IOCNUM_GET_CAPABILITY, struct vm_capability) 407a9643ea8Slogwang #define VM_BIND_PPTDEV \ 408a9643ea8Slogwang _IOW('v', IOCNUM_BIND_PPTDEV, struct vm_pptdev) 409a9643ea8Slogwang #define VM_UNBIND_PPTDEV \ 410a9643ea8Slogwang _IOW('v', IOCNUM_UNBIND_PPTDEV, struct vm_pptdev) 411a9643ea8Slogwang #define VM_MAP_PPTDEV_MMIO \ 412a9643ea8Slogwang _IOW('v', IOCNUM_MAP_PPTDEV_MMIO, struct vm_pptdev_mmio) 413a9643ea8Slogwang #define VM_PPTDEV_MSI \ 414a9643ea8Slogwang _IOW('v', IOCNUM_PPTDEV_MSI, struct vm_pptdev_msi) 415a9643ea8Slogwang #define VM_PPTDEV_MSIX \ 416a9643ea8Slogwang _IOW('v', IOCNUM_PPTDEV_MSIX, struct vm_pptdev_msix) 417*22ce4affSfengbojiang #define VM_PPTDEV_DISABLE_MSIX \ 418*22ce4affSfengbojiang _IOW('v', IOCNUM_PPTDEV_DISABLE_MSIX, struct vm_pptdev) 419a9643ea8Slogwang #define VM_INJECT_NMI \ 420a9643ea8Slogwang _IOW('v', IOCNUM_INJECT_NMI, struct vm_nmi) 421a9643ea8Slogwang #define VM_STATS \ 422a9643ea8Slogwang _IOWR('v', IOCNUM_VM_STATS, struct vm_stats) 423a9643ea8Slogwang #define VM_STAT_DESC \ 424a9643ea8Slogwang _IOWR('v', IOCNUM_VM_STAT_DESC, struct vm_stat_desc) 425a9643ea8Slogwang #define VM_SET_X2APIC_STATE \ 426a9643ea8Slogwang _IOW('v', IOCNUM_SET_X2APIC_STATE, struct vm_x2apic) 427a9643ea8Slogwang #define VM_GET_X2APIC_STATE \ 428a9643ea8Slogwang _IOWR('v', IOCNUM_GET_X2APIC_STATE, struct vm_x2apic) 429a9643ea8Slogwang #define VM_GET_HPET_CAPABILITIES \ 430a9643ea8Slogwang _IOR('v', IOCNUM_GET_HPET_CAPABILITIES, struct vm_hpet_cap) 431*22ce4affSfengbojiang #define VM_SET_TOPOLOGY \ 432*22ce4affSfengbojiang _IOW('v', IOCNUM_SET_TOPOLOGY, struct vm_cpu_topology) 433*22ce4affSfengbojiang #define VM_GET_TOPOLOGY \ 434*22ce4affSfengbojiang _IOR('v', IOCNUM_GET_TOPOLOGY, struct vm_cpu_topology) 435a9643ea8Slogwang #define VM_GET_GPA_PMAP \ 436a9643ea8Slogwang _IOWR('v', IOCNUM_GET_GPA_PMAP, struct vm_gpa_pte) 437a9643ea8Slogwang #define VM_GLA2GPA \ 438a9643ea8Slogwang _IOWR('v', IOCNUM_GLA2GPA, struct vm_gla2gpa) 439*22ce4affSfengbojiang #define VM_GLA2GPA_NOFAULT \ 440*22ce4affSfengbojiang _IOWR('v', IOCNUM_GLA2GPA_NOFAULT, struct vm_gla2gpa) 441a9643ea8Slogwang #define VM_ACTIVATE_CPU \ 442a9643ea8Slogwang _IOW('v', IOCNUM_ACTIVATE_CPU, struct vm_activate_cpu) 443a9643ea8Slogwang #define VM_GET_CPUS \ 444a9643ea8Slogwang _IOW('v', IOCNUM_GET_CPUSET, struct vm_cpuset) 445*22ce4affSfengbojiang #define VM_SUSPEND_CPU \ 446*22ce4affSfengbojiang _IOW('v', IOCNUM_SUSPEND_CPU, struct vm_activate_cpu) 447*22ce4affSfengbojiang #define VM_RESUME_CPU \ 448*22ce4affSfengbojiang _IOW('v', IOCNUM_RESUME_CPU, struct vm_activate_cpu) 449a9643ea8Slogwang #define VM_SET_INTINFO \ 450a9643ea8Slogwang _IOW('v', IOCNUM_SET_INTINFO, struct vm_intinfo) 451a9643ea8Slogwang #define VM_GET_INTINFO \ 452a9643ea8Slogwang _IOWR('v', IOCNUM_GET_INTINFO, struct vm_intinfo) 453a9643ea8Slogwang #define VM_RTC_WRITE \ 454a9643ea8Slogwang _IOW('v', IOCNUM_RTC_WRITE, struct vm_rtc_data) 455a9643ea8Slogwang #define VM_RTC_READ \ 456a9643ea8Slogwang _IOWR('v', IOCNUM_RTC_READ, struct vm_rtc_data) 457a9643ea8Slogwang #define VM_RTC_SETTIME \ 458a9643ea8Slogwang _IOW('v', IOCNUM_RTC_SETTIME, struct vm_rtc_time) 459a9643ea8Slogwang #define VM_RTC_GETTIME \ 460a9643ea8Slogwang _IOR('v', IOCNUM_RTC_GETTIME, struct vm_rtc_time) 461a9643ea8Slogwang #define VM_RESTART_INSTRUCTION \ 462a9643ea8Slogwang _IOW('v', IOCNUM_RESTART_INSTRUCTION, int) 463*22ce4affSfengbojiang #define VM_SNAPSHOT_REQ \ 464*22ce4affSfengbojiang _IOWR('v', IOCNUM_SNAPSHOT_REQ, struct vm_snapshot_meta) 465*22ce4affSfengbojiang #define VM_RESTORE_TIME \ 466*22ce4affSfengbojiang _IOWR('v', IOCNUM_RESTORE_TIME, int) 467a9643ea8Slogwang #endif 468