banan-os/kernel/kernel/InterruptController.cpp

52 lines
883 B
C++
Raw Normal View History

#include <BAN/Errors.h>
#include <kernel/InterruptController.h>
#include <kernel/APIC.h>
#include <kernel/PIC.h>
2023-09-28 12:30:27 +03:00
#include <lai/helpers/sci.h>
namespace Kernel
{
static InterruptController* s_instance = nullptr;
InterruptController& InterruptController::get()
{
ASSERT(s_instance);
return *s_instance;
}
void InterruptController::initialize(bool force_pic)
2023-09-28 12:30:27 +03:00
{
ASSERT(s_instance == nullptr);
PIC::mask_all();
PIC::remap();
if (!force_pic)
2023-09-28 12:30:27 +03:00
{
s_instance = APIC::create();
if (s_instance)
{
s_instance->m_using_apic = true;
return;
}
2023-09-28 12:30:27 +03:00
}
dprintln("Using PIC instead of APIC");
s_instance = PIC::create();
ASSERT(s_instance);
2023-09-28 12:30:27 +03:00
s_instance->m_using_apic = false;
}
2023-09-28 12:30:27 +03:00
void InterruptController::enter_acpi_mode()
{
#if ARCH(x86_64)
if (lai_enable_acpi(m_using_apic ? 1 : 0) != 0)
#endif
dwarnln("could not enter acpi mode");
}
2023-09-28 12:30:27 +03:00
}