X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Finclude%2Fpalacios%2Fvmm_mem_hook.h;h=65e33220675b29bd2d183b230903418237957f82;hb=5ed7ab7d688c249301404ced123d6d8ee1b0711a;hp=e30ecf7152a68a5c04733645570fbb42e6bbd73f;hpb=b93aeabee44c82139a9afd065dfcaca8ac6688ad;p=palacios.git diff --git a/palacios/include/palacios/vmm_mem_hook.h b/palacios/include/palacios/vmm_mem_hook.h index e30ecf7..65e3322 100644 --- a/palacios/include/palacios/vmm_mem_hook.h +++ b/palacios/include/palacios/vmm_mem_hook.h @@ -24,18 +24,29 @@ #ifdef __V3VEE__ +struct hashtable; + struct v3_mem_hooks { - void * hook_hvas; // this is an array of pages, equal to the number of cores + /* Scratch memory pages for full hooks (1 per core) */ + void * hook_hvas_1; + + /* A second set of scratch memory pages */ + /* The ONLY reason this exists is because of 'rep cmps'... */ + void * hook_hvas_2; + struct list_head hook_list; + /* We track memory hooks via a hash table */ + /* keyed to the memory region pointer */ + struct hashtable * reg_table; }; int v3_init_mem_hooks(struct v3_vm_info * vm); - +int v3_deinit_mem_hooks(struct v3_vm_info * vm); int v3_hook_full_mem(struct v3_vm_info * vm, uint16_t core_id, addr_t guest_addr_start, addr_t guest_addr_end, @@ -43,6 +54,16 @@ int v3_hook_full_mem(struct v3_vm_info * vm, uint16_t core_id, int (*write)(struct guest_info * core, addr_t guest_addr, void * src, uint_t length, void * priv_data), void * priv_data); +int v3_hook_access_mem(struct v3_vm_info * vm, uint16_t core_id, + addr_t guest_addr_start, addr_t guest_addr_end, + int (*access)(struct guest_info * core, + addr_t guest_va, + addr_t guest_pa, + struct v3_mem_region *reg, + pf_error_t access_info, + void *priv_data), + void * priv_data); + int v3_hook_write_mem(struct v3_vm_info * vm, uint16_t core_id, addr_t guest_addr_start, addr_t guest_addr_end, addr_t host_addr, int (*write)(struct guest_info * core, addr_t guest_addr, void * src, uint_t length, void * priv_data), @@ -52,6 +73,7 @@ int v3_hook_write_mem(struct v3_vm_info * vm, uint16_t core_id, int v3_unhook_mem(struct v3_vm_info * vm, uint16_t core_id, addr_t guest_addr_start); + #endif /* ! __V3VEE__ */