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