1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 #ifndef _X86_MMU_H
31 #define _X86_MMU_H
32
33 #include <sys/types.h>
34
35 typedef uint32_t *pgd_t;
36 typedef uint32_t *pte_t;
37
38
39
40
41 #define PDE_PRESENT 0x00000001
42 #define PDE_WRITE 0x00000002
43 #define PDE_USER 0x00000004
44 #define PDE_WTHRU 0x00000008
45 #define PDE_NCACHE 0x00000010
46 #define PDE_ACCESS 0x00000020
47 #define PDE_SIZE 0x00000080
48 #define PDE_AVAIL 0x00000e00
49 #define PDE_ADDRESS 0xfffff000
50
51
52
53
54 #define PTE_PRESENT 0x00000001
55 #define PTE_WRITE 0x00000002
56 #define PTE_USER 0x00000004
57 #define PTE_WTHRU 0x00000008
58 #define PTE_NCACHE 0x00000010
59 #define PTE_ACCESS 0x00000020
60 #define PTE_DIRTY 0x00000040
61 #define PTE_AVAIL 0x00000e00
62 #define PTE_ADDRESS 0xfffff000
63
64
65
66
67 #define PAGE_DIR(virt) (int)((((vaddr_t)(virt)) >> 22) & 0x3ff)
68 #define PAGE_TABLE(virt) (int)((((vaddr_t)(virt)) >> 12) & 0x3ff)
69
70 #define pte_present(pgd, virt) (pgd[PAGE_DIR(virt)] & PDE_PRESENT)
71
72 #define page_present(pte, virt) (pte[PAGE_TABLE(virt)] & PTE_PRESENT)
73
74 #define vtopte(pgd, virt) \
75 (pte_t)ptokv(((uint32_t *)pgd)[PAGE_DIR(virt)] & PDE_ADDRESS)
76
77 #define ptetopg(pte, virt) \
78 ((pte)[PAGE_TABLE(virt)] & PTE_ADDRESS)
79
80 #endif
|