diff --git a/Kernel/Arch/aarch64/Processor.h b/Kernel/Arch/aarch64/Processor.h index 01a1d5c134..aa0b04ea8a 100644 --- a/Kernel/Arch/aarch64/Processor.h +++ b/Kernel/Arch/aarch64/Processor.h @@ -12,6 +12,7 @@ #include #include +#include class VirtualAddress; @@ -119,6 +120,22 @@ public: return 0; } + ALWAYS_INLINE static bool are_interrupts_enabled() + { + auto daif = Aarch64::DAIF::read(); + return !daif.I; + } + + ALWAYS_INLINE static void enable_interrupts() + { + Aarch64::DAIF::clear_I(); + } + + ALWAYS_INLINE static void disable_interrupts() + { + Aarch64::DAIF::set_I(); + } + ALWAYS_INLINE static void enter_critical() { VERIFY_NOT_REACHED(); } ALWAYS_INLINE static void leave_critical() { VERIFY_NOT_REACHED(); } ALWAYS_INLINE static u32 in_critical() diff --git a/Kernel/Arch/x86/Processor.h b/Kernel/Arch/x86/Processor.h index 1e0f4cc2dd..86e0c2182c 100644 --- a/Kernel/Arch/x86/Processor.h +++ b/Kernel/Arch/x86/Processor.h @@ -422,6 +422,21 @@ public: return m_features.has_flag(feature); } + ALWAYS_INLINE static bool are_interrupts_enabled() + { + return Kernel::are_interrupts_enabled(); + } + + ALWAYS_INLINE static void enable_interrupts() + { + sti(); + } + + ALWAYS_INLINE static void disable_interrupts() + { + cli(); + } + void check_invoke_scheduler(); void invoke_scheduler_async() { m_invoke_scheduler_async = true; }