diff options
author | Matt Fleming <matt.fleming@intel.com> | 2013-02-25 15:25:16 +0000 |
---|---|---|
committer | Matt Fleming <matt.fleming@intel.com> | 2013-02-26 11:29:04 +0000 |
commit | 76da2ae050d72a31fd47c2fb53f7081781de62ff (patch) | |
tree | 6da146b5f19ca17ff24d4e74940f14264d38f914 /com32/include/sys | |
parent | 41c29c26d70fde563d7c255872bbadad87a39dfa (diff) | |
parent | 79312306de0150ef64213ef9fbc5aa8580544f03 (diff) | |
download | syslinux-76da2ae050d72a31fd47c2fb53f7081781de62ff.tar.gz |
Merge branch 'lwip' into elflink
Welcome to Syslinux 5.10.
Conflicts:
NEWS
com32/lib/Makefile
com32/lib/sys/open.c
com32/lib/syslinux/ipappend.c
com32/modules/Makefile
com32/modules/prdhcp.c
core/Makefile
core/cmdline.inc
core/com32.inc
core/comboot.inc
core/configinit.inc
core/fs/chdir.c
core/fs/fs.c
core/fs/pxe/dnsresolv.c
core/fs/pxe/pxe.c
core/fs/pxe/pxe.h
core/idle.c
core/include/ctype.h
core/init.inc
core/mem/init.c
core/parseconfig.inc
core/runkernel.inc
core/syslinux.ld
core/ui.inc
doc/comboot.txt
version
Diffstat (limited to 'com32/include/sys')
-rw-r--r-- | com32/include/sys/cpu.h | 31 |
1 files changed, 27 insertions, 4 deletions
diff --git a/com32/include/sys/cpu.h b/com32/include/sys/cpu.h index 53a6250e..807e13c4 100644 --- a/com32/include/sys/cpu.h +++ b/com32/include/sys/cpu.h @@ -121,22 +121,45 @@ static inline void wrmsr(uint64_t v, uint32_t msr) static inline void cpu_relax(void) { - asm volatile("rep ; nop"); + asm volatile("rep ; nop" : : : "memory"); } static inline void hlt(void) { - asm volatile("hlt"); + asm volatile("hlt" : : : "memory"); } static inline void cli(void) { - asm volatile("cli"); + asm volatile("cli" : : : "memory"); } static inline void sti(void) { - asm volatile("sti"); + asm volatile("sti" : : : "memory"); } +typedef unsigned long irq_state_t; + +static inline irq_state_t irq_state(void) +{ + irq_state_t __st; + + asm volatile("pushfl ; popl %0" : "=rm" (__st) : : "memory"); + return __st; +} + +static inline irq_state_t irq_save(void) +{ + irq_state_t __st = irq_state(); + cli(); + return __st; +} + +static inline void irq_restore(irq_state_t __st) +{ + asm volatile("pushl %0 ; popfl" : : "rm" (__st) : "memory"); +} + + #endif |