X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?p=palacios.git;a=blobdiff_plain;f=palacios%2Finclude%2Fpalacios%2Fvm_guest_mem.h;fp=palacios%2Finclude%2Fpalacios%2Fvm_guest_mem.h;h=6077fde4ada708313be62a225e16f2a6131b9864;hp=0000000000000000000000000000000000000000;hb=ddc16b0737cf58f7aa90a69c6652cdf4090aec51;hpb=626595465a2c6987606a6bc697df65130ad8c2d3 diff --git a/palacios/include/palacios/vm_guest_mem.h b/palacios/include/palacios/vm_guest_mem.h new file mode 100644 index 0000000..6077fde --- /dev/null +++ b/palacios/include/palacios/vm_guest_mem.h @@ -0,0 +1,117 @@ +/* + * This file is part of the Palacios Virtual Machine Monitor developed + * by the V3VEE Project with funding from the United States National + * Science Foundation and the Department of Energy. + * + * The V3VEE Project is a joint project between Northwestern University + * and the University of New Mexico. You can find out more at + * http://www.v3vee.org + * + * Copyright (c) 2008, Jack Lange + * Copyright (c) 2008, The V3VEE Project + * All rights reserved. + * + * Author: Jack Lange + * + * This is free software. You are permitted to use, + * redistribute, and modify it as specified in the file "V3VEE_LICENSE". + */ + +#ifndef __VM_GUEST_MEM_H +#define __VM_GUEST_MEM_H + + +#ifdef __V3VEE__ + +#include +#include + + +/* 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 */ + +/**********************************/ +/* 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, uchar_t * dest); +int read_guest_pa_memory(struct guest_info * guest_info, addr_t guest_pa, int count, uchar_t * dest); +int write_guest_pa_memory(struct guest_info * guest_info, addr_t guest_pa, int count, uchar_t * src); +// TODO int write_guest_va_memory(struct guest_info * guest_info, addr_t guest_va, int count, char * src); + + +#endif // ! __V3VEE__ + + +#endif