Files
banan-os/kernel/include/kernel/InterruptController.h
Bananymous f49689caac Kernel: Implement API for sending IPIs for only one processor
Also move the spin wait to check for pending IPI sends to the start of
ipi sending function. There is no need to wait for IPI send succeeding
right after it. It is enough to make sure there are not multiple IPIs
being sent at the same time.
2024-07-21 17:30:59 +03:00

39 lines
790 B
C++

#pragma once
#include <BAN/Optional.h>
#include <BAN/Errors.h>
#include <stdint.h>
namespace Kernel
{
class InterruptController
{
public:
virtual ~InterruptController() {}
virtual void eoi(uint8_t) = 0;
virtual void enable_irq(uint8_t) = 0;
virtual bool is_in_service(uint8_t) = 0;
static void initialize(bool force_pic);
static bool is_initialized();
static InterruptController& get();
virtual void initialize_multiprocessor() = 0;
virtual void send_ipi(ProcessorID target) = 0;
virtual void broadcast_ipi() = 0;
virtual void enable() = 0;
virtual BAN::ErrorOr<void> reserve_irq(uint8_t irq) = 0;
virtual BAN::Optional<uint8_t> get_free_irq() = 0;
bool is_using_apic() const { return m_using_apic; }
private:
bool m_using_apic { false };
};
}