Changes in kernel/arch/abs32le/include/mm/page.h [50fda24:dc0b964] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/abs32le/include/mm/page.h
r50fda24 rdc0b964 37 37 38 38 #include <arch/mm/frame.h> 39 #include <trace.h> 39 40 40 41 #define PAGE_WIDTH FRAME_WIDTH … … 43 44 #ifdef KERNEL 44 45 45 #ifndef __ASM__ 46 #define KA2PA(x) (((uintptr_t) (x)) - 0x80000000) 47 #define PA2KA(x) (((uintptr_t) (x)) + 0x80000000) 48 #else 49 #define KA2PA(x) ((x) - 0x80000000) 50 #define PA2KA(x) ((x) + 0x80000000) 51 #endif 46 #define KA2PA(x) (((uintptr_t) (x)) - UINT32_C(0x80000000)) 47 #define PA2KA(x) (((uintptr_t) (x)) + UINT32_C(0x80000000)) 52 48 53 49 /* … … 69 65 70 66 /* Macros calculating indices for each level. */ 71 #define PTL0_INDEX_ARCH(vaddr) (((vaddr) >> 22) & 0x3ff )67 #define PTL0_INDEX_ARCH(vaddr) (((vaddr) >> 22) & 0x3ffU) 72 68 #define PTL1_INDEX_ARCH(vaddr) 0 73 69 #define PTL2_INDEX_ARCH(vaddr) 0 74 #define PTL3_INDEX_ARCH(vaddr) (((vaddr) >> 12) & 0x3ff )70 #define PTL3_INDEX_ARCH(vaddr) (((vaddr) >> 12) & 0x3ffU) 75 71 76 72 /* Get PTE address accessors for each level. */ … … 122 118 #define PTE_EXECUTABLE_ARCH(p) 1 123 119 124 #ifndef __ASM__125 126 120 #include <mm/mm.h> 127 121 #include <arch/interrupt.h> 128 #include <arch/types.h>129 122 #include <typedefs.h> 130 131 /* Page fault error codes. */132 133 /** When bit on this position is 0, the page fault was caused by a not-present134 * page.135 */136 #define PFERR_CODE_P (1 << 0)137 138 /** When bit on this position is 1, the page fault was caused by a write. */139 #define PFERR_CODE_RW (1 << 1)140 141 /** When bit on this position is 1, the page fault was caused in user mode. */142 #define PFERR_CODE_US (1 << 2)143 144 /** When bit on this position is 1, a reserved bit was set in page directory. */145 #define PFERR_CODE_RSVD (1 << 3)146 123 147 124 /** Page Table Entry. */ 148 125 typedef struct { 149 unsigned present : 1; 150 unsigned writeable : 1; 151 unsigned uaccessible : 1; 152 unsigned page_write_through : 1; 153 unsigned page_cache_disable : 1; 154 unsigned accessed : 1; 155 unsigned dirty : 1; 156 unsigned pat : 1; 157 unsigned global : 1; 158 unsigned soft_valid : 1; /**< Valid content even if the present bit is not set. */ 159 unsigned avl : 2; 160 unsigned frame_address : 20; 161 } __attribute__ ((packed)) pte_t; 126 unsigned int present : 1; 127 unsigned int writeable : 1; 128 unsigned int uaccessible : 1; 129 unsigned int page_write_through : 1; 130 unsigned int page_cache_disable : 1; 131 unsigned int accessed : 1; 132 unsigned int dirty : 1; 133 unsigned int pat : 1; 134 unsigned int global : 1; 135 136 /** Valid content even if the present bit is not set. */ 137 unsigned int soft_valid : 1; 138 unsigned int avl : 2; 139 unsigned int frame_address : 20; 140 } __attribute__((packed)) pte_t; 162 141 163 static inline unsigned int get_pt_flags(pte_t *pt, size_t i) 142 NO_TRACE static inline unsigned int get_pt_flags(pte_t *pt, size_t i) 143 REQUIRES_ARRAY_MUTABLE(pt, PTL0_ENTRIES_ARCH) 164 144 { 165 145 pte_t *p = &pt[i]; 166 146 167 return ((!p->page_cache_disable) << PAGE_CACHEABLE_SHIFT | 168 (!p->present) << PAGE_PRESENT_SHIFT | 169 p->uaccessible << PAGE_USER_SHIFT | 170 1 << PAGE_READ_SHIFT | 171 p->writeable << PAGE_WRITE_SHIFT | 172 1 << PAGE_EXEC_SHIFT | 173 p->global << PAGE_GLOBAL_SHIFT); 147 return ( 148 ((unsigned int) (!p->page_cache_disable) << PAGE_CACHEABLE_SHIFT) | 149 ((unsigned int) (!p->present) << PAGE_PRESENT_SHIFT) | 150 ((unsigned int) p->uaccessible << PAGE_USER_SHIFT) | 151 (1 << PAGE_READ_SHIFT) | 152 ((unsigned int) p->writeable << PAGE_WRITE_SHIFT) | 153 (1 << PAGE_EXEC_SHIFT) | 154 ((unsigned int) p->global << PAGE_GLOBAL_SHIFT) 155 ); 174 156 } 175 157 176 static inline void set_pt_flags(pte_t *pt, size_t i, int flags) 158 NO_TRACE static inline void set_pt_flags(pte_t *pt, size_t i, int flags) 159 WRITES(ARRAY_RANGE(pt, PTL0_ENTRIES_ARCH)) 160 REQUIRES_ARRAY_MUTABLE(pt, PTL0_ENTRIES_ARCH) 177 161 { 178 162 pte_t *p = &pt[i]; … … 192 176 193 177 extern void page_arch_init(void); 194 extern void page_fault(int n, istate_t *istate); 195 196 #endif /* __ASM__ */ 178 extern void page_fault(unsigned int, istate_t *); 197 179 198 180 #endif /* KERNEL */
Note:
See TracChangeset
for help on using the changeset viewer.