Rev 2411 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 2411 | Rev 2417 | ||
---|---|---|---|
Line 57... | Line 57... | ||
57 | #ifdef KERNEL |
57 | #ifdef KERNEL |
58 | 58 | ||
59 | #define PTL0_ENTRIES_ARCH (2<<12) // 4096 |
59 | #define PTL0_ENTRIES_ARCH (2<<12) // 4096 |
60 | #define PTL1_ENTRIES_ARCH 0 |
60 | #define PTL1_ENTRIES_ARCH 0 |
61 | #define PTL2_ENTRIES_ARCH 0 |
61 | #define PTL2_ENTRIES_ARCH 0 |
- | 62 | ||
62 | /* coarse page tables used (256*4 = 1KB per page) */ |
63 | /* coarse page tables used (256*4 = 1KB per page) */ |
63 | #define PTL3_ENTRIES_ARCH (2<<8) // 256 |
64 | #define PTL3_ENTRIES_ARCH (2<<8) // 256 |
64 | 65 | ||
65 | #define PTL0_SIZE_ARCH FOUR_FRAMES |
66 | #define PTL0_SIZE_ARCH FOUR_FRAMES |
66 | #define PTL1_SIZE_ARCH 0 |
67 | #define PTL1_SIZE_ARCH 0 |
Line 96... | Line 97... | ||
96 | #define PTE_VALID_ARCH(pte) (*((uint32_t *) (pte)) != 0) |
97 | #define PTE_VALID_ARCH(pte) (*((uint32_t *) (pte)) != 0) |
97 | #define PTE_PRESENT_ARCH(pte) ( ((pte_level0_t *)(pte))->descriptor_type != 0 ) |
98 | #define PTE_PRESENT_ARCH(pte) ( ((pte_level0_t *)(pte))->descriptor_type != 0 ) |
98 | 99 | ||
99 | /* pte should point into ptl3 */ |
100 | /* pte should point into ptl3 */ |
100 | #define PTE_GET_FRAME_ARCH(pte) ( ((pte_level1_t *)(pte))->frame_base_addr << FRAME_WIDTH) |
101 | #define PTE_GET_FRAME_ARCH(pte) ( ((pte_level1_t *)(pte))->frame_base_addr << FRAME_WIDTH) |
- | 102 | ||
101 | /* pte should point into ptl3 */ |
103 | /* pte should point into ptl3 */ |
102 | #define PTE_WRITABLE_ARCH(pte) ( ((pte_level1_t *)(pte))->access_permission_0 == PTE_AP_USER_RW_KERNEL_RW ) |
104 | #define PTE_WRITABLE_ARCH(pte) ( ((pte_level1_t *)(pte))->access_permission_0 == PTE_AP_USER_RW_KERNEL_RW ) |
- | 105 | ||
103 | #define PTE_EXECUTABLE_ARCH(pte) 1 |
106 | #define PTE_EXECUTABLE_ARCH(pte) 1 |
104 | 107 | ||
105 | 108 | ||
106 | #ifndef __ASM__ |
109 | #ifndef __ASM__ |
107 | 110 | ||
Line 118... | Line 121... | ||
118 | * or large (64KB) pages. ARM also supports fine 2nd level page tables that |
121 | * or large (64KB) pages. ARM also supports fine 2nd level page tables that |
119 | * may hold even tiny pages (1KB) but they are bigger (4KB per table in comparison |
122 | * may hold even tiny pages (1KB) but they are bigger (4KB per table in comparison |
120 | * with 1KB per the coarse table) |
123 | * with 1KB per the coarse table) |
121 | */ |
124 | */ |
122 | unsigned coarse_table_addr : 22; |
125 | unsigned coarse_table_addr : 22; |
123 | } __attribute__ ((packed)) pte_level0_t; |
126 | } ATTRIBUTE_PACKED pte_level0_t; |
124 | 127 | ||
125 | 128 | ||
126 | /** Level 1 page table entry (small (4KB) pages used). */ |
129 | /** Level 1 page table entry (small (4KB) pages used). */ |
127 | typedef struct { |
130 | typedef struct { |
128 | 131 | ||
Line 136... | Line 139... | ||
136 | unsigned access_permission_0 : 2; |
139 | unsigned access_permission_0 : 2; |
137 | unsigned access_permission_1 : 2; |
140 | unsigned access_permission_1 : 2; |
138 | unsigned access_permission_2 : 2; |
141 | unsigned access_permission_2 : 2; |
139 | unsigned access_permission_3 : 2; |
142 | unsigned access_permission_3 : 2; |
140 | unsigned frame_base_addr : 20; |
143 | unsigned frame_base_addr : 20; |
141 | } __attribute__ ((packed)) pte_level1_t; |
144 | } ATTRIBUTE_PACKED pte_level1_t; |
142 | 145 | ||
143 | 146 | ||
144 | /* Level 1 page tables access permissions */ |
147 | /* Level 1 page tables access permissions */ |
145 | 148 | ||
146 | /** User mode: no access, privileged mode: no access. */ |
149 | /** User mode: no access, privileged mode: no access. */ |