Rev 394 | Rev 501 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 394 | Rev 403 | ||
---|---|---|---|
Line 60... | Line 60... | ||
60 | #define PTL3_INDEX_ARCH(vaddr) (((vaddr)>>14)&0x3fff) |
60 | #define PTL3_INDEX_ARCH(vaddr) (((vaddr)>>14)&0x3fff) |
61 | 61 | ||
62 | #define GET_PTL0_ADDRESS_ARCH() (PTL0) |
62 | #define GET_PTL0_ADDRESS_ARCH() (PTL0) |
63 | #define SET_PTL0_ADDRESS_ARCH(ptl0) (PTL0 = (pte_t *)(ptl0)) |
63 | #define SET_PTL0_ADDRESS_ARCH(ptl0) (PTL0 = (pte_t *)(ptl0)) |
64 | 64 | ||
65 | #define GET_PTL1_ADDRESS_ARCH(ptl0, i) (((pte_t *)(ptl0))[(i)].pfn<<12) |
65 | #define GET_PTL1_ADDRESS_ARCH(ptl0, i) (((pte_t *)(ptl0))[(i)].lo.pfn<<12) |
66 | #define GET_PTL2_ADDRESS_ARCH(ptl1, i) (ptl1) |
66 | #define GET_PTL2_ADDRESS_ARCH(ptl1, i) (ptl1) |
67 | #define GET_PTL3_ADDRESS_ARCH(ptl2, i) (ptl2) |
67 | #define GET_PTL3_ADDRESS_ARCH(ptl2, i) (ptl2) |
68 | #define GET_FRAME_ADDRESS_ARCH(ptl3, i) (((pte_t *)(ptl3))[(i)].pfn<<12) |
68 | #define GET_FRAME_ADDRESS_ARCH(ptl3, i) (((pte_t *)(ptl3))[(i)].lo.pfn<<12) |
69 | 69 | ||
70 | #define SET_PTL1_ADDRESS_ARCH(ptl0, i, a) (((pte_t *)(ptl0))[(i)].pfn = (a)>>12) |
70 | #define SET_PTL1_ADDRESS_ARCH(ptl0, i, a) (((pte_t *)(ptl0))[(i)].lo.pfn = (a)>>12) |
71 | #define SET_PTL2_ADDRESS_ARCH(ptl1, i, a) |
71 | #define SET_PTL2_ADDRESS_ARCH(ptl1, i, a) |
72 | #define SET_PTL3_ADDRESS_ARCH(ptl2, i, a) |
72 | #define SET_PTL3_ADDRESS_ARCH(ptl2, i, a) |
73 | #define SET_FRAME_ADDRESS_ARCH(ptl3, i, a) (((pte_t *)(ptl3))[(i)].pfn = (a)>>12) |
73 | #define SET_FRAME_ADDRESS_ARCH(ptl3, i, a) (((pte_t *)(ptl3))[(i)].lo.pfn = (a)>>12) |
74 | 74 | ||
75 | #define GET_PTL1_FLAGS_ARCH(ptl0, i) get_pt_flags((pte_t *)(ptl0), (index_t)(i)) |
75 | #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 |
76 | #define GET_PTL2_FLAGS_ARCH(ptl1, i) PAGE_PRESENT |
77 | #define GET_PTL3_FLAGS_ARCH(ptl2, 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)) |
78 | #define GET_FRAME_FLAGS_ARCH(ptl3, i) get_pt_flags((pte_t *)(ptl3), (index_t)(i)) |
Line 92... | Line 92... | ||
92 | static inline int get_pt_flags(pte_t *pt, index_t i) |
92 | static inline int get_pt_flags(pte_t *pt, index_t i) |
93 | { |
93 | { |
94 | pte_t *p = &pt[i]; |
94 | pte_t *p = &pt[i]; |
95 | 95 | ||
96 | return ( |
96 | return ( |
97 | ((p->c>PAGE_UNCACHED)<<PAGE_CACHEABLE_SHIFT) | |
97 | ((p->lo.c>PAGE_UNCACHED)<<PAGE_CACHEABLE_SHIFT) | |
98 | ((!p->v)<<PAGE_PRESENT_SHIFT) | |
98 | ((!p->lo.v)<<PAGE_PRESENT_SHIFT) | |
99 | (1<<PAGE_USER_SHIFT) | |
99 | (1<<PAGE_USER_SHIFT) | |
100 | (1<<PAGE_READ_SHIFT) | |
100 | (1<<PAGE_READ_SHIFT) | |
101 | ((p->w)<<PAGE_WRITE_SHIFT) | |
101 | ((p->w)<<PAGE_WRITE_SHIFT) | |
102 | (1<<PAGE_EXEC_SHIFT) |
102 | (1<<PAGE_EXEC_SHIFT) |
103 | ); |
103 | ); |
Line 106... | Line 106... | ||
106 | 106 | ||
107 | static inline void set_pt_flags(pte_t *pt, index_t i, int flags) |
107 | static inline void set_pt_flags(pte_t *pt, index_t i, int flags) |
108 | { |
108 | { |
109 | pte_t *p = &pt[i]; |
109 | pte_t *p = &pt[i]; |
110 | 110 | ||
111 | p->c = (flags & PAGE_CACHEABLE) != 0 ? PAGE_CACHEABLE_EXC_WRITE : PAGE_UNCACHED; |
111 | p->lo.c = (flags & PAGE_CACHEABLE) != 0 ? PAGE_CACHEABLE_EXC_WRITE : PAGE_UNCACHED; |
112 | p->v = !(flags & PAGE_NOT_PRESENT); |
112 | p->lo.v = !(flags & PAGE_NOT_PRESENT); |
113 | p->w = (flags & PAGE_WRITE) != 0; |
113 | p->w = (flags & PAGE_WRITE) != 0; |
114 | } |
114 | } |
115 | 115 | ||
116 | extern void page_arch_init(void); |
116 | extern void page_arch_init(void); |
117 | 117 |