2 * Copyright 2010, Ingo Weinhold, ingo_weinhold@gmx.de.
3 * Distributed under the terms of the MIT License.
5 #ifndef KERNEL_ARCH_X86_PAGING_PAE_PAGING_H
6 #define KERNEL_ARCH_X86_PAGING_PAE_PAGING_H
12 #if B_HAIKU_PHYSICAL_BITS == 64
15 // page directory pointer table entry bits
16 #define X86_PAE_PDPTE_PRESENT 0x0000000000000001LL
17 #define X86_PAE_PDPTE_WRITE_THROUGH 0x0000000000000008LL
18 #define X86_PAE_PDPTE_CACHING_DISABLED 0x0000000000000010LL
19 #define X86_PAE_PDPTE_ADDRESS_MASK 0x000ffffffffff000LL
21 // page directory entry bits
22 #define X86_PAE_PDE_PRESENT 0x0000000000000001LL
23 #define X86_PAE_PDE_WRITABLE 0x0000000000000002LL
24 #define X86_PAE_PDE_USER 0x0000000000000004LL
25 #define X86_PAE_PDE_WRITE_THROUGH 0x0000000000000008LL
26 #define X86_PAE_PDE_CACHING_DISABLED 0x0000000000000010LL
27 #define X86_PAE_PDE_ACCESSED 0x0000000000000020LL
28 #define X86_PAE_PDE_IGNORED1 0x0000000000000040LL
29 #define X86_PAE_PDE_LARGE_PAGE 0x0000000000000080LL
30 #define X86_PAE_PDE_IGNORED2 0x0000000000000100LL
31 #define X86_PAE_PDE_IGNORED3 0x0000000000000200LL
32 #define X86_PAE_PDE_IGNORED4 0x0000000000000400LL
33 #define X86_PAE_PDE_IGNORED5 0x0000000000000800LL
34 #define X86_PAE_PDE_ADDRESS_MASK 0x000ffffffffff000LL
35 #define X86_PAE_PDE_NOT_EXECUTABLE 0x8000000000000000LL
37 // page table entry bits
38 #define X86_PAE_PTE_PRESENT 0x0000000000000001LL
39 #define X86_PAE_PTE_WRITABLE 0x0000000000000002LL
40 #define X86_PAE_PTE_USER 0x0000000000000004LL
41 #define X86_PAE_PTE_WRITE_THROUGH 0x0000000000000008LL
42 #define X86_PAE_PTE_CACHING_DISABLED 0x0000000000000010LL
43 #define X86_PAE_PTE_ACCESSED 0x0000000000000020LL
44 #define X86_PAE_PTE_DIRTY 0x0000000000000040LL
45 #define X86_PAE_PTE_PAT 0x0000000000000080LL
46 #define X86_PAE_PTE_GLOBAL 0x0000000000000100LL
47 #define X86_PAE_PTE_IGNORED1 0x0000000000000200LL
48 #define X86_PAE_PTE_IGNORED2 0x0000000000000400LL
49 #define X86_PAE_PTE_IGNORED3 0x0000000000000800LL
50 #define X86_PAE_PTE_ADDRESS_MASK 0x000ffffffffff000LL
51 #define X86_PAE_PTE_NOT_EXECUTABLE 0x8000000000000000LL
52 #define X86_PAE_PTE_PROTECTION_MASK (X86_PAE_PTE_NOT_EXECUTABLE \
53 |X86_PAE_PTE_WRITABLE \
55 #define X86_PAE_PTE_MEMORY_TYPE_MASK (X86_PAE_PTE_WRITE_THROUGH \
56 | X86_PAE_PTE_CACHING_DISABLED)
59 static const uint32 kPAEPageDirEntryCount
= 512;
60 static const uint32 kPAEPageTableEntryCount
= 512;
61 static const size_t kPAEPageTableRange
= kPAEPageTableEntryCount
* B_PAGE_SIZE
;
62 static const size_t kPAEPageDirRange
63 = kPAEPageDirEntryCount
* kPAEPageTableRange
;
66 typedef uint64 pae_page_directory_pointer_table_entry
;
67 typedef uint64 pae_page_directory_entry
;
68 typedef uint64 pae_page_table_entry
;
71 #endif // B_HAIKU_PHYSICAL_BITS == 64
74 #endif // KERNEL_ARCH_X86_PAGING_PAE_PAGING_H