use core::time::Duration;
use uefi::boot::stall;
#[inline(always)]
pub fn tick() -> u64 {
#[cfg(target_arch = "x86")]
unsafe { core::arch::x86::_rdtsc() }
#[cfg(target_arch = "x86_64")]
unsafe { core::arch::x86_64::_rdtsc() }
#[cfg(target_arch = "aarch64")]
unsafe {
let mut ticks: u64;
core::arch::asm!("mrs {}, cntvct_el0", out(reg) ticks);
ticks
}
}
pub fn calc_freq_blocking() -> u64 {
let start = tick();
stall(Duration::from_millis(100));
let end = tick();
let ticks_per_100ms = end - start;
ticks_per_100ms * 10
}