aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/vmm/vmm_dev.h
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/vmm/vmm_dev.h')
-rw-r--r--sys/dev/vmm/vmm_dev.h70
1 files changed, 70 insertions, 0 deletions
diff --git a/sys/dev/vmm/vmm_dev.h b/sys/dev/vmm/vmm_dev.h
new file mode 100644
index 000000000000..410066c49cf2
--- /dev/null
+++ b/sys/dev/vmm/vmm_dev.h
@@ -0,0 +1,70 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2011 NetApp, Inc.
+ * Copyright (C) 2015 Mihai Carabas <mihai.carabas@gmail.com>
+ * All rights reserved.
+ */
+
+#ifndef _DEV_VMM_DEV_H_
+#define _DEV_VMM_DEV_H_
+
+#include <sys/types.h>
+#include <sys/ioccom.h>
+#include <machine/vmm_dev.h>
+
+#ifdef _KERNEL
+struct thread;
+struct vm;
+struct vcpu;
+
+int vmmdev_init(void);
+int vmmdev_cleanup(void);
+int vmmdev_machdep_ioctl(struct vm *vm, struct vcpu *vcpu, u_long cmd,
+ caddr_t data, int fflag, struct thread *td);
+
+/*
+ * Entry in an ioctl handler table. A number of generic ioctls are defined,
+ * plus a table of machine-dependent ioctls. The flags indicate the
+ * required preconditions for a given ioctl.
+ *
+ * Some ioctls encode a vcpuid as the first member of their ioctl structure.
+ * These ioctls must specify one of the following flags:
+ * - ALLOC_VCPU: create the vCPU if it does not already exist
+ * - LOCK_ONE_VCPU: create the vCPU if it does not already exist
+ * and lock the vCPU for the duration of the ioctl
+ * - MAYBE_ALLOC_VCPU: if the vcpuid is -1, do nothing, otherwise
+ * create the vCPU if it does not already exist
+ */
+struct vmmdev_ioctl {
+ unsigned long cmd;
+#define VMMDEV_IOCTL_SLOCK_MEMSEGS 0x01
+#define VMMDEV_IOCTL_XLOCK_MEMSEGS 0x02
+#define VMMDEV_IOCTL_LOCK_ONE_VCPU 0x04
+#define VMMDEV_IOCTL_LOCK_ALL_VCPUS 0x08
+#define VMMDEV_IOCTL_ALLOC_VCPU 0x10
+#define VMMDEV_IOCTL_MAYBE_ALLOC_VCPU 0x20
+ int flags;
+};
+
+#define VMMDEV_IOCTL(_cmd, _flags) { .cmd = (_cmd), .flags = (_flags) }
+
+extern const struct vmmdev_ioctl vmmdev_machdep_ioctls[];
+extern const size_t vmmdev_machdep_ioctl_count;
+
+#endif /* _KERNEL */
+
+struct vmmctl_vm_create {
+ char name[VM_MAX_NAMELEN + 1];
+ int reserved[16];
+};
+
+struct vmmctl_vm_destroy {
+ char name[VM_MAX_NAMELEN + 1];
+ int reserved[16];
+};
+
+#define VMMCTL_VM_CREATE _IOWR('V', 0, struct vmmctl_vm_create)
+#define VMMCTL_VM_DESTROY _IOWR('V', 1, struct vmmctl_vm_destroy)
+
+#endif /* _DEV_VMM_DEV_H_ */