From 8cbf9ff8f09588885e476c9e87e4bbb0c32b18be Mon Sep 17 00:00:00 2001 From: Jonas 'Sortie' Termansen Date: Wed, 11 Apr 2012 15:46:32 +0200 Subject: [PATCH] Added Interrupt::IsEnabled(). --- sortix/interrupt.h | 3 +++ sortix/x64/interrupt.s | 8 ++++++++ sortix/x86/interrupt.asm | 9 +++++++-- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/sortix/interrupt.h b/sortix/interrupt.h index e214c365..6f6e9762 100644 --- a/sortix/interrupt.h +++ b/sortix/interrupt.h @@ -47,6 +47,9 @@ const unsigned IRQ13 = 45; const unsigned IRQ14 = 46; const unsigned IRQ15 = 47; +extern "C" unsigned long asm_interrupts_are_enabled(); + +inline bool IsEnabled() { return asm_interrupts_are_enabled(); } inline void Enable() { asm volatile("sti"); } inline void Disable() { asm volatile("cli"); } diff --git a/sortix/x64/interrupt.s b/sortix/x64/interrupt.s index c7a30220..dd278c99 100644 --- a/sortix/x64/interrupt.s +++ b/sortix/x64/interrupt.s @@ -443,3 +443,11 @@ interrupt_handler_prepare: interrupt_handler_null: iretq +.global asm_interrupts_are_enabled +.type asm_interrupts_are_enabled, @function +asm_interrupts_are_enabled: + pushfq + popq %rax + andq $0x000200, %rax # FLAGS_INTERRUPT + retq + diff --git a/sortix/x86/interrupt.asm b/sortix/x86/interrupt.asm index 84623ee0..30e5afa9 100644 --- a/sortix/x86/interrupt.asm +++ b/sortix/x86/interrupt.asm @@ -153,9 +153,14 @@ irq_common_stub: ;sti iret ; pops 5 things at once: CS, EIP, EFLAGS, SS, and ESP -global - global interrupt_handler_null interrupt_handler_null: iret +global asm_interrupts_are_enabled +asm_interrupts_are_enabled: + pushf + pop eax + and eax, 0x000200 ; FLAGS_INTERRUPT + ret +