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