#![no_std]
use core::{ptr::NonNull, time::Duration};
pub use ax_errno::{AxError, AxResult};
pub use ax_memory_addr::{PhysAddr, VirtAddr};
pub use irq_framework::{
AutoEnable as IrqAutoEnable, CpuId as IrqCpuId, CpuMask as IrqCpuMask, IrqContext, IrqError,
IrqHandle, IrqNumber, IrqOutcome, IrqRequest, IrqReturn, IrqScope, IrqStatus, RawIrqHandler,
ShareMode as IrqShareMode,
};
use trait_ffi::*;
pub mod dma;
pub mod mmio;
#[def_extern_trait]
pub trait Klib {
fn mem_iomap(addr: PhysAddr, size: usize) -> AxResult<VirtAddr>;
fn mem_virt_to_phys(addr: VirtAddr) -> PhysAddr;
fn mem_make_dma_coherent_uncached(addr: VirtAddr, size: usize) -> AxResult;
fn mem_restore_dma_cached(addr: VirtAddr, size: usize) -> AxResult;
fn dma_alloc_pages(dma_mask: u64, num_pages: usize, align: usize) -> AxResult<VirtAddr>;
fn dma_dealloc_pages(addr: VirtAddr, num_pages: usize);
fn time_busy_wait(dur: Duration);
fn time_monotonic_nanos() -> u64;
fn time_try_init_epoch_offset(epoch_time_nanos: u64) -> bool;
fn irq_set_enable(irq: usize, enabled: bool);
fn irq_request_shared(
irq: usize,
handler: RawIrqHandler,
data: NonNull<()>,
) -> AxResult<IrqHandle>;
fn irq_request_percpu(
irq: usize,
cpus: IrqCpuMask,
handler: RawIrqHandler,
data: NonNull<()>,
) -> AxResult<IrqHandle>;
fn irq_free(handle: IrqHandle) -> AxResult;
fn irq_enable(handle: IrqHandle) -> AxResult;
fn irq_disable(handle: IrqHandle) -> AxResult;
}
pub mod mem {
pub use super::klib::{
mem_iomap as iomap, mem_make_dma_coherent_uncached as make_dma_coherent_uncached,
mem_restore_dma_cached as restore_dma_cached, mem_virt_to_phys as virt_to_phys,
};
}
pub mod time {
pub use super::klib::{
time_busy_wait as busy_wait, time_monotonic_nanos as monotonic_nanos,
time_try_init_epoch_offset as try_init_epoch_offset,
};
}
pub mod irq {
pub use super::{
IrqAutoEnable as AutoEnable, IrqContext, IrqCpuId as CpuId, IrqCpuMask as CpuMask,
IrqError, IrqHandle, IrqNumber, IrqOutcome, IrqRequest, IrqReturn, IrqScope,
IrqShareMode as ShareMode, IrqStatus, RawIrqHandler,
klib::{
irq_disable as disable, irq_enable as enable, irq_free as free,
irq_request_percpu as request_percpu, irq_request_shared as request_shared,
irq_set_enable as set_enable,
},
};
}