Changeset db3341e in mainline for arch/amd64/include/mm/page.h
- Timestamp:
- 2005-09-01T14:28:00Z (20 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 623ba26c
- Parents:
- 1dde3b61
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
arch/amd64/include/mm/page.h
r1dde3b61 rdb3341e 39 39 40 40 #ifndef __ASM__ 41 # define KA2PA(x) 42 # define PA2KA(x) 41 # define KA2PA(x) (((__address) (x)) + 0x80000000) 42 # define PA2KA(x) (((__address) (x)) - 0x80000000) 43 43 #else 44 # define KA2PA(x) 45 # define PA2KA(x)((x)) - 0x80000000)44 # define KA2PA(x) ((x) + 0x80000000) 45 //# define PA2KA(x) ((x)) - 0x80000000) 46 46 #endif 47 47 48 #define PTL0_INDEX_ARCH(vaddr) 049 #define PTL1_INDEX_ARCH(vaddr) 050 #define PTL2_INDEX_ARCH(vaddr) 051 #define PTL3_INDEX_ARCH(vaddr) 048 #define PTL0_INDEX_ARCH(vaddr) (((vaddr)>>39)&0x1ff) 49 #define PTL1_INDEX_ARCH(vaddr) (((vaddr)>>30)&0x1ff) 50 #define PTL2_INDEX_ARCH(vaddr) (((vaddr)>>21)&0x1ff) 51 #define PTL3_INDEX_ARCH(vaddr) (((vaddr)>>12)&0x1ff) 52 52 53 #define GET_PTL0_ADDRESS_ARCH() 0 54 #define SET_PTL0_ADDRESS_ARCH(ptl0) 53 #define GET_PTL0_ADDRESS_ARCH() ((pte_t *) read_cr3()) 54 #define GET_PTL1_ADDRESS_ARCH(ptl0, i) ((pte_t *) ((((__u64) ((pte_t *)(ptl0))[(i)].addr_12_31)<<12) | (((__u64) ((pte_t *)(ptl0))[(i)].addr_32_51)<<32 ))) 55 #define GET_PTL2_ADDRESS_ARCH(ptl1, i) ((pte_t *) ((((__u64) ((pte_t *)(ptl1))[(i)].addr_12_31)<<12) | (((__u64) ((pte_t *)(ptl1))[(i)].addr_32_51)<<32 ))) 56 #define GET_PTL3_ADDRESS_ARCH(ptl2, i) ((pte_t *) ((((__u64) ((pte_t *)(ptl2))[(i)].addr_12_31)<<12) | (((__u64) ((pte_t *)(ptl2))[(i)].addr_32_51)<<32 ))) 57 #define GET_FRAME_ADDRESS_ARCH(ptl3, i) ((__address *) ((((__u64) ((pte_t *)(ptl3))[(i)].addr_12_31)<<12) | (((__u64) ((pte_t *)(ptl3))[(i)].addr_32_51)<<32 ))) 55 58 56 #define GET_PTL1_ADDRESS_ARCH(ptl0, i) ((pte_t *) 0) 57 #define GET_PTL2_ADDRESS_ARCH(ptl1, i) ((pte_t *) 0) 58 #define GET_PTL3_ADDRESS_ARCH(ptl2, i) ((pte_t *) 0) 59 #define GET_FRAME_ADDRESS_ARCH(ptl3, i) ((pte_t *) 0) 59 #define SET_PTL0_ADDRESS_ARCH(ptl0) (write_cr3((__address) (ptl0))) 60 #define SET_PTL1_ADDRESS_ARCH(ptl0, i, a) set_pt_addr((pte_t *)(ptl0), (index_t)(i), a) 61 #define SET_PTL2_ADDRESS_ARCH(ptl1, i, a) set_pt_addr((pte_t *)(ptl1), (index_t)(i), a) 62 #define SET_PTL3_ADDRESS_ARCH(ptl2, i, a) set_pt_addr((pte_t *)(ptl2), (index_t)(i), a) 63 #define SET_FRAME_ADDRESS_ARCH(ptl3, i, a) set_pt_addr((pte_t *)(ptl3), (index_t)(i), a) 60 64 61 #define SET_PTL1_ADDRESS_ARCH(ptl0, i, a)62 #define SET_PTL2_ADDRESS_ARCH(ptl1, i, a)63 #define SET_PTL3_ADDRESS_ARCH(ptl2, i, a)64 #define SET_FRAME_ADDRESS_ARCH(ptl3, i, a)65 #define GET_PTL1_FLAGS_ARCH(ptl0, i) get_pt_flags((pte_t *)(ptl0), (index_t)(i)) 66 #define GET_PTL2_FLAGS_ARCH(ptl1, i) get_pt_flags((pte_t *)(ptl1), (index_t)(i)) 67 #define GET_PTL3_FLAGS_ARCH(ptl2, i) get_pt_flags((pte_t *)(ptl2), (index_t)(i)) 68 #define GET_FRAME_FLAGS_ARCH(ptl3, i) get_pt_flags((pte_t *)(ptl3), (index_t)(i)) 65 69 66 #define GET_PTL1_FLAGS_ARCH(ptl0, i) 0 67 #define GET_PTL2_FLAGS_ARCH(ptl1, i) 0 68 #define GET_PTL3_FLAGS_ARCH(ptl2, i) 0 69 #define GET_FRAME_FLAGS_ARCH(ptl3, i) 0 70 71 #define SET_PTL1_FLAGS_ARCH(ptl0, i, x) 72 #define SET_PTL2_FLAGS_ARCH(ptl1, i, x) 73 #define SET_PTL3_FLAGS_ARCH(ptl2, i, x) 74 #define SET_FRAME_FLAGS_ARCH(ptl3, i, x) 70 #define SET_PTL1_FLAGS_ARCH(ptl0, i, x) set_pt_flags((pte_t *)(ptl0), (index_t)(i), (x)) 71 #define SET_PTL2_FLAGS_ARCH(ptl1, i, x) set_pt_flags((pte_t *)(ptl1), (index_t)(i), (x)) 72 #define SET_PTL3_FLAGS_ARCH(ptl2, i, x) set_pt_flags((pte_t *)(ptl2), (index_t)(i), (x)) 73 #define SET_FRAME_FLAGS_ARCH(ptl3, i, x) set_pt_flags((pte_t *)(ptl3), (index_t)(i), (x)) 75 74 76 75 #ifndef __ASM__ 76 77 typedef struct page_specifier pte_t; 78 79 struct page_specifier { 80 unsigned present : 1; 81 unsigned writeable : 1; 82 unsigned uaccessible : 1; 83 unsigned page_write_through : 1; 84 unsigned page_cache_disable : 1; 85 unsigned accessed : 1; 86 unsigned dirty : 1; 87 unsigned unused: 1; 88 unsigned global : 1; 89 unsigned avl : 3; 90 unsigned addr_12_31 : 30; 91 unsigned addr_32_51 : 21; 92 unsigned no_execute : 1; 93 } __attribute__ ((packed)); 94 95 static inline int get_pt_flags(pte_t *pt, index_t i) 96 { 97 pte_t *p = &pt[i]; 98 99 return ( 100 (!p->page_cache_disable)<<PAGE_CACHEABLE_SHIFT | 101 (!p->present)<<PAGE_PRESENT_SHIFT | 102 p->uaccessible<<PAGE_USER_SHIFT | 103 1<<PAGE_READ_SHIFT | 104 p->writeable<<PAGE_WRITE_SHIFT | 105 (!p->no_execute)<<PAGE_EXEC_SHIFT 106 ); 107 } 108 109 static inline void set_pt_addr(pte_t *pt, index_t i, __address a) 110 { 111 pte_t *p = &pt[i]; 112 113 p->addr_12_31 = (a >> 12) & 0xfffff; 114 p->addr_32_51 = a >> 32; 115 } 116 117 static inline void set_pt_flags(pte_t *pt, index_t i, int flags) 118 { 119 pte_t *p = &pt[i]; 120 121 p->page_cache_disable = !(flags & PAGE_CACHEABLE); 122 p->present = !(flags & PAGE_NOT_PRESENT); 123 p->uaccessible = (flags & PAGE_USER) != 0; 124 p->writeable = (flags & PAGE_WRITE) != 0; 125 p->no_execute = (flags & PAGE_EXEC) == 0; 126 } 127 77 128 extern void page_arch_init(void); 78 129 79 typedef __u64 pte_t;80 130 #endif 81 131
Note:
See TracChangeset
for help on using the changeset viewer.