X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Finclude%2Fpalacios%2Fvmm.h;h=cf02258e6041c9a5a53ebcb472efc8c818a1e2f8;hb=c64bc075e1d60f6f010fb65f296d26ae655f0ca2;hp=8e64a0453934e00f1a7a2ceb861f5202924536ae;hpb=bc2c46a12649344d973e2201271c05390ce924bf;p=palacios-OLD.git diff --git a/palacios/include/palacios/vmm.h b/palacios/include/palacios/vmm.h index 8e64a04..cf02258 100644 --- a/palacios/include/palacios/vmm.h +++ b/palacios/include/palacios/vmm.h @@ -1,3 +1,6 @@ +/* (c) 2008, Jack Lange */ +/* (c) 2008, The V3VEE Project */ + #ifndef __VMM_H #define __VMM_H @@ -65,14 +68,15 @@ #endif -#define V3_AllocPages(ptr, num_pages) \ - do { \ +#define V3_AllocPages(num_pages) \ + ({ \ extern struct vmm_os_hooks * os_hooks; \ - ptr = 0; \ + void * ptr = 0; \ if ((os_hooks) && (os_hooks)->allocate_pages) { \ ptr = (os_hooks)->allocate_pages(num_pages); \ } \ - } while (0) \ + ptr; \ + }) \ #define V3_FreePage(page) \ @@ -120,7 +124,7 @@ #define V3_Hook_Interrupt(irq, opaque) \ ({ \ - int ret = 0; \ + int ret = 0; \ extern struct vmm_os_hooks * os_hooks; \ if ((os_hooks) && (os_hooks)->hook_interrupt) { \ ret = (os_hooks)->hook_interrupt(irq, opaque); \ @@ -148,18 +152,24 @@ #define VMM_VMX_CPU 1 #define VMM_SVM_CPU 2 + +// Maybe make this a define.... +typedef enum v3_cpu_arch {V3_INVALID_CPU, V3_SVM_CPU, V3_SVM_REV3_CPU, V3_VMX_CPU} v3_cpu_arch_t; + + #endif //!__V3VEE__ + // // // This is the interrupt state that the VMM's interrupt handlers need to see // struct vmm_intr_state { - uint_t irq; - uint_t error; + unsigned int irq; + unsigned int error; - uint_t should_ack; // Should the vmm ack this interrupt, or will + unsigned int should_ack; // Should the vmm ack this interrupt, or will // the host OS do it? // This is the value given when the interrupt is hooked. @@ -187,7 +197,7 @@ struct vmm_os_hooks { // int (*hook_interrupt)(struct guest_info *s, int irq); - int (*hook_interrupt)(uint_t irq, void *opaque); + int (*hook_interrupt)(unsigned int irq, void *opaque); int (*ack_irq)(int irq); @@ -196,17 +206,24 @@ struct vmm_os_hooks { void (*start_kernel_thread)(); // include pointer to function -}; +}; + + /* This will contain Function pointers that control the VMs */ struct vmm_ctrl_ops { - int (*init_guest)(struct guest_info* info); + struct guest_info *(*allocate_guest)(); + + int (*config_guest)(struct guest_info * info, void * config_ptr); + int (*init_guest)(struct guest_info * info); int (*start_guest)(struct guest_info * info); // int (*stop_vm)(uint_t vm_id); int (*has_nested_paging)(); + + // v3_cpu_arch_t (*get_cpu_arch)(); };