X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Finclude%2Fpalacios%2Fvmm.h;h=5cb1db1cfd6571d821d16c3376122ebb8cf1c7ac;hb=fdb16aa5e99a19a91264ae84beaf77d3036548d5;hp=b9c77b54abbb1d8688f96f8022c5b2b07971f706;hpb=b580d9fca65a7b6f84eaebb57cad09bc6e941dfd;p=palacios.git diff --git a/palacios/include/palacios/vmm.h b/palacios/include/palacios/vmm.h index b9c77b5..5cb1db1 100644 --- a/palacios/include/palacios/vmm.h +++ b/palacios/include/palacios/vmm.h @@ -22,13 +22,13 @@ /*#include */ -#include -#include struct guest_info; #ifdef __V3VEE__ +#include +#include //#include #include @@ -90,11 +90,11 @@ struct guest_info; }) -#define V3_FreePage(page) \ +#define V3_FreePages(page, num_pages) \ do { \ extern struct v3_os_hooks * os_hooks; \ - if ((os_hooks) && (os_hooks)->free_page) { \ - (os_hooks)->free_page(page); \ + if ((os_hooks) && (os_hooks)->free_pages) { \ + (os_hooks)->free_pages(page, num_pages); \ } \ } while(0) @@ -184,16 +184,32 @@ struct guest_info; #ifdef CONFIG_MULTITHREAD_OS -#define V3_CREATE_THREAD(fn, arg, name) \ - do { \ +#define V3_CREATE_THREAD(fn, arg, name) ({ \ + void * thread = NULL; \ extern struct v3_os_hooks * os_hooks; \ if ((os_hooks) && (os_hooks)->start_kernel_thread) { \ - (os_hooks)->start_kernel_thread(fn, arg, name); \ + thread = (os_hooks)->start_kernel_thread(fn, arg, name); \ } \ - } while (0) + thread; \ + }) +#define V3_THREAD_SLEEP() \ + do{ \ + extern struct v3_os_hooks * os_hooks; \ + if ((os_hooks) && (os_hooks)->kernel_thread_sleep) { \ + (os_hooks)->kernel_thread_sleep(); \ + } \ + }while(0) + +#define V3_THREAD_WAKEUP(thread) \ + do{ \ + extern struct v3_os_hooks * os_hooks; \ + if ((os_hooks) && (os_hooks)->kernel_thread_wakeup) { \ + (os_hooks)->kernel_thread_wakeup(thread); \ + } \ + }while(0) @@ -216,12 +232,11 @@ struct guest_info; thread; \ }) - #endif - /* ** */ + #define V3_ASSERT(x) \ do { \ extern struct v3_os_hooks * os_hooks; \ @@ -255,7 +270,9 @@ void v3_yield_cond(struct guest_info * info); void v3_print_cond(const char * fmt, ...); +#ifdef CONFIG_MULTITHREAD_OS void v3_interrupt_cpu(struct v3_vm_info * vm, int logical_cpu, int vector); +#endif v3_cpu_arch_t v3_get_cpu_type(int cpu_id); @@ -275,14 +292,14 @@ struct v3_os_hooks { void (*print)(const char * format, ...) __attribute__ ((format (printf, 1, 2))); - void *(*allocate_pages)(int numPages, unsigned int alignment); - void (*free_page)(void * page); + void *(*allocate_pages)(int num_pages, unsigned int alignment); + void (*free_pages)(void * page, int num_pages); void *(*malloc)(unsigned int size); void (*free)(void * addr); - void *(*paddr_to_vaddr)(void *addr); - void *(*vaddr_to_paddr)(void *addr); + void *(*paddr_to_vaddr)(void * addr); + void *(*vaddr_to_paddr)(void * addr); int (*hook_interrupt)(struct v3_vm_info * vm, unsigned int irq); int (*ack_irq)(int irq); @@ -301,7 +318,9 @@ struct v3_os_hooks { - void (*start_kernel_thread)(int (*fn)(void * arg), void * arg, char * thread_name); + void * (*start_kernel_thread)(int (*fn)(void * arg), void * arg, char * thread_name); + void (*kernel_thread_sleep)(void); + void (*kernel_thread_wakeup)(void * thread); void (*interrupt_cpu)(struct v3_vm_info * vm, int logical_cpu, int vector); void (*call_on_cpu)(int logical_cpu, void (*fn)(void * arg), void * arg); void * (*start_thread_on_cpu)(int cpu_id, int (*fn)(void * arg), void * arg, char * thread_name); @@ -325,14 +344,15 @@ struct v3_interrupt { void Init_V3(struct v3_os_hooks * hooks, int num_cpus); +void Shutdown_V3( void ); struct v3_vm_info * v3_create_vm(void * cfg, void * priv_data, char * name); int v3_start_vm(struct v3_vm_info * vm, unsigned int cpu_mask); int v3_stop_vm(struct v3_vm_info * vm); +int v3_free_vm(struct v3_vm_info * vm); int v3_deliver_irq(struct v3_vm_info * vm, struct v3_interrupt * intr); - #endif