xref: /kvm-unit-tests/lib/x86/vm.h (revision 1597d09d33fe2d6bf6b7c41074574b502fd50455)
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