/* This clearly won't work, we need some way to get a return value out of it */
-#define VMMMalloc(size) \
+#define VMMMalloc(type, var, size) \
do { \
extern struct vmm_os_hooks * os_hooks; \
if ((os_hooks) && (os_hooks)->malloc) { \
- (os_hooks)->malloc(size); \
+ var = (type)(os_hooks)->malloc(size); \
} \
} while (0) \
-
-
-
-/* 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 *(*paddr_to_vaddr)(void *addr);
void *(*vaddr_to_paddr)(void *addr);
+ // Do we need this here?
+ void (*snprintf)(char * dst, char * format, int len, ...);
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);
-
-
void Init_VMM(struct vmm_os_hooks * hooks, struct vmm_ctrl_ops * vmm_ops);