//! 系统时钟管理

use crate::{
    bsp::{__clock_init, __clock_init_cpu},
    time::{
        clockevents::{clockevent_init, clockevent_init_cpu},
        hrtimer::{hrtimer_init, hrtimer_init_cpu},
        jiffies::system_tick_init_cpu,
        sched_clock::sched_clock_init,
        timekeeping::timekeeping_init,
    },
};

pub mod clockevents;
pub mod clocksource;
pub mod delay;
pub mod hrtimer;
pub mod jiffies;
pub(crate) mod sched_clock;
pub mod timekeeping;

/// 一秒包含的毫秒数
pub const MSEC_PER_SEC: u64 = 1_000;
/// 一毫秒包含的微秒数
pub const USEC_PER_MSEC: u64 = 1_000;
/// 一微秒包含的纳秒数
pub const NSEC_PER_USEC: u64 = 1_000;
/// 一毫秒包含的纳秒数
pub const NSEC_PER_MSEC: u64 = 1_000_000;
/// 一秒包含的微秒数
pub const USEC_PER_SEC: u64 = 1_000_000;
/// 一秒包含的纳秒数
pub const NSEC_PER_SEC: u64 = 1_000_000_000;

pub(crate) fn time_init() {
    unsafe {
        __clock_init();
    }
    clockevent_init();
    hrtimer_init();
    sched_clock_init();
    system_tick_init_cpu();
}

pub(crate) fn time_init_cpu() {
    unsafe {
        __clock_init_cpu();
    }
    clockevent_init_cpu();
    hrtimer_init_cpu();
    system_tick_init_cpu();
}
