moa_cache 0.1.4

CPU 缓存维护操作(D-cache / I-cache)
Documentation
//! CPU 缓存维护操作(D-cache / I-cache)
#![no_std]
#![allow(unsafe_code)]
#![cfg_attr(aarch64_moana, feature(stdarch_arm_barrier))]

core::cfg_select! {
    aarch64_moana => {
        #[path = "aarch64.rs"]
        mod arch;
    }
    riscv64_moana => {
        #[path = "riscv64.rs"]
        mod arch;
    }
    _ => {
        #[path = "stub.rs"]
        mod arch;
    }
}

/// 初始化缓存参数(读取硬件 cache line size 等)
#[inline(always)]
pub fn cache_init() {
    arch::arch_cache_init();
}

/// 返回 D-cache line 大小(字节)
#[inline(always)]
pub fn dcache_line_size() -> usize {
    arch::arch_dcache_line_size()
}

/// 将指定区域的 D-cache 写回到内存(不无效化)
#[inline(always)]
pub fn clean_dcache_area(addr: usize, size: usize) {
    arch::arch_clean_dcache_area(addr, size);
}

/// 无效化指定区域的 D-cache(不写回)
#[inline(always)]
pub fn inval_dcache_area(addr: usize, size: usize) {
    arch::arch_inval_dcache_area(addr, size);
}

/// 将指定区域的 D-cache 写回并无效化
#[inline(always)]
pub fn flush_dcache_area(addr: usize, size: usize) {
    arch::arch_flush_dcache_area(addr, size);
}

/// 无效化全部 I-cache
#[inline(always)]
pub fn flush_icache_all() {
    arch::arch_flush_icache_all();
}

/// 无效化指定范围的 I-cache
#[inline(always)]
pub fn flush_icache_range(start: usize, end: usize) {
    arch::arch_flush_icache_range(start, end);
}