xref: /openbsd-src/sys/arch/arm64/include/vmmvar.h (revision 2c368633012f11160ce4f4f506a1354074d20134)
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