Changeset a1a03f9 in mainline
- Timestamp:
- 2005-07-14T22:10:05Z (20 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 26649537
- Parents:
- ff9f858
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
arch/ia64/include/mm/page.h
rff9f858 ra1a03f9 30 30 #define __ia64_PAGE_H__ 31 31 32 #include <arch/types.h> 32 33 #include <arch/mm/frame.h> 33 34 -
arch/mips/include/mm/frame.h
rff9f858 ra1a03f9 30 30 #define __mips_FRAME_H__ 31 31 32 #define FRAME_SIZE 409632 #define FRAME_SIZE 16384 33 33 34 34 extern void frame_arch_init(void); -
arch/mips/include/mm/page.h
rff9f858 ra1a03f9 30 30 #define __mips_PAGE_H__ 31 31 32 #include <arch/mm/tlb.h> 33 #include <mm/page.h> 32 34 #include <arch/mm/frame.h> 33 35 #include <arch/types.h> 36 #include <arch.h> 34 37 35 38 #define PAGE_SIZE FRAME_SIZE … … 38 41 #define PA2KA(x) ((x) + 0x80000000) 39 42 40 #define page_arch_init() ;41 42 43 /* 43 44 * Implementation of generic 4-level page table interface. 44 * TODO: this is a fake implementation provided to satisfy the compiler 45 * NOTE: this implementation is under construction 46 * 47 * Page table layout: 48 * - 32-bit virtual addresses 49 * - Offset is 14 bits => pages are 16K long 50 * - PTE's use the same format as CP0 EntryLo[01] registers => PTE is therefore 4 bytes long 51 * - PTL0 has 64 entries (6 bits) 52 * - PTL1 is not used 53 * - PTL2 is not used 54 * - PTL3 has 4096 entries (12 bits) 45 55 */ 46 #define PTL0_INDEX_ARCH(vaddr) 0 56 57 #define PTL0_INDEX_ARCH(vaddr) ((vaddr)>>26) 47 58 #define PTL1_INDEX_ARCH(vaddr) 0 48 59 #define PTL2_INDEX_ARCH(vaddr) 0 49 #define PTL3_INDEX_ARCH(vaddr) 060 #define PTL3_INDEX_ARCH(vaddr) (((vaddr)>>14)&0xfff) 50 61 51 #define GET_PTL0_ADDRESS_ARCH() ((pte_t *) 0) 52 #define GET_PTL1_ADDRESS_ARCH(ptl0, i) ((pte_t *) 0) 53 #define GET_PTL2_ADDRESS_ARCH(ptl1, i) ((pte_t *) 0) 54 #define GET_PTL3_ADDRESS_ARCH(ptl2, i) ((pte_t *) 0) 55 #define GET_FRAME_ADDRESS_ARCH(ptl3, i) ((pte_t *) 0) 62 #define GET_PTL0_ADDRESS_ARCH() (PTL0) 63 #define SET_PTL0_ADDRESS_ARCH(ptl0) (PTL0 = (pte_t *)(ptl0)) 56 64 57 #define SET_PTL0_ADDRESS_ARCH(ptl0) 58 #define SET_PTL1_ADDRESS_ARCH(ptl0, i, a) 65 #define GET_PTL1_ADDRESS_ARCH(ptl0, i) (((pte_t *)(ptl0))[(i)].pfn<<14) 66 #define GET_PTL2_ADDRESS_ARCH(ptl1, i) (ptl1) 67 #define GET_PTL3_ADDRESS_ARCH(ptl2, i) (ptl2) 68 #define GET_FRAME_ADDRESS_ARCH(ptl3, i) (((pte_t *)(ptl3))[(i)].pfn<<14) 69 70 #define SET_PTL1_ADDRESS_ARCH(ptl0, i, a) (((pte_t *)(ptl0))[(i)].pfn = (a)>>14) 59 71 #define SET_PTL2_ADDRESS_ARCH(ptl1, i, a) 60 72 #define SET_PTL3_ADDRESS_ARCH(ptl2, i, a) 61 #define SET_FRAME_ADDRESS_ARCH(ptl3, i, a) 73 #define SET_FRAME_ADDRESS_ARCH(ptl3, i, a) (((pte_t *)(ptl3))[(i)].pfn = (a)>>14) 62 74 63 #define GET_PTL1_FLAGS_ARCH(ptl0, i) 064 #define GET_PTL2_FLAGS_ARCH(ptl1, i) 065 #define GET_PTL3_FLAGS_ARCH(ptl2, i) 066 #define GET_FRAME_FLAGS_ARCH(ptl3, i) 075 #define GET_PTL1_FLAGS_ARCH(ptl0, i) get_pt_flags((pte_t *)(ptl0), (index_t)(i)) 76 #define GET_PTL2_FLAGS_ARCH(ptl1, i) PAGE_PRESENT 77 #define GET_PTL3_FLAGS_ARCH(ptl2, i) PAGE_PRESENT 78 #define GET_FRAME_FLAGS_ARCH(ptl3, i) get_pt_flags((pte_t *)(ptl3), (index_t)(i)) 67 79 68 #define SET_PTL1_FLAGS_ARCH(ptl0, i, x) 80 #define SET_PTL1_FLAGS_ARCH(ptl0, i, x) set_pt_flags((pte_t *)(ptl0), (index_t)(i), (x)) 69 81 #define SET_PTL2_FLAGS_ARCH(ptl1, i, x) 70 82 #define SET_PTL3_FLAGS_ARCH(ptl2, i, x) 71 #define SET_FRAME_FLAGS_ARCH(ptl3, i, x) 83 #define SET_FRAME_FLAGS_ARCH(ptl3, i, x) set_pt_flags((pte_t *)(ptl3), (index_t)(i), (x)) 72 84 73 typedef __u32 pte_t; 85 static inline int get_pt_flags(pte_t *pt, index_t i) 86 { 87 pte_t *p = &pt[i]; 88 89 return ( 90 ((p->c>PAGE_UNCACHED)<<PAGE_CACHEABLE_SHIFT) | 91 ((!p->v)<<PAGE_PRESENT_SHIFT) | 92 (1<<PAGE_USER_SHIFT) | 93 (1<<PAGE_READ_SHIFT) | 94 ((p->d)<<PAGE_WRITE_SHIFT) | 95 (1<<PAGE_EXEC_SHIFT) 96 ); 97 98 } 99 100 static inline void set_pt_flags(pte_t *pt, index_t i, int flags) 101 { 102 pte_t *p = &pt[i]; 103 104 p->c = (flags & PAGE_CACHEABLE) ? PAGE_CACHEABLE_EXC_WRITE : PAGE_UNCACHED; 105 p->v = !(flags & PAGE_NOT_PRESENT); 106 p->d = flags & PAGE_WRITE; 107 } 108 109 extern void page_arch_init(void); 110 111 extern pte_t *PTL0; 74 112 75 113 #endif -
arch/mips/include/mm/tlb.h
rff9f858 ra1a03f9 30 30 #define __mips_TLB_H__ 31 31 32 #define PAGE_UNCACHED 2 33 #define PAGE_CACHEABLE_EXC_WRITE 5 34 32 35 struct entry_lo { 33 unsigned g : 1; 34 unsigned v : 1; 35 unsigned d : 1; 36 unsigned c : 3; 37 unsigned pfn : 24; 36 unsigned g : 1; /* global bit */ 37 unsigned v : 1; /* valid bit */ 38 unsigned d : 1; /* dirty/write-protect bit */ 39 unsigned c : 3; /* cache coherency attribute */ 40 unsigned pfn : 24; /* frame number */ 38 41 unsigned : 2; 39 42 } __attribute__ ((packed)); … … 59 62 } __attribute__ ((packed)); 60 63 64 typedef struct entry_lo pte_t; 65 61 66 extern void tlb_refill(void); 62 67 extern void tlb_invalid(void); -
arch/mips/src/mm/page.c
rff9f858 ra1a03f9 28 28 29 29 #include <arch/types.h> 30 #include <arch/mm/page.h> 31 #include <arch/mm/frame.h> 32 #include <mm/frame.h> 30 33 #include <mm/page.h> 34 35 pte_t *PTL0 = NULL; 36 37 void page_arch_init(void) 38 { 39 __address ptl0; 40 41 ptl0 = frame_alloc(FRAME_KA | FRAME_PANIC); 42 memsetb(ptl0, FRAME_SIZE, 0); 43 44 SET_PTL0_ADDRESS(KA2PA(ptl0)); 45 } -
doc/AUTHORS
rff9f858 ra1a03f9 1 Jakub Jermar 2 Jakub Vana 3 Martin Decky 4 Josef Cejka 5 Sergey Bondari 6 Ondrej Palkovsky 1 Jakub Jermar <jermar@itbs.cz> 2 Jakub Vana <jakub.vana@gmail.com> 3 Martin Decky <martin@decky.cz> 4 Josef Cejka <malyzelenyhnus@seznam.cz> 5 Sergey Bondari <bondari@itbs.cz> 6 Ondrej Palkovsky <ondrap@penguin.cz> -
include/mm/page.h
rff9f858 ra1a03f9 77 77 * each descending by one level. 78 78 */ 79 #define GET_PTL0_ADDRESS() GET_PTL0_ADDRESS_ARCH()80 79 #define GET_PTL1_ADDRESS(ptl0, i) GET_PTL1_ADDRESS_ARCH(ptl0, i) 81 80 #define GET_PTL2_ADDRESS(ptl1, i) GET_PTL2_ADDRESS_ARCH(ptl1, i) … … 87 86 * tree of page tables on respective level. 88 87 */ 89 #define SET_PTL0_ADDRESS(ptl0) SET_PTL0_ADDRESS_ARCH(ptl0)90 88 #define SET_PTL1_ADDRESS(ptl0, i, a) SET_PTL1_ADDRESS_ARCH(ptl0, i, a) 91 89 #define SET_PTL2_ADDRESS(ptl1, i, a) SET_PTL2_ADDRESS_ARCH(ptl1, i, a) -
include/mm/vm.h
rff9f858 ra1a03f9 30 30 #define __VM_H__ 31 31 32 #include <arch/mm/page.h> 32 33 #include <arch/mm/vm.h> 33 34 #include <arch/types.h> … … 52 53 53 54 /* 54 * Each vm_area structure describes one continuous area of virtual memory.55 * Each vm_area_t structure describes one continuous area of virtual memory. 55 56 * In the future, it should not be difficult to support shared areas of vm. 56 57 */ … … 65 66 66 67 /* 67 * vm_ mapping_t contains the list of vm_areas of userspace accessible68 * vm_t contains the list of vm_areas of userspace accessible 68 69 * pages for one or more tasks. Ranges of kernel memory pages are not 69 70 * supposed to figure in the list as they are shared by all tasks and … … 73 74 spinlock_t lock; 74 75 link_t vm_area_head; 76 int j; 77 pte_t *ptl0; 75 78 }; 76 79 -
src/mm/vm.c
rff9f858 ra1a03f9 49 49 spinlock_initialize(&m->lock); 50 50 list_initialize(&m->vm_area_head); 51 m->ptl0 = NULL; 51 52 } 52 53
Note:
See TracChangeset
for help on using the changeset viewer.