SimpleKernel 1.17.0
Loading...
Searching...
No Matches
InterruptBase Class Referenceabstract

中断子系统抽象基类 More...

#include <interrupt_base.h>

Inheritance diagram for InterruptBase:
Inheritance graph
Collaboration diagram for InterruptBase:
Collaboration graph

Public Types

using InterruptDelegate = etl::delegate< uint64_t(uint64_t, cpu_io::TrapContext *)>
 类型安全的中断处理委托
 

Public Member Functions

virtual auto Do (uint64_t, cpu_io::TrapContext *) -> void=0
 执行中断处理
 
virtual auto RegisterInterruptFunc (uint64_t cause, InterruptDelegate func) -> void=0
 注册中断处理函数
 
virtual auto SendIpi (uint64_t target_cpu_mask) -> Expected< void >=0
 发送 IPI 到指定核心
 
virtual auto BroadcastIpi () -> Expected< void >=0
 广播 IPI 到所有其他核心
 
virtual auto RegisterExternalInterrupt (uint32_t irq, uint32_t cpu_id, uint32_t priority, InterruptDelegate handler) -> Expected< void >=0
 注册外部中断处理函数
 
构造/析构函数
 InterruptBase ()=default
 
 InterruptBase (const InterruptBase &)=delete
 
 InterruptBase (InterruptBase &&)=delete
 
auto operator= (const InterruptBase &) -> InterruptBase &=delete
 
auto operator= (InterruptBase &&) -> InterruptBase &=delete
 
virtual ~InterruptBase ()=default
 

Detailed Description

中断子系统抽象基类

所有架构的中断处理必须实现此接口。 已知实现:PLIC(RISC-V)、GIC(AArch64)、APIC(x86_64)

Precondition
硬件中断控制器已初始化
Postcondition
可通过 RegisterInterruptFunc 注册中断处理函数

Definition at line 23 of file interrupt_base.h.

Member Typedef Documentation

◆ InterruptDelegate

using InterruptBase::InterruptDelegate = etl::delegate<uint64_t(uint64_t, cpu_io::TrapContext*)>

类型安全的中断处理委托

Parameters
cause中断或异常号
context中断上下文
Returns
uint64_t 返回值,0 成功

Definition at line 31 of file interrupt_base.h.

Constructor & Destructor Documentation

◆ InterruptBase() [1/3]

InterruptBase::InterruptBase ( )
default

◆ InterruptBase() [2/3]

InterruptBase::InterruptBase ( const InterruptBase )
delete

◆ InterruptBase() [3/3]

InterruptBase::InterruptBase ( InterruptBase &&  )
delete

◆ ~InterruptBase()

virtual InterruptBase::~InterruptBase ( )
virtualdefault

Member Function Documentation

◆ BroadcastIpi()

virtual auto InterruptBase::BroadcastIpi ( ) -> Expected< void >
pure virtual

广播 IPI 到所有其他核心

Returns
Expected<void> 成功时返回 void,失败时返回错误

Implemented in Interrupt, Interrupt, and Interrupt.

◆ Do()

virtual auto InterruptBase::Do ( uint64_t  ,
cpu_io::TrapContext  
) -> void
pure virtual

执行中断处理

Parameters
不同平台有不同含义

Implemented in Interrupt, Interrupt, and Interrupt.

◆ operator=() [1/2]

auto InterruptBase::operator= ( const InterruptBase ) -> InterruptBase &=delete
delete

◆ operator=() [2/2]

auto InterruptBase::operator= ( InterruptBase &&  ) -> InterruptBase &=delete
delete

◆ RegisterExternalInterrupt()

virtual auto InterruptBase::RegisterExternalInterrupt ( uint32_t  irq,
uint32_t  cpu_id,
uint32_t  priority,
InterruptDelegate  handler 
) -> Expected< void >
pure virtual

注册外部中断处理函数

Parameters
irq外部中断号(平台相关: PLIC source_id / GIC INTID / APIC IRQ)
cpu_id目标 CPU 核心 ID,中断将路由到该核心
priority中断优先级
handler中断处理函数
Returns
Expected<void> 成功时返回 void,失败时返回错误

Implemented in Interrupt, Interrupt, and Interrupt.

◆ RegisterInterruptFunc()

virtual auto InterruptBase::RegisterInterruptFunc ( uint64_t  cause,
InterruptDelegate  func 
) -> void
pure virtual

注册中断处理函数

Parameters
cause中断号,不同平台有不同含义
func处理函数

Implemented in Interrupt, Interrupt, and Interrupt.

◆ SendIpi()

virtual auto InterruptBase::SendIpi ( uint64_t  target_cpu_mask) -> Expected< void >
pure virtual

发送 IPI 到指定核心

Parameters
target_cpu_mask目标核心的位掩码
Returns
Expected<void> 成功时返回 void,失败时返回错误

Implemented in Interrupt, Interrupt, and Interrupt.


The documentation for this class was generated from the following file: