1*7d36db35SAvi Kivity #ifndef VM_H 2*7d36db35SAvi Kivity #define VM_H 3*7d36db35SAvi Kivity 4*7d36db35SAvi Kivity #include "processor.h" 5*7d36db35SAvi Kivity 6*7d36db35SAvi Kivity #define PAGE_SIZE 4096ul 7*7d36db35SAvi Kivity #ifdef __x86_64__ 8*7d36db35SAvi Kivity #define LARGE_PAGE_SIZE (512 * PAGE_SIZE) 9*7d36db35SAvi Kivity #else 10*7d36db35SAvi Kivity #define LARGE_PAGE_SIZE (1024 * PAGE_SIZE) 11*7d36db35SAvi Kivity #endif 12*7d36db35SAvi Kivity 13*7d36db35SAvi Kivity #define PTE_PRESENT (1ull << 0) 14*7d36db35SAvi Kivity #define PTE_PSE (1ull << 7) 15*7d36db35SAvi Kivity #define PTE_WRITE (1ull << 1) 16*7d36db35SAvi Kivity #define PTE_ADDR (0xffffffffff000ull) 17*7d36db35SAvi Kivity 18*7d36db35SAvi Kivity void setup_vm(); 19*7d36db35SAvi Kivity 20*7d36db35SAvi Kivity void *vmalloc(unsigned long size); 21*7d36db35SAvi Kivity void vfree(void *mem); 22*7d36db35SAvi Kivity void *vmap(unsigned long long phys, unsigned long size); 23*7d36db35SAvi Kivity 24*7d36db35SAvi Kivity void install_pte(unsigned long *cr3, 25*7d36db35SAvi Kivity int pte_level, 26*7d36db35SAvi Kivity void *virt, 27*7d36db35SAvi Kivity unsigned long pte, 28*7d36db35SAvi Kivity unsigned long *pt_page); 29*7d36db35SAvi Kivity 30*7d36db35SAvi Kivity void *alloc_page(); 31*7d36db35SAvi Kivity 32*7d36db35SAvi Kivity void install_large_page(unsigned long *cr3,unsigned long phys, 33*7d36db35SAvi Kivity void *virt); 34*7d36db35SAvi Kivity void install_page(unsigned long *cr3, unsigned long phys, void *virt); 35*7d36db35SAvi Kivity 36*7d36db35SAvi Kivity static inline unsigned long virt_to_phys(const void *virt) 37*7d36db35SAvi Kivity { 38*7d36db35SAvi Kivity return (unsigned long)virt; 39*7d36db35SAvi Kivity } 40*7d36db35SAvi Kivity 41*7d36db35SAvi Kivity static inline void *phys_to_virt(unsigned long phys) 42*7d36db35SAvi Kivity { 43*7d36db35SAvi Kivity return (void *)phys; 44*7d36db35SAvi Kivity } 45*7d36db35SAvi Kivity 46*7d36db35SAvi Kivity #endif 47