forked from AbleOS/ableos
6a404b8227
(NOTE: I was unable to test on my Nix system for some reason, QEMU just refuses to work even though I ran it within the Nix Shell environment)
53 lines
1.9 KiB
Rust
53 lines
1.9 KiB
Rust
//! A module for small utilities to be used kernel wide
|
|
//! Simple functions and constants
|
|
|
|
/// Used when tab `\t` in hardware is not known and we will default to two spaces
|
|
pub const TAB: &str = " ";
|
|
|
|
|
|
// NOTE: this only reduces the code duplication in source code not in generated code!
|
|
// Written by Yours Truly: Munir
|
|
/// A simple macro to reduce code duplication when we use TAB internally
|
|
#[macro_export]
|
|
macro_rules! tab {
|
|
($num:expr) => {
|
|
TAB.repeat($num)
|
|
}
|
|
}
|
|
|
|
// NOTE: this only reduces the code duplication in source code not in generated code!
|
|
// Written by Yours Truly: Munir
|
|
/// A simple macro to reduce code duplication when we insert device types into the device tree
|
|
#[macro_export]
|
|
macro_rules! device_tree {
|
|
($devtree:expr, $dev_type_vec:expr) => {
|
|
for each_device_type in $dev_type_vec {
|
|
$devtree.devices.insert(each_device_type.to_string(), Vec::new());
|
|
}
|
|
};
|
|
}
|
|
|
|
// NOTE: this only reduces the code duplication in source code not in generated code!
|
|
// Written by Yours Truly: Munir
|
|
/// A simple macro to reduce code duplication when we insert cpu features into the array/vector
|
|
#[macro_export]
|
|
macro_rules! cpu_features {
|
|
($cpu_master_object:expr, $result_vec:expr) => {
|
|
// checks for cpu features and returns bool for each feature
|
|
let apic = $cpu_master_object.apic();
|
|
let avx = $cpu_master_object.avx();
|
|
let avx2 = $cpu_master_object.avx2();
|
|
let x2 = $cpu_master_object.x2apic();
|
|
let gb_pages = $cpu_master_object.gigabyte_pages();
|
|
let rdseed = $cpu_master_object.rdseed();
|
|
let rdrand = $cpu_master_object.rdrand();
|
|
|
|
$result_vec.push(("apic", apic));
|
|
$result_vec.push(("avx", avx));
|
|
$result_vec.push(("avx2", avx2));
|
|
$result_vec.push(("gigabyte pages", gb_pages));
|
|
$result_vec.push(("rdrand", rdrand));
|
|
$result_vec.push(("rdseed", rdseed));
|
|
$result_vec.push(("x2apic", x2));
|
|
};
|
|
} |