tests/linux: use Akaros's CFLAGS
[akaros.git] / kern / arch / x86 / vmm / vmm.h
index 49c6602..ca72e3a 100644 (file)
@@ -1,10 +1,12 @@
 #pragma once
 
 #include <ros/vmm.h>
+#include <arch/vmm/intel/vmx.h>
 
 static inline int cpu_has_vmx(void)
 {
        unsigned long ecx = cpuid_ecx(1);
+
        return ecx & (1<<5); /* CPUID.1:ECX.VMX[bit 5] -> VT */
 }
 
@@ -39,30 +41,32 @@ struct vmm {
        // installed would GPF on a K7.
        union {
                void *svm;
-               struct vmx_vcpu **guest_pcores;
+               struct vmx_vmm vmx;
        };
+       struct guest_pcore **guest_pcores;
+       size_t gpc_array_elem;
        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,
-                    struct vmm_gpcore_init *gpcis, int flags);
+void __vmm_struct_init(struct proc *p);
+void __vmm_add_gpcs(struct proc *p, unsigned int nr_more_gpcs,
+                    struct vmm_gpcore_init *u_gpcis);
 void __vmm_struct_cleanup(struct proc *p);
+int vmm_poke_guest(struct proc *p, int guest_pcoreid);
 
-int vm_post_interrupt(struct vmctl *v);
-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 vmm_gpcore_init *gpci);
-void vmx_destroy_vcpu(struct vmx_vcpu *vcpu);
+struct guest_pcore *create_guest_pcore(struct proc *p,
+                                       struct vmm_gpcore_init *gpci);
+void destroy_guest_pcore(struct guest_pcore *vcpu);
 uint64_t construct_eptp(physaddr_t root_hpa);
 void ept_flush(uint64_t eptp);
 
-struct vmx_vcpu *lookup_guest_pcore(struct proc *p, int guest_pcoreid);
-struct vmx_vcpu *load_guest_pcore(struct proc *p, int guest_pcoreid);
+struct guest_pcore *lookup_guest_pcore(struct proc *p, int guest_pcoreid);
+struct guest_pcore *load_guest_pcore(struct proc *p, int guest_pcoreid);
 void unload_guest_pcore(struct proc *p, int guest_pcoreid);
 
-bool vmm_emulate_msr(uint64_t *rcx, uint64_t *rdx, uint64_t *rax, int op);
+#define VMM_MSR_EMU_READ               1
+#define VMM_MSR_EMU_WRITE              2
+bool vmm_emulate_msr(struct vm_trapframe *vm_tf, int op);