Kernel: Move interrupt related functions to InterruptController
This commit is contained in:
parent
b5673278c4
commit
f7ebda3bf1
|
@ -2,6 +2,9 @@
|
|||
|
||||
#include <stdint.h>
|
||||
|
||||
#define DISABLE_INTERRUPTS() asm volatile("cli")
|
||||
#define ENABLE_INTERRUPTS() asm volatile("sti")
|
||||
|
||||
class InterruptController
|
||||
{
|
||||
public:
|
||||
|
@ -14,3 +17,7 @@ public:
|
|||
static void initialize(bool force_pic);
|
||||
static InterruptController& get();
|
||||
};
|
||||
|
||||
uintptr_t disable_interrupts_and_get_flags();
|
||||
void restore_flags(uintptr_t);
|
||||
bool interrupts_enabled();
|
|
@ -25,3 +25,22 @@ void InterruptController::initialize(bool force_pic)
|
|||
dprintln("Using PIC instead of APIC");
|
||||
s_instance = PIC::create();
|
||||
}
|
||||
|
||||
uintptr_t disable_interrupts_and_get_flags()
|
||||
{
|
||||
uintptr_t flags;
|
||||
asm volatile("pushf; cli; pop %0" : "=r"(flags) :: "memory");
|
||||
return flags;
|
||||
}
|
||||
|
||||
void restore_flags(uintptr_t flags)
|
||||
{
|
||||
asm volatile("push %0; popf" :: "rm"(flags) : "memory", "cc");
|
||||
}
|
||||
|
||||
bool interrupts_enabled()
|
||||
{
|
||||
uintptr_t flags;
|
||||
asm volatile("pushf; pop %0" : "=r"(flags) :: "memory");
|
||||
return flags & (1 << 9);
|
||||
}
|
|
@ -5,12 +5,11 @@
|
|||
|
||||
#include <kernel/PCI.h>
|
||||
|
||||
#define DISABLE_INTERRUPTS() asm volatile("cli")
|
||||
#define ENABLE_INTERRUPTS() asm volatile("sti")
|
||||
|
||||
#if 1
|
||||
#define VERIFY_CLI() ASSERT(interrupts_disabled())
|
||||
#define VERIFY_STI() ASSERT(interrupts_enabled())
|
||||
#define VERIFY_CLI() ASSERT(!interrupts_enabled())
|
||||
#else
|
||||
#define VERIFY_STI()
|
||||
#define VERIFY_CLI()
|
||||
#endif
|
||||
|
||||
|
@ -23,13 +22,6 @@ namespace Kernel
|
|||
|
||||
static Scheduler* s_instance = nullptr;
|
||||
|
||||
static bool interrupts_disabled()
|
||||
{
|
||||
uintptr_t flags;
|
||||
asm volatile("pushf; pop %0" : "=r"(flags));
|
||||
return !(flags & (1 << 9));
|
||||
}
|
||||
|
||||
BAN::ErrorOr<void> Scheduler::initialize()
|
||||
{
|
||||
ASSERT(s_instance == nullptr);
|
||||
|
|
|
@ -17,9 +17,6 @@
|
|||
#include <kernel/TTY.h>
|
||||
#include <kernel/VesaTerminalDriver.h>
|
||||
|
||||
#define DISABLE_INTERRUPTS() asm volatile("cli")
|
||||
#define ENABLE_INTERRUPTS() asm volatile("sti")
|
||||
|
||||
extern "C" const char g_kernel_cmdline[];
|
||||
|
||||
struct ParsedCommandLine
|
||||
|
|
Loading…
Reference in New Issue