Changeset 48c1ef9 in mainline for arch/ppc64/include/mm/page.h
- Timestamp:
- 2006-05-21T20:38:18Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 040542aa
- Parents:
- bd55bbb
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
arch/ppc64/include/mm/page.h
rbd55bbb r48c1ef9 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) 69 70 #define GET_PTL1_ADDRESS_ARCH(ptl0, i) (((pte_t *) (ptl0))[(i)].pfn << 12) 71 #define GET_PTL2_ADDRESS_ARCH(ptl1, i) (ptl1) 72 #define GET_PTL3_ADDRESS_ARCH(ptl2, i) (ptl2) 73 #define GET_FRAME_ADDRESS_ARCH(ptl3, i) (((pte_t *) (ptl3))[(i)].pfn << 12) 56 74 57 75 #define SET_PTL0_ADDRESS_ARCH(ptl0) 58 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) 63 64 #define SET_PTL1_ADDRESS_ARCH(ptl0, i, a) 76 #define SET_PTL1_ADDRESS_ARCH(ptl0, i, a) (((pte_t *) (ptl0))[(i)].pfn = (a) >> 12) 65 77 #define SET_PTL2_ADDRESS_ARCH(ptl1, i, a) 66 78 #define SET_PTL3_ADDRESS_ARCH(ptl2, i, a) 67 #define SET_FRAME_ADDRESS_ARCH(ptl3, i, a) 79 #define SET_FRAME_ADDRESS_ARCH(ptl3, i, a) (((pte_t *) (ptl3))[(i)].pfn = (a) >> 12) 68 80 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) 081 #define GET_PTL1_FLAGS_ARCH(ptl0, i) get_pt_flags((pte_t *) (ptl0), (index_t) (i)) 82 #define GET_PTL2_FLAGS_ARCH(ptl1, i) PAGE_PRESENT 83 #define GET_PTL3_FLAGS_ARCH(ptl2, i) PAGE_PRESENT 84 #define GET_FRAME_FLAGS_ARCH(ptl3, i) get_pt_flags((pte_t *) (ptl3), (index_t) (i)) 73 85 74 #define SET_PTL1_FLAGS_ARCH(ptl0, i, x) 86 #define SET_PTL1_FLAGS_ARCH(ptl0, i, x) set_pt_flags((pte_t *) (ptl0), (index_t) (i), (x)) 75 87 #define SET_PTL2_FLAGS_ARCH(ptl1, i, x) 76 88 #define SET_PTL3_FLAGS_ARCH(ptl2, i, x) 77 #define SET_FRAME_FLAGS_ARCH(ptl3, i, x) 89 #define SET_FRAME_FLAGS_ARCH(ptl3, i, x) set_pt_flags((pte_t *) (ptl3), (index_t) (i), (x)) 78 90 79 #define PTE_VALID_ARCH(p ) 180 #define PTE_PRESENT_ARCH(p ) 181 #define PTE_GET_FRAME_ARCH(p ) 091 #define PTE_VALID_ARCH(pte) (*((__u32 *) (pte)) != 0) 92 #define PTE_PRESENT_ARCH(pte) ((pte)->p != 0) 93 #define PTE_GET_FRAME_ARCH(pte) ((pte)->pfn << 12) 82 94 83 95 #ifndef __ASM__ … … 87 99 #include <arch/types.h> 88 100 101 static inline int get_pt_flags(pte_t *pt, index_t i) 102 { 103 pte_t *p = &pt[i]; 104 105 return ( 106 (1 << PAGE_CACHEABLE_SHIFT) | 107 ((!p->p) << PAGE_PRESENT_SHIFT) | 108 (1 << PAGE_USER_SHIFT) | 109 (1 << PAGE_READ_SHIFT) | 110 (1 << PAGE_WRITE_SHIFT) | 111 (1 << PAGE_EXEC_SHIFT) | 112 (p->g << PAGE_GLOBAL_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->g = (flags & PAGE_GLOBAL) != 0; 122 p->valid = 1; 123 } 124 89 125 extern void page_arch_init(void); 126 127 #define PHT_BITS 16 128 #define PHT_ORDER 4 129 130 typedef struct { 131 unsigned v : 1; /**< Valid */ 132 unsigned vsid : 24; /**< Virtual Segment ID */ 133 unsigned h : 1; /**< Primary/secondary hash */ 134 unsigned api : 6; /**< Abbreviated Page Index */ 135 unsigned rpn : 20; /**< Real Page Number */ 136 unsigned reserved0 : 3; 137 unsigned r : 1; /**< Reference */ 138 unsigned c : 1; /**< Change */ 139 unsigned wimg : 4; /**< Access control */ 140 unsigned reserved1 : 1; 141 unsigned pp : 2; /**< Page protection */ 142 } phte_t; 143 144 extern void pht_refill(bool data, istate_t *istate); 145 extern void pht_init(void); 90 146 91 147 #endif /* __ASM__ */
Note:
See TracChangeset
for help on using the changeset viewer.