1*2c368633Sjsg /* $OpenBSD: vmmvar.h,v 1.2 2024/11/08 04:02:30 jsg Exp $ */ 2234ee546Sdv /* 3234ee546Sdv * Copyright (c) 2014 Mike Larkin <mlarkin@openbsd.org> 4234ee546Sdv * 5234ee546Sdv * Permission to use, copy, modify, and distribute this software for any 6234ee546Sdv * purpose with or without fee is hereby granted, provided that the above 7234ee546Sdv * copyright notice and this permission notice appear in all copies. 8234ee546Sdv * 9234ee546Sdv * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10234ee546Sdv * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11234ee546Sdv * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12234ee546Sdv * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13234ee546Sdv * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14234ee546Sdv * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15234ee546Sdv * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16234ee546Sdv */ 17234ee546Sdv 18234ee546Sdv /* 19234ee546Sdv * CPU capabilities for VMM operation 20234ee546Sdv */ 21234ee546Sdv #ifndef _MACHINE_VMMVAR_H_ 22234ee546Sdv #define _MACHINE_VMMVAR_H_ 23234ee546Sdv 24234ee546Sdv #define VMM_HV_SIGNATURE "OpenBSDVMM58" 25234ee546Sdv 26234ee546Sdv /* Exit Reasons */ 27234ee546Sdv #define VM_EXIT_TERMINATED 0xFFFE 28234ee546Sdv #define VM_EXIT_NONE 0xFFFF 29234ee546Sdv 30234ee546Sdv struct vmm_softc_md { 31234ee546Sdv /* Capabilities */ 32234ee546Sdv uint32_t nr_cpus; /* [I] */ 33234ee546Sdv }; 34234ee546Sdv 35234ee546Sdv /* 36234ee546Sdv * struct vcpu_inject_event : describes an exception or interrupt to inject. 37234ee546Sdv */ 38234ee546Sdv struct vcpu_inject_event { 39234ee546Sdv uint8_t vie_vector; /* Exception or interrupt vector. */ 40234ee546Sdv uint32_t vie_errorcode; /* Optional error code. */ 41234ee546Sdv uint8_t vie_type; 42234ee546Sdv #define VCPU_INJECT_NONE 0 43234ee546Sdv #define VCPU_INJECT_INTR 1 /* External hardware interrupt. */ 44234ee546Sdv #define VCPU_INJECT_EX 2 /* HW or SW Exception */ 45234ee546Sdv #define VCPU_INJECT_NMI 3 /* Non-maskable Interrupt */ 46234ee546Sdv }; 47234ee546Sdv 48234ee546Sdv #define VCPU_REGS_NGPRS 31 49234ee546Sdv 50234ee546Sdv struct vcpu_reg_state { 51234ee546Sdv uint64_t vrs_gprs[VCPU_REGS_NGPRS]; 52234ee546Sdv }; 53234ee546Sdv 54234ee546Sdv /* 55234ee546Sdv * struct vm_exit 56234ee546Sdv * 57234ee546Sdv * Contains VM exit information communicated to vmd(8). This information is 58234ee546Sdv * gathered by vmm(4) from the CPU on each exit that requires help from vmd. 59234ee546Sdv */ 60234ee546Sdv struct vm_exit { 61234ee546Sdv struct vcpu_reg_state vrs; 62234ee546Sdv }; 63234ee546Sdv 64234ee546Sdv struct vm_intr_params { 65234ee546Sdv /* Input parameters to VMM_IOC_INTR */ 66234ee546Sdv uint32_t vip_vm_id; 67234ee546Sdv uint32_t vip_vcpu_id; 68234ee546Sdv uint16_t vip_intr; 69234ee546Sdv }; 70234ee546Sdv 71234ee546Sdv #define VM_RWREGS_GPRS 0x1 /* read/write GPRs */ 72234ee546Sdv #define VM_RWREGS_ALL (VM_RWREGS_GPRS) 73234ee546Sdv 74234ee546Sdv struct vm_rwregs_params { 75234ee546Sdv /* 76234ee546Sdv * Input/output parameters to VMM_IOC_READREGS / 77234ee546Sdv * VMM_IOC_WRITEREGS 78234ee546Sdv */ 79234ee546Sdv uint32_t vrwp_vm_id; 80234ee546Sdv uint32_t vrwp_vcpu_id; 81234ee546Sdv uint64_t vrwp_mask; 82234ee546Sdv struct vcpu_reg_state vrwp_regs; 83234ee546Sdv }; 84234ee546Sdv 85234ee546Sdv /* IOCTL definitions */ 86234ee546Sdv #define VMM_IOC_INTR _IOW('V', 6, struct vm_intr_params) /* Intr pending */ 87234ee546Sdv 88234ee546Sdv #endif /* ! _MACHINE_VMMVAR_H_ */ 89