Changes in kernel/arch/amd64/include/asm.h [d99c1d2:f77e591d] in mainline
- File:
-
- 1 edited
-
kernel/arch/amd64/include/asm.h (modified) (28 diffs)
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/amd64/include/asm.h
rd99c1d2 rf77e591d 38 38 #include <config.h> 39 39 #include <typedefs.h> 40 41 extern void asm_delay_loop(uint32_t t); 42 extern void asm_fake_loop(uint32_t t); 40 #include <arch/cpu.h> 41 #include <trace.h> 43 42 44 43 /** Return base address of current stack. … … 49 48 * 50 49 */ 51 static inline uintptr_t get_stack_base(void)50 NO_TRACE static inline uintptr_t get_stack_base(void) 52 51 { 53 52 uintptr_t v; … … 56 55 "andq %%rsp, %[v]\n" 57 56 : [v] "=r" (v) 58 : "0" (~((uint64_t) STACK_SIZE -1))57 : "0" (~((uint64_t) STACK_SIZE - 1)) 59 58 ); 60 59 … … 62 61 } 63 62 64 static inline void cpu_sleep(void) 65 { 66 asm volatile ("hlt\n"); 67 } 68 69 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) 70 71 { 71 72 while (true) { … … 76 77 } 77 78 78 79 79 /** Byte from port 80 80 * … … 85 85 * 86 86 */ 87 static inline uint8_t pio_read_8(ioport8_t *port)87 NO_TRACE static inline uint8_t pio_read_8(ioport8_t *port) 88 88 { 89 89 uint8_t val; … … 106 106 * 107 107 */ 108 static inline uint16_t pio_read_16(ioport16_t *port)108 NO_TRACE static inline uint16_t pio_read_16(ioport16_t *port) 109 109 { 110 110 uint16_t val; … … 127 127 * 128 128 */ 129 static inline uint32_t pio_read_32(ioport32_t *port)129 NO_TRACE static inline uint32_t pio_read_32(ioport32_t *port) 130 130 { 131 131 uint32_t val; … … 148 148 * 149 149 */ 150 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) 151 151 { 152 152 asm volatile ( 153 153 "outb %b[val], %w[port]\n" 154 :: [val] "a" (val), [port] "d" (port) 154 :: [val] "a" (val), 155 [port] "d" (port) 155 156 ); 156 157 } … … 164 165 * 165 166 */ 166 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) 167 168 { 168 169 asm volatile ( 169 170 "outw %w[val], %w[port]\n" 170 :: [val] "a" (val), [port] "d" (port) 171 :: [val] "a" (val), 172 [port] "d" (port) 171 173 ); 172 174 } … … 180 182 * 181 183 */ 182 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) 183 185 { 184 186 asm volatile ( 185 187 "outl %[val], %w[port]\n" 186 :: [val] "a" (val), [port] "d" (port) 188 :: [val] "a" (val), 189 [port] "d" (port) 187 190 ); 188 191 } 189 192 190 193 /** Swap Hidden part of GS register with visible one */ 191 static inline void swapgs(void) 192 { 193 asm volatile("swapgs"); 194 NO_TRACE static inline void swapgs(void) 195 { 196 asm volatile ( 197 "swapgs" 198 ); 194 199 } 195 200 … … 202 207 * 203 208 */ 204 static inline ipl_t interrupts_enable(void) {209 NO_TRACE static inline ipl_t interrupts_enable(void) { 205 210 ipl_t v; 206 211 … … 223 228 * 224 229 */ 225 static inline ipl_t interrupts_disable(void) {230 NO_TRACE static inline ipl_t interrupts_disable(void) { 226 231 ipl_t v; 227 232 … … 243 248 * 244 249 */ 245 static inline void interrupts_restore(ipl_t ipl) {250 NO_TRACE static inline void interrupts_restore(ipl_t ipl) { 246 251 asm volatile ( 247 252 "pushq %[ipl]\n" … … 258 263 * 259 264 */ 260 static inline ipl_t interrupts_read(void) {265 NO_TRACE static inline ipl_t interrupts_read(void) { 261 266 ipl_t v; 262 267 … … 270 275 } 271 276 277 /** Check interrupts state. 278 * 279 * @return True if interrupts are disabled. 280 * 281 */ 282 NO_TRACE static inline bool interrupts_disabled(void) 283 { 284 ipl_t v; 285 286 asm volatile ( 287 "pushfq\n" 288 "popq %[v]\n" 289 : [v] "=r" (v) 290 ); 291 292 return ((v & RFLAGS_IF) == 0); 293 } 294 272 295 /** Write to MSR */ 273 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) 274 297 { 275 298 asm volatile ( … … 281 304 } 282 305 283 static inline unative_t read_msr(uint32_t msr)306 NO_TRACE static inline unative_t read_msr(uint32_t msr) 284 307 { 285 308 uint32_t ax, dx; … … 294 317 } 295 318 296 297 319 /** Enable local APIC 298 320 * … … 300 322 * 301 323 */ 302 static inline void enable_l_apic_in_msr()324 NO_TRACE static inline void enable_l_apic_in_msr() 303 325 { 304 326 asm volatile ( … … 308 330 "orl $(0xfee00000),%%eax\n" 309 331 "wrmsr\n" 310 ::: "%eax","%ecx","%edx" 311 ); 312 } 313 314 static inline uintptr_t * get_ip() 315 { 316 uintptr_t *ip; 317 318 asm volatile ( 319 "mov %%rip, %[ip]" 320 : [ip] "=r" (ip) 321 ); 322 323 return ip; 332 ::: "%eax", "%ecx", "%edx" 333 ); 324 334 } 325 335 … … 329 339 * 330 340 */ 331 static inline void invlpg(uintptr_t addr)341 NO_TRACE static inline void invlpg(uintptr_t addr) 332 342 { 333 343 asm volatile ( … … 342 352 * 343 353 */ 344 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) 345 355 { 346 356 asm volatile ( … … 355 365 * 356 366 */ 357 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) 358 368 { 359 369 asm volatile ( … … 368 378 * 369 379 */ 370 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) 371 381 { 372 382 asm volatile ( … … 380 390 * 381 391 */ 382 static inline void tr_load(uint16_t sel)392 NO_TRACE static inline void tr_load(uint16_t sel) 383 393 { 384 394 asm volatile ( … … 388 398 } 389 399 390 #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) \ 391 401 { \ 392 402 unative_t res; \ … … 398 408 } 399 409 400 #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) \ 401 411 { \ 402 412 asm volatile ( \ … … 425 435 GEN_WRITE_REG(dr7) 426 436 427 extern size_t interrupt_handler_size; 428 extern void interrupt_handlers(void); 437 extern void asm_delay_loop(uint32_t); 438 extern void asm_fake_loop(uint32_t); 439 440 extern uintptr_t int_0; 441 extern uintptr_t int_1; 442 extern uintptr_t int_2; 443 extern uintptr_t int_3; 444 extern uintptr_t int_4; 445 extern uintptr_t int_5; 446 extern uintptr_t int_6; 447 extern uintptr_t int_7; 448 extern uintptr_t int_8; 449 extern uintptr_t int_9; 450 extern uintptr_t int_10; 451 extern uintptr_t int_11; 452 extern uintptr_t int_12; 453 extern uintptr_t int_13; 454 extern uintptr_t int_14; 455 extern uintptr_t int_15; 456 extern uintptr_t int_16; 457 extern uintptr_t int_17; 458 extern uintptr_t int_18; 459 extern uintptr_t int_19; 460 extern uintptr_t int_20; 461 extern uintptr_t int_21; 462 extern uintptr_t int_22; 463 extern uintptr_t int_23; 464 extern uintptr_t int_24; 465 extern uintptr_t int_25; 466 extern uintptr_t int_26; 467 extern uintptr_t int_27; 468 extern uintptr_t int_28; 469 extern uintptr_t int_29; 470 extern uintptr_t int_30; 471 extern uintptr_t int_31; 472 extern uintptr_t int_32; 473 extern uintptr_t int_33; 474 extern uintptr_t int_34; 475 extern uintptr_t int_35; 476 extern uintptr_t int_36; 477 extern uintptr_t int_37; 478 extern uintptr_t int_38; 479 extern uintptr_t int_39; 480 extern uintptr_t int_40; 481 extern uintptr_t int_41; 482 extern uintptr_t int_42; 483 extern uintptr_t int_43; 484 extern uintptr_t int_44; 485 extern uintptr_t int_45; 486 extern uintptr_t int_46; 487 extern uintptr_t int_47; 488 extern uintptr_t int_48; 489 extern uintptr_t int_49; 490 extern uintptr_t int_50; 491 extern uintptr_t int_51; 492 extern uintptr_t int_52; 493 extern uintptr_t int_53; 494 extern uintptr_t int_54; 495 extern uintptr_t int_55; 496 extern uintptr_t int_56; 497 extern uintptr_t int_57; 498 extern uintptr_t int_58; 499 extern uintptr_t int_59; 500 extern uintptr_t int_60; 501 extern uintptr_t int_61; 502 extern uintptr_t int_62; 503 extern uintptr_t int_63; 429 504 430 505 #endif
Note:
See TracChangeset
for help on using the changeset viewer.
