8#include <etl/singleton.h>
27 [[nodiscard]]
auto SendIpi(uint64_t target_cpu_mask)
40 [[nodiscard]] __always_inline
auto apic() const -> const
Apic& {
49 auto InitApic(
size_t cpu_count) -> void;
72 alignas(4096) std::array<cpu_io::IdtrInfo::Idt,
73 cpu_io::IdtrInfo::kInterruptMaxCount>
idts_{};
82 template <u
int8_t no = 0>
etl::singleton< Interrupt > InterruptSingleton
Interrupt 单例类型别名
InterruptBase::InterruptDelegate InterruptDelegate
APIC 管理类,管理整个系统的 Local APIC 和 IO APIC.
auto operator=(const Interrupt &) -> Interrupt &=delete
auto SendIpi(uint64_t target_cpu_mask) -> Expected< void > override
发送 IPI 到指定核心
~Interrupt() override=default
__always_inline auto apic() const -> const Apic &
std::array< cpu_io::IdtrInfo::Idt, cpu_io::IdtrInfo::kInterruptMaxCount > idts_
auto SetUpIdtr() -> void
初始化 idtr
auto InitApic(size_t cpu_count) -> void
初始化 APIC
Interrupt(const Interrupt &)=delete
auto RegisterExternalInterrupt(uint32_t irq, uint32_t cpu_id, uint32_t priority, InterruptDelegate handler) -> Expected< void > override
注册外部中断处理函数
auto operator=(Interrupt &&) -> Interrupt &=delete
static constexpr uint8_t kExternalVectorBase
外部中断向量基址(IO APIC IRQ 到 IDT 向量的映射)
auto Do(uint64_t cause, cpu_io::TrapContext *context) -> void override
执行中断处理
auto RegisterInterruptFunc(uint64_t cause, InterruptDelegate func) -> void override
注册中断处理函数
auto BroadcastIpi() -> Expected< void > override
广播 IPI 到所有其他核心
Interrupt(Interrupt &&)=delete
__always_inline auto apic() -> Apic &
std::array< InterruptDelegate, kMaxInterrupt > interrupt_handlers_
中断处理函数数组
std::expected< T, Error > Expected
std::expected 别名模板