#![cfg_attr(not(test), no_std)]
#![cfg_attr(docsrs, feature(doc_cfg))]
#![doc = include_str!("../README.md")]
#[macro_use]
extern crate crate_interface;
pub mod console;
pub mod init;
#[cfg(feature = "irq")]
pub mod irq;
pub mod mem;
pub mod power;
pub mod time;
pub use axplat_macros::main;
pub use crate_interface::impl_interface;
#[cfg(feature = "smp")]
pub use axplat_macros::secondary_main;
#[doc(hidden)]
pub mod __priv {
pub use const_str::equal as const_str_eq;
}
#[macro_export]
macro_rules! assert_str_eq {
($expect:expr, $actual:expr, $mes:literal) => {
const _: () = assert!($crate::__priv::const_str_eq!($expect, $actual), $mes);
};
($expect:expr, $actual:expr $(,)?) => {
const _: () = assert!(
$crate::__priv::const_str_eq!($expect, $actual),
"assertion failed: expected != actual.",
);
};
}
pub fn call_main(cpu_id: usize, arg: usize) -> ! {
unsafe { __axplat_main(cpu_id, arg) }
}
#[cfg(feature = "smp")]
pub fn call_secondary_main(cpu_id: usize) -> ! {
unsafe { __axplat_secondary_main(cpu_id) }
}
unsafe extern "Rust" {
fn __axplat_main(cpu_id: usize, arg: usize) -> !;
fn __axplat_secondary_main(cpu_id: usize) -> !;
}