Changeset 7a0359b in mainline for kernel/arch/ia64/include
- Timestamp:
- 2010-07-02T15:42:19Z (15 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- bbfdf62
- Parents:
- e3ee9b9
- Location:
- kernel/arch/ia64/include
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/ia64/include/asm.h
re3ee9b9 r7a0359b 40 40 #include <typedefs.h> 41 41 #include <arch/register.h> 42 #include <trace.h> 42 43 43 44 #define IA64_IOSPACE_ADDRESS 0xE001000000000000ULL 44 45 45 static inline void pio_write_8(ioport8_t *port, uint8_t v)46 NO_TRACE static inline void pio_write_8(ioport8_t *port, uint8_t v) 46 47 { 47 48 uintptr_t prt = (uintptr_t) port; … … 56 57 } 57 58 58 static inline void pio_write_16(ioport16_t *port, uint16_t v)59 NO_TRACE static inline void pio_write_16(ioport16_t *port, uint16_t v) 59 60 { 60 61 uintptr_t prt = (uintptr_t) port; … … 69 70 } 70 71 71 static inline void pio_write_32(ioport32_t *port, uint32_t v)72 NO_TRACE static inline void pio_write_32(ioport32_t *port, uint32_t v) 72 73 { 73 74 uintptr_t prt = (uintptr_t) port; … … 82 83 } 83 84 84 static inline uint8_t pio_read_8(ioport8_t *port)85 NO_TRACE static inline uint8_t pio_read_8(ioport8_t *port) 85 86 { 86 87 uintptr_t prt = (uintptr_t) port; … … 95 96 } 96 97 97 static inline uint16_t pio_read_16(ioport16_t *port)98 NO_TRACE static inline uint16_t pio_read_16(ioport16_t *port) 98 99 { 99 100 uintptr_t prt = (uintptr_t) port; … … 108 109 } 109 110 110 static inline uint32_t pio_read_32(ioport32_t *port)111 NO_TRACE static inline uint32_t pio_read_32(ioport32_t *port) 111 112 { 112 113 uintptr_t prt = (uintptr_t) port; … … 126 127 * The stack is assumed to be STACK_SIZE long. 127 128 * The stack must start on page boundary. 128 */ 129 static inline uintptr_t get_stack_base(void) 130 { 131 uint64_t v; 132 133 /* I'm not sure why but this code bad inlines in scheduler, 134 so THE shifts about 16B and causes kernel panic 135 136 asm volatile ( 137 "and %[value] = %[mask], r12" 138 : [value] "=r" (v) 139 : [mask] "r" (~(STACK_SIZE - 1)) 140 ); 141 return v; 142 143 This code have the same meaning but inlines well. 144 */ 129 * 130 */ 131 NO_TRACE static inline uintptr_t get_stack_base(void) 132 { 133 uint64_t v; 134 135 /* 136 * I'm not sure why but this code inlines badly 137 * in scheduler, resulting in THE shifting about 138 * 16B and causing kernel panic. 139 * 140 * asm volatile ( 141 * "and %[value] = %[mask], r12" 142 * : [value] "=r" (v) 143 * : [mask] "r" (~(STACK_SIZE - 1)) 144 * ); 145 * return v; 146 * 147 * The following code has the same semantics but 148 * inlines correctly. 149 * 150 */ 145 151 146 152 asm volatile ( … … 155 161 * 156 162 * @return PSR. 157 */ 158 static inline uint64_t psr_read(void) 163 * 164 */ 165 NO_TRACE static inline uint64_t psr_read(void) 159 166 { 160 167 uint64_t v; … … 171 178 * 172 179 * @return Return location of interruption vector table. 173 */ 174 static inline uint64_t iva_read(void) 180 * 181 */ 182 NO_TRACE static inline uint64_t iva_read(void) 175 183 { 176 184 uint64_t v; … … 187 195 * 188 196 * @param v New location of interruption vector table. 189 */ 190 static inline void iva_write(uint64_t v) 197 * 198 */ 199 NO_TRACE static inline void iva_write(uint64_t v) 191 200 { 192 201 asm volatile ( … … 196 205 } 197 206 198 199 207 /** Read IVR (External Interrupt Vector Register). 200 208 * 201 * @return Highest priority, pending, unmasked external interrupt vector. 202 */ 203 static inline uint64_t ivr_read(void) 209 * @return Highest priority, pending, unmasked external 210 * interrupt vector. 211 * 212 */ 213 NO_TRACE static inline uint64_t ivr_read(void) 204 214 { 205 215 uint64_t v; … … 213 223 } 214 224 215 static inline uint64_t cr64_read(void)225 NO_TRACE static inline uint64_t cr64_read(void) 216 226 { 217 227 uint64_t v; … … 225 235 } 226 236 227 228 237 /** Write ITC (Interval Timer Counter) register. 229 238 * 230 239 * @param v New counter value. 231 */ 232 static inline void itc_write(uint64_t v) 240 * 241 */ 242 NO_TRACE static inline void itc_write(uint64_t v) 233 243 { 234 244 asm volatile ( … … 241 251 * 242 252 * @return Current counter value. 243 */ 244 static inline uint64_t itc_read(void) 253 * 254 */ 255 NO_TRACE static inline uint64_t itc_read(void) 245 256 { 246 257 uint64_t v; … … 257 268 * 258 269 * @param v New match value. 259 */ 260 static inline void itm_write(uint64_t v) 270 * 271 */ 272 NO_TRACE static inline void itm_write(uint64_t v) 261 273 { 262 274 asm volatile ( … … 269 281 * 270 282 * @return Match value. 271 */ 272 static inline uint64_t itm_read(void) 283 * 284 */ 285 NO_TRACE static inline uint64_t itm_read(void) 273 286 { 274 287 uint64_t v; … … 285 298 * 286 299 * @return Current vector and mask bit. 287 */ 288 static inline uint64_t itv_read(void) 300 * 301 */ 302 NO_TRACE static inline uint64_t itv_read(void) 289 303 { 290 304 uint64_t v; … … 301 315 * 302 316 * @param v New vector and mask bit. 303 */ 304 static inline void itv_write(uint64_t v) 317 * 318 */ 319 NO_TRACE static inline void itv_write(uint64_t v) 305 320 { 306 321 asm volatile ( … … 313 328 * 314 329 * @param v This value is ignored. 315 */ 316 static inline void eoi_write(uint64_t v) 330 * 331 */ 332 NO_TRACE static inline void eoi_write(uint64_t v) 317 333 { 318 334 asm volatile ( … … 325 341 * 326 342 * @return Current value of TPR. 327 */ 328 static inline uint64_t tpr_read(void) 343 * 344 */ 345 NO_TRACE static inline uint64_t tpr_read(void) 329 346 { 330 347 uint64_t v; … … 341 358 * 342 359 * @param v New value of TPR. 343 */ 344 static inline void tpr_write(uint64_t v) 360 * 361 */ 362 NO_TRACE static inline void tpr_write(uint64_t v) 345 363 { 346 364 asm volatile ( … … 356 374 * 357 375 * @return Old interrupt priority level. 358 */ 359 static ipl_t interrupts_disable(void) 376 * 377 */ 378 NO_TRACE static ipl_t interrupts_disable(void) 360 379 { 361 380 uint64_t v; … … 377 396 * 378 397 * @return Old interrupt priority level. 379 */ 380 static ipl_t interrupts_enable(void) 398 * 399 */ 400 NO_TRACE static ipl_t interrupts_enable(void) 381 401 { 382 402 uint64_t v; … … 399 419 * 400 420 * @param ipl Saved interrupt priority level. 401 */ 402 static inline void interrupts_restore(ipl_t ipl) 421 * 422 */ 423 NO_TRACE static inline void interrupts_restore(ipl_t ipl) 403 424 { 404 425 if (ipl & PSR_I_MASK) … … 411 432 * 412 433 * @return PSR. 413 */ 414 static inline ipl_t interrupts_read(void) 434 * 435 */ 436 NO_TRACE static inline ipl_t interrupts_read(void) 415 437 { 416 438 return (ipl_t) psr_read(); … … 422 444 * 423 445 */ 424 static inline bool interrupts_disabled(void)446 NO_TRACE static inline bool interrupts_disabled(void) 425 447 { 426 448 return !(psr_read() & PSR_I_MASK); … … 428 450 429 451 /** Disable protection key checking. */ 430 static inline void pk_disable(void)452 NO_TRACE static inline void pk_disable(void) 431 453 { 432 454 asm volatile ( -
kernel/arch/ia64/include/atomic.h
re3ee9b9 r7a0359b 36 36 #define KERN_ia64_ATOMIC_H_ 37 37 38 static inline atomic_count_t test_and_set(atomic_t *val) 38 #include <trace.h> 39 40 NO_TRACE static inline atomic_count_t test_and_set(atomic_t *val) 39 41 { 40 42 atomic_count_t v; … … 50 52 } 51 53 52 static inline void atomic_lock_arch(atomic_t *val)54 NO_TRACE static inline void atomic_lock_arch(atomic_t *val) 53 55 { 54 56 do { … … 57 59 } 58 60 59 static inline void atomic_inc(atomic_t *val)61 NO_TRACE static inline void atomic_inc(atomic_t *val) 60 62 { 61 63 atomic_count_t v; … … 68 70 } 69 71 70 static inline void atomic_dec(atomic_t *val)72 NO_TRACE static inline void atomic_dec(atomic_t *val) 71 73 { 72 74 atomic_count_t v; … … 79 81 } 80 82 81 static inline atomic_count_t atomic_preinc(atomic_t *val)83 NO_TRACE static inline atomic_count_t atomic_preinc(atomic_t *val) 82 84 { 83 85 atomic_count_t v; … … 92 94 } 93 95 94 static inline atomic_count_t atomic_predec(atomic_t *val)96 NO_TRACE static inline atomic_count_t atomic_predec(atomic_t *val) 95 97 { 96 98 atomic_count_t v; … … 105 107 } 106 108 107 static inline atomic_count_t atomic_postinc(atomic_t *val)109 NO_TRACE static inline atomic_count_t atomic_postinc(atomic_t *val) 108 110 { 109 111 atomic_count_t v; … … 118 120 } 119 121 120 static inline atomic_count_t atomic_postdec(atomic_t *val)122 NO_TRACE static inline atomic_count_t atomic_postdec(atomic_t *val) 121 123 { 122 124 atomic_count_t v; -
kernel/arch/ia64/include/cpu.h
re3ee9b9 r7a0359b 40 40 #include <arch/asm.h> 41 41 #include <arch/bootinfo.h> 42 #include <trace.h> 42 43 43 #define FAMILY_ITANIUM 0x7 44 #define FAMILY_ITANIUM2 0x1f 44 #define FAMILY_ITANIUM 0x7 45 #define FAMILY_ITANIUM2 0x1f 46 47 #define CR64_ID_SHIFT 24 48 #define CR64_ID_MASK 0xff000000 49 #define CR64_EID_SHIFT 16 50 #define CR64_EID_MASK 0xff0000 45 51 46 52 typedef struct { … … 55 61 * 56 62 * @return Value of CPUID[n] register. 63 * 57 64 */ 58 static inline uint64_t cpuid_read(int n)65 NO_TRACE static inline uint64_t cpuid_read(int n) 59 66 { 60 67 uint64_t v; 61 68 62 asm volatile ("mov %0 = cpuid[%1]\n" : "=r" (v) : "r" (n)); 69 asm volatile ( 70 "mov %[v] = cpuid[%[r]]\n" 71 : [v] "=r" (v) 72 : [r] "r" (n) 73 ); 63 74 64 75 return v; 65 76 } 66 77 67 68 #define CR64_ID_SHIFT 24 69 #define CR64_ID_MASK 0xff000000 70 #define CR64_EID_SHIFT 16 71 #define CR64_EID_MASK 0xff0000 72 73 static inline int ia64_get_cpu_id(void) 78 NO_TRACE static inline int ia64_get_cpu_id(void) 74 79 { 75 uint64_t cr64 =cr64_read();76 return ((CR64_ID_MASK) &cr64)>>CR64_ID_SHIFT;80 uint64_t cr64 = cr64_read(); 81 return ((CR64_ID_MASK) &cr64) >> CR64_ID_SHIFT; 77 82 } 78 83 79 static inline int ia64_get_cpu_eid(void)84 NO_TRACE static inline int ia64_get_cpu_eid(void) 80 85 { 81 uint64_t cr64 =cr64_read();82 return ((CR64_EID_MASK) &cr64)>>CR64_EID_SHIFT;86 uint64_t cr64 = cr64_read(); 87 return ((CR64_EID_MASK) &cr64) >> CR64_EID_SHIFT; 83 88 } 84 89 85 86 static inline void ipi_send_ipi(int id, int eid, int intno) 90 NO_TRACE static inline void ipi_send_ipi(int id, int eid, int intno) 87 91 { 88 92 (bootinfo->sapic)[2 * (id * 256 + eid)] = intno; 89 93 srlz_d(); 90 91 94 } 92 95 -
kernel/arch/ia64/include/cycle.h
re3ee9b9 r7a0359b 36 36 #define KERN_ia64_CYCLE_H_ 37 37 38 static inline uint64_t get_cycle(void) 38 #include <trace.h> 39 40 NO_TRACE static inline uint64_t get_cycle(void) 39 41 { 40 42 return 0; -
kernel/arch/ia64/include/interrupt.h
re3ee9b9 r7a0359b 38 38 #include <typedefs.h> 39 39 #include <arch/register.h> 40 #include <trace.h> 40 41 41 42 /** ia64 has 256 INRs. */ … … 133 134 } istate_t; 134 135 135 static inline void istate_set_retaddr(istate_t *istate, uintptr_t retaddr) 136 extern void *ivt; 137 138 NO_TRACE static inline void istate_set_retaddr(istate_t *istate, 139 uintptr_t retaddr) 136 140 { 137 141 istate->cr_iip = retaddr; … … 139 143 } 140 144 141 static inline unative_t istate_get_pc(istate_t *istate)145 NO_TRACE static inline unative_t istate_get_pc(istate_t *istate) 142 146 { 143 147 return istate->cr_iip; 144 148 } 145 149 146 static inline unative_t istate_get_fp(istate_t *istate)150 NO_TRACE static inline unative_t istate_get_fp(istate_t *istate) 147 151 { 148 return 0; /* FIXME */ 152 /* FIXME */ 153 154 return 0; 149 155 } 150 156 151 static inline int istate_from_uspace(istate_t *istate)157 NO_TRACE static inline int istate_from_uspace(istate_t *istate) 152 158 { 153 159 return (istate->cr_iip) < 0xe000000000000000ULL; 154 160 } 155 161 156 extern void *ivt; 162 extern void general_exception(uint64_t, istate_t *); 163 extern int break_instruction(uint64_t, istate_t *); 164 extern void universal_handler(uint64_t, istate_t *); 165 extern void nop_handler(uint64_t, istate_t *); 166 extern void external_interrupt(uint64_t, istate_t *); 167 extern void disabled_fp_register(uint64_t, istate_t *); 157 168 158 extern void general_exception(uint64_t vector, istate_t *istate); 159 extern int break_instruction(uint64_t vector, istate_t *istate); 160 extern void universal_handler(uint64_t vector, istate_t *istate); 161 extern void nop_handler(uint64_t vector, istate_t *istate); 162 extern void external_interrupt(uint64_t vector, istate_t *istate); 163 extern void disabled_fp_register(uint64_t vector, istate_t *istate); 164 165 extern void trap_virtual_enable_irqs(uint16_t irqmask); 169 extern void trap_virtual_enable_irqs(uint16_t); 166 170 167 171 #endif -
kernel/arch/ia64/include/mm/page.h
re3ee9b9 r7a0359b 208 208 * @return Address of the head of VHPT collision chain. 209 209 */ 210 static inline uint64_t thash(uint64_t va)210 NO_TRACE static inline uint64_t thash(uint64_t va) 211 211 { 212 212 uint64_t ret; … … 230 230 * @return The unique tag for VPN and RID in the collision chain returned by thash(). 231 231 */ 232 static inline uint64_t ttag(uint64_t va)232 NO_TRACE static inline uint64_t ttag(uint64_t va) 233 233 { 234 234 uint64_t ret; … … 249 249 * @return Current contents of rr[i]. 250 250 */ 251 static inline uint64_t rr_read(size_t i)251 NO_TRACE static inline uint64_t rr_read(size_t i) 252 252 { 253 253 uint64_t ret; … … 269 269 * @param v Value to be written to rr[i]. 270 270 */ 271 static inline void rr_write(size_t i, uint64_t v)271 NO_TRACE static inline void rr_write(size_t i, uint64_t v) 272 272 { 273 273 ASSERT(i < REGION_REGISTERS); … … 284 284 * @return Current value stored in PTA. 285 285 */ 286 static inline uint64_t pta_read(void)286 NO_TRACE static inline uint64_t pta_read(void) 287 287 { 288 288 uint64_t ret; … … 300 300 * @param v New value to be stored in PTA. 301 301 */ 302 static inline void pta_write(uint64_t v)302 NO_TRACE static inline void pta_write(uint64_t v) 303 303 { 304 304 asm volatile (
Note:
See TracChangeset
for help on using the changeset viewer.
