diff options
Diffstat (limited to 'cpukit/score/cpu/x86_64/include/rtems/score/cpu_asm.h')
-rw-r--r-- | cpukit/score/cpu/x86_64/include/rtems/score/cpu_asm.h | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/cpukit/score/cpu/x86_64/include/rtems/score/cpu_asm.h b/cpukit/score/cpu/x86_64/include/rtems/score/cpu_asm.h index 5d4b608eb8..09807f1489 100644 --- a/cpukit/score/cpu/x86_64/include/rtems/score/cpu_asm.h +++ b/cpukit/score/cpu/x86_64/include/rtems/score/cpu_asm.h @@ -45,6 +45,14 @@ RTEMS_INLINE_ROUTINE void outport_byte(uint16_t port, uint8_t val) __asm__ volatile ( "outb %0, %1" : : "a" (val), "Nd" (port) ); } +RTEMS_INLINE_ROUTINE uint16_t amd64_get_cs(void) +{ + uint16_t segment = 0; + + __asm__ volatile ( "movw %%cs, %0" : "=r" (segment) : "0" (segment) ); + + return segment; +} RTEMS_INLINE_ROUTINE void amd64_set_cr3(uint64_t segment) { @@ -58,6 +66,16 @@ RTEMS_INLINE_ROUTINE void cpuid( : "=a" (*eax), "=b" (*ebx), "=c" (*ecx), "=d" (*edx) : "a" (code) ); } + +RTEMS_INLINE_ROUTINE void amd64_enable_interrupts(void) +{ + __asm__ volatile ( "sti" ); +} + +RTEMS_INLINE_ROUTINE void amd64_disable_interrupts(void) +{ + __asm__ volatile ( "cli" ); +} #endif /* !ASM */ #endif |