+/*
+ * This file is part of the Palacios Virtual Machine Monitor developed
+ * by the V3VEE Project with funding from the United States National
+ * Science Foundation and the Department of Energy.
+ *
+ * The V3VEE Project is a joint project between Northwestern University
+ * and the University of New Mexico. You can find out more at
+ * http://www.v3vee.org
+ *
+ * Copyright (c) 2008, Jack Lange <jarusl@cs.northwestern.edu>
+ * Copyright (c) 2008, The V3VEE Project <http://www.v3vee.org>
+ * All rights reserved.
+ *
+ * Author: Jack Lange <jarusl@cs.northwestern.edu>
+ *
+ * This is free software. You are permitted to use,
+ * redistribute, and modify it as specified in the file "V3VEE_LICENSE".
+ */
+
#ifndef __SVM_H
#define __SVM_H
-#include <palacios/vmm_util.h>
+
+
+
+#ifdef __V3VEE__
+
#include <palacios/vmm.h>
+
+
#include <palacios/vmcb.h>
+#include <palacios/vmm_util.h>
-#define CPUID_FEATURE_IDS 0x80000001
-#define CPUID_FEATURE_IDS_ecx_svm_avail 0x00000004
+#define CPUID_EXT_FEATURE_IDS_ecx_svm_avail 0x00000004
#define CPUID_SVM_REV_AND_FEATURE_IDS 0x8000000a
#define CPUID_SVM_REV_AND_FEATURE_IDS_edx_svml 0x00000004
#define CPUID_SVM_REV_AND_FEATURE_IDS_edx_np 0x00000001
-
-#define EFER_MSR 0xc0000080
#define EFER_MSR_svm_enable 0x00001000
/************/
#define SVM_HANDLER_HALT 0x2
+void v3_init_svm_cpu(int cpu_id);
+int v3_is_svm_capable();
+int v3_init_svm_vmcb(struct guest_info * info, v3_vm_class_t vm_class);
-void Init_SVM(struct vmm_ctrl_ops * vmm_ops);
-int is_svm_capable();
-
-
-vmcb_t * Allocate_VMCB();
-void Init_VMCB(vmcb_t * vmcb, struct guest_info vm_info);
-void Init_VMCB_BIOS(vmcb_t * vmcb, struct guest_info vm_info);
-void Init_VMCB_pe(vmcb_t * vmcb, struct guest_info vm_info);
+int v3_svm_enter(struct guest_info * info);
+int v3_start_svm_guest(struct guest_info *info);
-int init_svm_guest(struct guest_info *info);
-int start_svm_guest(struct guest_info * info);
-
-
-inline addr_t get_rip_linear(struct guest_info * info, addr_t rip, addr_t cs_base);
+#endif