Changeset ff9f858 in mainline for src/mm/page.c
- Timestamp:
- 2005-06-30T23:27:02Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- a1a03f9
- Parents:
- 992bbb97
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/mm/page.c
r992bbb97 rff9f858 28 28 29 29 #include <mm/page.h> 30 #include <mm/frame.h> 30 31 #include <arch/mm/page.h> 31 32 #include <arch/types.h> 32 33 #include <typedefs.h> 34 #include <arch/asm.h> 33 35 34 36 void page_init(void) … … 59 61 60 62 } 63 64 /** Map page to frame 65 * 66 * Map virtual address 'page' to physical address 'frame' 67 * using 'flags'. Allocate and setup any missing page tables. 68 * 69 * @param page Virtual address of the page to be mapped. 70 * @param frame Physical address of memory frame to which the mapping is done. 71 * @param flags Flags to be used for mapping. 72 * @param root Explicit PTL0 address. 73 */ 74 void map_page_to_frame(__address page, __address frame, int flags, __address root) 75 { 76 pte_t *ptl0, *ptl1, *ptl2, *ptl3; 77 __address newpt; 78 79 ptl0 = (pte_t *) PA2KA(root ? root : (__address) GET_PTL0_ADDRESS()); 80 81 if (GET_PTL1_FLAGS(ptl0, PTL0_INDEX(page)) & PAGE_NOT_PRESENT) { 82 newpt = frame_alloc(FRAME_KA); 83 memsetb(newpt, PAGE_SIZE, 0); 84 SET_PTL1_ADDRESS(ptl0, PTL0_INDEX(page), KA2PA(newpt)); 85 SET_PTL1_FLAGS(ptl0, PTL0_INDEX(page), PAGE_PRESENT | PAGE_USER); 86 } 87 88 ptl1 = (pte_t *) PA2KA(GET_PTL1_ADDRESS(ptl0, PTL0_INDEX(page))); 89 90 if (GET_PTL2_FLAGS(ptl1, PTL1_INDEX(page)) & PAGE_NOT_PRESENT) { 91 newpt = frame_alloc(FRAME_KA); 92 memsetb(newpt, PAGE_SIZE, 0); 93 SET_PTL2_ADDRESS(ptl1, PTL1_INDEX(page), KA2PA(newpt)); 94 SET_PTL2_FLAGS(ptl1, PTL1_INDEX(page), PAGE_PRESENT | PAGE_USER); 95 } 96 97 ptl2 = (pte_t *) PA2KA(GET_PTL2_ADDRESS(ptl1, PTL1_INDEX(page))); 98 99 if (GET_PTL3_FLAGS(ptl2, PTL2_INDEX(page)) & PAGE_NOT_PRESENT) { 100 newpt = frame_alloc(FRAME_KA); 101 memsetb(newpt, PAGE_SIZE, 0); 102 SET_PTL3_ADDRESS(ptl2, PTL2_INDEX(page), KA2PA(newpt)); 103 SET_PTL3_FLAGS(ptl2, PTL2_INDEX(page), PAGE_PRESENT | PAGE_USER); 104 } 105 106 ptl3 = (pte_t *) PA2KA(GET_PTL3_ADDRESS(ptl2, PTL2_INDEX(page))); 107 108 SET_FRAME_ADDRESS(ptl3, PTL3_INDEX(page), frame); 109 SET_FRAME_FLAGS(ptl3, PTL3_INDEX(page), flags); 110 }
Note:
See TracChangeset
for help on using the changeset viewer.