X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Finclude%2Fgeekos%2Fvmm.h;h=896598f367f37109795ea8c8b3cf6929b1e44e8d;hb=c7e3f043b6458083162e23e1a8adb7703fd06559;hp=6cc48e45287bc55d9b43c30a88f228d0ebfb3533;hpb=8126d0d154dfd37ed7997f4fa78a1c179c4d2c81;p=palacios.releases.git diff --git a/palacios/include/geekos/vmm.h b/palacios/include/geekos/vmm.h index 6cc48e4..896598f 100644 --- a/palacios/include/geekos/vmm.h +++ b/palacios/include/geekos/vmm.h @@ -2,15 +2,96 @@ #define __VMM_H +#include +#include + +#include +//#include + +#include + +/* utility definitions */ +#define PrintDebug(fmt, args...) \ + do { \ + extern struct vmm_os_hooks * os_hooks; \ + if ((os_hooks) && (os_hooks)->print_debug) { \ + (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 PrintTrace(fmt, args...) \ + do { \ + extern struct vmm_os_hooks * os_hooks; \ + if ((os_hooks) && (os_hooks)->print_trace) { \ + (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 *(*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 }; @@ -18,13 +99,20 @@ 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(); + + + + +void Init_VMM(struct vmm_os_hooks * hooks, struct vmm_ctrl_ops * vmm_ops); + +