#ifndef __SVM_H
#define __SVM_H
+#include <geekos/vmm_util.h>
#include <geekos/vmm.h>
+#include <geekos/vmcb.h>
#define CPUID_FEATURE_IDS 0x80000001
#define CPUID_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 SVM_SMM_CTL_MSR_rsm_cycle 0x00000010
#define SVM_VM_HSAVE_PA_MSR 0xc0010117
+
#define SVM_KEY_MSR 0xc0010118
/******/
/******************************************/
-/* SVM Intercep Exit Codes */
+/* SVM Intercept Exit Codes */
/* AMD Arch Vol 3, Appendix C, pg 477-478 */
/******************************************/
#define VMEXIT_CR_READ_MASK 0xfffffff0
-void Init_SVM();
+void Init_SVM(struct vmm_ctrl_ops * vmm_ops);
int is_svm_capable();
+vmcb_t * Allocate_VMCB();
+void Init_VMCB(vmcb_t * vmcb, guest_info_t vm_info);
+
+int init_svm_guest(struct guest_info *info);
+int start_svm_guest(struct guest_info * info);
+
+int handle_svm_exit(struct VMM_GPRs gprs);
#endif