Changes in kernel/arch/ia64/include/mm/page.h [7a0359b:98000fb] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/ia64/include/mm/page.h
r7a0359b r98000fb 28 28 */ 29 29 30 /** @addtogroup ia64mm 30 /** @addtogroup ia64mm 31 31 * @{ 32 32 */ … … 39 39 #include <arch/mm/frame.h> 40 40 41 #define PAGE_SIZE 42 #define PAGE_WIDTH 41 #define PAGE_SIZE FRAME_SIZE 42 #define PAGE_WIDTH FRAME_WIDTH 43 43 44 44 #ifdef KERNEL 45 45 46 46 /** Bit width of the TLB-locked portion of kernel address space. */ 47 #define KERNEL_PAGE_WIDTH 28/* 256M */48 #define IO_PAGE_WIDTH 26/* 64M */49 #define FW_PAGE_WIDTH 28/* 256M */50 51 #define USPACE_IO_PAGE_WIDTH 12/* 4K */47 #define KERNEL_PAGE_WIDTH 28 /* 256M */ 48 #define IO_PAGE_WIDTH 26 /* 64M */ 49 #define FW_PAGE_WIDTH 28 /* 256M */ 50 51 #define USPACE_IO_PAGE_WIDTH 12 /* 4K */ 52 52 53 53 … … 59 59 60 60 /* Firmware area (bellow 4GB in phys mem) */ 61 #define FW_OFFSET 0x00000000F000000061 #define FW_OFFSET 0x00000000F0000000 62 62 /* Legacy IO space */ 63 #define IO_OFFSET 0x000100000000000063 #define IO_OFFSET 0x0001000000000000 64 64 /* Videoram - now mapped to 0 as VGA text mode vram on 0xb8000 */ 65 #define VIO_OFFSET 0x000200000000000066 67 68 #define PPN_SHIFT 69 70 #define VRN_SHIFT 71 #define VRN_MASK (7ULL << VRN_SHIFT)72 #define VA2VRN(va) ((va) >>VRN_SHIFT)65 #define VIO_OFFSET 0x0002000000000000 66 67 68 #define PPN_SHIFT 12 69 70 #define VRN_SHIFT 61 71 #define VRN_MASK (7LL << VRN_SHIFT) 72 #define VA2VRN(va) ((va)>>VRN_SHIFT) 73 73 74 74 #ifdef __ASM__ 75 #define VRN_KERNEL775 #define VRN_KERNEL 7 76 76 #else 77 #define VRN_KERNEL 7ULL77 #define VRN_KERNEL 7LL 78 78 #endif 79 79 80 #define REGION_REGISTERS 81 82 #define KA2PA(x) ((uintptr_t) ((x)- (VRN_KERNEL << VRN_SHIFT)))83 #define PA2KA(x) ((uintptr_t) ((x)+ (VRN_KERNEL << VRN_SHIFT)))84 85 #define VHPT_WIDTH 20/* 1M */86 #define VHPT_SIZE 87 88 #define PTA_BASE_SHIFT 80 #define REGION_REGISTERS 8 81 82 #define KA2PA(x) ((uintptr_t) (x - (VRN_KERNEL << VRN_SHIFT))) 83 #define PA2KA(x) ((uintptr_t) (x + (VRN_KERNEL << VRN_SHIFT))) 84 85 #define VHPT_WIDTH 20 /* 1M */ 86 #define VHPT_SIZE (1 << VHPT_WIDTH) 87 88 #define PTA_BASE_SHIFT 15 89 89 90 90 /** Memory Attributes. */ 91 #define MA_WRITEBACK 0x0092 #define MA_UNCACHEABLE 0x0491 #define MA_WRITEBACK 0x0 92 #define MA_UNCACHEABLE 0x4 93 93 94 94 /** Privilege Levels. Only the most and the least privileged ones are ever used. */ 95 #define PL_KERNEL 0x0096 #define PL_USER 0x0395 #define PL_KERNEL 0x0 96 #define PL_USER 0x3 97 97 98 98 /* Access Rigths. Only certain combinations are used by the kernel. */ 99 #define AR_READ 0x00100 #define AR_EXECUTE 0x01101 #define AR_WRITE 0x0299 #define AR_READ 0x0 100 #define AR_EXECUTE 0x1 101 #define AR_WRITE 0x2 102 102 103 103 #ifndef __ASM__ … … 108 108 #include <arch/barrier.h> 109 109 #include <arch/mm/asid.h> 110 #include < typedefs.h>110 #include <arch/types.h> 111 111 #include <debug.h> 112 112 113 113 struct vhpt_tag_info { 114 114 unsigned long long tag : 63; 115 unsigned intti : 1;115 unsigned ti : 1; 116 116 } __attribute__ ((packed)); 117 117 … … 123 123 struct vhpt_entry_present { 124 124 /* Word 0 */ 125 unsigned intp : 1;126 unsigned int: 1;127 unsigned intma : 3;128 unsigned inta : 1;129 unsigned intd : 1;130 unsigned intpl : 2;131 unsigned intar : 3;125 unsigned p : 1; 126 unsigned : 1; 127 unsigned ma : 3; 128 unsigned a : 1; 129 unsigned d : 1; 130 unsigned pl : 2; 131 unsigned ar : 3; 132 132 unsigned long long ppn : 38; 133 unsigned int: 2;134 unsigned inted : 1;135 unsigned i nt ig1 : 11;133 unsigned : 2; 134 unsigned ed : 1; 135 unsigned ig1 : 11; 136 136 137 137 /* Word 1 */ 138 unsigned int: 2;139 unsigned intps : 6;140 unsigned intkey : 24;141 unsigned int: 32;138 unsigned : 2; 139 unsigned ps : 6; 140 unsigned key : 24; 141 unsigned : 32; 142 142 143 143 /* Word 2 */ 144 144 union vhpt_tag tag; 145 145 146 /* Word 3 */ 146 /* Word 3 */ 147 147 uint64_t ig3 : 64; 148 148 } __attribute__ ((packed)); … … 150 150 struct vhpt_entry_not_present { 151 151 /* Word 0 */ 152 unsigned intp : 1;152 unsigned p : 1; 153 153 unsigned long long ig0 : 52; 154 unsigned i nt ig1 : 11;154 unsigned ig1 : 11; 155 155 156 156 /* Word 1 */ 157 unsigned int: 2;158 unsigned intps : 6;157 unsigned : 2; 158 unsigned ps : 6; 159 159 unsigned long long ig2 : 56; 160 160 161 161 /* Word 2 */ 162 162 union vhpt_tag tag; 163 163 164 /* Word 3 */ 164 /* Word 3 */ 165 165 uint64_t ig3 : 64; 166 166 } __attribute__ ((packed)); 167 167 168 typedef union {168 typedef union vhpt_entry { 169 169 struct vhpt_entry_present present; 170 170 struct vhpt_entry_not_present not_present; … … 173 173 174 174 struct region_register_map { 175 unsigned intve : 1;176 unsigned int: 1;177 unsigned intps : 6;178 unsigned intrid : 24;179 unsigned int: 32;180 } __attribute__ ((packed)); 181 182 typedef union {175 unsigned ve : 1; 176 unsigned : 1; 177 unsigned ps : 6; 178 unsigned rid : 24; 179 unsigned : 32; 180 } __attribute__ ((packed)); 181 182 typedef union region_register { 183 183 struct region_register_map map; 184 184 unsigned long long word; 185 } region_register _t;185 } region_register; 186 186 187 187 struct pta_register_map { 188 unsigned intve : 1;189 unsigned int: 1;190 unsigned intsize : 6;191 unsigned intvf : 1;192 unsigned int: 6;188 unsigned ve : 1; 189 unsigned : 1; 190 unsigned size : 6; 191 unsigned vf : 1; 192 unsigned : 6; 193 193 unsigned long long base : 49; 194 194 } __attribute__ ((packed)); … … 197 197 struct pta_register_map map; 198 198 uint64_t word; 199 } pta_register _t;199 } pta_register; 200 200 201 201 /** Return Translation Hashed Entry Address. … … 208 208 * @return Address of the head of VHPT collision chain. 209 209 */ 210 NO_TRACEstatic inline uint64_t thash(uint64_t va)210 static inline uint64_t thash(uint64_t va) 211 211 { 212 212 uint64_t ret; 213 214 asm volatile ( 215 "thash %[ret] = %[va]\n" 216 : [ret] "=r" (ret) 217 : [va] "r" (va) 218 ); 219 213 214 asm volatile ("thash %0 = %1\n" : "=r" (ret) : "r" (va)); 215 220 216 return ret; 221 217 } … … 230 226 * @return The unique tag for VPN and RID in the collision chain returned by thash(). 231 227 */ 232 NO_TRACEstatic inline uint64_t ttag(uint64_t va)228 static inline uint64_t ttag(uint64_t va) 233 229 { 234 230 uint64_t ret; 235 236 asm volatile ( 237 "ttag %[ret] = %[va]\n" 238 : [ret] "=r" (ret) 239 : [va] "r" (va) 240 ); 241 231 232 asm volatile ("ttag %0 = %1\n" : "=r" (ret) : "r" (va)); 233 242 234 return ret; 243 235 } … … 249 241 * @return Current contents of rr[i]. 250 242 */ 251 NO_TRACEstatic inline uint64_t rr_read(size_t i)243 static inline uint64_t rr_read(size_t i) 252 244 { 253 245 uint64_t ret; 254 255 246 ASSERT(i < REGION_REGISTERS); 256 257 asm volatile ( 258 "mov %[ret] = rr[%[index]]\n" 259 : [ret] "=r" (ret) 260 : [index] "r" (i << VRN_SHIFT) 261 ); 262 247 asm volatile ("mov %0 = rr[%1]\n" : "=r" (ret) : "r" (i << VRN_SHIFT)); 263 248 return ret; 264 249 } … … 269 254 * @param v Value to be written to rr[i]. 270 255 */ 271 NO_TRACEstatic inline void rr_write(size_t i, uint64_t v)256 static inline void rr_write(size_t i, uint64_t v) 272 257 { 273 258 ASSERT(i < REGION_REGISTERS); 274 275 259 asm volatile ( 276 "mov rr[% [index]] = %[value]\n"277 : : [index] "r" (i << VRN_SHIFT),278 [value]"r" (v)260 "mov rr[%0] = %1\n" 261 : 262 : "r" (i << VRN_SHIFT), "r" (v) 279 263 ); 280 264 } 281 265 282 266 /** Read Page Table Register. 283 267 * 284 268 * @return Current value stored in PTA. 285 269 */ 286 NO_TRACEstatic inline uint64_t pta_read(void)270 static inline uint64_t pta_read(void) 287 271 { 288 272 uint64_t ret; 289 273 290 asm volatile ( 291 "mov %[ret] = cr.pta\n" 292 : [ret] "=r" (ret) 293 ); 274 asm volatile ("mov %0 = cr.pta\n" : "=r" (ret)); 294 275 295 276 return ret; … … 300 281 * @param v New value to be stored in PTA. 301 282 */ 302 NO_TRACE static inline void pta_write(uint64_t v) 303 { 304 asm volatile ( 305 "mov cr.pta = %[value]\n" 306 :: [value] "r" (v) 307 ); 283 static inline void pta_write(uint64_t v) 284 { 285 asm volatile ("mov cr.pta = %0\n" : : "r" (v)); 308 286 } 309 287
Note:
See TracChangeset
for help on using the changeset viewer.