8#include <etl/singleton.h>
37 [[nodiscard]]
auto SendIpi(uint64_t target_cpu_mask)
68 [[nodiscard]] __always_inline
auto plic() const -> const
Plic& {
78 auto InitPlic(uint64_t dev_addr,
size_t ndev,
size_t context_count) -> void;
93 std::array<InterruptDelegate, cpu_io::ScauseInfo::kInterruptMaxCount>
96 std::array<InterruptDelegate, cpu_io::ScauseInfo::kExceptionMaxCount>
etl::singleton< Interrupt > InterruptSingleton
Interrupt 单例类型别名
InterruptBase::InterruptDelegate InterruptDelegate
auto operator=(const Interrupt &) -> Interrupt &=delete
auto SendIpi(uint64_t target_cpu_mask) -> Expected< void > override
发送 IPI 到指定核心
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
auto Do(uint64_t cause, cpu_io::TrapContext *context) -> void override
执行中断处理
auto RegisterInterruptFunc(uint64_t cause, InterruptDelegate func) -> void override
注册中断处理函数
auto InitPlic(uint64_t dev_addr, size_t ndev, size_t context_count) -> void
初始化 PLIC
auto BroadcastIpi() -> Expected< void > override
广播 IPI 到所有其他核心
std::array< InterruptDelegate, cpu_io::ScauseInfo::kExceptionMaxCount > exception_handlers_
异常处理函数数组
__always_inline auto plic() const -> const Plic &
获取 PLIC 的只读引用
Interrupt(Interrupt &&)=delete
__always_inline auto plic() -> Plic &
获取 PLIC 引用
std::array< InterruptDelegate, kMaxInterrupt > interrupt_handlers_
中断处理函数数组
std::expected< T, Error > Expected
std::expected 别名模板