Changeset 7a0359b in mainline for kernel/arch
- 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
- Files:
-
- 62 edited
-
abs32le/include/asm.h (modified) (8 diffs)
-
abs32le/include/atomic.h (modified) (6 diffs)
-
abs32le/include/cycle.h (modified) (1 diff)
-
abs32le/include/interrupt.h (modified) (5 diffs)
-
abs32le/include/mm/page.h (modified) (3 diffs)
-
amd64/include/asm.h (modified) (29 diffs)
-
amd64/include/atomic.h (modified) (7 diffs)
-
amd64/include/cycle.h (modified) (1 diff)
-
amd64/include/interrupt.h (modified) (3 diffs)
-
amd64/include/mm/frame.h (modified) (1 diff)
-
amd64/include/mm/page.h (modified) (4 diffs)
-
arm32/include/asm.h (modified) (3 diffs)
-
arm32/include/atomic.h (modified) (8 diffs)
-
arm32/include/cycle.h (modified) (1 diff)
-
arm32/include/exception.h (modified) (7 diffs)
-
arm32/include/faddr.h (modified) (2 diffs)
-
arm32/include/interrupt.h (modified) (2 diffs)
-
arm32/include/mm/page.h (modified) (9 diffs)
-
arm32/include/mm/tlb.h (modified) (1 diff)
-
ia32/include/asm.h (modified) (24 diffs)
-
ia32/include/atomic.h (modified) (6 diffs)
-
ia32/include/barrier.h (modified) (2 diffs)
-
ia32/include/cycle.h (modified) (2 diffs)
-
ia32/include/interrupt.h (modified) (3 diffs)
-
ia32/include/mm/page.h (modified) (3 diffs)
-
ia64/include/asm.h (modified) (27 diffs)
-
ia64/include/atomic.h (modified) (8 diffs)
-
ia64/include/cpu.h (modified) (2 diffs)
-
ia64/include/cycle.h (modified) (1 diff)
-
ia64/include/interrupt.h (modified) (3 diffs)
-
ia64/include/mm/page.h (modified) (6 diffs)
-
mips32/include/asm.h (modified) (3 diffs)
-
mips32/include/atomic.h (modified) (4 diffs)
-
mips32/include/barrier.h (modified) (2 diffs)
-
mips32/include/cycle.h (modified) (1 diff)
-
mips32/include/exception.h (modified) (4 diffs)
-
mips32/include/faddr.h (modified) (2 diffs)
-
mips32/include/mm/page.h (modified) (3 diffs)
-
mips32/include/mm/tlb.h (modified) (5 diffs)
-
ppc32/include/asm.h (modified) (13 diffs)
-
ppc32/include/atomic.h (modified) (6 diffs)
-
ppc32/include/barrier.h (modified) (3 diffs)
-
ppc32/include/cpu.h (modified) (2 diffs)
-
ppc32/include/cycle.h (modified) (1 diff)
-
ppc32/include/exception.h (modified) (3 diffs)
-
ppc32/include/mm/frame.h (modified) (1 diff)
-
ppc32/include/mm/page.h (modified) (3 diffs)
-
sparc64/include/asm.h (modified) (34 diffs)
-
sparc64/include/atomic.h (modified) (4 diffs)
-
sparc64/include/barrier.h (modified) (4 diffs)
-
sparc64/include/cycle.h (modified) (1 diff)
-
sparc64/include/faddr.h (modified) (2 diffs)
-
sparc64/include/interrupt.h (modified) (1 diff)
-
sparc64/include/mm/as.h (modified) (2 diffs)
-
sparc64/include/mm/frame.h (modified) (2 diffs)
-
sparc64/include/mm/sun4u/tlb.h (modified) (34 diffs)
-
sparc64/include/mm/sun4v/tlb.h (modified) (4 diffs)
-
sparc64/include/mm/tlb.h (modified) (2 diffs)
-
sparc64/include/sun4u/asm.h (modified) (2 diffs)
-
sparc64/include/sun4u/cpu.h (modified) (4 diffs)
-
sparc64/include/sun4v/asm.h (modified) (1 diff)
-
sparc64/include/sun4v/cpu.h (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/abs32le/include/asm.h
re3ee9b9 r7a0359b 38 38 #include <typedefs.h> 39 39 #include <config.h> 40 41 static inline void asm_delay_loop(uint32_t usec) 42 { 43 } 44 45 static inline __attribute__((noreturn)) void cpu_halt(void) 40 #include <trace.h> 41 42 NO_TRACE static inline void asm_delay_loop(uint32_t usec) 43 { 44 } 45 46 NO_TRACE static inline __attribute__((noreturn)) void cpu_halt(void) 46 47 { 47 48 /* On real hardware this should stop processing further … … 53 54 } 54 55 55 static inline void cpu_sleep(void)56 NO_TRACE static inline void cpu_sleep(void) 56 57 { 57 58 /* On real hardware this should put the CPU into low-power … … 61 62 } 62 63 63 static inline void pio_write_8(ioport8_t *port, uint8_t val)64 NO_TRACE static inline void pio_write_8(ioport8_t *port, uint8_t val) 64 65 { 65 66 } … … 73 74 * 74 75 */ 75 static inline void pio_write_16(ioport16_t *port, uint16_t val)76 NO_TRACE static inline void pio_write_16(ioport16_t *port, uint16_t val) 76 77 { 77 78 } … … 85 86 * 86 87 */ 87 static inline void pio_write_32(ioport32_t *port, uint32_t val)88 NO_TRACE static inline void pio_write_32(ioport32_t *port, uint32_t val) 88 89 { 89 90 } … … 97 98 * 98 99 */ 99 static inline uint8_t pio_read_8(ioport8_t *port)100 NO_TRACE static inline uint8_t pio_read_8(ioport8_t *port) 100 101 { 101 102 return 0; … … 110 111 * 111 112 */ 112 static inline uint16_t pio_read_16(ioport16_t *port)113 NO_TRACE static inline uint16_t pio_read_16(ioport16_t *port) 113 114 { 114 115 return 0; … … 123 124 * 124 125 */ 125 static inline uint32_t pio_read_32(ioport32_t *port) 126 { 127 return 0; 128 } 129 130 static inline ipl_t interrupts_enable(void) 131 { 132 /* On real hardware this unconditionally enables preemption 133 by internal and external interrupts. 134 135 The return value stores the previous interrupt level. */ 136 137 return 0; 138 } 139 140 static inline ipl_t interrupts_disable(void) 141 { 142 /* On real hardware this disables preemption by the usual 143 set of internal and external interrupts. This does not 144 apply to special non-maskable interrupts and sychronous 145 CPU exceptions. 146 147 The return value stores the previous interrupt level. */ 148 149 return 0; 150 } 151 152 static inline void interrupts_restore(ipl_t ipl) 153 { 154 /* On real hardware this either enables or disables preemption 155 according to the interrupt level value from the argument. */ 156 } 157 158 static inline ipl_t interrupts_read(void) 159 { 160 /* On real hardware the return value stores the current interrupt 161 level. */ 162 163 return 0; 164 } 165 166 static inline bool interrupts_disabled(void) 167 { 168 /* On real hardware the return value is true iff interrupts are 169 disabled. */ 126 NO_TRACE static inline uint32_t pio_read_32(ioport32_t *port) 127 { 128 return 0; 129 } 130 131 NO_TRACE static inline ipl_t interrupts_enable(void) 132 { 133 /* 134 * On real hardware this unconditionally enables preemption 135 * by internal and external interrupts. 136 * 137 * The return value stores the previous interrupt level. 138 */ 139 140 return 0; 141 } 142 143 NO_TRACE static inline ipl_t interrupts_disable(void) 144 { 145 /* 146 * On real hardware this disables preemption by the usual 147 * set of internal and external interrupts. This does not 148 * apply to special non-maskable interrupts and sychronous 149 * CPU exceptions. 150 * 151 * The return value stores the previous interrupt level. 152 */ 153 154 return 0; 155 } 156 157 NO_TRACE static inline void interrupts_restore(ipl_t ipl) 158 { 159 /* 160 * On real hardware this either enables or disables preemption 161 * according to the interrupt level value from the argument. 162 */ 163 } 164 165 NO_TRACE static inline ipl_t interrupts_read(void) 166 { 167 /* 168 * On real hardware the return value stores the current interrupt 169 * level. 170 */ 171 172 return 0; 173 } 174 175 NO_TRACE static inline bool interrupts_disabled(void) 176 { 177 /* 178 * On real hardware the return value is true iff interrupts are 179 * disabled. 180 */ 181 170 182 return false; 171 183 } 172 184 173 static inline uintptr_t get_stack_base(void) 174 { 175 /* On real hardware this returns the address of the bottom 176 of the current CPU stack. The the_t structure is stored 177 on the bottom of stack and this is used to identify the 178 current CPU, current task, current thread and current 179 address space. */ 185 NO_TRACE static inline uintptr_t get_stack_base(void) 186 { 187 /* 188 * On real hardware this returns the address of the bottom 189 * of the current CPU stack. The the_t structure is stored 190 * on the bottom of stack and this is used to identify the 191 * current CPU, current task, current thread and current 192 * address space. 193 */ 180 194 181 195 return 0; -
kernel/arch/abs32le/include/atomic.h
re3ee9b9 r7a0359b 40 40 #include <preemption.h> 41 41 #include <verify.h> 42 #include <trace.h> 42 43 43 ATOMIC static inline void atomic_inc(atomic_t *val)44 NO_TRACE ATOMIC static inline void atomic_inc(atomic_t *val) 44 45 WRITES(&val->count) 45 46 REQUIRES_EXTENT_MUTABLE(val) … … 52 53 } 53 54 54 ATOMIC static inline void atomic_dec(atomic_t *val)55 NO_TRACE ATOMIC static inline void atomic_dec(atomic_t *val) 55 56 WRITES(&val->count) 56 57 REQUIRES_EXTENT_MUTABLE(val) … … 63 64 } 64 65 65 ATOMIC static inline atomic_count_t atomic_postinc(atomic_t *val)66 NO_TRACE ATOMIC static inline atomic_count_t atomic_postinc(atomic_t *val) 66 67 WRITES(&val->count) 67 68 REQUIRES_EXTENT_MUTABLE(val) … … 78 79 } 79 80 80 ATOMIC static inline atomic_count_t atomic_postdec(atomic_t *val)81 NO_TRACE ATOMIC static inline atomic_count_t atomic_postdec(atomic_t *val) 81 82 WRITES(&val->count) 82 83 REQUIRES_EXTENT_MUTABLE(val) … … 96 97 #define atomic_predec(val) (atomic_postdec(val) - 1) 97 98 98 ATOMIC static inline atomic_count_t test_and_set(atomic_t *val)99 NO_TRACE ATOMIC static inline atomic_count_t test_and_set(atomic_t *val) 99 100 WRITES(&val->count) 100 101 REQUIRES_EXTENT_MUTABLE(val) … … 109 110 } 110 111 111 static inline void atomic_lock_arch(atomic_t *val)112 NO_TRACE static inline void atomic_lock_arch(atomic_t *val) 112 113 WRITES(&val->count) 113 114 REQUIRES_EXTENT_MUTABLE(val) -
kernel/arch/abs32le/include/cycle.h
re3ee9b9 r7a0359b 36 36 #define KERN_abs32le_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/abs32le/include/interrupt.h
re3ee9b9 r7a0359b 38 38 #include <typedefs.h> 39 39 #include <verify.h> 40 #include <trace.h> 40 41 41 42 #define IVT_ITEMS 0 … … 54 55 } istate_t; 55 56 56 static inline int istate_from_uspace(istate_t *istate)57 NO_TRACE static inline int istate_from_uspace(istate_t *istate) 57 58 REQUIRES_EXTENT_MUTABLE(istate) 58 59 { … … 63 64 } 64 65 65 static inline void istate_set_retaddr(istate_t *istate, uintptr_t retaddr) 66 NO_TRACE static inline void istate_set_retaddr(istate_t *istate, 67 uintptr_t retaddr) 66 68 WRITES(&istate->ip) 67 69 { … … 71 73 } 72 74 73 static inline unative_t istate_get_pc(istate_t *istate)75 NO_TRACE static inline unative_t istate_get_pc(istate_t *istate) 74 76 REQUIRES_EXTENT_MUTABLE(istate) 75 77 { … … 79 81 } 80 82 81 static inline unative_t istate_get_fp(istate_t *istate)83 NO_TRACE static inline unative_t istate_get_fp(istate_t *istate) 82 84 REQUIRES_EXTENT_MUTABLE(istate) 83 85 { -
kernel/arch/abs32le/include/mm/page.h
re3ee9b9 r7a0359b 37 37 38 38 #include <arch/mm/frame.h> 39 #include <trace.h> 39 40 40 41 #define PAGE_WIDTH FRAME_WIDTH … … 139 140 } __attribute__((packed)) pte_t; 140 141 141 static inline unsigned int get_pt_flags(pte_t *pt, size_t i)142 NO_TRACE static inline unsigned int get_pt_flags(pte_t *pt, size_t i) 142 143 REQUIRES_ARRAY_MUTABLE(pt, PTL0_ENTRIES_ARCH) 143 144 { … … 155 156 } 156 157 157 static inline void set_pt_flags(pte_t *pt, size_t i, int flags)158 NO_TRACE static inline void set_pt_flags(pte_t *pt, size_t i, int flags) 158 159 WRITES(ARRAY_RANGE(pt, PTL0_ENTRIES_ARCH)) 159 160 REQUIRES_ARRAY_MUTABLE(pt, PTL0_ENTRIES_ARCH) -
kernel/arch/amd64/include/asm.h
re3ee9b9 r7a0359b 39 39 #include <typedefs.h> 40 40 #include <arch/cpu.h> 41 42 extern void asm_delay_loop(uint32_t t); 43 extern void asm_fake_loop(uint32_t t); 41 #include <trace.h> 44 42 45 43 /** Return base address of current stack. … … 50 48 * 51 49 */ 52 static inline uintptr_t get_stack_base(void)50 NO_TRACE static inline uintptr_t get_stack_base(void) 53 51 { 54 52 uintptr_t v; … … 57 55 "andq %%rsp, %[v]\n" 58 56 : [v] "=r" (v) 59 : "0" (~((uint64_t) STACK_SIZE -1))57 : "0" (~((uint64_t) STACK_SIZE - 1)) 60 58 ); 61 59 … … 63 61 } 64 62 65 static inline void cpu_sleep(void) 66 { 67 asm volatile ("hlt\n"); 68 } 69 70 static inline void __attribute__((noreturn)) cpu_halt(void) 63 NO_TRACE static inline void cpu_sleep(void) 64 { 65 asm volatile ( 66 "hlt\n" 67 ); 68 } 69 70 NO_TRACE static inline void __attribute__((noreturn)) cpu_halt(void) 71 71 { 72 72 while (true) { … … 77 77 } 78 78 79 80 79 /** Byte from port 81 80 * … … 86 85 * 87 86 */ 88 static inline uint8_t pio_read_8(ioport8_t *port)87 NO_TRACE static inline uint8_t pio_read_8(ioport8_t *port) 89 88 { 90 89 uint8_t val; … … 107 106 * 108 107 */ 109 static inline uint16_t pio_read_16(ioport16_t *port)108 NO_TRACE static inline uint16_t pio_read_16(ioport16_t *port) 110 109 { 111 110 uint16_t val; … … 128 127 * 129 128 */ 130 static inline uint32_t pio_read_32(ioport32_t *port)129 NO_TRACE static inline uint32_t pio_read_32(ioport32_t *port) 131 130 { 132 131 uint32_t val; … … 149 148 * 150 149 */ 151 static inline void pio_write_8(ioport8_t *port, uint8_t val)150 NO_TRACE static inline void pio_write_8(ioport8_t *port, uint8_t val) 152 151 { 153 152 asm volatile ( 154 153 "outb %b[val], %w[port]\n" 155 :: [val] "a" (val), [port] "d" (port) 154 :: [val] "a" (val), 155 [port] "d" (port) 156 156 ); 157 157 } … … 165 165 * 166 166 */ 167 static inline void pio_write_16(ioport16_t *port, uint16_t val)167 NO_TRACE static inline void pio_write_16(ioport16_t *port, uint16_t val) 168 168 { 169 169 asm volatile ( 170 170 "outw %w[val], %w[port]\n" 171 :: [val] "a" (val), [port] "d" (port) 171 :: [val] "a" (val), 172 [port] "d" (port) 172 173 ); 173 174 } … … 181 182 * 182 183 */ 183 static inline void pio_write_32(ioport32_t *port, uint32_t val)184 NO_TRACE static inline void pio_write_32(ioport32_t *port, uint32_t val) 184 185 { 185 186 asm volatile ( 186 187 "outl %[val], %w[port]\n" 187 :: [val] "a" (val), [port] "d" (port) 188 :: [val] "a" (val), 189 [port] "d" (port) 188 190 ); 189 191 } 190 192 191 193 /** Swap Hidden part of GS register with visible one */ 192 static inline void swapgs(void) 193 { 194 asm volatile("swapgs"); 194 NO_TRACE static inline void swapgs(void) 195 { 196 asm volatile ( 197 "swapgs" 198 ); 195 199 } 196 200 … … 203 207 * 204 208 */ 205 static inline ipl_t interrupts_enable(void) {209 NO_TRACE static inline ipl_t interrupts_enable(void) { 206 210 ipl_t v; 207 211 … … 224 228 * 225 229 */ 226 static inline ipl_t interrupts_disable(void) {230 NO_TRACE static inline ipl_t interrupts_disable(void) { 227 231 ipl_t v; 228 232 … … 244 248 * 245 249 */ 246 static inline void interrupts_restore(ipl_t ipl) {250 NO_TRACE static inline void interrupts_restore(ipl_t ipl) { 247 251 asm volatile ( 248 252 "pushq %[ipl]\n" … … 259 263 * 260 264 */ 261 static inline ipl_t interrupts_read(void) {265 NO_TRACE static inline ipl_t interrupts_read(void) { 262 266 ipl_t v; 263 267 … … 276 280 * 277 281 */ 278 static inline bool interrupts_disabled(void)282 NO_TRACE static inline bool interrupts_disabled(void) 279 283 { 280 284 ipl_t v; … … 289 293 } 290 294 291 292 295 /** Write to MSR */ 293 static inline void write_msr(uint32_t msr, uint64_t value)296 NO_TRACE static inline void write_msr(uint32_t msr, uint64_t value) 294 297 { 295 298 asm volatile ( … … 301 304 } 302 305 303 static inline unative_t read_msr(uint32_t msr)306 NO_TRACE static inline unative_t read_msr(uint32_t msr) 304 307 { 305 308 uint32_t ax, dx; … … 314 317 } 315 318 316 317 319 /** Enable local APIC 318 320 * … … 320 322 * 321 323 */ 322 static inline void enable_l_apic_in_msr()324 NO_TRACE static inline void enable_l_apic_in_msr() 323 325 { 324 326 asm volatile ( … … 328 330 "orl $(0xfee00000),%%eax\n" 329 331 "wrmsr\n" 330 ::: "%eax", "%ecx","%edx"332 ::: "%eax", "%ecx", "%edx" 331 333 ); 332 334 } … … 337 339 * 338 340 */ 339 static inline void invlpg(uintptr_t addr)341 NO_TRACE static inline void invlpg(uintptr_t addr) 340 342 { 341 343 asm volatile ( … … 350 352 * 351 353 */ 352 static inline void gdtr_load(ptr_16_64_t *gdtr_reg)354 NO_TRACE static inline void gdtr_load(ptr_16_64_t *gdtr_reg) 353 355 { 354 356 asm volatile ( … … 363 365 * 364 366 */ 365 static inline void gdtr_store(ptr_16_64_t *gdtr_reg)367 NO_TRACE static inline void gdtr_store(ptr_16_64_t *gdtr_reg) 366 368 { 367 369 asm volatile ( … … 376 378 * 377 379 */ 378 static inline void idtr_load(ptr_16_64_t *idtr_reg)380 NO_TRACE static inline void idtr_load(ptr_16_64_t *idtr_reg) 379 381 { 380 382 asm volatile ( … … 388 390 * 389 391 */ 390 static inline void tr_load(uint16_t sel)392 NO_TRACE static inline void tr_load(uint16_t sel) 391 393 { 392 394 asm volatile ( … … 396 398 } 397 399 398 #define GEN_READ_REG(reg) static inline unative_t read_ ##reg (void) \400 #define GEN_READ_REG(reg) NO_TRACE static inline unative_t read_ ##reg (void) \ 399 401 { \ 400 402 unative_t res; \ … … 406 408 } 407 409 408 #define GEN_WRITE_REG(reg) static inline void write_ ##reg (unative_t regn) \410 #define GEN_WRITE_REG(reg) NO_TRACE static inline void write_ ##reg (unative_t regn) \ 409 411 { \ 410 412 asm volatile ( \ … … 436 438 extern void interrupt_handlers(void); 437 439 440 extern void asm_delay_loop(uint32_t); 441 extern void asm_fake_loop(uint32_t); 442 438 443 #endif 439 444 -
kernel/arch/amd64/include/atomic.h
re3ee9b9 r7a0359b 39 39 #include <arch/barrier.h> 40 40 #include <preemption.h> 41 #include <trace.h> 41 42 42 static inline void atomic_inc(atomic_t *val)43 NO_TRACE static inline void atomic_inc(atomic_t *val) 43 44 { 44 45 #ifdef CONFIG_SMP … … 55 56 } 56 57 57 static inline void atomic_dec(atomic_t *val)58 NO_TRACE static inline void atomic_dec(atomic_t *val) 58 59 { 59 60 #ifdef CONFIG_SMP … … 70 71 } 71 72 72 static inline atomic_count_t atomic_postinc(atomic_t *val)73 NO_TRACE static inline atomic_count_t atomic_postinc(atomic_t *val) 73 74 { 74 75 atomic_count_t r = 1; … … 83 84 } 84 85 85 static inline atomic_count_t atomic_postdec(atomic_t *val)86 NO_TRACE static inline atomic_count_t atomic_postdec(atomic_t *val) 86 87 { 87 88 atomic_count_t r = -1; … … 99 100 #define atomic_predec(val) (atomic_postdec(val) - 1) 100 101 101 static inline atomic_count_t test_and_set(atomic_t *val)102 NO_TRACE static inline atomic_count_t test_and_set(atomic_t *val) 102 103 { 103 104 atomic_count_t v = 1; … … 113 114 114 115 /** amd64 specific fast spinlock */ 115 static inline void atomic_lock_arch(atomic_t *val)116 NO_TRACE static inline void atomic_lock_arch(atomic_t *val) 116 117 { 117 118 atomic_count_t tmp; … … 120 121 asm volatile ( 121 122 "0:\n" 122 " pause\n"123 " mov %[count], %[tmp]\n"124 " testq %[tmp], %[tmp]\n"125 " jnz 0b\n" /* lightweight looping on locked spinlock */123 " pause\n" 124 " mov %[count], %[tmp]\n" 125 " testq %[tmp], %[tmp]\n" 126 " jnz 0b\n" /* lightweight looping on locked spinlock */ 126 127 127 " incq %[tmp]\n" /* now use the atomic operation */128 " xchgq %[count], %[tmp]\n"129 " testq %[tmp], %[tmp]\n"130 " jnz 0b\n"128 " incq %[tmp]\n" /* now use the atomic operation */ 129 " xchgq %[count], %[tmp]\n" 130 " testq %[tmp], %[tmp]\n" 131 " jnz 0b\n" 131 132 : [count] "+m" (val->count), 132 133 [tmp] "=&r" (tmp) -
kernel/arch/amd64/include/cycle.h
re3ee9b9 r7a0359b 36 36 #define KERN_amd64_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 uint32_t lower; -
kernel/arch/amd64/include/interrupt.h
re3ee9b9 r7a0359b 38 38 #include <typedefs.h> 39 39 #include <arch/pm.h> 40 #include <trace.h> 40 41 41 #define IVT_ITEMS IDT_ITEMS42 #define IVT_FIRST 042 #define IVT_ITEMS IDT_ITEMS 43 #define IVT_FIRST 0 43 44 44 #define EXC_COUNT 3245 #define IRQ_COUNT 1645 #define EXC_COUNT 32 46 #define IRQ_COUNT 16 46 47 47 #define IVT_EXCBASE 048 #define IVT_IRQBASE (IVT_EXCBASE + EXC_COUNT)49 #define IVT_FREEBASE (IVT_IRQBASE + IRQ_COUNT)48 #define IVT_EXCBASE 0 49 #define IVT_IRQBASE (IVT_EXCBASE + EXC_COUNT) 50 #define IVT_FREEBASE (IVT_IRQBASE + IRQ_COUNT) 50 51 51 #define IRQ_CLK 052 #define IRQ_KBD 153 #define IRQ_PIC1 254 #define IRQ_PIC_SPUR 755 #define IRQ_MOUSE 1256 #define IRQ_DP8390 952 #define IRQ_CLK 0 53 #define IRQ_KBD 1 54 #define IRQ_PIC1 2 55 #define IRQ_PIC_SPUR 7 56 #define IRQ_MOUSE 12 57 #define IRQ_DP8390 9 57 58 58 /* this one must have four least significant bits set to ones */59 #define VECTOR_APIC_SPUR (IVT_ITEMS - 1)59 /* This one must have four least significant bits set to ones */ 60 #define VECTOR_APIC_SPUR (IVT_ITEMS - 1) 60 61 61 62 #if (((VECTOR_APIC_SPUR + 1) % 16) || VECTOR_APIC_SPUR >= IVT_ITEMS) … … 63 64 #endif 64 65 65 #define VECTOR_DEBUG 166 #define VECTOR_CLK (IVT_IRQBASE + IRQ_CLK)67 #define VECTOR_PIC_SPUR (IVT_IRQBASE + IRQ_PIC_SPUR)68 #define VECTOR_SYSCALL IVT_FREEBASE69 #define VECTOR_TLB_SHOOTDOWN_IPI (IVT_FREEBASE + 1)70 #define VECTOR_DEBUG_IPI (IVT_FREEBASE + 2)66 #define VECTOR_DEBUG 1 67 #define VECTOR_CLK (IVT_IRQBASE + IRQ_CLK) 68 #define VECTOR_PIC_SPUR (IVT_IRQBASE + IRQ_PIC_SPUR) 69 #define VECTOR_SYSCALL IVT_FREEBASE 70 #define VECTOR_TLB_SHOOTDOWN_IPI (IVT_FREEBASE + 1) 71 #define VECTOR_DEBUG_IPI (IVT_FREEBASE + 2) 71 72 72 73 /** This is passed to interrupt handlers */ … … 86 87 uint64_t cs; 87 88 uint64_t rflags; 88 uint64_t stack[]; /* Additional data on stack */89 uint64_t stack[]; /* Additional data on stack */ 89 90 } istate_t; 90 91 91 92 /** Return true if exception happened while in userspace */ 92 static inline int istate_from_uspace(istate_t *istate)93 NO_TRACE static inline int istate_from_uspace(istate_t *istate) 93 94 { 94 95 return !(istate->rip & 0x8000000000000000); 95 96 } 96 97 97 static inline void istate_set_retaddr(istate_t *istate, uintptr_t retaddr) 98 NO_TRACE static inline void istate_set_retaddr(istate_t *istate, 99 uintptr_t retaddr) 98 100 { 99 101 istate->rip = retaddr; 100 102 } 101 static inline unative_t istate_get_pc(istate_t *istate) 103 104 NO_TRACE static inline unative_t istate_get_pc(istate_t *istate) 102 105 { 103 106 return istate->rip; 104 107 } 105 static inline unative_t istate_get_fp(istate_t *istate) 108 109 NO_TRACE static inline unative_t istate_get_fp(istate_t *istate) 106 110 { 107 111 return istate->rbp; 108 112 } 109 113 110 extern void (* disable_irqs_function)(uint16_t irqmask);111 extern void (* enable_irqs_function)(uint16_t irqmask);114 extern void (* disable_irqs_function)(uint16_t); 115 extern void (* enable_irqs_function)(uint16_t); 112 116 extern void (* eoi_function)(void); 113 117 114 118 extern void interrupt_init(void); 115 extern void trap_virtual_enable_irqs(uint16_t irqmask);116 extern void trap_virtual_disable_irqs(uint16_t irqmask);119 extern void trap_virtual_enable_irqs(uint16_t); 120 extern void trap_virtual_disable_irqs(uint16_t); 117 121 118 122 #endif -
kernel/arch/amd64/include/mm/frame.h
re3ee9b9 r7a0359b 36 36 #define KERN_amd64_FRAME_H_ 37 37 38 #ifndef __ASM__39 #include <typedefs.h>40 #endif /* __ASM__ */41 42 38 #define FRAME_WIDTH 12 /* 4K */ 43 39 #define FRAME_SIZE (1 << FRAME_WIDTH) 44 40 41 #ifdef KERNEL 45 42 #ifndef __ASM__ 43 44 #include <typedefs.h> 45 46 46 extern uintptr_t last_frame; 47 47 extern void frame_arch_init(void); 48 48 extern void physmem_print(void); 49 49 50 #endif /* __ASM__ */ 51 #endif /* KERNEL */ 50 52 51 53 #endif -
kernel/arch/amd64/include/mm/page.h
re3ee9b9 r7a0359b 46 46 47 47 #include <arch/mm/frame.h> 48 #include <trace.h> 48 49 49 50 #define PAGE_WIDTH FRAME_WIDTH … … 187 188 } __attribute__ ((packed)) pte_t; 188 189 189 static inline unsigned int get_pt_flags(pte_t *pt, size_t i)190 NO_TRACE static inline unsigned int get_pt_flags(pte_t *pt, size_t i) 190 191 { 191 192 pte_t *p = &pt[i]; … … 200 201 } 201 202 202 static inline void set_pt_addr(pte_t *pt, size_t i, uintptr_t a)203 NO_TRACE static inline void set_pt_addr(pte_t *pt, size_t i, uintptr_t a) 203 204 { 204 205 pte_t *p = &pt[i]; … … 208 209 } 209 210 210 static inline void set_pt_flags(pte_t *pt, size_t i, int flags)211 NO_TRACE static inline void set_pt_flags(pte_t *pt, size_t i, int flags) 211 212 { 212 213 pte_t *p = &pt[i]; -
kernel/arch/arm32/include/asm.h
re3ee9b9 r7a0359b 41 41 #include <config.h> 42 42 #include <arch/interrupt.h> 43 #include <trace.h> 43 44 44 45 /** No such instruction on ARM to sleep CPU. */ 45 static inline void cpu_sleep(void)46 NO_TRACE static inline void cpu_sleep(void) 46 47 { 47 48 } 48 49 49 static inline void pio_write_8(ioport8_t *port, uint8_t v)50 NO_TRACE static inline void pio_write_8(ioport8_t *port, uint8_t v) 50 51 { 51 52 *port = v; 52 53 } 53 54 54 static inline void pio_write_16(ioport16_t *port, uint16_t v)55 NO_TRACE static inline void pio_write_16(ioport16_t *port, uint16_t v) 55 56 { 56 57 *port = v; 57 58 } 58 59 59 static inline void pio_write_32(ioport32_t *port, uint32_t v)60 NO_TRACE static inline void pio_write_32(ioport32_t *port, uint32_t v) 60 61 { 61 62 *port = v; 62 63 } 63 64 64 static inline uint8_t pio_read_8(ioport8_t *port)65 NO_TRACE static inline uint8_t pio_read_8(ioport8_t *port) 65 66 { 66 67 return *port; 67 68 } 68 69 69 static inline uint16_t pio_read_16(ioport16_t *port)70 NO_TRACE static inline uint16_t pio_read_16(ioport16_t *port) 70 71 { 71 72 return *port; 72 73 } 73 74 74 static inline uint32_t pio_read_32(ioport32_t *port)75 NO_TRACE static inline uint32_t pio_read_32(ioport32_t *port) 75 76 { 76 77 return *port; … … 84 85 * 85 86 */ 86 static inline uintptr_t get_stack_base(void)87 NO_TRACE static inline uintptr_t get_stack_base(void) 87 88 { 88 89 uintptr_t v; 90 89 91 asm volatile ( 90 92 "and %[v], sp, %[size]\n" … … 92 94 : [size] "r" (~(STACK_SIZE - 1)) 93 95 ); 96 94 97 return v; 95 98 } -
kernel/arch/arm32/include/atomic.h
re3ee9b9 r7a0359b 38 38 39 39 #include <arch/asm.h> 40 #include <trace.h> 40 41 41 42 /** Atomic addition. … … 47 48 * 48 49 */ 49 static inline atomic_count_t atomic_add(atomic_t *val, atomic_count_t i) 50 NO_TRACE static inline atomic_count_t atomic_add(atomic_t *val, 51 atomic_count_t i) 50 52 { 51 53 /* … … 66 68 * 67 69 */ 68 static inline void atomic_inc(atomic_t *val)70 NO_TRACE static inline void atomic_inc(atomic_t *val) 69 71 { 70 72 atomic_add(val, 1); … … 76 78 * 77 79 */ 78 static inline void atomic_dec(atomic_t *val) {80 NO_TRACE static inline void atomic_dec(atomic_t *val) { 79 81 atomic_add(val, -1); 80 82 } … … 86 88 * 87 89 */ 88 static inline atomic_count_t atomic_preinc(atomic_t *val)90 NO_TRACE static inline atomic_count_t atomic_preinc(atomic_t *val) 89 91 { 90 92 return atomic_add(val, 1); … … 97 99 * 98 100 */ 99 static inline atomic_count_t atomic_predec(atomic_t *val)101 NO_TRACE static inline atomic_count_t atomic_predec(atomic_t *val) 100 102 { 101 103 return atomic_add(val, -1); … … 108 110 * 109 111 */ 110 static inline atomic_count_t atomic_postinc(atomic_t *val)112 NO_TRACE static inline atomic_count_t atomic_postinc(atomic_t *val) 111 113 { 112 114 return atomic_add(val, 1) - 1; … … 119 121 * 120 122 */ 121 static inline atomic_count_t atomic_postdec(atomic_t *val)123 NO_TRACE static inline atomic_count_t atomic_postdec(atomic_t *val) 122 124 { 123 125 return atomic_add(val, -1) + 1; -
kernel/arch/arm32/include/cycle.h
re3ee9b9 r7a0359b 37 37 #define KERN_arm32_CYCLE_H_ 38 38 39 /** Returns count of CPU cycles. 39 #include <trace.h> 40 41 /** Return count of CPU cycles. 40 42 * 41 * No such instruction on ARM to get count of cycles.43 * No such instruction on ARM to get count of cycles. 42 44 * 43 * @return Count of CPU cycles. 45 * @return Count of CPU cycles. 46 * 44 47 */ 45 static inline uint64_t get_cycle(void)48 NO_TRACE static inline uint64_t get_cycle(void) 46 49 { 47 50 return 0; -
kernel/arch/arm32/include/exception.h
re3ee9b9 r7a0359b 40 40 #include <typedefs.h> 41 41 #include <arch/regutils.h> 42 #include <trace.h> 42 43 43 44 /** If defined, forces using of high exception vectors. */ … … 45 46 46 47 #ifdef HIGH_EXCEPTION_VECTORS 47 #define EXC_BASE_ADDRESS 0xffff000048 #define EXC_BASE_ADDRESS 0xffff0000 48 49 #else 49 #define EXC_BASE_ADDRESS 0x050 #define EXC_BASE_ADDRESS 0x0 50 51 #endif 51 52 52 53 /* Exception Vectors */ 53 #define EXC_RESET_VEC (EXC_BASE_ADDRESS + 0x0)54 #define EXC_UNDEF_INSTR_VEC (EXC_BASE_ADDRESS + 0x4)55 #define EXC_SWI_VEC (EXC_BASE_ADDRESS + 0x8)56 #define EXC_PREFETCH_ABORT_VEC (EXC_BASE_ADDRESS + 0xc)57 #define EXC_DATA_ABORT_VEC (EXC_BASE_ADDRESS + 0x10)58 #define EXC_IRQ_VEC (EXC_BASE_ADDRESS + 0x18)59 #define EXC_FIQ_VEC (EXC_BASE_ADDRESS + 0x1c)54 #define EXC_RESET_VEC (EXC_BASE_ADDRESS + 0x0) 55 #define EXC_UNDEF_INSTR_VEC (EXC_BASE_ADDRESS + 0x4) 56 #define EXC_SWI_VEC (EXC_BASE_ADDRESS + 0x8) 57 #define EXC_PREFETCH_ABORT_VEC (EXC_BASE_ADDRESS + 0xc) 58 #define EXC_DATA_ABORT_VEC (EXC_BASE_ADDRESS + 0x10) 59 #define EXC_IRQ_VEC (EXC_BASE_ADDRESS + 0x18) 60 #define EXC_FIQ_VEC (EXC_BASE_ADDRESS + 0x1c) 60 61 61 62 /* Exception numbers */ … … 68 69 #define EXC_FIQ 6 69 70 70 71 71 /** Kernel stack pointer. 72 72 * 73 73 * It is set when thread switches to user mode, 74 74 * and then used for exception handling. 75 * 75 76 */ 76 77 extern uintptr_t supervisor_sp; 77 78 78 79 79 /** Temporary exception stack pointer. … … 81 81 * Temporary stack is used in exceptions handling routines 82 82 * before switching to thread's kernel stack. 83 * 83 84 */ 84 85 extern uintptr_t exc_stack; 85 86 86 87 87 /** Struct representing CPU state saved when an exception occurs. */ … … 90 90 uint32_t sp; 91 91 uint32_t lr; 92 92 93 93 uint32_t r0; 94 94 uint32_t r1; … … 104 104 uint32_t fp; 105 105 uint32_t r12; 106 106 107 107 uint32_t pc; 108 108 } istate_t; 109 109 110 111 /** Sets Program Counter member of given istate structure. 110 /** Set Program Counter member of given istate structure. 112 111 * 113 * @param istate istate structure112 * @param istate istate structure 114 113 * @param retaddr new value of istate's PC member 114 * 115 115 */ 116 static inline void istate_set_retaddr(istate_t *istate, uintptr_t retaddr) 116 NO_TRACE static inline void istate_set_retaddr(istate_t *istate, 117 uintptr_t retaddr) 117 118 { 118 istate->pc = retaddr;119 istate->pc = retaddr; 119 120 } 120 121 121 122 /** Returns true if exception happened while in userspace. */ 123 static inline int istate_from_uspace(istate_t *istate) 122 /** Return true if exception happened while in userspace. */ 123 NO_TRACE static inline int istate_from_uspace(istate_t *istate) 124 124 { 125 return (istate->spsr & STATUS_REG_MODE_MASK) == USER_MODE;125 return (istate->spsr & STATUS_REG_MODE_MASK) == USER_MODE; 126 126 } 127 127 128 129 /** Returns Program Counter member of given istate structure. */ 130 static inline unative_t istate_get_pc(istate_t *istate) 128 /** Return Program Counter member of given istate structure. */ 129 NO_TRACE static inline unative_t istate_get_pc(istate_t *istate) 131 130 { 132 return istate->pc;131 return istate->pc; 133 132 } 134 133 135 static inline unative_t istate_get_fp(istate_t *istate)134 NO_TRACE static inline unative_t istate_get_fp(istate_t *istate) 136 135 { 137 136 return istate->fp; 138 137 } 139 140 138 141 139 extern void install_exception_handlers(void); … … 149 147 extern void swi_exception_entry(void); 150 148 151 152 149 #endif 153 150 -
kernel/arch/arm32/include/faddr.h
re3ee9b9 r7a0359b 27 27 */ 28 28 29 /** @addtogroup arm32 29 /** @addtogroup arm32 30 30 * @{ 31 31 */ … … 42 42 * 43 43 * @param fptr Function pointer. 44 * 44 45 */ 45 #define FADDR(fptr) ((uintptr_t) (fptr))46 #define FADDR(fptr) ((uintptr_t) (fptr)) 46 47 47 48 #endif -
kernel/arch/arm32/include/interrupt.h
re3ee9b9 r7a0359b 41 41 42 42 /** Initial size of exception dispatch table. */ 43 #define IVT_ITEMS 643 #define IVT_ITEMS 6 44 44 45 45 /** Index of the first item in exception dispatch table. */ 46 #define IVT_FIRST 0 47 46 #define IVT_FIRST 0 48 47 49 48 extern void interrupt_init(void); … … 54 53 extern bool interrupts_disabled(void); 55 54 56 57 55 #endif 58 56 -
kernel/arch/arm32/include/mm/page.h
re3ee9b9 r7a0359b 27 27 */ 28 28 29 /** @addtogroup arm32mm 29 /** @addtogroup arm32mm 30 30 * @{ 31 31 */ … … 40 40 #include <mm/mm.h> 41 41 #include <arch/exception.h> 42 #include <trace.h> 42 43 43 44 #define PAGE_WIDTH FRAME_WIDTH … … 192 193 /** Sets the address of level 0 page table. 193 194 * 194 * @param pt Pointer to the page table to set. 195 */ 196 static inline void set_ptl0_addr(pte_t *pt) 195 * @param pt Pointer to the page table to set. 196 * 197 */ 198 NO_TRACE static inline void set_ptl0_addr(pte_t *pt) 197 199 { 198 200 asm volatile ( … … 205 207 /** Returns level 0 page table entry flags. 206 208 * 207 * @param pt Level 0 page table. 208 * @param i Index of the entry to return. 209 */ 210 static inline int get_pt_level0_flags(pte_t *pt, size_t i) 209 * @param pt Level 0 page table. 210 * @param i Index of the entry to return. 211 * 212 */ 213 NO_TRACE static inline int get_pt_level0_flags(pte_t *pt, size_t i) 211 214 { 212 215 pte_level0_t *p = &pt[i].l0; 213 216 int np = (p->descriptor_type == PTE_DESCRIPTOR_NOT_PRESENT); 214 217 215 218 return (np << PAGE_PRESENT_SHIFT) | (1 << PAGE_USER_SHIFT) | 216 219 (1 << PAGE_READ_SHIFT) | (1 << PAGE_WRITE_SHIFT) | … … 220 223 /** Returns level 1 page table entry flags. 221 224 * 222 * @param pt Level 1 page table. 223 * @param i Index of the entry to return. 224 */ 225 static inline int get_pt_level1_flags(pte_t *pt, size_t i) 225 * @param pt Level 1 page table. 226 * @param i Index of the entry to return. 227 * 228 */ 229 NO_TRACE static inline int get_pt_level1_flags(pte_t *pt, size_t i) 226 230 { 227 231 pte_level1_t *p = &pt[i].l1; 228 232 229 233 int dt = p->descriptor_type; 230 234 int ap = p->access_permission_0; 231 235 232 236 return ((dt == PTE_DESCRIPTOR_NOT_PRESENT) << PAGE_PRESENT_SHIFT) | 233 237 ((ap == PTE_AP_USER_RO_KERNEL_RW) << PAGE_READ_SHIFT) | … … 241 245 } 242 246 243 244 247 /** Sets flags of level 0 page table entry. 245 248 * 246 * @param pt level 0 page table 247 * @param i index of the entry to be changed 248 * @param flags new flags 249 */ 250 static inline void set_pt_level0_flags(pte_t *pt, size_t i, int flags) 249 * @param pt level 0 page table 250 * @param i index of the entry to be changed 251 * @param flags new flags 252 * 253 */ 254 NO_TRACE static inline void set_pt_level0_flags(pte_t *pt, size_t i, int flags) 251 255 { 252 256 pte_level0_t *p = &pt[i].l0; 253 257 254 258 if (flags & PAGE_NOT_PRESENT) { 255 259 p->descriptor_type = PTE_DESCRIPTOR_NOT_PRESENT; … … 262 266 p->descriptor_type = PTE_DESCRIPTOR_COARSE_TABLE; 263 267 p->should_be_zero = 0; 264 }268 } 265 269 } 266 270 … … 268 272 /** Sets flags of level 1 page table entry. 269 273 * 270 * We use same access rights for the whole page. When page is not preset we 271 * store 1 in acess_rigts_3 so that at least one bit is 1 (to mark correct 272 * page entry, see #PAGE_VALID_ARCH). 273 * 274 * @param pt Level 1 page table. 275 * @param i Index of the entry to be changed. 276 * @param flags New flags. 277 */ 278 static inline void set_pt_level1_flags(pte_t *pt, size_t i, int flags) 274 * We use same access rights for the whole page. When page 275 * is not preset we store 1 in acess_rigts_3 so that at least 276 * one bit is 1 (to mark correct page entry, see #PAGE_VALID_ARCH). 277 * 278 * @param pt Level 1 page table. 279 * @param i Index of the entry to be changed. 280 * @param flags New flags. 281 * 282 */ 283 NO_TRACE static inline void set_pt_level1_flags(pte_t *pt, size_t i, int flags) 279 284 { 280 285 pte_level1_t *p = &pt[i].l1; … … 287 292 p->access_permission_3 = p->access_permission_0; 288 293 } 289 294 290 295 p->cacheable = p->bufferable = (flags & PAGE_CACHEABLE) != 0; 291 296 292 297 /* default access permission */ 293 298 p->access_permission_0 = p->access_permission_1 = 294 299 p->access_permission_2 = p->access_permission_3 = 295 300 PTE_AP_USER_NO_KERNEL_RW; 296 301 297 302 if (flags & PAGE_USER) { 298 303 if (flags & PAGE_READ) { -
kernel/arch/arm32/include/mm/tlb.h
re3ee9b9 r7a0359b 27 27 */ 28 28 29 /** @addtogroup arm32mm 29 /** @addtogroup arm32mm 30 30 * @{ 31 31 */ -
kernel/arch/ia32/include/asm.h
re3ee9b9 r7a0359b 41 41 #include <typedefs.h> 42 42 #include <config.h> 43 #include <trace.h> 43 44 44 45 extern uint32_t interrupt_handler_size; 45 46 46 extern void paging_on(void);47 48 extern void interrupt_handlers(void);49 50 extern void enable_l_apic_in_msr(void);51 52 53 extern void asm_delay_loop(uint32_t t);54 extern void asm_fake_loop(uint32_t t);55 56 57 47 /** Halt CPU 58 48 * … … 60 50 * 61 51 */ 62 static inline __attribute__((noreturn)) void cpu_halt(void)52 NO_TRACE static inline __attribute__((noreturn)) void cpu_halt(void) 63 53 { 64 54 while (true) { … … 69 59 } 70 60 71 static inline void cpu_sleep(void) 72 { 73 asm volatile ("hlt\n"); 74 } 75 76 #define GEN_READ_REG(reg) static inline unative_t read_ ##reg (void) \ 61 NO_TRACE static inline void cpu_sleep(void) 62 { 63 asm volatile ( 64 "hlt\n" 65 ); 66 } 67 68 #define GEN_READ_REG(reg) NO_TRACE static inline unative_t read_ ##reg (void) \ 77 69 { \ 78 70 unative_t res; \ … … 84 76 } 85 77 86 #define GEN_WRITE_REG(reg) static inline void write_ ##reg (unative_t regn) \78 #define GEN_WRITE_REG(reg) NO_TRACE static inline void write_ ##reg (unative_t regn) \ 87 79 { \ 88 80 asm volatile ( \ … … 119 111 * 120 112 */ 121 static inline void pio_write_8(ioport8_t *port, uint8_t val)113 NO_TRACE static inline void pio_write_8(ioport8_t *port, uint8_t val) 122 114 { 123 115 asm volatile ( 124 116 "outb %b[val], %w[port]\n" 125 :: [val] "a" (val), [port] "d" (port) 117 :: [val] "a" (val), 118 [port] "d" (port) 126 119 ); 127 120 } … … 135 128 * 136 129 */ 137 static inline void pio_write_16(ioport16_t *port, uint16_t val)130 NO_TRACE static inline void pio_write_16(ioport16_t *port, uint16_t val) 138 131 { 139 132 asm volatile ( 140 133 "outw %w[val], %w[port]\n" 141 :: [val] "a" (val), [port] "d" (port) 134 :: [val] "a" (val), 135 [port] "d" (port) 142 136 ); 143 137 } … … 151 145 * 152 146 */ 153 static inline void pio_write_32(ioport32_t *port, uint32_t val)147 NO_TRACE static inline void pio_write_32(ioport32_t *port, uint32_t val) 154 148 { 155 149 asm volatile ( 156 150 "outl %[val], %w[port]\n" 157 :: [val] "a" (val), [port] "d" (port) 151 :: [val] "a" (val), 152 [port] "d" (port) 158 153 ); 159 154 } … … 167 162 * 168 163 */ 169 static inline uint8_t pio_read_8(ioport8_t *port)164 NO_TRACE static inline uint8_t pio_read_8(ioport8_t *port) 170 165 { 171 166 uint8_t val; … … 188 183 * 189 184 */ 190 static inline uint16_t pio_read_16(ioport16_t *port)185 NO_TRACE static inline uint16_t pio_read_16(ioport16_t *port) 191 186 { 192 187 uint16_t val; … … 209 204 * 210 205 */ 211 static inline uint32_t pio_read_32(ioport32_t *port)206 NO_TRACE static inline uint32_t pio_read_32(ioport32_t *port) 212 207 { 213 208 uint32_t val; … … 230 225 * 231 226 */ 232 static inline ipl_t interrupts_enable(void)227 NO_TRACE static inline ipl_t interrupts_enable(void) 233 228 { 234 229 ipl_t v; … … 252 247 * 253 248 */ 254 static inline ipl_t interrupts_disable(void)249 NO_TRACE static inline ipl_t interrupts_disable(void) 255 250 { 256 251 ipl_t v; … … 273 268 * 274 269 */ 275 static inline void interrupts_restore(ipl_t ipl)270 NO_TRACE static inline void interrupts_restore(ipl_t ipl) 276 271 { 277 272 asm volatile ( … … 287 282 * 288 283 */ 289 static inline ipl_t interrupts_read(void)284 NO_TRACE static inline ipl_t interrupts_read(void) 290 285 { 291 286 ipl_t v; … … 305 300 * 306 301 */ 307 static inline bool interrupts_disabled(void)302 NO_TRACE static inline bool interrupts_disabled(void) 308 303 { 309 304 ipl_t v; … … 319 314 320 315 /** Write to MSR */ 321 static inline void write_msr(uint32_t msr, uint64_t value)316 NO_TRACE static inline void write_msr(uint32_t msr, uint64_t value) 322 317 { 323 318 asm volatile ( 324 319 "wrmsr" 325 :: "c" (msr), "a" ((uint32_t) (value)), 320 :: "c" (msr), 321 "a" ((uint32_t) (value)), 326 322 "d" ((uint32_t) (value >> 32)) 327 323 ); 328 324 } 329 325 330 static inline uint64_t read_msr(uint32_t msr)326 NO_TRACE static inline uint64_t read_msr(uint32_t msr) 331 327 { 332 328 uint32_t ax, dx; … … 334 330 asm volatile ( 335 331 "rdmsr" 336 : "=a" (ax), "=d" (dx) 332 : "=a" (ax), 333 "=d" (dx) 337 334 : "c" (msr) 338 335 ); … … 349 346 * 350 347 */ 351 static inline uintptr_t get_stack_base(void)348 NO_TRACE static inline uintptr_t get_stack_base(void) 352 349 { 353 350 uintptr_t v; … … 367 364 * 368 365 */ 369 static inline void invlpg(uintptr_t addr)366 NO_TRACE static inline void invlpg(uintptr_t addr) 370 367 { 371 368 asm volatile ( … … 380 377 * 381 378 */ 382 static inline void gdtr_load(ptr_16_32_t *gdtr_reg)379 NO_TRACE static inline void gdtr_load(ptr_16_32_t *gdtr_reg) 383 380 { 384 381 asm volatile ( … … 393 390 * 394 391 */ 395 static inline void gdtr_store(ptr_16_32_t *gdtr_reg)392 NO_TRACE static inline void gdtr_store(ptr_16_32_t *gdtr_reg) 396 393 { 397 394 asm volatile ( … … 406 403 * 407 404 */ 408 static inline void idtr_load(ptr_16_32_t *idtr_reg)405 NO_TRACE static inline void idtr_load(ptr_16_32_t *idtr_reg) 409 406 { 410 407 asm volatile ( … … 419 416 * 420 417 */ 421 static inline void tr_load(uint16_t sel)418 NO_TRACE static inline void tr_load(uint16_t sel) 422 419 { 423 420 asm volatile ( … … 427 424 } 428 425 426 extern void paging_on(void); 427 extern void interrupt_handlers(void); 428 extern void enable_l_apic_in_msr(void); 429 430 extern void asm_delay_loop(uint32_t); 431 extern void asm_fake_loop(uint32_t); 432 429 433 #endif 430 434 -
kernel/arch/ia32/include/atomic.h
re3ee9b9 r7a0359b 39 39 #include <arch/barrier.h> 40 40 #include <preemption.h> 41 #include <trace.h> 41 42 42 static inline void atomic_inc(atomic_t *val)43 NO_TRACE static inline void atomic_inc(atomic_t *val) 43 44 { 44 45 #ifdef CONFIG_SMP … … 55 56 } 56 57 57 static inline void atomic_dec(atomic_t *val)58 NO_TRACE static inline void atomic_dec(atomic_t *val) 58 59 { 59 60 #ifdef CONFIG_SMP … … 70 71 } 71 72 72 static inline atomic_count_t atomic_postinc(atomic_t *val)73 NO_TRACE static inline atomic_count_t atomic_postinc(atomic_t *val) 73 74 { 74 75 atomic_count_t r = 1; … … 83 84 } 84 85 85 static inline atomic_count_t atomic_postdec(atomic_t *val)86 NO_TRACE static inline atomic_count_t atomic_postdec(atomic_t *val) 86 87 { 87 88 atomic_count_t r = -1; … … 99 100 #define atomic_predec(val) (atomic_postdec(val) - 1) 100 101 101 static inline atomic_count_t test_and_set(atomic_t *val)102 NO_TRACE static inline atomic_count_t test_and_set(atomic_t *val) 102 103 { 103 104 atomic_count_t v = 1; … … 113 114 114 115 /** ia32 specific fast spinlock */ 115 static inline void atomic_lock_arch(atomic_t *val)116 NO_TRACE static inline void atomic_lock_arch(atomic_t *val) 116 117 { 117 118 atomic_count_t tmp; -
kernel/arch/ia32/include/barrier.h
re3ee9b9 r7a0359b 36 36 #define KERN_ia32_BARRIER_H_ 37 37 38 #include <trace.h> 39 38 40 /* 39 41 * NOTE: … … 50 52 #define CS_LEAVE_BARRIER() asm volatile ("" ::: "memory") 51 53 52 static inline void cpuid_serialization(void)54 NO_TRACE static inline void cpuid_serialization(void) 53 55 { 54 56 asm volatile ( -
kernel/arch/ia32/include/cycle.h
re3ee9b9 r7a0359b 27 27 */ 28 28 29 /** @addtogroup ia32 29 /** @addtogroup ia32 30 30 * @{ 31 31 */ … … 36 36 #define KERN_ia32_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 uint64_t v; -
kernel/arch/ia32/include/interrupt.h
re3ee9b9 r7a0359b 38 38 #include <typedefs.h> 39 39 #include <arch/pm.h> 40 #include <trace.h> 40 41 41 #define IVT_ITEMS IDT_ITEMS42 #define IVT_FIRST 042 #define IVT_ITEMS IDT_ITEMS 43 #define IVT_FIRST 0 43 44 44 #define EXC_COUNT 3245 #define IRQ_COUNT 1645 #define EXC_COUNT 32 46 #define IRQ_COUNT 16 46 47 47 #define IVT_EXCBASE 048 #define IVT_IRQBASE (IVT_EXCBASE + EXC_COUNT)49 #define IVT_FREEBASE (IVT_IRQBASE + IRQ_COUNT)48 #define IVT_EXCBASE 0 49 #define IVT_IRQBASE (IVT_EXCBASE + EXC_COUNT) 50 #define IVT_FREEBASE (IVT_IRQBASE + IRQ_COUNT) 50 51 51 #define IRQ_CLK 052 #define IRQ_KBD 153 #define IRQ_PIC1 254 #define IRQ_PIC_SPUR 755 #define IRQ_MOUSE 1256 #define IRQ_DP8390 952 #define IRQ_CLK 0 53 #define IRQ_KBD 1 54 #define IRQ_PIC1 2 55 #define IRQ_PIC_SPUR 7 56 #define IRQ_MOUSE 12 57 #define IRQ_DP8390 9 57 58 58 /* this one must have four least significant bits set to ones */59 #define VECTOR_APIC_SPUR (IVT_ITEMS - 1)59 /* This one must have four least significant bits set to ones */ 60 #define VECTOR_APIC_SPUR (IVT_ITEMS - 1) 60 61 61 62 #if (((VECTOR_APIC_SPUR + 1) % 16) || VECTOR_APIC_SPUR >= IVT_ITEMS) … … 63 64 #endif 64 65 65 #define VECTOR_DEBUG 166 #define VECTOR_CLK (IVT_IRQBASE + IRQ_CLK)67 #define VECTOR_PIC_SPUR (IVT_IRQBASE + IRQ_PIC_SPUR)68 #define VECTOR_SYSCALL IVT_FREEBASE69 #define VECTOR_TLB_SHOOTDOWN_IPI (IVT_FREEBASE + 1)70 #define VECTOR_DEBUG_IPI (IVT_FREEBASE + 2)66 #define VECTOR_DEBUG 1 67 #define VECTOR_CLK (IVT_IRQBASE + IRQ_CLK) 68 #define VECTOR_PIC_SPUR (IVT_IRQBASE + IRQ_PIC_SPUR) 69 #define VECTOR_SYSCALL IVT_FREEBASE 70 #define VECTOR_TLB_SHOOTDOWN_IPI (IVT_FREEBASE + 1) 71 #define VECTOR_DEBUG_IPI (IVT_FREEBASE + 2) 71 72 72 73 typedef struct istate { … … 79 80 uint32_t ebp; 80 81 81 uint32_t ebp_frame; /* imitation of frame pointer linkage */82 uint32_t eip_frame; /* imitation of return address linkage */83 82 uint32_t ebp_frame; /* imitation of frame pointer linkage */ 83 uint32_t eip_frame; /* imitation of return address linkage */ 84 84 85 uint32_t gs; 85 86 uint32_t fs; 86 87 uint32_t es; 87 88 uint32_t ds; 88 89 uint32_t error_word; /* real or fake error word */89 90 uint32_t error_word; /* real or fake error word */ 90 91 uint32_t eip; 91 92 uint32_t cs; 92 93 uint32_t eflags; 93 uint32_t esp; /* only if istate_t is from uspace */94 uint32_t ss; /* only if istate_t is from uspace */94 uint32_t esp; /* only if istate_t is from uspace */ 95 uint32_t ss; /* only if istate_t is from uspace */ 95 96 } istate_t; 96 97 97 98 /** Return true if exception happened while in userspace */ 98 static inline int istate_from_uspace(istate_t *istate)99 NO_TRACE static inline int istate_from_uspace(istate_t *istate) 99 100 { 100 101 return !(istate->eip & 0x80000000); 101 102 } 102 103 103 static inline void istate_set_retaddr(istate_t *istate, uintptr_t retaddr) 104 NO_TRACE static inline void istate_set_retaddr(istate_t *istate, 105 uintptr_t retaddr) 104 106 { 105 107 istate->eip = retaddr; 106 108 } 107 109 108 static inline unative_t istate_get_pc(istate_t *istate)110 NO_TRACE static inline unative_t istate_get_pc(istate_t *istate) 109 111 { 110 112 return istate->eip; 111 113 } 112 114 113 static inline unative_t istate_get_fp(istate_t *istate)115 NO_TRACE static inline unative_t istate_get_fp(istate_t *istate) 114 116 { 115 117 return istate->ebp; 116 118 } 117 119 118 extern void (* disable_irqs_function)(uint16_t irqmask);119 extern void (* enable_irqs_function)(uint16_t irqmask);120 extern void (* disable_irqs_function)(uint16_t); 121 extern void (* enable_irqs_function)(uint16_t); 120 122 extern void (* eoi_function)(void); 121 123 122 124 extern void interrupt_init(void); 123 extern void trap_virtual_enable_irqs(uint16_t irqmask);124 extern void trap_virtual_disable_irqs(uint16_t irqmask);125 extern void trap_virtual_enable_irqs(uint16_t); 126 extern void trap_virtual_disable_irqs(uint16_t); 125 127 126 128 #endif -
kernel/arch/ia32/include/mm/page.h
re3ee9b9 r7a0359b 37 37 38 38 #include <arch/mm/frame.h> 39 #include <trace.h> 39 40 40 41 #define PAGE_WIDTH FRAME_WIDTH … … 161 162 } __attribute__ ((packed)) pte_t; 162 163 163 static inline unsigned int get_pt_flags(pte_t *pt, size_t i)164 NO_TRACE static inline unsigned int get_pt_flags(pte_t *pt, size_t i) 164 165 { 165 166 pte_t *p = &pt[i]; … … 174 175 } 175 176 176 static inline void set_pt_flags(pte_t *pt, size_t i, int flags)177 NO_TRACE static inline void set_pt_flags(pte_t *pt, size_t i, int flags) 177 178 { 178 179 pte_t *p = &pt[i]; -
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 ( -
kernel/arch/mips32/include/asm.h
re3ee9b9 r7a0359b 38 38 #include <typedefs.h> 39 39 #include <config.h> 40 #include <trace.h> 40 41 41 static inline void cpu_sleep(void)42 NO_TRACE static inline void cpu_sleep(void) 42 43 { 43 /* Most of the simulators do not support */ 44 /* asm volatile ("wait"); */ 44 /* 45 * Unfortunatelly most of the simulators do not support 46 * 47 * asm volatile ( 48 * "wait" 49 * ); 50 * 51 */ 45 52 } 46 53 … … 52 59 * 53 60 */ 54 static inline uintptr_t get_stack_base(void)61 NO_TRACE static inline uintptr_t get_stack_base(void) 55 62 { 56 63 uintptr_t base; … … 65 72 } 66 73 67 extern void cpu_halt(void) __attribute__((noreturn)); 68 extern void asm_delay_loop(uint32_t t); 69 extern void userspace_asm(uintptr_t ustack, uintptr_t uspace_uarg, 70 uintptr_t entry); 71 72 extern ipl_t interrupts_disable(void); 73 extern ipl_t interrupts_enable(void); 74 extern void interrupts_restore(ipl_t ipl); 75 extern ipl_t interrupts_read(void); 76 extern bool interrupts_disabled(void); 77 78 static inline void pio_write_8(ioport8_t *port, uint8_t v) 74 NO_TRACE static inline void pio_write_8(ioport8_t *port, uint8_t v) 79 75 { 80 76 *port = v; 81 77 } 82 78 83 static inline void pio_write_16(ioport16_t *port, uint16_t v)79 NO_TRACE static inline void pio_write_16(ioport16_t *port, uint16_t v) 84 80 { 85 81 *port = v; 86 82 } 87 83 88 static inline void pio_write_32(ioport32_t *port, uint32_t v)84 NO_TRACE static inline void pio_write_32(ioport32_t *port, uint32_t v) 89 85 { 90 86 *port = v; 91 87 } 92 88 93 static inline uint8_t pio_read_8(ioport8_t *port)89 NO_TRACE static inline uint8_t pio_read_8(ioport8_t *port) 94 90 { 95 91 return *port; 96 92 } 97 93 98 static inline uint16_t pio_read_16(ioport16_t *port)94 NO_TRACE static inline uint16_t pio_read_16(ioport16_t *port) 99 95 { 100 96 return *port; 101 97 } 102 98 103 static inline uint32_t pio_read_32(ioport32_t *port)99 NO_TRACE static inline uint32_t pio_read_32(ioport32_t *port) 104 100 { 105 101 return *port; 106 102 } 103 104 extern void cpu_halt(void) __attribute__((noreturn)); 105 extern void asm_delay_loop(uint32_t); 106 extern void userspace_asm(uintptr_t, uintptr_t, uintptr_t); 107 108 extern ipl_t interrupts_disable(void); 109 extern ipl_t interrupts_enable(void); 110 extern void interrupts_restore(ipl_t); 111 extern ipl_t interrupts_read(void); 112 extern bool interrupts_disabled(void); 107 113 108 114 #endif -
kernel/arch/mips32/include/atomic.h
re3ee9b9 r7a0359b 36 36 #define KERN_mips32_ATOMIC_H_ 37 37 38 #include <trace.h> 39 38 40 #define atomic_inc(x) ((void) atomic_add(x, 1)) 39 41 #define atomic_dec(x) ((void) atomic_add(x, -1)) … … 53 55 * 54 56 */ 55 static inline atomic_count_t atomic_add(atomic_t *val, atomic_count_t i) 57 NO_TRACE static inline atomic_count_t atomic_add(atomic_t *val, 58 atomic_count_t i) 56 59 { 57 60 atomic_count_t tmp; … … 76 79 } 77 80 78 static inline atomic_count_t test_and_set(atomic_t *val)81 NO_TRACE static inline atomic_count_t test_and_set(atomic_t *val) 79 82 { 80 83 atomic_count_t tmp; … … 98 101 } 99 102 100 static inline void atomic_lock_arch(atomic_t *val)103 NO_TRACE static inline void atomic_lock_arch(atomic_t *val) 101 104 { 102 105 do { -
kernel/arch/mips32/include/barrier.h
re3ee9b9 r7a0359b 27 27 */ 28 28 29 /** @addtogroup mips32 29 /** @addtogroup mips32 30 30 * @{ 31 31 */ … … 39 39 * TODO: implement true MIPS memory barriers for macros below. 40 40 */ 41 #define CS_ENTER_BARRIER() asm volatile ("" ::: "memory")42 #define CS_LEAVE_BARRIER() asm volatile ("" ::: "memory")41 #define CS_ENTER_BARRIER() asm volatile ("" ::: "memory") 42 #define CS_LEAVE_BARRIER() asm volatile ("" ::: "memory") 43 43 44 #define memory_barrier() asm volatile ("" ::: "memory")45 #define read_barrier() asm volatile ("" ::: "memory")46 #define write_barrier() asm volatile ("" ::: "memory")44 #define memory_barrier() asm volatile ("" ::: "memory") 45 #define read_barrier() asm volatile ("" ::: "memory") 46 #define write_barrier() asm volatile ("" ::: "memory") 47 47 48 48 #define smc_coherence(a) -
kernel/arch/mips32/include/cycle.h
re3ee9b9 r7a0359b 38 38 #include <arch/cp0.h> 39 39 #include <arch/interrupt.h> 40 #include <trace.h> 40 41 41 static inline uint64_t get_cycle(void)42 NO_TRACE static inline uint64_t get_cycle(void) 42 43 { 43 44 return ((uint64_t) count_hi << 32) + ((uint64_t) cp0_count_read()); -
kernel/arch/mips32/include/exception.h
re3ee9b9 r7a0359b 27 27 */ 28 28 29 /** @addtogroup mips32 29 /** @addtogroup mips32 30 30 * @{ 31 31 */ … … 38 38 #include <typedefs.h> 39 39 #include <arch/cp0.h> 40 #include <trace.h> 40 41 41 #define EXC_Int 042 #define EXC_Mod 143 #define EXC_TLBL 244 #define EXC_TLBS 345 #define EXC_AdEL 446 #define EXC_AdES 547 #define EXC_IBE 648 #define EXC_DBE 749 #define EXC_Sys 850 #define EXC_Bp 951 #define EXC_RI 1052 #define EXC_CpU 1153 #define EXC_Ov 1254 #define EXC_Tr 1355 #define EXC_VCEI 1456 #define EXC_FPE 1557 #define EXC_WATCH 2358 #define EXC_VCED 3142 #define EXC_Int 0 43 #define EXC_Mod 1 44 #define EXC_TLBL 2 45 #define EXC_TLBS 3 46 #define EXC_AdEL 4 47 #define EXC_AdES 5 48 #define EXC_IBE 6 49 #define EXC_DBE 7 50 #define EXC_Sys 8 51 #define EXC_Bp 9 52 #define EXC_RI 10 53 #define EXC_CpU 11 54 #define EXC_Ov 12 55 #define EXC_Tr 13 56 #define EXC_VCEI 14 57 #define EXC_FPE 15 58 #define EXC_WATCH 23 59 #define EXC_VCED 31 59 60 60 61 typedef struct istate { … … 82 83 uint32_t lo; 83 84 uint32_t hi; 84 85 uint32_t status; /* cp0_status */86 uint32_t epc; /* cp0_epc */87 uint32_t k1; /* We use it as thread-local pointer */85 86 uint32_t status; /* cp0_status */ 87 uint32_t epc; /* cp0_epc */ 88 uint32_t k1; /* We use it as thread-local pointer */ 88 89 } istate_t; 89 90 90 static inline void istate_set_retaddr(istate_t *istate, uintptr_t retaddr) 91 NO_TRACE static inline void istate_set_retaddr(istate_t *istate, 92 uintptr_t retaddr) 91 93 { 92 94 istate->epc = retaddr; … … 94 96 95 97 /** Return true if exception happened while in userspace */ 96 static inline int istate_from_uspace(istate_t *istate)98 NO_TRACE static inline int istate_from_uspace(istate_t *istate) 97 99 { 98 100 return istate->status & cp0_status_um_bit; 99 101 } 100 static inline unative_t istate_get_pc(istate_t *istate) 102 103 NO_TRACE static inline unative_t istate_get_pc(istate_t *istate) 101 104 { 102 105 return istate->epc; 103 106 } 104 static inline unative_t istate_get_fp(istate_t *istate) 107 108 NO_TRACE static inline unative_t istate_get_fp(istate_t *istate) 105 109 { 106 return 0; /* FIXME */ 110 /* FIXME */ 111 112 return 0; 107 113 } 108 114 -
kernel/arch/mips32/include/faddr.h
re3ee9b9 r7a0359b 27 27 */ 28 28 29 /** @addtogroup mips32 29 /** @addtogroup mips32 30 30 * @{ 31 31 */ … … 38 38 #include <typedefs.h> 39 39 40 #define FADDR(fptr) ((uintptr_t) (fptr))40 #define FADDR(fptr) ((uintptr_t) (fptr)) 41 41 42 42 #endif -
kernel/arch/mips32/include/mm/page.h
re3ee9b9 r7a0359b 37 37 38 38 #include <arch/mm/frame.h> 39 #include <trace.h> 39 40 40 41 #define PAGE_WIDTH FRAME_WIDTH … … 155 156 156 157 157 static inline unsigned int get_pt_flags(pte_t *pt, size_t i)158 NO_TRACE static inline unsigned int get_pt_flags(pte_t *pt, size_t i) 158 159 { 159 160 pte_t *p = &pt[i]; … … 168 169 } 169 170 170 static inline void set_pt_flags(pte_t *pt, size_t i, int flags)171 NO_TRACE static inline void set_pt_flags(pte_t *pt, size_t i, int flags) 171 172 { 172 173 pte_t *p = &pt[i]; -
kernel/arch/mips32/include/mm/tlb.h
re3ee9b9 r7a0359b 39 39 #include <arch/mm/asid.h> 40 40 #include <arch/exception.h> 41 #include <trace.h> 41 42 42 43 #define TLB_ENTRY_COUNT 48 … … 126 127 * Probe TLB for Matching Entry. 127 128 */ 128 static inline void tlbp(void)129 NO_TRACE static inline void tlbp(void) 129 130 { 130 131 asm volatile ("tlbp\n\t"); … … 136 137 * Read Indexed TLB Entry. 137 138 */ 138 static inline void tlbr(void)139 NO_TRACE static inline void tlbr(void) 139 140 { 140 141 asm volatile ("tlbr\n\t"); … … 145 146 * Write Indexed TLB Entry. 146 147 */ 147 static inline void tlbwi(void)148 NO_TRACE static inline void tlbwi(void) 148 149 { 149 150 asm volatile ("tlbwi\n\t"); … … 154 155 * Write Random TLB Entry. 155 156 */ 156 static inline void tlbwr(void)157 NO_TRACE static inline void tlbwr(void) 157 158 { 158 159 asm volatile ("tlbwr\n\t"); -
kernel/arch/ppc32/include/asm.h
re3ee9b9 r7a0359b 40 40 #include <arch/cpu.h> 41 41 #include <arch/mm/asid.h> 42 43 static inline uint32_t msr_read(void) 42 #include <trace.h> 43 44 NO_TRACE static inline uint32_t msr_read(void) 44 45 { 45 46 uint32_t msr; … … 53 54 } 54 55 55 static inline void msr_write(uint32_t msr)56 NO_TRACE static inline void msr_write(uint32_t msr) 56 57 { 57 58 asm volatile ( … … 61 62 } 62 63 63 static inline void sr_set(uint32_t flags, asid_t asid, uint32_t sr)64 NO_TRACE static inline void sr_set(uint32_t flags, asid_t asid, uint32_t sr) 64 65 { 65 66 asm volatile ( … … 70 71 } 71 72 72 static inline uint32_t sr_get(uint32_t vaddr)73 NO_TRACE static inline uint32_t sr_get(uint32_t vaddr) 73 74 { 74 75 uint32_t vsid; … … 83 84 } 84 85 85 static inline uint32_t sdr1_get(void)86 NO_TRACE static inline uint32_t sdr1_get(void) 86 87 { 87 88 uint32_t sdr1; … … 103 104 * 104 105 */ 105 static inline ipl_t interrupts_enable(void)106 NO_TRACE static inline ipl_t interrupts_enable(void) 106 107 { 107 108 ipl_t ipl = msr_read(); … … 118 119 * 119 120 */ 120 static inline ipl_t interrupts_disable(void)121 NO_TRACE static inline ipl_t interrupts_disable(void) 121 122 { 122 123 ipl_t ipl = msr_read(); … … 132 133 * 133 134 */ 134 static inline void interrupts_restore(ipl_t ipl)135 NO_TRACE static inline void interrupts_restore(ipl_t ipl) 135 136 { 136 137 msr_write((msr_read() & (~MSR_EE)) | (ipl & MSR_EE)); … … 144 145 * 145 146 */ 146 static inline ipl_t interrupts_read(void)147 NO_TRACE static inline ipl_t interrupts_read(void) 147 148 { 148 149 return msr_read(); … … 154 155 * 155 156 */ 156 static inline bool interrupts_disabled(void)157 NO_TRACE static inline bool interrupts_disabled(void) 157 158 { 158 159 return ((msr_read() & MSR_EE) == 0); … … 166 167 * 167 168 */ 168 static inline uintptr_t get_stack_base(void)169 NO_TRACE static inline uintptr_t get_stack_base(void) 169 170 { 170 171 uintptr_t base; … … 179 180 } 180 181 181 static inline void cpu_sleep(void) 182 { 182 NO_TRACE static inline void cpu_sleep(void) 183 { 184 } 185 186 NO_TRACE static inline void pio_write_8(ioport8_t *port, uint8_t v) 187 { 188 *port = v; 189 } 190 191 NO_TRACE static inline void pio_write_16(ioport16_t *port, uint16_t v) 192 { 193 *port = v; 194 } 195 196 NO_TRACE static inline void pio_write_32(ioport32_t *port, uint32_t v) 197 { 198 *port = v; 199 } 200 201 NO_TRACE static inline uint8_t pio_read_8(ioport8_t *port) 202 { 203 return *port; 204 } 205 206 NO_TRACE static inline uint16_t pio_read_16(ioport16_t *port) 207 { 208 return *port; 209 } 210 211 NO_TRACE static inline uint32_t pio_read_32(ioport32_t *port) 212 { 213 return *port; 183 214 } 184 215 … … 187 218 extern void userspace_asm(uintptr_t uspace_uarg, uintptr_t stack, uintptr_t entry); 188 219 189 static inline void pio_write_8(ioport8_t *port, uint8_t v)190 {191 *port = v;192 }193 194 static inline void pio_write_16(ioport16_t *port, uint16_t v)195 {196 *port = v;197 }198 199 static inline void pio_write_32(ioport32_t *port, uint32_t v)200 {201 *port = v;202 }203 204 static inline uint8_t pio_read_8(ioport8_t *port)205 {206 return *port;207 }208 209 static inline uint16_t pio_read_16(ioport16_t *port)210 {211 return *port;212 }213 214 static inline uint32_t pio_read_32(ioport32_t *port)215 {216 return *port;217 }218 219 220 #endif 220 221 -
kernel/arch/ppc32/include/atomic.h
re3ee9b9 r7a0359b 36 36 #define KERN_ppc32_ATOMIC_H_ 37 37 38 static inline void atomic_inc(atomic_t *val) 38 #include <trace.h> 39 40 NO_TRACE static inline void atomic_inc(atomic_t *val) 39 41 { 40 42 atomic_count_t tmp; … … 54 56 } 55 57 56 static inline void atomic_dec(atomic_t *val)58 NO_TRACE static inline void atomic_dec(atomic_t *val) 57 59 { 58 60 atomic_count_t tmp; … … 72 74 } 73 75 74 static inline atomic_count_t atomic_postinc(atomic_t *val)76 NO_TRACE static inline atomic_count_t atomic_postinc(atomic_t *val) 75 77 { 76 78 atomic_inc(val); … … 78 80 } 79 81 80 static inline atomic_count_t atomic_postdec(atomic_t *val)82 NO_TRACE static inline atomic_count_t atomic_postdec(atomic_t *val) 81 83 { 82 84 atomic_dec(val); … … 84 86 } 85 87 86 static inline atomic_count_t atomic_preinc(atomic_t *val)88 NO_TRACE static inline atomic_count_t atomic_preinc(atomic_t *val) 87 89 { 88 90 atomic_inc(val); … … 90 92 } 91 93 92 static inline atomic_count_t atomic_predec(atomic_t *val)94 NO_TRACE static inline atomic_count_t atomic_predec(atomic_t *val) 93 95 { 94 96 atomic_dec(val); -
kernel/arch/ppc32/include/barrier.h
re3ee9b9 r7a0359b 36 36 #define KERN_ppc32_BARRIER_H_ 37 37 38 #include <trace.h> 39 38 40 #define CS_ENTER_BARRIER() asm volatile ("" ::: "memory") 39 41 #define CS_LEAVE_BARRIER() asm volatile ("" ::: "memory") … … 58 60 */ 59 61 60 static inline void smc_coherence(void *addr)62 NO_TRACE static inline void smc_coherence(void *addr) 61 63 { 62 64 asm volatile ( … … 70 72 } 71 73 72 static inline void smc_coherence_block(void *addr, unsigned int len)74 NO_TRACE static inline void smc_coherence_block(void *addr, unsigned int len) 73 75 { 74 76 unsigned int i; -
kernel/arch/ppc32/include/cpu.h
re3ee9b9 r7a0359b 52 52 53 53 #include <typedefs.h> 54 #include <trace.h> 54 55 55 56 typedef struct { … … 58 59 } __attribute__ ((packed)) cpu_arch_t; 59 60 60 static inline void cpu_version(cpu_arch_t *info)61 NO_TRACE static inline void cpu_version(cpu_arch_t *info) 61 62 { 62 63 asm volatile ( -
kernel/arch/ppc32/include/cycle.h
re3ee9b9 r7a0359b 36 36 #define KERN_ppc32_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 uint32_t lower; -
kernel/arch/ppc32/include/exception.h
re3ee9b9 r7a0359b 38 38 #include <typedefs.h> 39 39 #include <arch/cpu.h> 40 #include <trace.h> 40 41 41 42 typedef struct istate { … … 81 82 } istate_t; 82 83 83 static inline void istate_set_retaddr(istate_t *istate, uintptr_t retaddr) 84 NO_TRACE static inline void istate_set_retaddr(istate_t *istate, 85 uintptr_t retaddr) 84 86 { 85 87 istate->pc = retaddr; … … 91 93 * 92 94 */ 93 static inline int istate_from_uspace(istate_t *istate)95 NO_TRACE static inline int istate_from_uspace(istate_t *istate) 94 96 { 95 97 return (istate->srr1 & MSR_PR) != 0; 96 98 } 97 99 98 static inline unative_t istate_get_pc(istate_t *istate)100 NO_TRACE static inline unative_t istate_get_pc(istate_t *istate) 99 101 { 100 102 return istate->pc; 101 103 } 102 104 103 static inline unative_t istate_get_fp(istate_t *istate)105 NO_TRACE static inline unative_t istate_get_fp(istate_t *istate) 104 106 { 105 107 return istate->sp; -
kernel/arch/ppc32/include/mm/frame.h
re3ee9b9 r7a0359b 43 43 44 44 #include <typedefs.h> 45 #include <trace.h> 45 46 46 47 extern uintptr_t last_frame; 47 48 48 static inline uint32_t physmem_top(void)49 NO_TRACE static inline uint32_t physmem_top(void) 49 50 { 50 51 uint32_t physmem; -
kernel/arch/ppc32/include/mm/page.h
re3ee9b9 r7a0359b 37 37 38 38 #include <arch/mm/frame.h> 39 #include <trace.h> 39 40 40 41 #define PAGE_WIDTH FRAME_WIDTH … … 153 154 } pte_t; 154 155 155 static inline unsigned int get_pt_flags(pte_t *pt, size_t i)156 NO_TRACE static inline unsigned int get_pt_flags(pte_t *pt, size_t i) 156 157 { 157 158 pte_t *entry = &pt[i]; … … 166 167 } 167 168 168 static inline void set_pt_flags(pte_t *pt, size_t i, int flags)169 NO_TRACE static inline void set_pt_flags(pte_t *pt, size_t i, int flags) 169 170 { 170 171 pte_t *entry = &pt[i]; -
kernel/arch/sparc64/include/asm.h
re3ee9b9 r7a0359b 27 27 */ 28 28 29 /** @addtogroup sparc64 29 /** @addtogroup sparc64 30 30 * @{ 31 31 */ … … 43 43 #include <arch/stack.h> 44 44 #include <arch/barrier.h> 45 46 static inline void pio_write_8(ioport8_t *port, uint8_t v) 45 #include <trace.h> 46 47 NO_TRACE static inline void pio_write_8(ioport8_t *port, uint8_t v) 47 48 { 48 49 *port = v; … … 50 51 } 51 52 52 static inline void pio_write_16(ioport16_t *port, uint16_t v)53 NO_TRACE static inline void pio_write_16(ioport16_t *port, uint16_t v) 53 54 { 54 55 *port = v; … … 56 57 } 57 58 58 static inline void pio_write_32(ioport32_t *port, uint32_t v)59 NO_TRACE static inline void pio_write_32(ioport32_t *port, uint32_t v) 59 60 { 60 61 *port = v; … … 62 63 } 63 64 64 static inline uint8_t pio_read_8(ioport8_t *port) 65 { 66 uint8_t rv; 67 68 rv = *port; 65 NO_TRACE static inline uint8_t pio_read_8(ioport8_t *port) 66 { 67 uint8_t rv = *port; 69 68 memory_barrier(); 70 71 69 return rv; 72 70 } 73 71 74 static inline uint16_t pio_read_16(ioport16_t *port) 75 { 76 uint16_t rv; 77 78 rv = *port; 72 NO_TRACE static inline uint16_t pio_read_16(ioport16_t *port) 73 { 74 uint16_t rv = *port; 79 75 memory_barrier(); 80 81 76 return rv; 82 77 } 83 78 84 static inline uint32_t pio_read_32(ioport32_t *port) 85 { 86 uint32_t rv; 87 88 rv = *port; 79 NO_TRACE static inline uint32_t pio_read_32(ioport32_t *port) 80 { 81 uint32_t rv = *port; 89 82 memory_barrier(); 90 91 83 return rv; 92 84 } … … 95 87 * 96 88 * @return Value of PSTATE register. 97 */ 98 static inline uint64_t pstate_read(void) 99 { 100 uint64_t v; 101 102 asm volatile ("rdpr %%pstate, %0\n" : "=r" (v)); 89 * 90 */ 91 NO_TRACE static inline uint64_t pstate_read(void) 92 { 93 uint64_t v; 94 95 asm volatile ( 96 "rdpr %%pstate, %[v]\n" 97 : [v] "=r" (v) 98 ); 103 99 104 100 return v; … … 108 104 * 109 105 * @param v New value of PSTATE register. 110 */ 111 static inline void pstate_write(uint64_t v) 112 { 113 asm volatile ("wrpr %0, %1, %%pstate\n" : : "r" (v), "i" (0)); 106 * 107 */ 108 NO_TRACE static inline void pstate_write(uint64_t v) 109 { 110 asm volatile ( 111 "wrpr %[v], %[zero], %%pstate\n" 112 :: [v] "r" (v), 113 [zero] "i" (0) 114 ); 114 115 } 115 116 … … 117 118 * 118 119 * @return Value of TICK_comapre register. 119 */ 120 static inline uint64_t tick_compare_read(void) 121 { 122 uint64_t v; 123 124 asm volatile ("rd %%tick_cmpr, %0\n" : "=r" (v)); 120 * 121 */ 122 NO_TRACE static inline uint64_t tick_compare_read(void) 123 { 124 uint64_t v; 125 126 asm volatile ( 127 "rd %%tick_cmpr, %[v]\n" 128 : [v] "=r" (v) 129 ); 125 130 126 131 return v; … … 130 135 * 131 136 * @param v New value of TICK_comapre register. 132 */ 133 static inline void tick_compare_write(uint64_t v) 134 { 135 asm volatile ("wr %0, %1, %%tick_cmpr\n" : : "r" (v), "i" (0)); 137 * 138 */ 139 NO_TRACE static inline void tick_compare_write(uint64_t v) 140 { 141 asm volatile ( 142 "wr %[v], %[zero], %%tick_cmpr\n" 143 :: [v] "r" (v), 144 [zero] "i" (0) 145 ); 136 146 } 137 147 … … 139 149 * 140 150 * @return Value of STICK_compare register. 141 */ 142 static inline uint64_t stick_compare_read(void) 143 { 144 uint64_t v; 145 146 asm volatile ("rd %%asr25, %0\n" : "=r" (v)); 151 * 152 */ 153 NO_TRACE static inline uint64_t stick_compare_read(void) 154 { 155 uint64_t v; 156 157 asm volatile ( 158 "rd %%asr25, %[v]\n" 159 : [v] "=r" (v) 160 ); 147 161 148 162 return v; … … 152 166 * 153 167 * @param v New value of STICK_comapre register. 154 */ 155 static inline void stick_compare_write(uint64_t v) 156 { 157 asm volatile ("wr %0, %1, %%asr25\n" : : "r" (v), "i" (0)); 168 * 169 */ 170 NO_TRACE static inline void stick_compare_write(uint64_t v) 171 { 172 asm volatile ( 173 "wr %[v], %[zero], %%asr25\n" 174 :: [v] "r" (v), 175 [zero] "i" (0) 176 ); 158 177 } 159 178 … … 161 180 * 162 181 * @return Value of TICK register. 163 */ 164 static inline uint64_t tick_read(void) 165 { 166 uint64_t v; 167 168 asm volatile ("rdpr %%tick, %0\n" : "=r" (v)); 182 * 183 */ 184 NO_TRACE static inline uint64_t tick_read(void) 185 { 186 uint64_t v; 187 188 asm volatile ( 189 "rdpr %%tick, %[v]\n" 190 : [v] "=r" (v) 191 ); 169 192 170 193 return v; … … 174 197 * 175 198 * @param v New value of TICK register. 176 */ 177 static inline void tick_write(uint64_t v) 178 { 179 asm volatile ("wrpr %0, %1, %%tick\n" : : "r" (v), "i" (0)); 199 * 200 */ 201 NO_TRACE static inline void tick_write(uint64_t v) 202 { 203 asm volatile ( 204 "wrpr %[v], %[zero], %%tick\n" 205 :: [v] "r" (v), 206 [zero] "i" (0) 207 ); 180 208 } 181 209 … … 183 211 * 184 212 * @return Value of FPRS register. 185 */ 186 static inline uint64_t fprs_read(void) 187 { 188 uint64_t v; 189 190 asm volatile ("rd %%fprs, %0\n" : "=r" (v)); 213 * 214 */ 215 NO_TRACE static inline uint64_t fprs_read(void) 216 { 217 uint64_t v; 218 219 asm volatile ( 220 "rd %%fprs, %[v]\n" 221 : [v] "=r" (v) 222 ); 191 223 192 224 return v; … … 196 228 * 197 229 * @param v New value of FPRS register. 198 */ 199 static inline void fprs_write(uint64_t v) 200 { 201 asm volatile ("wr %0, %1, %%fprs\n" : : "r" (v), "i" (0)); 230 * 231 */ 232 NO_TRACE static inline void fprs_write(uint64_t v) 233 { 234 asm volatile ( 235 "wr %[v], %[zero], %%fprs\n" 236 :: [v] "r" (v), 237 [zero] "i" (0) 238 ); 202 239 } 203 240 … … 205 242 * 206 243 * @return Value of SOFTINT register. 207 */ 208 static inline uint64_t softint_read(void) 209 { 210 uint64_t v; 211 212 asm volatile ("rd %%softint, %0\n" : "=r" (v)); 213 244 * 245 */ 246 NO_TRACE static inline uint64_t softint_read(void) 247 { 248 uint64_t v; 249 250 asm volatile ( 251 "rd %%softint, %[v]\n" 252 : [v] "=r" (v) 253 ); 254 214 255 return v; 215 256 } … … 218 259 * 219 260 * @param v New value of SOFTINT register. 220 */ 221 static inline void softint_write(uint64_t v) 222 { 223 asm volatile ("wr %0, %1, %%softint\n" : : "r" (v), "i" (0)); 261 * 262 */ 263 NO_TRACE static inline void softint_write(uint64_t v) 264 { 265 asm volatile ( 266 "wr %[v], %[zero], %%softint\n" 267 :: [v] "r" (v), 268 [zero] "i" (0) 269 ); 224 270 } 225 271 … … 229 275 * 230 276 * @param v New value of CLEAR_SOFTINT register. 231 */ 232 static inline void clear_softint_write(uint64_t v) 233 { 234 asm volatile ("wr %0, %1, %%clear_softint\n" : : "r" (v), "i" (0)); 277 * 278 */ 279 NO_TRACE static inline void clear_softint_write(uint64_t v) 280 { 281 asm volatile ( 282 "wr %[v], %[zero], %%clear_softint\n" 283 :: [v] "r" (v), 284 [zero] "i" (0) 285 ); 235 286 } 236 287 … … 240 291 * 241 292 * @param v New value of SET_SOFTINT register. 242 */ 243 static inline void set_softint_write(uint64_t v) 244 { 245 asm volatile ("wr %0, %1, %%set_softint\n" : : "r" (v), "i" (0)); 293 * 294 */ 295 NO_TRACE static inline void set_softint_write(uint64_t v) 296 { 297 asm volatile ( 298 "wr %[v], %[zero], %%set_softint\n" 299 :: [v] "r" (v), 300 [zero] "i" (0) 301 ); 246 302 } 247 303 … … 252 308 * 253 309 * @return Old interrupt priority level. 254 */ 255 static inline ipl_t interrupts_enable(void) { 310 * 311 */ 312 NO_TRACE static inline ipl_t interrupts_enable(void) { 256 313 pstate_reg_t pstate; 257 uint64_t value; 258 259 value = pstate_read(); 314 uint64_t value = pstate_read(); 315 260 316 pstate.value = value; 261 317 pstate.ie = true; … … 271 327 * 272 328 * @return Old interrupt priority level. 273 */ 274 static inline ipl_t interrupts_disable(void) { 329 * 330 */ 331 NO_TRACE static inline ipl_t interrupts_disable(void) { 275 332 pstate_reg_t pstate; 276 uint64_t value; 277 278 value = pstate_read(); 333 uint64_t value = pstate_read(); 334 279 335 pstate.value = value; 280 336 pstate.ie = false; … … 289 345 * 290 346 * @param ipl Saved interrupt priority level. 291 */ 292 static inline void interrupts_restore(ipl_t ipl) { 347 * 348 */ 349 NO_TRACE static inline void interrupts_restore(ipl_t ipl) { 293 350 pstate_reg_t pstate; 294 351 … … 303 360 * 304 361 * @return Current interrupt priority level. 305 */ 306 static inline ipl_t interrupts_read(void) { 362 * 363 */ 364 NO_TRACE static inline ipl_t interrupts_read(void) { 307 365 return (ipl_t) pstate_read(); 308 366 } … … 313 371 * 314 372 */ 315 static inline bool interrupts_disabled(void)373 NO_TRACE static inline bool interrupts_disabled(void) 316 374 { 317 375 pstate_reg_t pstate; 318 376 319 377 pstate.value = pstate_read(); 320 378 return !pstate.ie; … … 326 384 * The stack is assumed to be STACK_SIZE bytes long. 327 385 * The stack must start on page boundary. 328 */ 329 static inline uintptr_t get_stack_base(void) 386 * 387 */ 388 NO_TRACE static inline uintptr_t get_stack_base(void) 330 389 { 331 390 uintptr_t unbiased_sp; 332 391 333 asm volatile ("add %%sp, %1, %0\n" : "=r" (unbiased_sp) : "i" (STACK_BIAS)); 392 asm volatile ( 393 "add %%sp, %[stack_bias], %[unbiased_sp]\n" 394 : [unbiased_sp] "=r" (unbiased_sp) 395 : [stack_bias] "i" (STACK_BIAS) 396 ); 334 397 335 398 return ALIGN_DOWN(unbiased_sp, STACK_SIZE); … … 339 402 * 340 403 * @return Value of VER register. 341 */ 342 static inline uint64_t ver_read(void) 343 { 344 uint64_t v; 345 346 asm volatile ("rdpr %%ver, %0\n" : "=r" (v)); 404 * 405 */ 406 NO_TRACE static inline uint64_t ver_read(void) 407 { 408 uint64_t v; 409 410 asm volatile ( 411 "rdpr %%ver, %[v]\n" 412 : [v] "=r" (v) 413 ); 347 414 348 415 return v; … … 352 419 * 353 420 * @return Current value in TPC. 354 */ 355 static inline uint64_t tpc_read(void) 356 { 357 uint64_t v; 358 359 asm volatile ("rdpr %%tpc, %0\n" : "=r" (v)); 421 * 422 */ 423 NO_TRACE static inline uint64_t tpc_read(void) 424 { 425 uint64_t v; 426 427 asm volatile ( 428 "rdpr %%tpc, %[v]\n" 429 : [v] "=r" (v) 430 ); 360 431 361 432 return v; … … 365 436 * 366 437 * @return Current value in TL. 367 */ 368 static inline uint64_t tl_read(void) 369 { 370 uint64_t v; 371 372 asm volatile ("rdpr %%tl, %0\n" : "=r" (v)); 438 * 439 */ 440 NO_TRACE static inline uint64_t tl_read(void) 441 { 442 uint64_t v; 443 444 asm volatile ( 445 "rdpr %%tl, %[v]\n" 446 : [v] "=r" (v) 447 ); 373 448 374 449 return v; … … 378 453 * 379 454 * @return Current value in TBA. 380 */ 381 static inline uint64_t tba_read(void) 382 { 383 uint64_t v; 384 385 asm volatile ("rdpr %%tba, %0\n" : "=r" (v)); 455 * 456 */ 457 NO_TRACE static inline uint64_t tba_read(void) 458 { 459 uint64_t v; 460 461 asm volatile ( 462 "rdpr %%tba, %[v]\n" 463 : [v] "=r" (v) 464 ); 386 465 387 466 return v; … … 391 470 * 392 471 * @param v New value of TBA. 393 */ 394 static inline void tba_write(uint64_t v) 395 { 396 asm volatile ("wrpr %0, %1, %%tba\n" : : "r" (v), "i" (0)); 472 * 473 */ 474 NO_TRACE static inline void tba_write(uint64_t v) 475 { 476 asm volatile ( 477 "wrpr %[v], %[zero], %%tba\n" 478 :: [v] "r" (v), 479 [zero] "i" (0) 480 ); 397 481 } 398 482 … … 400 484 * 401 485 * @param asi ASI determining the alternate space. 402 * @param va Virtual address within the ASI. 403 * 404 * @return Value read from the virtual address in the specified address space. 405 */ 406 static inline uint64_t asi_u64_read(asi_t asi, uintptr_t va) 407 { 408 uint64_t v; 409 410 asm volatile ("ldxa [%1] %2, %0\n" : "=r" (v) : "r" (va), "i" ((unsigned) asi)); 486 * @param va Virtual address within the ASI. 487 * 488 * @return Value read from the virtual address in 489 * the specified address space. 490 * 491 */ 492 NO_TRACE static inline uint64_t asi_u64_read(asi_t asi, uintptr_t va) 493 { 494 uint64_t v; 495 496 asm volatile ( 497 "ldxa [%[va]] %[asi], %[v]\n" 498 : [v] "=r" (v) 499 : [va] "r" (va), 500 [asi] "i" ((unsigned int) asi) 501 ); 411 502 412 503 return v; … … 416 507 * 417 508 * @param asi ASI determining the alternate space. 418 * @param va Virtual address within the ASI. 419 * @param v Value to be written. 420 */ 421 static inline void asi_u64_write(asi_t asi, uintptr_t va, uint64_t v) 422 { 423 asm volatile ("stxa %0, [%1] %2\n" : : "r" (v), "r" (va), "i" ((unsigned) asi) : "memory"); 509 * @param va Virtual address within the ASI. 510 * @param v Value to be written. 511 * 512 */ 513 NO_TRACE static inline void asi_u64_write(asi_t asi, uintptr_t va, uint64_t v) 514 { 515 asm volatile ( 516 "stxa %[v], [%[va]] %[asi]\n" 517 :: [v] "r" (v), 518 [va] "r" (va), 519 [asi] "i" ((unsigned int) asi) 520 : "memory" 521 ); 424 522 } 425 523 426 524 /** Flush all valid register windows to memory. */ 427 static inline void flushw(void)525 NO_TRACE static inline void flushw(void) 428 526 { 429 527 asm volatile ("flushw\n"); … … 431 529 432 530 /** Switch to nucleus by setting TL to 1. */ 433 static inline void nucleus_enter(void)531 NO_TRACE static inline void nucleus_enter(void) 434 532 { 435 533 asm volatile ("wrpr %g0, 1, %tl\n"); … … 437 535 438 536 /** Switch from nucleus by setting TL to 0. */ 439 static inline void nucleus_leave(void)537 NO_TRACE static inline void nucleus_leave(void) 440 538 { 441 539 asm volatile ("wrpr %g0, %g0, %tl\n"); -
kernel/arch/sparc64/include/atomic.h
re3ee9b9 r7a0359b 39 39 #include <typedefs.h> 40 40 #include <preemption.h> 41 #include <trace.h> 41 42 42 43 /** Atomic add operation. … … 50 51 * 51 52 */ 52 static inline atomic_count_t atomic_add(atomic_t *val, atomic_count_t i) 53 NO_TRACE static inline atomic_count_t atomic_add(atomic_t *val, 54 atomic_count_t i) 53 55 { 54 56 atomic_count_t a; … … 72 74 } 73 75 74 static inline atomic_count_t atomic_preinc(atomic_t *val)76 NO_TRACE static inline atomic_count_t atomic_preinc(atomic_t *val) 75 77 { 76 78 return atomic_add(val, 1) + 1; 77 79 } 78 80 79 static inline atomic_count_t atomic_postinc(atomic_t *val)81 NO_TRACE static inline atomic_count_t atomic_postinc(atomic_t *val) 80 82 { 81 83 return atomic_add(val, 1); 82 84 } 83 85 84 static inline atomic_count_t atomic_predec(atomic_t *val)86 NO_TRACE static inline atomic_count_t atomic_predec(atomic_t *val) 85 87 { 86 88 return atomic_add(val, -1) - 1; 87 89 } 88 90 89 static inline atomic_count_t atomic_postdec(atomic_t *val)91 NO_TRACE static inline atomic_count_t atomic_postdec(atomic_t *val) 90 92 { 91 93 return atomic_add(val, -1); 92 94 } 93 95 94 static inline void atomic_inc(atomic_t *val)96 NO_TRACE static inline void atomic_inc(atomic_t *val) 95 97 { 96 98 (void) atomic_add(val, 1); 97 99 } 98 100 99 static inline void atomic_dec(atomic_t *val)101 NO_TRACE static inline void atomic_dec(atomic_t *val) 100 102 { 101 103 (void) atomic_add(val, -1); 102 104 } 103 105 104 static inline atomic_count_t test_and_set(atomic_t *val)106 NO_TRACE static inline atomic_count_t test_and_set(atomic_t *val) 105 107 { 106 108 atomic_count_t v = 1; … … 117 119 } 118 120 119 static inline void atomic_lock_arch(atomic_t *val)121 NO_TRACE static inline void atomic_lock_arch(atomic_t *val) 120 122 { 121 123 atomic_count_t tmp1 = 1; -
kernel/arch/sparc64/include/barrier.h
re3ee9b9 r7a0359b 27 27 */ 28 28 29 /** @addtogroup sparc64 29 /** @addtogroup sparc64 30 30 * @{ 31 31 */ … … 36 36 #define KERN_sparc64_BARRIER_H_ 37 37 38 #include <trace.h> 39 38 40 #ifdef KERNEL 41 39 42 #include <typedefs.h> 43 40 44 #else 45 41 46 #include <stdint.h> 47 42 48 #endif 43 49 … … 45 51 * Our critical section barriers are prepared for the weakest RMO memory model. 46 52 */ 47 #define CS_ENTER_BARRIER() \ 48 asm volatile ( \ 49 "membar #LoadLoad | #LoadStore\n" \ 50 ::: "memory" \ 51 ) 52 #define CS_LEAVE_BARRIER() \ 53 asm volatile ( \ 54 "membar #StoreStore\n" \ 55 "membar #LoadStore\n" \ 56 ::: "memory" \ 53 #define CS_ENTER_BARRIER() \ 54 asm volatile ( \ 55 "membar #LoadLoad | #LoadStore\n" \ 56 ::: "memory" \ 57 57 ) 58 58 59 #define memory_barrier()\60 asm volatile ( "membar #LoadLoad | #StoreStore\n" ::: "memory")61 #define read_barrier()\62 asm volatile ("membar #LoadLoad\n" ::: "memory")63 #define write_barrier()\64 asm volatile ("membar #StoreStore\n" ::: "memory")59 #define CS_LEAVE_BARRIER() \ 60 asm volatile ( \ 61 "membar #StoreStore\n" \ 62 "membar #LoadStore\n" \ 63 ::: "memory" \ 64 ) 65 65 66 #define flush(a) \ 67 asm volatile ("flush %0\n" :: "r" ((a)) : "memory") 66 #define memory_barrier() \ 67 asm volatile ( \ 68 "membar #LoadLoad | #StoreStore\n" \ 69 ::: "memory" \ 70 ) 71 72 #define read_barrier() \ 73 asm volatile ( \ 74 "membar #LoadLoad\n" \ 75 ::: "memory" \ 76 ) 77 78 #define write_barrier() \ 79 asm volatile ( \ 80 "membar #StoreStore\n" \ 81 ::: "memory" \ 82 ) 83 84 #define flush(a) \ 85 asm volatile ( \ 86 "flush %[reg]\n" \ 87 :: [reg] "r" ((a)) \ 88 : "memory" \ 89 ) 68 90 69 91 /** Flush Instruction pipeline. */ 70 static inline void flush_pipeline(void)92 NO_TRACE static inline void flush_pipeline(void) 71 93 { 72 94 uint64_t pc; 73 95 74 96 /* 75 97 * The FLUSH instruction takes address parameter. … … 80 102 * the %pc register will always be in the range mapped by 81 103 * DTLB. 104 * 82 105 */ 83 84 asm volatile (85 "rd %%pc, % 0\n"86 "flush % 0\n"87 : "=&r" (pc)106 107 asm volatile ( 108 "rd %%pc, %[pc]\n" 109 "flush %[pc]\n" 110 : [pc] "=&r" (pc) 88 111 ); 89 112 } 90 113 91 114 /** Memory Barrier instruction. */ 92 static inline void membar(void)115 NO_TRACE static inline void membar(void) 93 116 { 94 asm volatile ("membar #Sync\n"); 117 asm volatile ( 118 "membar #Sync\n" 119 ); 95 120 } 96 121 97 122 #if defined (US) 98 123 99 #define smc_coherence(a) \ 100 { \ 101 write_barrier(); \ 102 flush((a)); \ 103 } 124 #define FLUSH_INVAL_MIN 4 104 125 105 #define FLUSH_INVAL_MIN 4 106 #define smc_coherence_block(a, l) \ 107 { \ 108 unsigned long i; \ 109 write_barrier(); \ 110 for (i = 0; i < (l); i += FLUSH_INVAL_MIN) \ 111 flush((void *)(a) + i); \ 112 } 126 #define smc_coherence(a) \ 127 do { \ 128 write_barrier(); \ 129 flush((a)); \ 130 } while (0) 131 132 #define smc_coherence_block(a, l) \ 133 do { \ 134 unsigned long i; \ 135 write_barrier(); \ 136 \ 137 for (i = 0; i < (l); i += FLUSH_INVAL_MIN) \ 138 flush((void *)(a) + i); \ 139 } while (0) 113 140 114 141 #elif defined (US3) 115 142 116 #define smc_coherence(a) \117 {\118 write_barrier();\119 flush_pipeline();\120 } 143 #define smc_coherence(a) \ 144 do { \ 145 write_barrier(); \ 146 flush_pipeline(); \ 147 } while (0) 121 148 122 #define smc_coherence_block(a, l) \123 {\124 write_barrier();\125 flush_pipeline();\126 } 149 #define smc_coherence_block(a, l) \ 150 do { \ 151 write_barrier(); \ 152 flush_pipeline(); \ 153 } while (0) 127 154 128 #endif /* defined(US3) */155 #endif /* defined(US3) */ 129 156 130 157 #endif -
kernel/arch/sparc64/include/cycle.h
re3ee9b9 r7a0359b 36 36 #define KERN_sparc64_CYCLE_H_ 37 37 38 #include <arch/asm.h> 38 #include <arch/asm.h> 39 #include <trace.h> 39 40 40 static inline uint64_t get_cycle(void)41 NO_TRACE static inline uint64_t get_cycle(void) 41 42 { 42 43 return tick_read(); -
kernel/arch/sparc64/include/faddr.h
re3ee9b9 r7a0359b 27 27 */ 28 28 29 /** @addtogroup sparc64 29 /** @addtogroup sparc64 30 30 * @{ 31 31 */ … … 38 38 #include <typedefs.h> 39 39 40 #define FADDR(fptr) ((uintptr_t) (fptr))40 #define FADDR(fptr) ((uintptr_t) (fptr)) 41 41 42 42 #endif -
kernel/arch/sparc64/include/interrupt.h
re3ee9b9 r7a0359b 39 39 #include <typedefs.h> 40 40 #include <arch/regdef.h> 41 #include <trace.h> 41 42 42 #define IVT_ITEMS 1543 #define IVT_FIRST 143 #define IVT_ITEMS 15 44 #define IVT_FIRST 1 44 45 45 46 /* This needs to be defined for inter-architecture API portability. */ 46 #define VECTOR_TLB_SHOOTDOWN_IPI 047 #define VECTOR_TLB_SHOOTDOWN_IPI 0 47 48 48 49 enum { 49 50 IPI_TLB_SHOOTDOWN = VECTOR_TLB_SHOOTDOWN_IPI 50 }; 51 }; 51 52 52 53 typedef struct istate { 53 uint64_t tnpc;54 uint64_t tpc;55 uint64_t tstate;54 uint64_t tnpc; 55 uint64_t tpc; 56 uint64_t tstate; 56 57 } istate_t; 57 58 58 static inline void istate_set_retaddr(istate_t *istate, uintptr_t retaddr) 59 NO_TRACE static inline void istate_set_retaddr(istate_t *istate, 60 uintptr_t retaddr) 59 61 { 60 62 istate->tpc = retaddr; 61 63 } 62 64 63 static inline int istate_from_uspace(istate_t *istate)65 NO_TRACE static inline int istate_from_uspace(istate_t *istate) 64 66 { 65 67 return !(istate->tstate & TSTATE_PRIV_BIT); 66 68 } 67 69 68 static inline unative_t istate_get_pc(istate_t *istate)70 NO_TRACE static inline unative_t istate_get_pc(istate_t *istate) 69 71 { 70 72 return istate->tpc; 71 73 } 72 74 73 static inline unative_t istate_get_fp(istate_t *istate)75 NO_TRACE static inline unative_t istate_get_fp(istate_t *istate) 74 76 { 75 return 0; /* TODO */ 77 /* TODO */ 78 79 return 0; 76 80 } 77 81 -
kernel/arch/sparc64/include/mm/as.h
re3ee9b9 r7a0359b 27 27 */ 28 28 29 /** @addtogroup sparc64mm 29 /** @addtogroup sparc64mm 30 30 * @{ 31 31 */ … … 37 37 38 38 #if defined (SUN4U) 39 39 40 #include <arch/mm/sun4u/as.h> 41 40 42 #elif defined (SUN4V) 43 41 44 #include <arch/mm/sun4v/as.h> 45 42 46 #endif 43 47 -
kernel/arch/sparc64/include/mm/frame.h
re3ee9b9 r7a0359b 27 27 */ 28 28 29 /** @addtogroup sparc64mm 29 /** @addtogroup sparc64mm 30 30 * @{ 31 31 */ … … 37 37 38 38 #if defined (SUN4U) 39 39 40 #include <arch/mm/sun4u/frame.h> 41 40 42 #elif defined (SUN4V) 43 41 44 #include <arch/mm/sun4v/frame.h> 45 42 46 #endif 43 47 -
kernel/arch/sparc64/include/mm/sun4u/tlb.h
re3ee9b9 r7a0359b 100 100 #include <arch/barrier.h> 101 101 #include <typedefs.h> 102 #include <trace.h> 102 103 #include <arch/register.h> 103 104 #include <arch/cpu.h> … … 242 243 * Determine the number of entries in the DMMU's small TLB. 243 244 */ 244 static inline uint16_t tlb_dsmall_size(void)245 NO_TRACE static inline uint16_t tlb_dsmall_size(void) 245 246 { 246 247 return 16; … … 250 251 * Determine the number of entries in each DMMU's big TLB. 251 252 */ 252 static inline uint16_t tlb_dbig_size(void)253 NO_TRACE static inline uint16_t tlb_dbig_size(void) 253 254 { 254 255 return 512; … … 258 259 * Determine the number of entries in the IMMU's small TLB. 259 260 */ 260 static inline uint16_t tlb_ismall_size(void)261 NO_TRACE static inline uint16_t tlb_ismall_size(void) 261 262 { 262 263 return 16; … … 266 267 * Determine the number of entries in the IMMU's big TLB. 267 268 */ 268 static inline uint16_t tlb_ibig_size(void)269 NO_TRACE static inline uint16_t tlb_ibig_size(void) 269 270 { 270 271 if (((ver_reg_t) ver_read()).impl == IMPL_ULTRASPARCIV_PLUS) … … 280 281 * @return Current value of Primary Context Register. 281 282 */ 282 static inline uint64_t mmu_primary_context_read(void)283 NO_TRACE static inline uint64_t mmu_primary_context_read(void) 283 284 { 284 285 return asi_u64_read(ASI_DMMU, VA_PRIMARY_CONTEXT_REG); … … 289 290 * @param v New value of Primary Context Register. 290 291 */ 291 static inline void mmu_primary_context_write(uint64_t v)292 NO_TRACE static inline void mmu_primary_context_write(uint64_t v) 292 293 { 293 294 asi_u64_write(ASI_DMMU, VA_PRIMARY_CONTEXT_REG, v); … … 299 300 * @return Current value of Secondary Context Register. 300 301 */ 301 static inline uint64_t mmu_secondary_context_read(void)302 NO_TRACE static inline uint64_t mmu_secondary_context_read(void) 302 303 { 303 304 return asi_u64_read(ASI_DMMU, VA_SECONDARY_CONTEXT_REG); … … 308 309 * @param v New value of Primary Context Register. 309 310 */ 310 static inline void mmu_secondary_context_write(uint64_t v)311 NO_TRACE static inline void mmu_secondary_context_write(uint64_t v) 311 312 { 312 313 asi_u64_write(ASI_DMMU, VA_SECONDARY_CONTEXT_REG, v); … … 323 324 * Register. 324 325 */ 325 static inline uint64_t itlb_data_access_read(size_t entry)326 NO_TRACE static inline uint64_t itlb_data_access_read(size_t entry) 326 327 { 327 328 itlb_data_access_addr_t reg; … … 337 338 * @param value Value to be written. 338 339 */ 339 static inline void itlb_data_access_write(size_t entry, uint64_t value)340 NO_TRACE static inline void itlb_data_access_write(size_t entry, uint64_t value) 340 341 { 341 342 itlb_data_access_addr_t reg; … … 354 355 * Register. 355 356 */ 356 static inline uint64_t dtlb_data_access_read(size_t entry)357 NO_TRACE static inline uint64_t dtlb_data_access_read(size_t entry) 357 358 { 358 359 dtlb_data_access_addr_t reg; … … 368 369 * @param value Value to be written. 369 370 */ 370 static inline void dtlb_data_access_write(size_t entry, uint64_t value)371 NO_TRACE static inline void dtlb_data_access_write(size_t entry, uint64_t value) 371 372 { 372 373 dtlb_data_access_addr_t reg; … … 384 385 * @return Current value of specified IMMU TLB Tag Read Register. 385 386 */ 386 static inline uint64_t itlb_tag_read_read(size_t entry)387 NO_TRACE static inline uint64_t itlb_tag_read_read(size_t entry) 387 388 { 388 389 itlb_tag_read_addr_t tag; … … 399 400 * @return Current value of specified DMMU TLB Tag Read Register. 400 401 */ 401 static inline uint64_t dtlb_tag_read_read(size_t entry)402 NO_TRACE static inline uint64_t dtlb_tag_read_read(size_t entry) 402 403 { 403 404 dtlb_tag_read_addr_t tag; … … 419 420 * Register. 420 421 */ 421 static inline uint64_t itlb_data_access_read(int tlb, size_t entry)422 NO_TRACE static inline uint64_t itlb_data_access_read(int tlb, size_t entry) 422 423 { 423 424 itlb_data_access_addr_t reg; … … 434 435 * @param value Value to be written. 435 436 */ 436 static inline void itlb_data_access_write(int tlb, size_t entry,437 NO_TRACE static inline void itlb_data_access_write(int tlb, size_t entry, 437 438 uint64_t value) 438 439 { … … 454 455 * Register. 455 456 */ 456 static inline uint64_t dtlb_data_access_read(int tlb, size_t entry)457 NO_TRACE static inline uint64_t dtlb_data_access_read(int tlb, size_t entry) 457 458 { 458 459 dtlb_data_access_addr_t reg; … … 470 471 * @param value Value to be written. 471 472 */ 472 static inline void dtlb_data_access_write(int tlb, size_t entry,473 NO_TRACE static inline void dtlb_data_access_write(int tlb, size_t entry, 473 474 uint64_t value) 474 475 { … … 489 490 * @return Current value of specified IMMU TLB Tag Read Register. 490 491 */ 491 static inline uint64_t itlb_tag_read_read(int tlb, size_t entry)492 NO_TRACE static inline uint64_t itlb_tag_read_read(int tlb, size_t entry) 492 493 { 493 494 itlb_tag_read_addr_t tag; … … 506 507 * @return Current value of specified DMMU TLB Tag Read Register. 507 508 */ 508 static inline uint64_t dtlb_tag_read_read(int tlb, size_t entry)509 NO_TRACE static inline uint64_t dtlb_tag_read_read(int tlb, size_t entry) 509 510 { 510 511 dtlb_tag_read_addr_t tag; … … 523 524 * @param v Value to be written. 524 525 */ 525 static inline void itlb_tag_access_write(uint64_t v)526 NO_TRACE static inline void itlb_tag_access_write(uint64_t v) 526 527 { 527 528 asi_u64_write(ASI_IMMU, VA_IMMU_TAG_ACCESS, v); … … 533 534 * @return Current value of IMMU TLB Tag Access Register. 534 535 */ 535 static inline uint64_t itlb_tag_access_read(void)536 NO_TRACE static inline uint64_t itlb_tag_access_read(void) 536 537 { 537 538 return asi_u64_read(ASI_IMMU, VA_IMMU_TAG_ACCESS); … … 542 543 * @param v Value to be written. 543 544 */ 544 static inline void dtlb_tag_access_write(uint64_t v)545 NO_TRACE static inline void dtlb_tag_access_write(uint64_t v) 545 546 { 546 547 asi_u64_write(ASI_DMMU, VA_DMMU_TAG_ACCESS, v); … … 552 553 * @return Current value of DMMU TLB Tag Access Register. 553 554 */ 554 static inline uint64_t dtlb_tag_access_read(void)555 NO_TRACE static inline uint64_t dtlb_tag_access_read(void) 555 556 { 556 557 return asi_u64_read(ASI_DMMU, VA_DMMU_TAG_ACCESS); … … 562 563 * @param v Value to be written. 563 564 */ 564 static inline void itlb_data_in_write(uint64_t v)565 NO_TRACE static inline void itlb_data_in_write(uint64_t v) 565 566 { 566 567 asi_u64_write(ASI_ITLB_DATA_IN_REG, 0, v); … … 572 573 * @param v Value to be written. 573 574 */ 574 static inline void dtlb_data_in_write(uint64_t v)575 NO_TRACE static inline void dtlb_data_in_write(uint64_t v) 575 576 { 576 577 asi_u64_write(ASI_DTLB_DATA_IN_REG, 0, v); … … 582 583 * @return Current content of I-SFSR register. 583 584 */ 584 static inline uint64_t itlb_sfsr_read(void)585 NO_TRACE static inline uint64_t itlb_sfsr_read(void) 585 586 { 586 587 return asi_u64_read(ASI_IMMU, VA_IMMU_SFSR); … … 591 592 * @param v New value of I-SFSR register. 592 593 */ 593 static inline void itlb_sfsr_write(uint64_t v)594 NO_TRACE static inline void itlb_sfsr_write(uint64_t v) 594 595 { 595 596 asi_u64_write(ASI_IMMU, VA_IMMU_SFSR, v); … … 601 602 * @return Current content of D-SFSR register. 602 603 */ 603 static inline uint64_t dtlb_sfsr_read(void)604 NO_TRACE static inline uint64_t dtlb_sfsr_read(void) 604 605 { 605 606 return asi_u64_read(ASI_DMMU, VA_DMMU_SFSR); … … 610 611 * @param v New value of D-SFSR register. 611 612 */ 612 static inline void dtlb_sfsr_write(uint64_t v)613 NO_TRACE static inline void dtlb_sfsr_write(uint64_t v) 613 614 { 614 615 asi_u64_write(ASI_DMMU, VA_DMMU_SFSR, v); … … 620 621 * @return Current content of D-SFAR register. 621 622 */ 622 static inline uint64_t dtlb_sfar_read(void)623 NO_TRACE static inline uint64_t dtlb_sfar_read(void) 623 624 { 624 625 return asi_u64_read(ASI_DMMU, VA_DMMU_SFAR); … … 633 634 * @param page Address which is on the page to be demapped. 634 635 */ 635 static inline void itlb_demap(int type, int context_encoding, uintptr_t page)636 NO_TRACE static inline void itlb_demap(int type, int context_encoding, uintptr_t page) 636 637 { 637 638 tlb_demap_addr_t da; … … 659 660 * @param page Address which is on the page to be demapped. 660 661 */ 661 static inline void dtlb_demap(int type, int context_encoding, uintptr_t page)662 NO_TRACE static inline void dtlb_demap(int type, int context_encoding, uintptr_t page) 662 663 { 663 664 tlb_demap_addr_t da; -
kernel/arch/sparc64/include/mm/sun4v/tlb.h
re3ee9b9 r7a0359b 43 43 44 44 #include <arch/mm/tte.h> 45 #include < print.h>45 #include <trace.h> 46 46 #include <arch/mm/mmu.h> 47 47 #include <arch/mm/page.h> … … 88 88 * @return Current value of Primary Context Register. 89 89 */ 90 static inline uint64_t mmu_primary_context_read(void)90 NO_TRACE static inline uint64_t mmu_primary_context_read(void) 91 91 { 92 92 return asi_u64_read(ASI_PRIMARY_CONTEXT_REG, VA_PRIMARY_CONTEXT_REG); 93 93 } 94 94 95 95 /** Write MMU Primary Context Register. 96 96 * 97 97 * @param v New value of Primary Context Register. 98 98 */ 99 static inline void mmu_primary_context_write(uint64_t v)99 NO_TRACE static inline void mmu_primary_context_write(uint64_t v) 100 100 { 101 101 asi_u64_write(ASI_PRIMARY_CONTEXT_REG, VA_PRIMARY_CONTEXT_REG, v); 102 102 } 103 103 104 104 /** Read MMU Secondary Context Register. 105 105 * 106 106 * @return Current value of Secondary Context Register. 107 107 */ 108 static inline uint64_t mmu_secondary_context_read(void)108 NO_TRACE static inline uint64_t mmu_secondary_context_read(void) 109 109 { 110 110 return asi_u64_read(ASI_SECONDARY_CONTEXT_REG, VA_SECONDARY_CONTEXT_REG); 111 111 } 112 112 113 113 /** Write MMU Secondary Context Register. 114 114 * 115 115 * @param v New value of Secondary Context Register. 116 116 */ 117 static inline void mmu_secondary_context_write(uint64_t v)117 NO_TRACE static inline void mmu_secondary_context_write(uint64_t v) 118 118 { 119 119 asi_u64_write(ASI_SECONDARY_CONTEXT_REG, VA_SECONDARY_CONTEXT_REG, v); … … 126 126 * @param mmu_flag MMU_FLAG_DTLB, MMU_FLAG_ITLB or a combination of both 127 127 */ 128 static inline void mmu_demap_ctx(int context, int mmu_flag) {128 NO_TRACE static inline void mmu_demap_ctx(int context, int mmu_flag) { 129 129 __hypercall_fast4(MMU_DEMAP_CTX, 0, 0, context, mmu_flag); 130 130 } … … 137 137 * @param mmu_flag MMU_FLAG_DTLB, MMU_FLAG_ITLB or a combination of both 138 138 */ 139 static inline void mmu_demap_page(uintptr_t vaddr, int context, int mmu_flag) {139 NO_TRACE static inline void mmu_demap_page(uintptr_t vaddr, int context, int mmu_flag) { 140 140 __hypercall_fast5(MMU_DEMAP_PAGE, 0, 0, vaddr, context, mmu_flag); 141 141 } -
kernel/arch/sparc64/include/mm/tlb.h
re3ee9b9 r7a0359b 27 27 */ 28 28 29 /** @addtogroup sparc64mm 29 /** @addtogroup sparc64mm 30 30 * @{ 31 31 */ … … 36 36 #define KERN_sparc64_TLB_H_ 37 37 38 #if defined (SUN4U) 38 39 39 #if defined (SUN4U)40 40 #include <arch/mm/sun4u/tlb.h> 41 41 42 #elif defined (SUN4V) 43 42 44 #include <arch/mm/sun4v/tlb.h> 45 43 46 #endif 44 47 -
kernel/arch/sparc64/include/sun4u/asm.h
re3ee9b9 r7a0359b 27 27 */ 28 28 29 /** @addtogroup sparc64 29 /** @addtogroup sparc64 30 30 * @{ 31 31 */ … … 36 36 #define KERN_sparc64_sun4u_ASM_H_ 37 37 38 extern uint64_t read_from_ag_g7(void); 39 extern void write_to_ag_g6(uint64_t val); 40 extern void write_to_ag_g7(uint64_t val); 41 extern void write_to_ig_g6(uint64_t val); 42 38 #include <trace.h> 43 39 44 40 /** Read Version Register. 45 41 * 46 42 * @return Value of VER register. 43 * 47 44 */ 48 static inline uint64_t ver_read(void)45 NO_TRACE static inline uint64_t ver_read(void) 49 46 { 50 47 uint64_t v; 51 48 52 asm volatile ("rdpr %%ver, %0\n" : "=r" (v)); 49 asm volatile ( 50 "rdpr %%ver, %[v]\n" 51 : [v] "=r" (v) 52 ); 53 53 54 54 return v; 55 55 } 56 57 extern uint64_t read_from_ag_g7(void); 58 extern void write_to_ag_g6(uint64_t); 59 extern void write_to_ag_g7(uint64_t); 60 extern void write_to_ig_g6(uint64_t); 56 61 57 62 #endif -
kernel/arch/sparc64/include/sun4u/cpu.h
re3ee9b9 r7a0359b 36 36 #define KERN_sparc64_sun4u_CPU_H_ 37 37 38 #define MANUF_FUJITSU 0x0439 #define MANUF_ULTRASPARC 0x17/**< UltraSPARC I, UltraSPARC II */40 #define MANUF_SUN 0x3e38 #define MANUF_FUJITSU 0x04 39 #define MANUF_ULTRASPARC 0x17 /**< UltraSPARC I, UltraSPARC II */ 40 #define MANUF_SUN 0x3e 41 41 42 #define IMPL_ULTRASPARCI 0x1043 #define IMPL_ULTRASPARCII 0x1144 #define IMPL_ULTRASPARCII_I 0x1245 #define IMPL_ULTRASPARCII_E 0x1346 #define IMPL_ULTRASPARCIII 0x1447 #define IMPL_ULTRASPARCIII_PLUS 0x1548 #define IMPL_ULTRASPARCIII_I 0x1649 #define IMPL_ULTRASPARCIV 0x1850 #define IMPL_ULTRASPARCIV_PLUS 0x1942 #define IMPL_ULTRASPARCI 0x10 43 #define IMPL_ULTRASPARCII 0x11 44 #define IMPL_ULTRASPARCII_I 0x12 45 #define IMPL_ULTRASPARCII_E 0x13 46 #define IMPL_ULTRASPARCIII 0x14 47 #define IMPL_ULTRASPARCIII_PLUS 0x15 48 #define IMPL_ULTRASPARCIII_I 0x16 49 #define IMPL_ULTRASPARCIV 0x18 50 #define IMPL_ULTRASPARCIV_PLUS 0x19 51 51 52 #define IMPL_SPARC64V 0x552 #define IMPL_SPARC64V 0x5 53 53 54 54 #ifndef __ASM__ … … 58 58 #include <arch/regdef.h> 59 59 #include <arch/asm.h> 60 #include <trace.h> 60 61 61 62 #ifdef CONFIG_SMP … … 64 65 65 66 typedef struct { 66 uint32_t mid; /**< Processor ID as read from67 UPA_CONFIG/FIREPLANE_CONFIG. */67 uint32_t mid; /**< Processor ID as read from 68 UPA_CONFIG/FIREPLANE_CONFIG. */ 68 69 ver_reg_t ver; 69 uint32_t clock_frequency; /**< Processor frequency in Hz. */70 uint64_t next_tick_cmpr; /**< Next clock interrupt should be71 generated when the TICK register72 matches this value. */70 uint32_t clock_frequency; /**< Processor frequency in Hz. */ 71 uint64_t next_tick_cmpr; /**< Next clock interrupt should be 72 generated when the TICK register 73 matches this value. */ 73 74 } cpu_arch_t; 74 75 75 76 /** 77 * Reads the module ID (agent ID/CPUID) of the current CPU. 76 /** Read the module ID (agent ID/CPUID) of the current CPU. 77 * 78 78 */ 79 static inline uint32_t read_mid(void)79 NO_TRACE static inline uint32_t read_mid(void) 80 80 { 81 81 uint64_t icbus_config = asi_u64_read(ASI_ICBUS_CONFIG, 0); 82 82 icbus_config = icbus_config >> ICBUS_CONFIG_MID_SHIFT; 83 83 84 #if defined (US) 84 85 return icbus_config & 0x1f; … … 91 92 } 92 93 93 #endif 94 #endif 94 95 95 96 #endif -
kernel/arch/sparc64/include/sun4v/asm.h
re3ee9b9 r7a0359b 27 27 */ 28 28 29 /** @addtogroup sparc64 29 /** @addtogroup sparc64 30 30 * @{ 31 31 */ -
kernel/arch/sparc64/include/sun4v/cpu.h
re3ee9b9 r7a0359b 37 37 38 38 /** Maximum number of virtual processors. */ 39 #define MAX_NUM_STRANDS 6439 #define MAX_NUM_STRANDS 64 40 40 41 41 /** Maximum number of logical processors in a processor core */ 42 #define MAX_CORE_STRANDS 842 #define MAX_CORE_STRANDS 8 43 43 44 44 #ifndef __ASM__ … … 59 59 60 60 typedef struct cpu_arch { 61 uint64_t id; /**< virtual processor ID */62 uint32_t clock_frequency; /**< Processor frequency in Hz. */63 uint64_t next_tick_cmpr; /**< Next clock interrupt should be64 generated when the TICK register65 matches this value. */66 exec_unit_t *exec_unit; /**< Physical core. */67 unsigned long proposed_nrdy; /**< Proposed No. of ready threads68 so that cores are equally balanced. */61 uint64_t id; /**< virtual processor ID */ 62 uint32_t clock_frequency; /**< Processor frequency in Hz. */ 63 uint64_t next_tick_cmpr; /**< Next clock interrupt should be 64 generated when the TICK register 65 matches this value. */ 66 exec_unit_t *exec_unit; /**< Physical core. */ 67 unsigned long proposed_nrdy; /**< Proposed No. of ready threads 68 so that cores are equally balanced. */ 69 69 } cpu_arch_t; 70 71 #endif72 73 #ifdef __ASM__74 70 75 71 #endif
Note:
See TracChangeset
for help on using the changeset viewer.
