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