X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Finclude%2Fpalacios%2Fvmm.h;h=51b5438ab51047f82279ee68d81412a3396f3198;hb=657edaf0edf3663843b64570c33ba1aaf9364ff0;hp=8e64a0453934e00f1a7a2ceb861f5202924536ae;hpb=bc2c46a12649344d973e2201271c05390ce924bf;p=palacios.releases.git diff --git a/palacios/include/palacios/vmm.h b/palacios/include/palacios/vmm.h index 8e64a04..51b5438 100644 --- a/palacios/include/palacios/vmm.h +++ b/palacios/include/palacios/vmm.h @@ -1,3 +1,22 @@ +/* + * 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 + * Copyright (c) 2008, The V3VEE Project + * All rights reserved. + * + * Author: Jack Lange + * + * This is free software. You are permitted to use, + * redistribute, and modify it as specified in the file "V3VEE_LICENSE". + */ + #ifndef __VMM_H #define __VMM_H @@ -65,14 +84,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 +140,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 +168,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 +213,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 +222,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)(); };