Changeset 613bc54 in mainline for arch/ppc32/include/mm/page.h
- Timestamp:
- 2006-04-22T20:11:23Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- c118940
- Parents:
- c7c0b89b
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
arch/ppc32/include/mm/page.h
rc7c0b89b r613bc54 45 45 #endif 46 46 47 #define PTL0_ENTRIES_ARCH 0 48 #define PTL1_ENTRIES_ARCH 0 49 #define PTL2_ENTRIES_ARCH 0 50 #define PTL3_ENTRIES_ARCH 0 47 /* 48 * Implementation of generic 4-level page table interface, 49 * the hardware Page Hash Table is used as cache. 50 * 51 * Page table layout: 52 * - 32-bit virtual addressess 53 * - Offset is 12 bits => pages are 4K long 54 * - PTL0 has 1024 entries (10 bits) 55 * - PTL1 is not used 56 * - PTL2 is not used 57 * - PLT3 has 1024 entries (10 bits) 58 */ 51 59 52 #define PTL0_INDEX_ARCH(vaddr) 0 53 #define PTL1_INDEX_ARCH(vaddr) 0 54 #define PTL2_INDEX_ARCH(vaddr) 0 55 #define PTL3_INDEX_ARCH(vaddr) 0 60 #define PTL0_ENTRIES_ARCH 1024 61 #define PTL1_ENTRIES_ARCH 0 62 #define PTL2_ENTRIES_ARCH 0 63 #define PTL3_ENTRIES_ARCH 1024 64 65 #define PTL0_INDEX_ARCH(vaddr) (((vaddr) >> 22) & 0x3ff) 66 #define PTL1_INDEX_ARCH(vaddr) 0 67 #define PTL2_INDEX_ARCH(vaddr) 0 68 #define PTL3_INDEX_ARCH(vaddr) (((vaddr) >> 12) & 0x3ff) 56 69 57 70 #define SET_PTL0_ADDRESS_ARCH(ptl0) 58 71 59 #define GET_PTL1_ADDRESS_ARCH(ptl0, i) (( pte_t *) 0)60 #define GET_PTL2_ADDRESS_ARCH(ptl1, i) ( (pte_t *) 0)61 #define GET_PTL3_ADDRESS_ARCH(ptl2, i) ( (pte_t *) 0)62 #define GET_FRAME_ADDRESS_ARCH(ptl3, i) (( pte_t *) 0)72 #define GET_PTL1_ADDRESS_ARCH(ptl0, i) (((pte_t *) (ptl0))[(i)].pfn << 12) 73 #define GET_PTL2_ADDRESS_ARCH(ptl1, i) (ptl1) 74 #define GET_PTL3_ADDRESS_ARCH(ptl2, i) (ptl2) 75 #define GET_FRAME_ADDRESS_ARCH(ptl3, i) (((pte_t *) (ptl3))[(i)].pfn << 12) 63 76 64 #define SET_PTL1_ADDRESS_ARCH(ptl0, i, a) 77 #define SET_PTL1_ADDRESS_ARCH(ptl0, i, a) (((pte_t *) (ptl0))[(i)].pfn = (a) >> 12) 65 78 #define SET_PTL2_ADDRESS_ARCH(ptl1, i, a) 66 79 #define SET_PTL3_ADDRESS_ARCH(ptl2, i, a) 67 #define SET_FRAME_ADDRESS_ARCH(ptl3, i, a) 80 #define SET_FRAME_ADDRESS_ARCH(ptl3, i, a) (((pte_t *) (ptl3))[(i)].pfn = (a) >> 12) 68 81 69 #define GET_PTL1_FLAGS_ARCH(ptl0, i) 070 #define GET_PTL2_FLAGS_ARCH(ptl1, i) 071 #define GET_PTL3_FLAGS_ARCH(ptl2, i) 072 #define GET_FRAME_FLAGS_ARCH(ptl3, i) 082 #define GET_PTL1_FLAGS_ARCH(ptl0, i) get_pt_flags((pte_t *) (ptl0), (index_t) (i)) 83 #define GET_PTL2_FLAGS_ARCH(ptl1, i) PAGE_PRESENT 84 #define GET_PTL3_FLAGS_ARCH(ptl2, i) PAGE_PRESENT 85 #define GET_FRAME_FLAGS_ARCH(ptl3, i) get_pt_flags((pte_t *) (ptl3), (index_t) (i)) 73 86 74 #define SET_PTL1_FLAGS_ARCH(ptl0, i, x) 87 #define SET_PTL1_FLAGS_ARCH(ptl0, i, x) set_pt_flags((pte_t *) (ptl0), (index_t) (i), (x)) 75 88 #define SET_PTL2_FLAGS_ARCH(ptl1, i, x) 76 89 #define SET_PTL3_FLAGS_ARCH(ptl2, i, x) 77 #define SET_FRAME_FLAGS_ARCH(ptl3, i, x) 90 #define SET_FRAME_FLAGS_ARCH(ptl3, i, x) set_pt_flags((pte_t *) (ptl3), (index_t) (i), (x)) 78 91 79 #define PTE_VALID_ARCH(p ) 180 #define PTE_PRESENT_ARCH(p ) 181 #define PTE_GET_FRAME_ARCH(p ) 092 #define PTE_VALID_ARCH(pte) (*((__u32 *) (pte)) != 0) 93 #define PTE_PRESENT_ARCH(pte) ((pte)->p != 0) 94 #define PTE_GET_FRAME_ARCH(pte) ((pte)->pfn << 12) 82 95 83 96 #ifndef __ASM__ … … 86 99 #include <arch/mm/frame.h> 87 100 #include <arch/types.h> 101 102 static inline int get_pt_flags(pte_t *pt, index_t i) 103 { 104 pte_t *p = &pt[i]; 105 106 return ( 107 (1 << PAGE_CACHEABLE_SHIFT) | 108 ((!p->p) << PAGE_PRESENT_SHIFT) | 109 (1 << PAGE_USER_SHIFT) | 110 (1 << PAGE_READ_SHIFT) | 111 (1 << PAGE_WRITE_SHIFT) | 112 (1 << PAGE_EXEC_SHIFT) 113 ); 114 } 115 116 static inline void set_pt_flags(pte_t *pt, index_t i, int flags) 117 { 118 pte_t *p = &pt[i]; 119 120 p->p = !(flags & PAGE_NOT_PRESENT); 121 p->valid = 1; 122 } 88 123 89 124 extern void page_arch_init(void);
Note:
See TracChangeset
for help on using the changeset viewer.