1/*-
2 * SPDX-License-Identifier: BSD-2-Clause
3 *
4 * Copyright (c) 2022 John Baldwin <jhb@FreeBSD.org>
5 */
6
7#ifndef __VMMAPI_INTERNAL_H__
8#define	__VMMAPI_INTERNAL_H__
9
10#include <sys/types.h>
11
12enum {
13	VM_MEMSEG_LOW,
14	VM_MEMSEG_HIGH,
15	VM_MEMSEG_COUNT,
16};
17
18struct vmctx {
19	int	fd;
20	struct {
21		vm_paddr_t base;
22		vm_size_t size;
23	} memsegs[VM_MEMSEG_COUNT];
24	int	memflags;
25	char	*baseaddr;
26	char	*name;
27};
28
29struct vcpu {
30	struct vmctx *ctx;
31	int vcpuid;
32};
33
34int	vcpu_ioctl(struct vcpu *vcpu, u_long cmd, void *arg);
35
36extern const char *vm_capstrmap[];
37
38#define	VM_COMMON_IOCTLS	\
39	VM_RUN,			\
40	VM_SUSPEND,		\
41	VM_REINIT,		\
42	VM_ALLOC_MEMSEG,	\
43	VM_GET_MEMSEG,		\
44	VM_MMAP_MEMSEG,		\
45	VM_MMAP_MEMSEG,		\
46	VM_MMAP_GETNEXT,	\
47	VM_MUNMAP_MEMSEG,	\
48	VM_SET_REGISTER,	\
49	VM_GET_REGISTER,	\
50	VM_SET_REGISTER_SET,	\
51	VM_GET_REGISTER_SET,	\
52	VM_INJECT_EXCEPTION,	\
53	VM_SET_CAPABILITY,	\
54	VM_GET_CAPABILITY,	\
55	VM_STATS,		\
56	VM_STAT_DESC,		\
57	VM_GLA2GPA_NOFAULT,	\
58	VM_ACTIVATE_CPU,	\
59	VM_GET_CPUS,		\
60	VM_SUSPEND_CPU,		\
61	VM_RESUME_CPU,		\
62	VM_SET_TOPOLOGY,	\
63	VM_GET_TOPOLOGY
64
65#define	VM_PPT_IOCTLS		\
66	VM_BIND_PPTDEV,		\
67	VM_UNBIND_PPTDEV,	\
68	VM_MAP_PPTDEV_MMIO,	\
69	VM_PPTDEV_MSI,		\
70	VM_PPTDEV_MSIX,		\
71	VM_UNMAP_PPTDEV_MMIO,	\
72	VM_PPTDEV_DISABLE_MSIX
73
74extern const cap_ioctl_t vm_ioctl_cmds[];
75extern size_t vm_ioctl_ncmds;
76
77#endif /* !__VMMAPI_INTERNAL_H__ */
78