+/*
+ * 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.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_ERROR 0x1
#define SVM_HANDLER_HALT 0x2
-#endif
+int v3_is_svm_capable();
+void v3_init_svm_cpu(int cpu_id);
+void v3_deinit_svm_cpu(int cpu_id);
-void Init_SVM(struct vmm_ctrl_ops * vmm_ops);
-int is_svm_capable();
+int v3_init_svm_vmcb(struct guest_info * core, v3_vm_class_t vm_class);
+int v3_deinit_svm_vmcb(struct guest_info * core);
+
+int v3_svm_enter(struct guest_info * info);
+int v3_start_svm_guest(struct guest_info *info);
+int v3_reset_svm_vm_core(struct guest_info * core, addr_t rip);
+
+int v3_svm_load_core(struct guest_info * core, void * ctx);
+int v3_svm_save_core(struct guest_info * core, void * ctx);
+
+
+#endif
+
#endif