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