X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Finclude%2Fgeekos%2Fvm_guest_mem.h;h=f73873658d927025bbfc1184eeed4d52a3bd04ee;hb=8cb3daaded0d8c80be801aa74493006b5a06999f;hp=9d9c9e0803e45f5e00c7b01dc6d3b036e9c1e3b5;hpb=7acd54f8c3b30d118d56186a9c6506f21f85096d;p=palacios.git diff --git a/palacios/include/geekos/vm_guest_mem.h b/palacios/include/geekos/vm_guest_mem.h index 9d9c9e0..f738736 100644 --- a/palacios/include/geekos/vm_guest_mem.h +++ b/palacios/include/geekos/vm_guest_mem.h @@ -5,22 +5,89 @@ #include -int guest_va_to_guest_pa(guest_info_t * guest_info, addr_t guest_va, addr_t * guest_pa); -int guest_pa_to_guest_va(guest_info_t * guest_info, addr_t guest_pa, addr_t * guest_va); -int guest_va_to_host_va(guest_info_t * guest_info, addr_t guest_va, addr_t * host_va); -int guest_pa_to_host_pa(guest_info_t * guest_info, addr_t guest_pa, addr_t * host_pa); -int guest_pa_to_host_va(guest_info_t * guest_info, addr_t guest_pa, addr_t * host_va); +/* These functions are ordered such that they can only call the functions defined in a lower order group */ +/* This is to avoid infinite lookup loops */ -int host_va_to_guest_pa(guest_info_t * guest_info, addr_t host_va, addr_t * guest_pa); -int host_pa_to_guest_va(guest_info_t * guest_info, addr_t host_pa, addr_t * guest_va); +/**********************************/ +/* GROUP 0 */ +/**********************************/ +/* Fundamental converters */ +// Call out to OS int host_va_to_host_pa(addr_t host_va, addr_t * host_pa); int host_pa_to_host_va(addr_t host_pa, addr_t * host_va); +// guest_pa -> (shadow map) -> host_pa +int guest_pa_to_host_pa(struct guest_info * guest_info, addr_t guest_pa, addr_t * host_pa); + +/* !! Currently not implemented !! */ +// host_pa -> (shadow_map) -> guest_pa +int host_pa_to_guest_pa(struct guest_info * guest_info, addr_t host_pa, addr_t * guest_pa); + + +/**********************************/ +/* GROUP 1 */ +/**********************************/ + + +/* !! Currently not implemented !! */ +// host_va -> host_pa -> guest_pa +int host_va_to_guest_pa(struct guest_info * guest_info, addr_t host_va, addr_t * guest_pa); + + +// guest_pa -> host_pa -> host_va +int guest_pa_to_host_va(struct guest_info * guest_info, addr_t guest_pa, addr_t * host_va); + + +// Look up the address in the guests page tables.. This can cause multiple calls that translate +// ------------------------------------------------ +// | | +// --> guest_pa -> host_pa -> host_va -> (read table) --> guest_pa +int guest_va_to_guest_pa(struct guest_info * guest_info, addr_t guest_va, addr_t * guest_pa); + + + +/* !! Currently not implemented !! */ +// A page table walker in the guest's address space +// ------------------------------------------------ +// | | +// --> guest_pa -> host_pa -> host_va -> (read table) --> guest_va +int guest_pa_to_guest_va(struct guest_info * guest_info, addr_t guest_pa, addr_t * guest_va); + + + +/**********************************/ +/* GROUP 2 */ +/**********************************/ +// guest_va -> guest_pa -> host_pa +int guest_va_to_host_pa(struct guest_info * guest_info, addr_t guest_va, addr_t * host_pa); + + +/* !! Currently not implemented !! */ +// host_pa -> guest_pa -> guest_va +int host_pa_to_guest_va(struct guest_info * guest_info, addr_t host_pa, addr_t * guest_va); + +// guest_va -> guest_pa -> host_pa -> host_va +int guest_va_to_host_va(struct guest_info * guest_info, addr_t guest_va, addr_t * host_va); + + +/* !! Currently not implemented !! */ +// host_va -> host_pa -> guest_pa -> guest_va +int host_va_to_guest_va(struct guest_info * guest_info, addr_t host_va, addr_t * guest_va); + + + + + + + + + +int read_guest_va_memory(struct guest_info * guest_info, addr_t guest_va, int count, char * dest); +int read_guest_pa_memory(struct guest_info * guest_info, addr_t guest_pa, int count, char * dest); + -int read_guest_va_memory(guest_info_t * guest_info, addr_t guest_va, int count, char * dest); -int read_guest_pa_memory(guest_info_t * guest_info, addr_t guest_pa, int count, char * dest);