X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?p=palacios.git;a=blobdiff_plain;f=palacios%2Finclude%2Fgeekos%2Fvmm_mem.h;h=32a254c7b695f62279966501e68fb5b9511840cf;hp=f938b3e05d1b4e2f3432aff8a1b22c61fd165490;hb=701de97007c8b6776998eeab78469a4304f6b871;hpb=b4963a8a43ca9103946f926e062e609e4498c2e2 diff --git a/palacios/include/geekos/vmm_mem.h b/palacios/include/geekos/vmm_mem.h index f938b3e..32a254c 100644 --- a/palacios/include/geekos/vmm_mem.h +++ b/palacios/include/geekos/vmm_mem.h @@ -5,30 +5,80 @@ #include + + typedef struct mem_region { ullong_t addr; - uint_t numPages; + uint_t num_pages; struct mem_region * next; struct mem_region * prev; } mem_region_t; -typedef struct vmm_mem_map { +typedef struct vmm_mem_list { uint_t num_pages; bool long_mode; uint_t num_regions; mem_region_t * head; - mem_region_t * tail; -} vmm_mem_map_t; + // mem_region_t * tail; +} vmm_mem_list_t; + + + +/** Memory layout **/ +/* Describes the layout of memory for the guest */ +/* We use this to build the guest page tables */ + +typedef enum region_type {GUEST, UNMAPPED, SHARED} region_type_t; + + +typedef struct layout_region { + ullong_t addr; + uint_t num_pages; + + region_type_t type; + + ullong_t host_addr; + + struct layout_region * next; + struct layout_region * prev; + + +} layout_region_t; + + +typedef struct vmm_mem_layout { + uint_t num_pages; + uint_t num_regions; + + layout_region_t * head; + //layout_region_t * tail; + +} vmm_mem_layout_t; + + +/*** FOR THE LOVE OF GOD WRITE SOME UNIT TESTS FOR THIS THING ***/ + +void init_mem_list(vmm_mem_list_t * list); +void free_mem_list(vmm_mem_list_t * list); + +int add_mem_list_pages(vmm_mem_list_t * list, ullong_t addr, uint_t num_pages); +int remove_mem_list_pages(vmm_mem_list_t * list, ullong_t addr, uint_t num_pages); + +mem_region_t * get_mem_list_cursor(vmm_mem_list_t * list, ullong_t addr); -void init_mem_map(vmm_mem_map_t * map); -void add_mem_map_pages(vmm_mem_map_t * map, ullong_t addr, uint_t numPages); -int remove_mem_map_pages(vmm_mem_map_t * map, ullong_t addr, uint_t numPages); +void init_mem_laout(vmm_mem_layout_t * layout); +void free_mem_layout(vmm_mem_layout_t * layout); +layout_region_t * get_layout_cursor(vmm_mem_layout_t * layout, ullong_t addr); +int add_mem_range(vmm_mem_layout_t * layout, layout_region_t * region); +int add_shared_mem_range(vmm_mem_layout_t * layout, ullong_t addr, uint_t num_pages, ullong_t host_addr); +int add_unmapped_mem_range(vmm_mem_layout_t * layout, ullong_t addr, uint_t num_pages); +int add_guest_mem_range(vmm_mem_layout_t * layout, ullong_t addr, uint_t num_pages); #endif