//! The ableOS kernel.

#![deny(missing_docs)]
#![no_std]
#![feature(prelude_import)]
#![feature(arbitrary_enum_discriminant)]

pub mod device_interface;
pub mod messaging;
pub mod panic;
pub mod proccess;
pub mod syscalls;
pub mod time;

use core::sync::atomic::{AtomicU64, Ordering::Relaxed};
use versioning::Version;

/// The number of ticks since the first CPU was started
pub static TICK: AtomicU64 = AtomicU64::new(0);

/// Kernel's version
pub const KERNEL_VERSION: Version = Version {
    major: 0,
    minor: 1,
    patch: 2,
};

/// called by arch specific timers to tick up all kernel related functions
pub fn tick() {
    let mut data = TICK.load(Relaxed);
    data = data.wrapping_add(1);

    TICK.store(data, Relaxed)
}