|
SimpleKernel 1.17.0
|
APIC 管理类,管理整个系统的 Local APIC 和 IO APIC. More...
#include <apic.h>

Public Member Functions | |
| auto | InitCurrentCpuLocalApic () -> Expected< void > |
| 初始化当前 CPU 的 Local APIC | |
| auto | SetIrqRedirection (uint8_t irq, uint8_t vector, uint32_t destination_apic_id, bool mask=false) -> Expected< void > |
| 设置 IRQ 重定向 | |
| auto | MaskIrq (uint8_t irq) -> Expected< void > |
| 屏蔽 IRQ | |
| auto | UnmaskIrq (uint8_t irq) -> Expected< void > |
| 取消屏蔽 IRQ | |
| auto | SendIpi (uint32_t target_apic_id, uint8_t vector) const -> Expected< void > |
| 发送 IPI 到指定 CPU | |
| auto | BroadcastIpi (uint8_t vector) const -> Expected< void > |
| 广播 IPI 到所有其他 CPU | |
| auto | StartupAp (uint32_t apic_id, uint64_t ap_code_addr, size_t ap_code_size, uint64_t target_addr) const -> Expected< void > |
| 启动 AP (Application Processor) | |
| auto | StartupAllAps (uint64_t ap_code_addr, size_t ap_code_size, uint64_t target_addr) const -> void |
| 唤醒所有应用处理器 (AP) | |
| auto | SendEoi () const -> void |
| 发送 EOI 信号给当前 CPU 的 Local APIC | |
| auto | SetupPeriodicTimer (uint32_t frequency_hz, uint8_t vector) const -> void |
| 设置 Local APIC 定时器 | |
| auto | PrintInfo () const -> void |
| 打印所有 APIC 信息(调试用) | |
构造/析构函数 | |
| Apic (const size_t cpu_count) | |
| Apic ()=default | |
| Apic (const Apic &)=delete | |
| Apic (Apic &&)=default | |
| auto | operator= (const Apic &) -> Apic &=delete |
| auto | operator= (Apic &&) -> Apic &=default |
| ~Apic ()=default | |
Private Attributes | |
| LocalApic | local_apic_ {} |
| Local APIC 操作接口(静态实例,用于当前 CPU) | |
| IoApic | io_apic_ {} |
| 只支持一个 IO APIC | |
| size_t | cpu_count_ {0} |
| 系统 CPU 数量 | |
APIC 管理类,管理整个系统的 Local APIC 和 IO APIC.
|
explicit |
|
default |
|
delete |
|
default |
|
default |
| auto Apic::BroadcastIpi | ( | uint8_t | vector | ) | const -> Expected<void> |
广播 IPI 到所有其他 CPU
| vector | 中断向量 |
Definition at line 78 of file apic.cpp.
| auto Apic::InitCurrentCpuLocalApic | ( | ) | -> Expected<void> |
初始化当前 CPU 的 Local APIC
Definition at line 19 of file apic.cpp.

| auto Apic::MaskIrq | ( | uint8_t | irq | ) | -> Expected<void> |
屏蔽 IRQ
| irq | IRQ 号 |
Definition at line 49 of file apic.cpp.

| auto Apic::PrintInfo | ( | ) | const -> void |
打印所有 APIC 信息(调试用)
Definition at line 142 of file apic.cpp.

| auto Apic::SendEoi | ( | ) | const -> void |
| auto Apic::SendIpi | ( | uint32_t | target_apic_id, |
| uint8_t | vector | ||
| ) | const -> Expected<void> |
发送 IPI 到指定 CPU
| target_apic_id | 目标 CPU 的 APIC ID |
| vector | 中断向量 |
Definition at line 73 of file apic.cpp.
| auto Apic::SetIrqRedirection | ( | uint8_t | irq, |
| uint8_t | vector, | ||
| uint32_t | destination_apic_id, | ||
| bool | mask = false |
||
| ) | -> Expected<void> |
设置 IRQ 重定向
| irq | IRQ 号 |
| vector | 中断向量 |
| destination_apic_id | 目标 APIC ID |
| mask | 是否屏蔽中断 |
Definition at line 34 of file apic.cpp.

| auto Apic::SetupPeriodicTimer | ( | uint32_t | frequency_hz, |
| uint8_t | vector | ||
| ) | const -> void |
设置 Local APIC 定时器
| frequency_hz | 定时器频率(Hz) |
| vector | 中断向量号 |
Definition at line 137 of file apic.cpp.
| auto Apic::StartupAllAps | ( | uint64_t | ap_code_addr, |
| size_t | ap_code_size, | ||
| uint64_t | target_addr | ||
| ) | const -> void |
唤醒所有应用处理器 (AP)
| ap_code_addr | AP 启动代码的虚拟地址 |
| ap_code_size | AP 启动代码的大小 |
| target_addr | AP 代码要复制到的目标物理地址 |
Definition at line 110 of file apic.cpp.

| auto Apic::StartupAp | ( | uint32_t | apic_id, |
| uint64_t | ap_code_addr, | ||
| size_t | ap_code_size, | ||
| uint64_t | target_addr | ||
| ) | const -> Expected<void> |
启动 AP (Application Processor)
| apic_id | 目标 APIC ID |
| ap_code_addr | AP 启动代码的虚拟地址 |
| ap_code_size | AP 启动代码的大小 |
| target_addr | AP 代码要复制到的目标物理地址 |
Definition at line 82 of file apic.cpp.

| auto Apic::UnmaskIrq | ( | uint8_t | irq | ) | -> Expected<void> |
|
private |