8#include <etl/singleton.h>
44 [[nodiscard]]
auto SendIpi(uint64_t target_cpu_mask)
76 __always_inline
auto Spi(uint32_t intid, uint32_t cpuid)
const ->
void {
85 __always_inline
auto Ppi(uint32_t intid, uint32_t cpuid)
const ->
void {
94 __always_inline
auto Sgi(uint32_t intid, uint32_t cpuid)
const ->
void {
etl::singleton< Interrupt > InterruptSingleton
Interrupt 单例类型别名
InterruptBase::InterruptDelegate InterruptDelegate
auto Spi(uint32_t intid, uint32_t cpuid) const -> void
配置共享外设中断 (SPI)
auto Sgi(uint32_t intid, uint32_t cpuid) const -> void
配置软件生成中断 (SGI)
auto SetUp() const -> void
初始化当前 CPU 的 GIC 配置
auto Ppi(uint32_t intid, uint32_t cpuid) const -> void
配置私有外设中断 (PPI)
auto operator=(const Interrupt &) -> Interrupt &=delete
auto SendIpi(uint64_t target_cpu_mask) -> Expected< void > override
发送 IPI 到指定 CPU
__always_inline auto SetUp() const -> void
设置 GIC
__always_inline auto Ppi(uint32_t intid, uint32_t cpuid) const -> void
设置 PPI 中断
__always_inline auto Sgi(uint32_t intid, uint32_t cpuid) const -> void
设置 SGI 中断
static constexpr size_t kMaxInterrupt
最大中断号
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
执行中断处理
__always_inline auto Spi(uint32_t intid, uint32_t cpuid) const -> void
设置 SPI 中断
auto RegisterInterruptFunc(uint64_t cause, InterruptDelegate func) -> void override
注册中断处理函数
auto BroadcastIpi() -> Expected< void > override
广播 IPI 到所有 CPU
Interrupt(Interrupt &&)=delete
std::array< InterruptDelegate, kMaxInterrupt > interrupt_handlers_
中断处理函数数组
std::expected< T, Error > Expected
std::expected 别名模板