summaryrefslogtreecommitdiff
path: root/usr/src/lib/libvmm/libvmm.h
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/lib/libvmm/libvmm.h')
-rw-r--r--usr/src/lib/libvmm/libvmm.h122
1 files changed, 122 insertions, 0 deletions
diff --git a/usr/src/lib/libvmm/libvmm.h b/usr/src/lib/libvmm/libvmm.h
new file mode 100644
index 0000000000..352b09e970
--- /dev/null
+++ b/usr/src/lib/libvmm/libvmm.h
@@ -0,0 +1,122 @@
+/*
+ * This file and its contents are supplied under the terms of the
+ * Common Development and Distribution License ("CDDL"), version 1.0.
+ * You may only use this file in accordance with the terms of version
+ * 1.0 of the CDDL.
+ *
+ * A full copy of the text of the CDDL should have accompanied this
+ * source. A copy of the CDDL is also available via the Internet at
+ * http://www.illumos.org/license/CDDL.
+ */
+
+/*
+ * Copyright 2019 Joyent, Inc.
+ */
+
+#ifndef _LIBVMM_H
+#define _LIBVMM_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct vmm vmm_t;
+
+typedef struct vmm_desc {
+ uint64_t vd_base;
+ uint32_t vd_lim;
+ uint32_t vd_acc;
+} vmm_desc_t;
+
+
+/*
+ * This enum must be kept in sync with vmm_sys_regmap[] in libvmm.c.
+ */
+#define VMM_REG_OFFSET 0x100
+enum vmm_regs {
+ VMM_REG_CR0 = VMM_REG_OFFSET,
+ VMM_REG_CR2,
+ VMM_REG_CR3,
+ VMM_REG_CR4,
+ VMM_REG_DR0,
+ VMM_REG_DR1,
+ VMM_REG_DR2,
+ VMM_REG_DR3,
+ VMM_REG_DR6,
+ VMM_REG_DR7,
+ VMM_REG_EFER,
+ VMM_REG_PDPTE0,
+ VMM_REG_PDPTE1,
+ VMM_REG_PDPTE2,
+ VMM_REG_PDPTE3,
+ VMM_REG_INTR_SHADOW
+};
+
+/*
+ * This enum must be kept in sync with vmm_descmap[] in libvmm.c.
+ */
+#define VMM_DESC_OFFSET 0x200
+enum vmm_descs {
+ VMM_DESC_GDTR = VMM_DESC_OFFSET,
+ VMM_DESC_LDTR,
+ VMM_DESC_IDTR,
+ VMM_DESC_TR,
+ VMM_DESC_CS,
+ VMM_DESC_DS,
+ VMM_DESC_ES,
+ VMM_DESC_FS,
+ VMM_DESC_GS,
+ VMM_DESC_SS
+};
+
+typedef enum {
+ VMM_MODE_UNKNOWN = 0,
+ VMM_MODE_REAL,
+ VMM_MODE_PROT,
+ VMM_MODE_PAE,
+ VMM_MODE_LONG
+} vmm_mode_t;
+
+typedef enum {
+ VMM_ISA_UNKNOWN = 0,
+ VMM_ISA_16,
+ VMM_ISA_32,
+ VMM_ISA_64
+} vmm_isa_t;
+
+vmm_t *vmm_open_vm(const char *);
+void vmm_close_vm(vmm_t *);
+
+int vmm_map(vmm_t *, boolean_t);
+void vmm_unmap(vmm_t *);
+
+ssize_t vmm_pread(vmm_t *, void *, size_t, uintptr_t);
+ssize_t vmm_pwrite(vmm_t *, const void *, size_t, uintptr_t);
+ssize_t vmm_vread(vmm_t *, int, int, void *, size_t, uintptr_t);
+ssize_t vmm_vwrite(vmm_t *, int, int, const void *, size_t, uintptr_t);
+
+size_t vmm_ncpu(vmm_t *);
+size_t vmm_memsize(vmm_t *);
+
+int vmm_cont(vmm_t *);
+int vmm_step(vmm_t *, int);
+int vmm_stop(vmm_t *);
+
+int vmm_getreg(vmm_t *, int, int, uint64_t *);
+int vmm_setreg(vmm_t *, int, int, uint64_t);
+int vmm_get_regset(vmm_t *, int, size_t, const int *, uint64_t *);
+int vmm_set_regset(vmm_t *, int, size_t, const int *, uint64_t *);
+
+int vmm_get_desc(vmm_t *, int, int, vmm_desc_t *);
+int vmm_set_desc(vmm_t *, int, int, vmm_desc_t *);
+
+vmm_mode_t vmm_vcpu_mode(vmm_t *, int);
+vmm_isa_t vmm_vcpu_isa(vmm_t *, int);
+int vmm_vtol(vmm_t *, int, int, uint64_t, uint64_t *);
+int vmm_vtop(vmm_t *, int, int, uint64_t, uint64_t *);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _LIBVMM_H */