Changeset 7f1c620 in mainline for genarch/src/mm/page_pt.c
- Timestamp:
- 2006-07-04T17:17:56Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 0ffa3ef5
- Parents:
- 991779c5
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
genarch/src/mm/page_pt.c
r991779c5 r7f1c620 47 47 #include <memstr.h> 48 48 49 static void pt_mapping_insert(as_t *as, __address page, __addressframe, int flags);50 static void pt_mapping_remove(as_t *as, __addresspage);51 static pte_t *pt_mapping_find(as_t *as, __addresspage);49 static void pt_mapping_insert(as_t *as, uintptr_t page, uintptr_t frame, int flags); 50 static void pt_mapping_remove(as_t *as, uintptr_t page); 51 static pte_t *pt_mapping_find(as_t *as, uintptr_t page); 52 52 53 53 page_mapping_operations_t pt_mapping_operations = { … … 69 69 * @param flags Flags to be used for mapping. 70 70 */ 71 void pt_mapping_insert(as_t *as, __address page, __addressframe, int flags)71 void pt_mapping_insert(as_t *as, uintptr_t page, uintptr_t frame, int flags) 72 72 { 73 73 pte_t *ptl0, *ptl1, *ptl2, *ptl3; 74 74 pte_t *newpt; 75 75 76 ptl0 = (pte_t *) PA2KA(( __address) as->page_table);76 ptl0 = (pte_t *) PA2KA((uintptr_t) as->page_table); 77 77 78 78 if (GET_PTL1_FLAGS(ptl0, PTL0_INDEX(page)) & PAGE_NOT_PRESENT) { 79 79 newpt = (pte_t *)frame_alloc(ONE_FRAME, FRAME_KA); 80 memsetb(( __address)newpt, PAGE_SIZE, 0);80 memsetb((uintptr_t)newpt, PAGE_SIZE, 0); 81 81 SET_PTL1_ADDRESS(ptl0, PTL0_INDEX(page), KA2PA(newpt)); 82 82 SET_PTL1_FLAGS(ptl0, PTL0_INDEX(page), PAGE_PRESENT | PAGE_USER | PAGE_EXEC | PAGE_CACHEABLE | PAGE_WRITE); … … 87 87 if (GET_PTL2_FLAGS(ptl1, PTL1_INDEX(page)) & PAGE_NOT_PRESENT) { 88 88 newpt = (pte_t *)frame_alloc(ONE_FRAME, FRAME_KA); 89 memsetb(( __address)newpt, PAGE_SIZE, 0);89 memsetb((uintptr_t)newpt, PAGE_SIZE, 0); 90 90 SET_PTL2_ADDRESS(ptl1, PTL1_INDEX(page), KA2PA(newpt)); 91 91 SET_PTL2_FLAGS(ptl1, PTL1_INDEX(page), PAGE_PRESENT | PAGE_USER | PAGE_EXEC | PAGE_CACHEABLE | PAGE_WRITE); … … 96 96 if (GET_PTL3_FLAGS(ptl2, PTL2_INDEX(page)) & PAGE_NOT_PRESENT) { 97 97 newpt = (pte_t *)frame_alloc(ONE_FRAME, FRAME_KA); 98 memsetb(( __address)newpt, PAGE_SIZE, 0);98 memsetb((uintptr_t)newpt, PAGE_SIZE, 0); 99 99 SET_PTL3_ADDRESS(ptl2, PTL2_INDEX(page), KA2PA(newpt)); 100 100 SET_PTL3_FLAGS(ptl2, PTL2_INDEX(page), PAGE_PRESENT | PAGE_USER | PAGE_EXEC | PAGE_CACHEABLE | PAGE_WRITE); … … 120 120 * @param page Virtual address of the page to be demapped. 121 121 */ 122 void pt_mapping_remove(as_t *as, __addresspage)122 void pt_mapping_remove(as_t *as, uintptr_t page) 123 123 { 124 124 pte_t *ptl0, *ptl1, *ptl2, *ptl3; … … 130 130 */ 131 131 132 ptl0 = (pte_t *) PA2KA(( __address) as->page_table);132 ptl0 = (pte_t *) PA2KA((uintptr_t) as->page_table); 133 133 134 134 if (GET_PTL1_FLAGS(ptl0, PTL0_INDEX(page)) & PAGE_NOT_PRESENT) … … 148 148 149 149 /* Destroy the mapping. Setting to PAGE_NOT_PRESENT is not sufficient. */ 150 memsetb(( __address) &ptl3[PTL3_INDEX(page)], sizeof(pte_t), 0);150 memsetb((uintptr_t) &ptl3[PTL3_INDEX(page)], sizeof(pte_t), 0); 151 151 152 152 /* … … 166 166 * Release the frame and remove PTL3 pointer from preceding table. 167 167 */ 168 frame_free(KA2PA(( __address) ptl3));168 frame_free(KA2PA((uintptr_t) ptl3)); 169 169 if (PTL2_ENTRIES) 170 memsetb(( __address) &ptl2[PTL2_INDEX(page)], sizeof(pte_t), 0);170 memsetb((uintptr_t) &ptl2[PTL2_INDEX(page)], sizeof(pte_t), 0); 171 171 else if (PTL1_ENTRIES) 172 memsetb(( __address) &ptl1[PTL1_INDEX(page)], sizeof(pte_t), 0);172 memsetb((uintptr_t) &ptl1[PTL1_INDEX(page)], sizeof(pte_t), 0); 173 173 else 174 memsetb(( __address) &ptl0[PTL0_INDEX(page)], sizeof(pte_t), 0);174 memsetb((uintptr_t) &ptl0[PTL0_INDEX(page)], sizeof(pte_t), 0); 175 175 } else { 176 176 /* … … 195 195 * Release the frame and remove PTL2 pointer from preceding table. 196 196 */ 197 frame_free(KA2PA(( __address) ptl2));197 frame_free(KA2PA((uintptr_t) ptl2)); 198 198 if (PTL1_ENTRIES) 199 memsetb(( __address) &ptl1[PTL1_INDEX(page)], sizeof(pte_t), 0);199 memsetb((uintptr_t) &ptl1[PTL1_INDEX(page)], sizeof(pte_t), 0); 200 200 else 201 memsetb(( __address) &ptl0[PTL0_INDEX(page)], sizeof(pte_t), 0);201 memsetb((uintptr_t) &ptl0[PTL0_INDEX(page)], sizeof(pte_t), 0); 202 202 } 203 203 else { … … 224 224 * Release the frame and remove PTL1 pointer from preceding table. 225 225 */ 226 frame_free(KA2PA(( __address) ptl1));227 memsetb(( __address) &ptl0[PTL0_INDEX(page)], sizeof(pte_t), 0);226 frame_free(KA2PA((uintptr_t) ptl1)); 227 memsetb((uintptr_t) &ptl0[PTL0_INDEX(page)], sizeof(pte_t), 0); 228 228 } 229 229 } … … 242 242 * @return NULL if there is no such mapping; entry from PTL3 describing the mapping otherwise. 243 243 */ 244 pte_t *pt_mapping_find(as_t *as, __addresspage)244 pte_t *pt_mapping_find(as_t *as, uintptr_t page) 245 245 { 246 246 pte_t *ptl0, *ptl1, *ptl2, *ptl3; 247 247 248 ptl0 = (pte_t *) PA2KA(( __address) as->page_table);248 ptl0 = (pte_t *) PA2KA((uintptr_t) as->page_table); 249 249 250 250 if (GET_PTL1_FLAGS(ptl0, PTL0_INDEX(page)) & PAGE_NOT_PRESENT)
Note:
See TracChangeset
for help on using the changeset viewer.