#include <geekos/string.h>
#include <geekos/vmm_mem.h>
+//#include <geekos/vmm_paging.h>
+#include <geekos/vm_guest.h>
/* utility definitions */
#define PrintDebug(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) \
+
+
/* ** */
-typedef struct guest_info {
- ullong_t rip;
- ullong_t rsp;
-
- vmm_mem_map_t mem_map;
- // preallocation map
- // device_map
-
- void * vmm_data;
-} guest_info_t;
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
};