42-archive/kernel-rs/src/time.rs
2019-01-20 22:11:14 +01:00

22 lines
652 B
Rust

use spin::Mutex;
/// Kernel start time, measured in (seconds, microseconds) since Unix epoch
pub static START: Mutex<(u32, u32)> = Mutex::new((0, 0));
/// Kernel up time, measured in (seconds, microseconds) since `START_TIME`
pub static OFFSET: Mutex<(u32, u32)> = Mutex::new((0, 0));
pub fn monotonic() -> (u32, u32) {
*OFFSET.lock()
}
pub fn realtime() -> (u32, u32) {
let offset = monotonic();
let start = *START.lock();
let sum = start.1 + offset.1;
(start.0 + offset.0 + sum / 1_000_000, sum % 1_000_000)
}
pub fn uptime() {
let mut offset = self::OFFSET.lock();
println!("{}s", offset.0 + offset.1 / 1_000_000);
}