17d36db35SAvi Kivity #ifndef VM_H 27d36db35SAvi Kivity #define VM_H 37d36db35SAvi Kivity 47d36db35SAvi Kivity #include "processor.h" 57d36db35SAvi Kivity 67d36db35SAvi Kivity #define PAGE_SIZE 4096ul 77d36db35SAvi Kivity #ifdef __x86_64__ 87d36db35SAvi Kivity #define LARGE_PAGE_SIZE (512 * PAGE_SIZE) 97d36db35SAvi Kivity #else 107d36db35SAvi Kivity #define LARGE_PAGE_SIZE (1024 * PAGE_SIZE) 117d36db35SAvi Kivity #endif 127d36db35SAvi Kivity 137d36db35SAvi Kivity #define PTE_PRESENT (1ull << 0) 147d36db35SAvi Kivity #define PTE_PSE (1ull << 7) 157d36db35SAvi Kivity #define PTE_WRITE (1ull << 1) 16b01c8823SKevin Wolf #define PTE_USER (1ull << 2) 177d36db35SAvi Kivity #define PTE_ADDR (0xffffffffff000ull) 187d36db35SAvi Kivity 197d36db35SAvi Kivity void setup_vm(); 207d36db35SAvi Kivity 217d36db35SAvi Kivity void *vmalloc(unsigned long size); 227d36db35SAvi Kivity void vfree(void *mem); 237d36db35SAvi Kivity void *vmap(unsigned long long phys, unsigned long size); 24a4b87a16SGleb Natapov void *alloc_vpage(void); 25524ae896SAvi Kivity void *alloc_vpages(ulong nr); 26334cd2bfSGleb Natapov uint64_t virt_to_phys_cr3(void *mem); 277d36db35SAvi Kivity 2804262816SPaolo Bonzini unsigned long *get_pte(unsigned long *cr3, void *virt); 2904262816SPaolo Bonzini unsigned long *install_pte(unsigned long *cr3, 307d36db35SAvi Kivity int pte_level, 317d36db35SAvi Kivity void *virt, 327d36db35SAvi Kivity unsigned long pte, 337d36db35SAvi Kivity unsigned long *pt_page); 347d36db35SAvi Kivity 357d36db35SAvi Kivity void *alloc_page(); 36*1597d09dSAndrey Smetanin void free_page(void *page); 377d36db35SAvi Kivity 3804262816SPaolo Bonzini unsigned long *install_large_page(unsigned long *cr3,unsigned long phys, 397d36db35SAvi Kivity void *virt); 4004262816SPaolo Bonzini unsigned long *install_page(unsigned long *cr3, unsigned long phys, void *virt); 417d36db35SAvi Kivity 427d36db35SAvi Kivity static inline unsigned long virt_to_phys(const void *virt) 437d36db35SAvi Kivity { 447d36db35SAvi Kivity return (unsigned long)virt; 457d36db35SAvi Kivity } 467d36db35SAvi Kivity 477d36db35SAvi Kivity static inline void *phys_to_virt(unsigned long phys) 487d36db35SAvi Kivity { 497d36db35SAvi Kivity return (void *)phys; 507d36db35SAvi Kivity } 517d36db35SAvi Kivity 527d36db35SAvi Kivity #endif 53