X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Finclude%2Fgeekos%2Fvmm.h;h=896598f367f37109795ea8c8b3cf6929b1e44e8d;hb=ebf600fd1dc3b43e8100be168452c6e03b8a2dda;hp=89b56f164bbe36b5702e4a626aaa1db9821c2f59;hpb=ff58148c2cfbbc82405dc9ec25056cc93c773083;p=palacios.git diff --git a/palacios/include/geekos/vmm.h b/palacios/include/geekos/vmm.h index 89b56f1..896598f 100644 --- a/palacios/include/geekos/vmm.h +++ b/palacios/include/geekos/vmm.h @@ -5,7 +5,10 @@ #include #include +#include +//#include +#include /* utility definitions */ #define PrintDebug(fmt, args...) \ @@ -15,17 +18,17 @@ (os_hooks)->print_debug((fmt), ##args); \ } \ } while (0) \ - -#define PrintInfo(fmt, args...) \ - do { \ - extern struct vmm_os_hooks * os_hooks; \ - if ((os_hooks) && (os_hooks)->print_info) { \ - (os_hooks)->print_info((fmt), ##args); \ - } \ - } while (0) \ - + +#define PrintInfo(fmt, args...) \ + do { \ + extern struct vmm_os_hooks * os_hooks; \ + if ((os_hooks) && (os_hooks)->print_info) { \ + (os_hooks)->print_info((fmt), ##args); \ + } \ + } while (0) \ + #define PrintTrace(fmt, args...) \ do { \ @@ -34,25 +37,61 @@ (os_hooks)->print_trace((fmt), ##args); \ } \ } while (0) \ - -/* ** */ +/* This clearly won't work, we need some way to get a return value out of it */ +#define VMMMalloc(size) \ + do { \ + extern struct vmm_os_hooks * os_hooks; \ + if ((os_hooks) && (os_hooks)->malloc) { \ + (os_hooks)->malloc(size); \ + } \ + } while (0) \ + + +// We need to check the hook structure at runtime to ensure its SAFE +#define VMMFree(addr) \ + do { \ + extern struct vmm_os_hooks * os_hooks; \ + if ((os_hooks) && (os_hooks)->free) { \ + (os_hooks)->free(addr); \ + } \ + } while (0) \ + + +/* ** */ + + #define VMM_INVALID_CPU 0 #define VMM_VMX_CPU 1 #define VMM_SVM_CPU 2 + + + + +/* We need a memory map and an IO device map */ + /* This will contain function pointers that provide OS services */ struct vmm_os_hooks { void (*print_info)(const char * format, ...); void (*print_debug)(const char * format, ...); void (*print_trace)(const char * format, ...); - void *(*Allocate_Pages)(int numPages); - void (*Free_Page)(void * page); + void *(*allocate_pages)(int numPages); + void (*free_page)(void * page); + + void *(*malloc)(uint_t size); + void (*free)(void * addr); + + void *(*paddr_to_vaddr)(void *addr); + void *(*vaddr_to_paddr)(void *addr); + + + void (*start_kernel_thread)(); // include pointer to function }; @@ -60,13 +99,19 @@ struct vmm_os_hooks { /* This will contain Function pointers that control the VMs */ struct vmm_ctrl_ops { - - + int (*init_guest)(struct guest_info* info); + int (*start_guest)(struct guest_info * info); + // int (*stop_vm)(uint_t vm_id); }; -void Init_VMM(struct vmm_os_hooks * hooks); + + + + +void Init_VMM(struct vmm_os_hooks * hooks, struct vmm_ctrl_ops * vmm_ops); +