xref: /DragonOS/kernel/src/smp/mod.rs (revision 5b59005f930266d0e9c0092373e894826150f862)
191e9d4abSLoGin use system_error::SystemError;
291e9d4abSLoGin 
3aa0367d6SLoGin use crate::{
41496ba7bSLoGin     arch::interrupt::ipi::send_ipi,
5aa0367d6SLoGin     exception::ipi::{IpiKind, IpiTarget},
6aa0367d6SLoGin };
7aa0367d6SLoGin 
840fe15e0SLoGin pub mod c_adapter;
966f67c6aSlogin pub mod core;
1070a4e555SLoGin pub mod cpu;
11aa0367d6SLoGin 
121496ba7bSLoGin pub fn kick_cpu(cpu_id: u32) -> Result<(), SystemError> {
13aa0367d6SLoGin     // todo: 增加对cpu_id的有效性检查
14aa0367d6SLoGin 
151496ba7bSLoGin     send_ipi(IpiKind::KickCpu, IpiTarget::Specified(cpu_id as usize));
16aa0367d6SLoGin     return Ok(());
17aa0367d6SLoGin }
18*5b59005fSLoGin 
19*5b59005fSLoGin pub trait SMPArch {
20*5b59005fSLoGin     /// 准备SMP初始化所需的cpu拓扑数据。
21*5b59005fSLoGin     ///
22*5b59005fSLoGin     /// 该函数需要标记为 `#[inline(never)]`
23*5b59005fSLoGin     fn prepare_cpus() -> Result<(), SystemError>;
24*5b59005fSLoGin 
25*5b59005fSLoGin     /// 初始化SMP
26*5b59005fSLoGin     ///
27*5b59005fSLoGin     /// 该函数需要标记为 `#[inline(never)]`
28*5b59005fSLoGin     fn init() -> Result<(), SystemError>;
29*5b59005fSLoGin }
30