|
SimpleKernel 1.17.0
|
GIC Redistributor 接口 More...
#include <gic.h>

Public Member Functions | |
| auto | Enable (uint32_t intid, uint32_t cpuid) const -> void |
| 允许从 redistributor 转发到 CPU interface | |
| auto | Disable (uint32_t intid, uint32_t cpuid) const -> void |
| 禁止从 redistributor 转发到 CPU interface | |
| auto | Clear (uint32_t intid, uint32_t cpuid) const -> void |
| 清除指定 cpu intid 的中断 | |
| auto | SetPrio (uint32_t intid, uint32_t cpuid, uint32_t prio) const -> void |
| 设置 intid 的优先级 | |
| auto | SetUp () const -> void |
| 初始化 gicr,在多核场景使用 | |
| auto | SetupPpi (uint32_t intid, uint32_t cpuid) const -> void |
| 设置指定 PPI 中断 PPI: private peripheral interrupt, 私有外设中断,该中断来源于外设,但是该中断只对指定的 core 有效 | |
| auto | SetupSgi (uint32_t intid, uint32_t cpuid) const -> void |
| 设置指定 SGI 中断 SGI: Software Generated Interrupt, 软件生成中断,用于处理器间通信 | |
构造/析构函数 | |
| Gicr (uint64_t _base_addr) | |
| 构造函数 | |
| Gicr ()=default | |
| Gicr (const Gicr &)=delete | |
| Gicr (Gicr &&)=delete | |
| auto | operator= (const Gicr &) -> Gicr &=delete |
| auto | operator= (Gicr &&) -> Gicr &=default |
| ~Gicr ()=default | |
Private Member Functions | |
| __always_inline auto | Ipriorityrn (uint64_t n) const -> uint64_t |
| 计算 IPRIORITYR 寄存器偏移 | |
| __always_inline auto | Read (uint32_t cpuid, uint32_t off) const -> uint32_t |
| __always_inline auto | Write (uint32_t cpuid, uint32_t off, uint32_t val) const -> void |
Private Attributes | |
| uint64_t | base_addr_ {0} |
| GICR 基地址 | |
Static Private Attributes | |
| static constexpr uint32_t | kStride = 0x20000 |
| 每个 GICR 长度 2 * 64 * 1024 | |
| static constexpr uint32_t | kCtlr = 0x0000 |
| static constexpr uint32_t | kIidr = 0x0004 |
| Redistributor Implementation Identification Register, RO. | |
| static constexpr uint32_t | kTyper = 0x0008 |
| Redistributor Type Register, RO. | |
| static constexpr uint32_t | kWaker = 0x0014 |
| static constexpr uint32_t | kWakerProcessorSleepMask = 2 |
| static constexpr uint32_t | kWakerChildrenAsleepMask = 4 |
| static constexpr uint32_t | kFctlr = 0x0020 |
| Function Control Register, RW. | |
| static constexpr uint32_t | kPwrr = 0x0024 |
| Power Register, RW. | |
| static constexpr uint32_t | kClassr = 0x0028 |
| Class Register, RW. | |
| static constexpr uint32_t | kPropbaser = 0x0070 |
| Redistributor Properties Base Address Register, RW. | |
| static constexpr uint32_t | kPendbaser = 0x0078 |
| Redistributor LPI Pending Table Base Address Register, RW. | |
| static constexpr uint32_t | kPidr4 = 0xFFD0 |
| Peripheral ID 4 Register, RO. | |
| static constexpr uint32_t | kPidr5 = 0xFFD4 |
| Peripheral ID 5 Register, RO. | |
| static constexpr uint32_t | kPidr6 = 0xFFD8 |
| Peripheral ID 6 Register, RO. | |
| static constexpr uint32_t | kPidr7 = 0xFFDC |
| Peripheral ID 7 Register, RO. | |
| static constexpr uint32_t | kPidr0 = 0xFFE0 |
| Peripheral ID 0 Register, RO. | |
| static constexpr uint32_t | kPidr1 = 0xFFE4 |
| Peripheral ID 1 Register, RO. | |
| static constexpr uint32_t | kPidr2 = 0xFFE8 |
| Peripheral ID 2 Register, RO. | |
| static constexpr uint32_t | kPidr3 = 0xFFEC |
| Peripheral ID 3 Register, RO. | |
| static constexpr uint32_t | kCidr0 = 0xFFF0 |
| Component ID 0 Register, RO. | |
| static constexpr uint32_t | kCidr1 = 0xFFF4 |
| Component ID 1 Register, RO. | |
| static constexpr uint32_t | kCidr2 = 0xFFF8 |
| Component ID 2 Register, RO. | |
| static constexpr uint32_t | kCidr3 = 0xFFFC |
| Component ID 3 Register, RO. | |
| static constexpr uint32_t | kSgiBase = 0x10000 |
| SGI 基地址 64 * 1024. | |
| static constexpr uint32_t | kIgroupr0 = kSgiBase + 0x0080 |
| static constexpr uint32_t | kIgroupr0Clear = 0 |
| static constexpr uint32_t | kIgroupr0Set = UINT32_MAX |
| static constexpr uint32_t | kIsEnabler0 = kSgiBase + 0x0100 |
| static constexpr uint32_t | kIsEnabler0Size = 32 |
| static constexpr uint32_t | kIcEnabler0 = kSgiBase + 0x0180 |
| static constexpr uint32_t | kIcEnabler0Size = 32 |
| static constexpr uint32_t | kIsPendr0 = kSgiBase + 0x0200 |
| Interrupt Set-Pending Register, RW. | |
| static constexpr uint32_t | kIcPendr0 = kSgiBase + 0x0280 |
| static constexpr uint32_t | kIcPendr0Size = 32 |
| static constexpr uint32_t | kIsActiver0 = kSgiBase + 0x0300 |
| Interrupt Set-Active Register, RW. | |
| static constexpr uint32_t | kIcActiver0 = kSgiBase + 0x0380 |
| Interrupt Clear-Active Register, RW. | |
| static constexpr uint32_t | kIpriorityrn = kSgiBase + 0x0400 |
| static constexpr uint32_t | kIpriorityrnSize = 4 |
| static constexpr uint32_t | kIpriorityrnBits = 8 |
| static constexpr uint32_t | kIpriorityrnBitsMask = 0xFF |
| static constexpr uint32_t | kIcfgrn = 0x0C00 |
| Interrupt Configuration Registers, RW. | |
| static constexpr uint32_t | kIgrpmodr0 = 0x0D00 |
| static constexpr uint32_t | kIgrpmodr0Clear = 0 |
| static constexpr uint32_t | kIgrpmodr0Set = UINT32_MAX |
| static constexpr uint32_t | kNsacr = 0x0E00 |
| Non-secure Access Control Register, RW. | |
| static constexpr uint32_t | kMiscstatusr = 0xC000 |
| Miscellaneous Status Register, RO. | |
| static constexpr uint32_t | kIerrvr = 0xC008 |
| Interrupt Error Valid Register, RW. | |
| static constexpr uint32_t | kSgidr = 0xC010 |
| SGI Default Register, RW. | |
| static constexpr uint32_t | kCfgid0 = 0xF000 |
| Configuration ID0 Register, RO. | |
| static constexpr uint32_t | kCfgid1 = 0xF004 |
| Configuration ID1 Register, RO. | |
|
explicit |
构造函数
| _base_addr | GICR 基地址 |
Definition at line 152 of file gic.cpp.

|
default |
|
delete |
|
delete |
|
default |
| auto Gic::Gicr::Clear | ( | uint32_t | intid, |
| uint32_t | cpuid | ||
| ) | const -> void |
清除指定 cpu intid 的中断
| intid | 中断号 |
| cpuid | cpu 编号 |
| auto Gic::Gicr::Disable | ( | uint32_t | intid, |
| uint32_t | cpuid | ||
| ) | const -> void |
禁止从 redistributor 转发到 CPU interface
| intid | 中断号 |
| cpuid | cpu 编号 |
| auto Gic::Gicr::Enable | ( | uint32_t | intid, |
| uint32_t | cpuid | ||
| ) | const -> void |
允许从 redistributor 转发到 CPU interface
| intid | 中断号 |
| cpuid | cpu 编号 |
|
inlineprivate |
|
inlineprivate |
| auto Gic::Gicr::SetPrio | ( | uint32_t | intid, |
| uint32_t | cpuid, | ||
| uint32_t | prio | ||
| ) | const -> void |
设置 intid 的优先级
| intid | 中断号 |
| cpuid | cpu 编号 |
| prio | 优先级 |
Definition at line 197 of file gic.cpp.
| auto Gic::Gicr::SetUp | ( | ) | const -> void |
初始化 gicr,在多核场景使用
Definition at line 112 of file gic.cpp.


| auto Gic::Gicr::SetupPpi | ( | uint32_t | intid, |
| uint32_t | cpuid | ||
| ) | const -> void |
设置指定 PPI 中断 PPI: private peripheral interrupt, 私有外设中断,该中断来源于外设,但是该中断只对指定的 core 有效
| intid | 中断号 |
| cpuid | cpu 编号 |
Definition at line 206 of file gic.cpp.
| auto Gic::Gicr::SetupSgi | ( | uint32_t | intid, |
| uint32_t | cpuid | ||
| ) | const -> void |
|
inlineprivate |
|
staticconstexprprivate |
|
staticconstexprprivate |
|
staticconstexprprivate |
|
staticconstexprprivate |
|
staticconstexprprivate |
|
staticconstexprprivate |
|
staticconstexprprivate |
|
staticconstexprprivate |
Redistributor Control Register, RW
|
staticconstexprprivate |
|
staticconstexprprivate |
|
staticconstexprprivate |
Interrupt Clear-Enable Register, RW
|
staticconstexprprivate |
|
staticconstexprprivate |
|
staticconstexprprivate |
Peripheral Clear Pending Register, RW
|
staticconstexprprivate |
|
staticconstexprprivate |
|
staticconstexprprivate |
Interrupt Group Register, RW
|
staticconstexprprivate |
|
staticconstexprprivate |
|
staticconstexprprivate |
Interrupt Group Modifier Register, RW
|
staticconstexprprivate |
|
staticconstexprprivate |
|
staticconstexprprivate |
|
staticconstexprprivate |
Interrupt Priority Registers, RW
|
staticconstexprprivate |
|
staticconstexprprivate |
|
staticconstexprprivate |
|
staticconstexprprivate |
|
staticconstexprprivate |
Interrupt Set-Enable Register, RW
|
staticconstexprprivate |
|
staticconstexprprivate |
|
staticconstexprprivate |
|
staticconstexprprivate |
|
staticconstexprprivate |
|
staticconstexprprivate |
|
staticconstexprprivate |
|
staticconstexprprivate |
|
staticconstexprprivate |
|
staticconstexprprivate |
|
staticconstexprprivate |
|
staticconstexprprivate |
|
staticconstexprprivate |
|
staticconstexprprivate |
|
staticconstexprprivate |
|
staticconstexprprivate |
|
staticconstexprprivate |
|
staticconstexprprivate |
|
staticconstexprprivate |
|
staticconstexprprivate |
Power Management Control Register, RW1
|
staticconstexprprivate |
|
staticconstexprprivate |