1*7671517eSToomas Soome /* 2*7671517eSToomas Soome * This file and its contents are supplied under the terms of the 3*7671517eSToomas Soome * Common Development and Distribution License ("CDDL"), version 1.0. 4*7671517eSToomas Soome * You may only use this file in accordance with the terms of version 5*7671517eSToomas Soome * 1.0 of the CDDL. 6*7671517eSToomas Soome * 7*7671517eSToomas Soome * A full copy of the text of the CDDL should have accompanied this 8*7671517eSToomas Soome * source. A copy of the CDDL is also available via the Internet at 9*7671517eSToomas Soome * http://www.illumos.org/license/CDDL. 10*7671517eSToomas Soome */ 11*7671517eSToomas Soome 12*7671517eSToomas Soome /* 13*7671517eSToomas Soome * Copyright 2023 Toomas Soome <tsoome@me.com> 14*7671517eSToomas Soome */ 15*7671517eSToomas Soome 16*7671517eSToomas Soome #include <sys/types.h> 17*7671517eSToomas Soome #include <sys/sysmacros.h> 18*7671517eSToomas Soome #include "codes.h" 19*7671517eSToomas Soome 20*7671517eSToomas Soome #if defined(__x86) 21*7671517eSToomas Soome 22*7671517eSToomas Soome /* vmm_dev.h is expecting to have the types below. */ 23*7671517eSToomas Soome typedef uint64_t vm_paddr_t; 24*7671517eSToomas Soome typedef int64_t vm_ooffset_t; 25*7671517eSToomas Soome #include <sys/vmm_dev.h> 26*7671517eSToomas Soome 27*7671517eSToomas Soome /* VMM ioctls */ 28*7671517eSToomas Soome const struct ioc vmmctl_ioc[] = { 29*7671517eSToomas Soome { (uint_t)VMM_CREATE_VM, "VMM_CREATE_VM", NULL }, 30*7671517eSToomas Soome { (uint_t)VMM_DESTROY_VM, "VMM_DESTROY_VM", NULL }, 31*7671517eSToomas Soome { (uint_t)VMM_VM_SUPPORTED, "VMM_VM_SUPPORTED", NULL }, 32*7671517eSToomas Soome 33*7671517eSToomas Soome { (uint_t)VMM_RESV_QUERY, "VMM_RESV_QUERY", NULL }, 34*7671517eSToomas Soome { (uint_t)VMM_RESV_SET_TARGET, "VMM_RESV_SET_TARGET", NULL } 35*7671517eSToomas Soome }; 36*7671517eSToomas Soome 37*7671517eSToomas Soome const struct ioc vmm_cpu_ioc[] = { 38*7671517eSToomas Soome { (uint_t)VM_RUN, "VM_RUN", NULL }, 39*7671517eSToomas Soome { (uint_t)VM_SET_REGISTER, "VM_SET_REGISTER", NULL }, 40*7671517eSToomas Soome { (uint_t)VM_GET_REGISTER, "VM_GET_REGISTER", NULL }, 41*7671517eSToomas Soome { (uint_t)VM_SET_SEGMENT_DESCRIPTOR, "VM_SET_SEGMENT_DESCRIPTOR", 42*7671517eSToomas Soome NULL }, 43*7671517eSToomas Soome { (uint_t)VM_GET_SEGMENT_DESCRIPTOR, "VM_GET_SEGMENT_DESCRIPTOR", 44*7671517eSToomas Soome NULL }, 45*7671517eSToomas Soome { (uint_t)VM_SET_REGISTER_SET, "VM_SET_REGISTER_SET", NULL }, 46*7671517eSToomas Soome { (uint_t)VM_GET_REGISTER_SET, "VM_GET_REGISTER_SET", NULL }, 47*7671517eSToomas Soome { (uint_t)VM_INJECT_EXCEPTION, "VM_INJECT_EXCEPTION", NULL }, 48*7671517eSToomas Soome { (uint_t)VM_SET_CAPABILITY, "VM_SET_CAPABILITY", NULL }, 49*7671517eSToomas Soome { (uint_t)VM_GET_CAPABILITY, "VM_GET_CAPABILITY", NULL }, 50*7671517eSToomas Soome { (uint_t)VM_PPTDEV_MSI, "VM_PPTDEV_MSI", NULL }, 51*7671517eSToomas Soome { (uint_t)VM_PPTDEV_MSIX, "VM_PPTDEV_MSIX", NULL }, 52*7671517eSToomas Soome { (uint_t)VM_SET_X2APIC_STATE, "VM_SET_X2APIC_STATE", NULL }, 53*7671517eSToomas Soome { (uint_t)VM_GLA2GPA, "VM_GLA2GPA", NULL }, 54*7671517eSToomas Soome { (uint_t)VM_GLA2GPA_NOFAULT, "VM_GLA2GPA_NOFAULT", NULL }, 55*7671517eSToomas Soome { (uint_t)VM_ACTIVATE_CPU, "VM_ACTIVATE_CPU", NULL }, 56*7671517eSToomas Soome { (uint_t)VM_SET_INTINFO, "VM_SET_INTINFO", NULL }, 57*7671517eSToomas Soome { (uint_t)VM_GET_INTINFO, "VM_GET_INTINFO", NULL }, 58*7671517eSToomas Soome { (uint_t)VM_RESTART_INSTRUCTION, "VM_RESTART_INSTRUCTION", 59*7671517eSToomas Soome NULL }, 60*7671517eSToomas Soome { (uint_t)VM_SET_KERNEMU_DEV, "VM_SET_KERNEMU_DEV", NULL }, 61*7671517eSToomas Soome { (uint_t)VM_GET_KERNEMU_DEV, "VM_GET_KERNEMU_DEV", NULL }, 62*7671517eSToomas Soome { (uint_t)VM_RESET_CPU, "VM_RESET_CPU", NULL }, 63*7671517eSToomas Soome { (uint_t)VM_GET_RUN_STATE, "VM_GET_RUN_STATE", NULL }, 64*7671517eSToomas Soome { (uint_t)VM_SET_RUN_STATE, "VM_SET_RUN_STATE", NULL }, 65*7671517eSToomas Soome { (uint_t)VM_GET_FPU, "VM_GET_FPU", NULL }, 66*7671517eSToomas Soome { (uint_t)VM_SET_FPU, "VM_SET_FPU", NULL }, 67*7671517eSToomas Soome { (uint_t)VM_GET_CPUID, "VM_GET_CPUID", NULL }, 68*7671517eSToomas Soome { (uint_t)VM_SET_CPUID, "VM_SET_CPUID", NULL }, 69*7671517eSToomas Soome { (uint_t)VM_LEGACY_CPUID, "VM_LEGACY_CPUID", NULL } 70*7671517eSToomas Soome }; 71*7671517eSToomas Soome 72*7671517eSToomas Soome const struct ioc vmm_lock_ioc[] = { 73*7671517eSToomas Soome { (uint_t)VM_REINIT, "VM_REINIT", NULL }, 74*7671517eSToomas Soome { (uint_t)VM_BIND_PPTDEV, "VM_BIND_PPTDEV", NULL }, 75*7671517eSToomas Soome { (uint_t)VM_UNBIND_PPTDEV, "VM_UNBIND_PPTDEV", NULL }, 76*7671517eSToomas Soome { (uint_t)VM_MAP_PPTDEV_MMIO, "VM_MAP_PPTDEV_MMIO", NULL }, 77*7671517eSToomas Soome { (uint_t)VM_ALLOC_MEMSEG, "VM_ALLOC_MEMSEG", NULL }, 78*7671517eSToomas Soome { (uint_t)VM_MMAP_MEMSEG, "VM_MMAP_MEMSEG", NULL }, 79*7671517eSToomas Soome { (uint_t)VM_PMTMR_LOCATE, "VM_PMTMR_LOCATE", NULL }, 80*7671517eSToomas Soome { (uint_t)VM_MUNMAP_MEMSEG, "VM_MUNMAP_MEMSEG", NULL }, 81*7671517eSToomas Soome { (uint_t)VM_UNMAP_PPTDEV_MMIO, "VM_UNMAP_PPTDEV_MMIO", NULL }, 82*7671517eSToomas Soome { (uint_t)VM_PAUSE, "VM_PAUSE", NULL }, 83*7671517eSToomas Soome { (uint_t)VM_RESUME, "VM_RESUME", NULL }, 84*7671517eSToomas Soome 85*7671517eSToomas Soome { (uint_t)VM_WRLOCK_CYCLE, "VM_WRLOCK_CYCLE", NULL } 86*7671517eSToomas Soome }; 87*7671517eSToomas Soome 88*7671517eSToomas Soome const struct ioc vmm_ioc[] = { 89*7671517eSToomas Soome { (uint_t)VM_GET_GPA_PMAP, "VM_GET_GPA_PMAP", NULL }, 90*7671517eSToomas Soome { (uint_t)VM_GET_MEMSEG, "VM_GET_MEMSEG", NULL }, 91*7671517eSToomas Soome { (uint_t)VM_MMAP_GETNEXT, "VM_MMAP_GETNEXT", NULL }, 92*7671517eSToomas Soome 93*7671517eSToomas Soome { (uint_t)VM_LAPIC_IRQ, "VM_LAPIC_IRQ", NULL }, 94*7671517eSToomas Soome { (uint_t)VM_LAPIC_LOCAL_IRQ, "VM_LAPIC_LOCAL_IRQ", NULL }, 95*7671517eSToomas Soome { (uint_t)VM_LAPIC_MSI, "VM_LAPIC_MSI", NULL }, 96*7671517eSToomas Soome 97*7671517eSToomas Soome { (uint_t)VM_IOAPIC_ASSERT_IRQ, "VM_IOAPIC_ASSERT_IRQ", NULL }, 98*7671517eSToomas Soome { (uint_t)VM_IOAPIC_DEASSERT_IRQ, "VM_IOAPIC_DEASSERT_IRQ", 99*7671517eSToomas Soome NULL }, 100*7671517eSToomas Soome { (uint_t)VM_IOAPIC_PULSE_IRQ, "VM_IOAPIC_PULSE_IRQ", NULL }, 101*7671517eSToomas Soome 102*7671517eSToomas Soome { (uint_t)VM_ISA_ASSERT_IRQ, "VM_ISA_ASSERT_IRQ", NULL }, 103*7671517eSToomas Soome { (uint_t)VM_ISA_DEASSERT_IRQ, "VM_ISA_DEASSERT_IRQ", NULL }, 104*7671517eSToomas Soome { (uint_t)VM_ISA_PULSE_IRQ, "VM_ISA_PULSE_IRQ", NULL }, 105*7671517eSToomas Soome { (uint_t)VM_ISA_SET_IRQ_TRIGGER, "VM_ISA_SET_IRQ_TRIGGER", 106*7671517eSToomas Soome NULL }, 107*7671517eSToomas Soome 108*7671517eSToomas Soome { (uint_t)VM_RTC_WRITE, "VM_RTC_WRITE", NULL }, 109*7671517eSToomas Soome { (uint_t)VM_RTC_READ, "VM_RTC_READ", NULL }, 110*7671517eSToomas Soome { (uint_t)VM_RTC_SETTIME, "VM_RTC_SETTIME", NULL }, 111*7671517eSToomas Soome { (uint_t)VM_RTC_GETTIME, "VM_RTC_GETTIME", NULL }, 112*7671517eSToomas Soome 113*7671517eSToomas Soome { (uint_t)VM_SUSPEND, "VM_SUSPEND", NULL }, 114*7671517eSToomas Soome 115*7671517eSToomas Soome { (uint_t)VM_IOAPIC_PINCOUNT, "VM_IOAPIC_PINCOUNT", NULL }, 116*7671517eSToomas Soome { (uint_t)VM_GET_PPTDEV_LIMITS, "VM_GET_PPTDEV_LIMITS", NULL }, 117*7671517eSToomas Soome { (uint_t)VM_GET_HPET_CAPABILITIES, "VM_GET_HPET_CAPABILITIES", 118*7671517eSToomas Soome NULL }, 119*7671517eSToomas Soome 120*7671517eSToomas Soome { (uint_t)VM_STATS_IOC, "VM_STATS_IOC", NULL }, 121*7671517eSToomas Soome { (uint_t)VM_STAT_DESC, "VM_STAT_DESC", NULL }, 122*7671517eSToomas Soome 123*7671517eSToomas Soome { (uint_t)VM_INJECT_NMI, "VM_INJECT_NMI", NULL }, 124*7671517eSToomas Soome { (uint_t)VM_GET_X2APIC_STATE, "VM_GET_X2APIC_STATE", NULL }, 125*7671517eSToomas Soome { (uint_t)VM_SET_TOPOLOGY, "VM_SET_TOPOLOGY", NULL }, 126*7671517eSToomas Soome { (uint_t)VM_GET_TOPOLOGY, "VM_GET_TOPOLOGY", NULL }, 127*7671517eSToomas Soome { (uint_t)VM_GET_CPUS, "VM_GET_CPUS", NULL }, 128*7671517eSToomas Soome { (uint_t)VM_SUSPEND_CPU, "VM_SUSPEND_CPU", NULL }, 129*7671517eSToomas Soome { (uint_t)VM_RESUME_CPU, "VM_RESUME_CPU", NULL }, 130*7671517eSToomas Soome 131*7671517eSToomas Soome { (uint_t)VM_PPTDEV_DISABLE_MSIX, "VM_PPTDEV_DISABLE_MSIX", 132*7671517eSToomas Soome NULL }, 133*7671517eSToomas Soome 134*7671517eSToomas Soome { (uint_t)VM_TRACK_DIRTY_PAGES, "VM_TRACK_DIRTY_PAGES", NULL }, 135*7671517eSToomas Soome { (uint_t)VM_DESC_FPU_AREA, "VM_DESC_FPU_AREA", NULL }, 136*7671517eSToomas Soome 137*7671517eSToomas Soome { (uint_t)VM_DATA_READ, "VM_DATA_READ", NULL }, 138*7671517eSToomas Soome { (uint_t)VM_DATA_WRITE, "VM_DATA_WRITE", NULL }, 139*7671517eSToomas Soome 140*7671517eSToomas Soome { (uint_t)VM_SET_AUTODESTRUCT, "VM_SET_AUTODESTRUCT", NULL }, 141*7671517eSToomas Soome { (uint_t)VM_DESTROY_SELF, "VM_DESTROY_SELF", NULL }, 142*7671517eSToomas Soome { (uint_t)VM_DESTROY_PENDING, "VM_DESTROY_PENDING", NULL }, 143*7671517eSToomas Soome 144*7671517eSToomas Soome { (uint_t)VM_VCPU_BARRIER, "VM_VCPU_BARRIER", NULL }, 145*7671517eSToomas Soome 146*7671517eSToomas Soome { (uint_t)VM_DEVMEM_GETOFFSET, "VM_DEVMEM_GETOFFSET", NULL } 147*7671517eSToomas Soome }; 148*7671517eSToomas Soome 149*7671517eSToomas Soome const struct iocs vmm_iocs[] = { 150*7671517eSToomas Soome { .nitems = ARRAY_SIZE(vmmctl_ioc), .data = vmmctl_ioc }, 151*7671517eSToomas Soome { .nitems = ARRAY_SIZE(vmm_cpu_ioc), .data = vmm_cpu_ioc }, 152*7671517eSToomas Soome { .nitems = ARRAY_SIZE(vmm_lock_ioc), .data = vmm_lock_ioc }, 153*7671517eSToomas Soome { .nitems = ARRAY_SIZE(vmm_ioc), .data = vmm_ioc }, 154*7671517eSToomas Soome { .nitems = 0, .data = NULL } 155*7671517eSToomas Soome }; 156*7671517eSToomas Soome #else 157*7671517eSToomas Soome const struct iocs vmm_iocs[] = { 158*7671517eSToomas Soome { .nitems = 0, .data = NULL } 159*7671517eSToomas Soome }; 160*7671517eSToomas Soome #endif /* __x86 */ 161