Changes in kernel/genarch/include/mm/page_pt.h [af863d0:da1bafb] in mainline
- File:
-
- 1 edited
-
kernel/genarch/include/mm/page_pt.h (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
kernel/genarch/include/mm/page_pt.h
raf863d0 rda1bafb 37 37 * Architectures that use hierarchical page tables 38 38 * are supposed to implement *_ARCH macros. 39 * 39 40 */ 40 41 … … 44 45 #define KERN_PAGE_PT_H_ 45 46 46 #include <arch/types.h>47 47 #include <mm/as.h> 48 48 #include <mm/page.h> 49 #include <arch/mm/page.h> 50 #include <typedefs.h> 49 51 50 52 /* 51 53 * Number of entries in each level. 52 54 */ 53 #define PTL0_ENTRIES PTL0_ENTRIES_ARCH54 #define PTL1_ENTRIES PTL1_ENTRIES_ARCH55 #define PTL2_ENTRIES PTL2_ENTRIES_ARCH56 #define PTL3_ENTRIES PTL3_ENTRIES_ARCH55 #define PTL0_ENTRIES PTL0_ENTRIES_ARCH 56 #define PTL1_ENTRIES PTL1_ENTRIES_ARCH 57 #define PTL2_ENTRIES PTL2_ENTRIES_ARCH 58 #define PTL3_ENTRIES PTL3_ENTRIES_ARCH 57 59 58 60 /* Table sizes in each level */ 59 #define PTL0_SIZE PTL0_SIZE_ARCH60 #define PTL1_SIZE PTL1_SIZE_ARCH61 #define PTL2_SIZE PTL2_SIZE_ARCH62 #define PTL3_SIZE PTL3_SIZE_ARCH61 #define PTL0_SIZE PTL0_SIZE_ARCH 62 #define PTL1_SIZE PTL1_SIZE_ARCH 63 #define PTL2_SIZE PTL2_SIZE_ARCH 64 #define PTL3_SIZE PTL3_SIZE_ARCH 63 65 64 66 /* 65 67 * These macros process vaddr and extract those portions 66 68 * of it that function as indices to respective page tables. 69 * 67 70 */ 68 #define PTL0_INDEX(vaddr) PTL0_INDEX_ARCH(vaddr)69 #define PTL1_INDEX(vaddr) PTL1_INDEX_ARCH(vaddr)70 #define PTL2_INDEX(vaddr) PTL2_INDEX_ARCH(vaddr)71 #define PTL3_INDEX(vaddr) PTL3_INDEX_ARCH(vaddr)71 #define PTL0_INDEX(vaddr) PTL0_INDEX_ARCH(vaddr) 72 #define PTL1_INDEX(vaddr) PTL1_INDEX_ARCH(vaddr) 73 #define PTL2_INDEX(vaddr) PTL2_INDEX_ARCH(vaddr) 74 #define PTL3_INDEX(vaddr) PTL3_INDEX_ARCH(vaddr) 72 75 73 #define SET_PTL0_ADDRESS(ptl0) SET_PTL0_ADDRESS_ARCH(ptl0)76 #define SET_PTL0_ADDRESS(ptl0) SET_PTL0_ADDRESS_ARCH(ptl0) 74 77 75 78 /* 76 79 * These macros traverse the 4-level tree of page tables, 77 80 * each descending by one level. 81 * 78 82 */ 79 #define GET_PTL1_ADDRESS(ptl0, i) GET_PTL1_ADDRESS_ARCH(ptl0, i)80 #define GET_PTL2_ADDRESS(ptl1, i) GET_PTL2_ADDRESS_ARCH(ptl1, i)81 #define GET_PTL3_ADDRESS(ptl2, i) GET_PTL3_ADDRESS_ARCH(ptl2, i)82 #define GET_FRAME_ADDRESS(ptl3, i) GET_FRAME_ADDRESS_ARCH(ptl3, i)83 #define GET_PTL1_ADDRESS(ptl0, i) GET_PTL1_ADDRESS_ARCH(ptl0, i) 84 #define GET_PTL2_ADDRESS(ptl1, i) GET_PTL2_ADDRESS_ARCH(ptl1, i) 85 #define GET_PTL3_ADDRESS(ptl2, i) GET_PTL3_ADDRESS_ARCH(ptl2, i) 86 #define GET_FRAME_ADDRESS(ptl3, i) GET_FRAME_ADDRESS_ARCH(ptl3, i) 83 87 84 88 /* 85 89 * These macros are provided to change the shape of the 4-level tree of page 86 90 * tables on respective level. 91 * 87 92 */ 88 #define SET_PTL1_ADDRESS(ptl0, i, a) SET_PTL1_ADDRESS_ARCH(ptl0, i, a)89 #define SET_PTL2_ADDRESS(ptl1, i, a) SET_PTL2_ADDRESS_ARCH(ptl1, i, a)90 #define SET_PTL3_ADDRESS(ptl2, i, a) SET_PTL3_ADDRESS_ARCH(ptl2, i, a)91 #define SET_FRAME_ADDRESS(ptl3, i, a) SET_FRAME_ADDRESS_ARCH(ptl3, i, a)93 #define SET_PTL1_ADDRESS(ptl0, i, a) SET_PTL1_ADDRESS_ARCH(ptl0, i, a) 94 #define SET_PTL2_ADDRESS(ptl1, i, a) SET_PTL2_ADDRESS_ARCH(ptl1, i, a) 95 #define SET_PTL3_ADDRESS(ptl2, i, a) SET_PTL3_ADDRESS_ARCH(ptl2, i, a) 96 #define SET_FRAME_ADDRESS(ptl3, i, a) SET_FRAME_ADDRESS_ARCH(ptl3, i, a) 92 97 93 98 /* 94 99 * These macros are provided to query various flags within the page tables. 100 * 95 101 */ 96 #define GET_PTL1_FLAGS(ptl0, i) GET_PTL1_FLAGS_ARCH(ptl0, i)97 #define GET_PTL2_FLAGS(ptl1, i) GET_PTL2_FLAGS_ARCH(ptl1, i)98 #define GET_PTL3_FLAGS(ptl2, i) GET_PTL3_FLAGS_ARCH(ptl2, i)99 #define GET_FRAME_FLAGS(ptl3, i) GET_FRAME_FLAGS_ARCH(ptl3, i)102 #define GET_PTL1_FLAGS(ptl0, i) GET_PTL1_FLAGS_ARCH(ptl0, i) 103 #define GET_PTL2_FLAGS(ptl1, i) GET_PTL2_FLAGS_ARCH(ptl1, i) 104 #define GET_PTL3_FLAGS(ptl2, i) GET_PTL3_FLAGS_ARCH(ptl2, i) 105 #define GET_FRAME_FLAGS(ptl3, i) GET_FRAME_FLAGS_ARCH(ptl3, i) 100 106 101 107 /* 102 108 * These macros are provided to set/clear various flags within the page tables. 109 * 103 110 */ 104 #define SET_PTL1_FLAGS(ptl0, i, x) SET_PTL1_FLAGS_ARCH(ptl0, i, x)105 #define SET_PTL2_FLAGS(ptl1, i, x) SET_PTL2_FLAGS_ARCH(ptl1, i, x)106 #define SET_PTL3_FLAGS(ptl2, i, x) SET_PTL3_FLAGS_ARCH(ptl2, i, x)107 #define SET_FRAME_FLAGS(ptl3, i, x) SET_FRAME_FLAGS_ARCH(ptl3, i, x)111 #define SET_PTL1_FLAGS(ptl0, i, x) SET_PTL1_FLAGS_ARCH(ptl0, i, x) 112 #define SET_PTL2_FLAGS(ptl1, i, x) SET_PTL2_FLAGS_ARCH(ptl1, i, x) 113 #define SET_PTL3_FLAGS(ptl2, i, x) SET_PTL3_FLAGS_ARCH(ptl2, i, x) 114 #define SET_FRAME_FLAGS(ptl3, i, x) SET_FRAME_FLAGS_ARCH(ptl3, i, x) 108 115 109 116 /* 110 117 * Macros for querying the last-level PTEs. 118 * 111 119 */ 112 #define PTE_VALID(p) PTE_VALID_ARCH((p))113 #define PTE_PRESENT(p) PTE_PRESENT_ARCH((p))114 #define PTE_GET_FRAME(p) PTE_GET_FRAME_ARCH((p))115 #define PTE_READABLE(p) 1116 #define PTE_WRITABLE(p) PTE_WRITABLE_ARCH((p))117 #define PTE_EXECUTABLE(p) PTE_EXECUTABLE_ARCH((p))120 #define PTE_VALID(p) PTE_VALID_ARCH((p)) 121 #define PTE_PRESENT(p) PTE_PRESENT_ARCH((p)) 122 #define PTE_GET_FRAME(p) PTE_GET_FRAME_ARCH((p)) 123 #define PTE_READABLE(p) 1 124 #define PTE_WRITABLE(p) PTE_WRITABLE_ARCH((p)) 125 #define PTE_EXECUTABLE(p) PTE_EXECUTABLE_ARCH((p)) 118 126 119 127 extern as_operations_t as_pt_operations; 120 128 extern page_mapping_operations_t pt_mapping_operations; 121 129 122 extern void page_mapping_insert_pt(as_t *as, uintptr_t page, uintptr_t frame, 123 int flags); 124 extern pte_t *page_mapping_find_pt(as_t *as, uintptr_t page); 130 extern void page_mapping_insert_pt(as_t *, uintptr_t, uintptr_t, unsigned int); 131 extern pte_t *page_mapping_find_pt(as_t *, uintptr_t); 125 132 126 133 #endif
Note:
See TracChangeset
for help on using the changeset viewer.
