Changeset c03ee1c in mainline for kernel/arch/arm32/include/mm/page.h
- Timestamp:
- 2007-06-13T17:49:57Z (18 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- de7663f
- Parents:
- 6b781c0
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/arm32/include/mm/page.h
r6b781c0 rc03ee1c 56 56 #ifdef KERNEL 57 57 58 /* Number of entries in each level. */ 58 59 #define PTL0_ENTRIES_ARCH (2 << 12) /* 4096 */ 59 60 #define PTL1_ENTRIES_ARCH 0 60 61 #define PTL2_ENTRIES_ARCH 0 61 62 62 /* coarse page tables used (256 * 4 = 1KB per page) */ 63 63 #define PTL3_ENTRIES_ARCH (2 << 8) /* 256 */ 64 64 65 /* Page table sizes for each level. */ 65 66 #define PTL0_SIZE_ARCH FOUR_FRAMES 66 67 #define PTL1_SIZE_ARCH 0 … … 68 69 #define PTL3_SIZE_ARCH ONE_FRAME 69 70 71 /* Macros calculating indices into page tables for each level. */ 70 72 #define PTL0_INDEX_ARCH(vaddr) (((vaddr) >> 20) & 0xfff) 71 73 #define PTL1_INDEX_ARCH(vaddr) 0 … … 73 75 #define PTL3_INDEX_ARCH(vaddr) (((vaddr) >> 12) & 0x0ff) 74 76 77 /* Get PTE address accessors for each level. */ 75 78 #define GET_PTL1_ADDRESS_ARCH(ptl0, i) \ 76 79 ((pte_t *) ((((pte_level0_t *)(ptl0))[(i)]).coarse_table_addr << 10)) … … 82 85 ((uintptr_t) ((((pte_level1_t *)(ptl3))[(i)]).frame_base_addr << 12)) 83 86 87 /* Set PTE address accessors for each level. */ 84 88 #define SET_PTL0_ADDRESS_ARCH(ptl0) \ 85 89 (set_ptl0_addr((pte_level0_t *) (ptl0))) … … 91 95 (((pte_level1_t *) (ptl3))[(i)].frame_base_addr = (a) >> 12) 92 96 97 /* Get PTE flags accessors for each level. */ 93 98 #define GET_PTL1_FLAGS_ARCH(ptl0, i) \ 94 99 get_pt_level0_flags((pte_level0_t *) (ptl0), (index_t) (i)) … … 100 105 get_pt_level1_flags((pte_level1_t *) (ptl3), (index_t) (i)) 101 106 107 /* Set PTE flags accessors for each level. */ 102 108 #define SET_PTL1_FLAGS_ARCH(ptl0, i, x) \ 103 109 set_pt_level0_flags((pte_level0_t *) (ptl0), (index_t) (i), (x)) … … 107 113 set_pt_level1_flags((pte_level1_t *) (ptl3), (index_t) (i), (x)) 108 114 115 /* Macros for querying the last-level PTE entries. */ 109 116 #define PTE_VALID_ARCH(pte) \ 110 117 (*((uint32_t *) (pte)) != 0) 111 118 #define PTE_PRESENT_ARCH(pte) \ 112 119 (((pte_level0_t *) (pte))->descriptor_type != 0) 113 114 /* pte should point into ptl3 */115 120 #define PTE_GET_FRAME_ARCH(pte) \ 116 121 (((pte_level1_t *) (pte))->frame_base_addr << FRAME_WIDTH) 117 118 /* pte should point into ptl3 */119 122 #define PTE_WRITABLE_ARCH(pte) \ 120 123 (((pte_level1_t *) (pte))->access_permission_0 == \ 121 124 PTE_AP_USER_RW_KERNEL_RW) 122 123 125 #define PTE_EXECUTABLE_ARCH(pte) \ 124 126 1 … … 129 131 typedef struct { 130 132 /* 0b01 for coarse tables, see below for details */ 131 unsigned descriptor_type 132 unsigned impl_specific 133 unsigned domain 134 unsigned should_be_zero 133 unsigned descriptor_type : 2; 134 unsigned impl_specific : 3; 135 unsigned domain : 4; 136 unsigned should_be_zero : 1; 135 137 136 138 /* Pointer to the coarse 2nd level page table (holding entries for small … … 139 141 * per table in comparison with 1KB per the coarse table) 140 142 */ 141 unsigned coarse_table_addr 143 unsigned coarse_table_addr : 22; 142 144 } ATTRIBUTE_PACKED pte_level0_t; 143 145 … … 146 148 147 149 /* 0b10 for small pages */ 148 unsigned descriptor_type 149 unsigned bufferable 150 unsigned cacheable 150 unsigned descriptor_type : 2; 151 unsigned bufferable : 1; 152 unsigned cacheable : 1; 151 153 152 154 /* access permissions for each of 4 subparts of a page … … 156 158 unsigned access_permission_2 : 2; 157 159 unsigned access_permission_3 : 2; 158 unsigned frame_base_addr 160 unsigned frame_base_addr : 20; 159 161 } ATTRIBUTE_PACKED pte_level1_t; 160 162 … … 191 193 * @param pt Pointer to the page table to set. 192 194 */ 193 static inline void set_ptl0_addr( 195 static inline void set_ptl0_addr(pte_level0_t *pt) 194 196 { 195 197 asm volatile (
Note:
See TracChangeset
for help on using the changeset viewer.