//! 系统 BSP 配置项定义
//!
//! 定义微内核运行所必须的板级硬件配置 trait 和数据结构，
//! 包括控制台、中断控制器、时钟源、内存布局和多核信息。
#![no_std]

pub mod clocksource;
pub mod console;
pub mod irqchip;
pub mod memrange;
pub mod smp;

/// 系统 BSP 定义
///
/// BSP 实现方需提供控制台、中断控制器、时钟源的具体类型，
/// 并通过关联常量配置硬件参数。
pub trait BspDefine {
    /// 控制台实现类型
    type Console: console::ConsoleImpl;
    /// 中断控制器实现类型
    type Irqchip: irqchip::IrqchipImpl;
    /// 时钟源实现类型
    type Clock: clocksource::ClockImpl;

    /// 多核信息
    const DEFINE_SMP: smp::SmpDefine;

    /// 内存域信息
    const DEFINE_MEMS: memrange::MemDefine;

    /// 控制台实例
    const DEFINE_CONSOLE: Self::Console;

    /// 中断控制器实例
    const DEFINE_IRQCHIP: Self::Irqchip;

    /// 时钟源实例
    const DEFINE_CLOCK: Self::Clock;

    /// 系统启动前期调用，用于板级硬件早期初始化
    fn early_init(&self) {}

    /// 系统启动后期调用，完成最终板级初始化和加载 APP
    fn late_init(&self);

    /// 从核启动后期调用
    fn secondary_init(&self) {}
}
