hardware 0.0.9

A no_std bare-metal hardware abstraction layer — all port I/O, memory and swap allocations are guarded at runtime. Do not consider this dependency stable before x.1.x
Documentation
use core::sync::atomic::{AtomicUsize, Ordering};

static FREQ_HZ: AtomicUsize = AtomicUsize::new(0);

pub fn set_frequency(freq_hz: u64) {
    FREQ_HZ.store(freq_hz as usize, Ordering::Release);
}

pub fn current_frequency() -> u64 {
    let cached = FREQ_HZ.load(Ordering::Acquire) as u64;
    if cached > 0 {
        return cached;
    }
    let sysfs = crate::cpu::frequency::read_cpu_freq_sysfs(0);
    if sysfs > 0 {
        FREQ_HZ.store(sysfs as usize, Ordering::Release);
        return sysfs;
    }
    0
}