VMM: refactor MSR emulation
[akaros.git] / kern / arch / x86 / vmm / vmm.h
index 93e35b7..4dfeb9d 100644 (file)
@@ -1,5 +1,4 @@
-#ifndef _VMM_H_
-#define        _VMM_H_
+#pragma once
 
 #include <ros/vmm.h>
 
@@ -15,6 +14,8 @@ static inline int cpu_has_svm(const char **msg)
        return 0;
 }
 
+#define VMM_VMEXIT_NR_TYPES            65
+
 struct vmm {
        qlock_t qlock;
        // always false.
@@ -39,13 +40,14 @@ struct vmm {
                void *svm;
                struct vmx_vcpu **guest_pcores;
        };
-       unsigned long vmexits[65];      /* TODO: use a #define from a header */
+       unsigned long vmexits[VMM_VMEXIT_NR_TYPES];
 };
 
 void vmm_init(void);
 void vmm_pcpu_init(void);
 
-int vmm_struct_init(struct proc *p, unsigned int nr_guest_pcores, int flags);
+int vmm_struct_init(struct proc *p, unsigned int nr_guest_pcores,
+                    struct vmm_gpcore_init *gpcis, int flags);
 void __vmm_struct_cleanup(struct proc *p);
 
 int vm_post_interrupt(struct vmctl *v);
@@ -53,9 +55,7 @@ int vm_run(struct vmctl *);
 int intel_vmx_start(int id);
 int intel_vmx_setup(int nvmcs);
 
-struct vmx_vcpu *vmx_create_vcpu(struct proc *p);
+struct vmx_vcpu *vmx_create_vcpu(struct proc *p, struct vmm_gpcore_init *gpci);
 void vmx_destroy_vcpu(struct vmx_vcpu *vcpu);
 uint64_t construct_eptp(physaddr_t root_hpa);
 void ept_flush(uint64_t eptp);
-
-#endif /* _VMM_H_ */