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 super::raw::raw_syscall;
use crate::arch::shim;

pub fn sys_mmap_anon(len: usize) -> *mut u8 {
    let ret = unsafe {
        raw_syscall(
            shim::nr_mmap(),
            0,
            len as u64,
            shim::os_prot_read_write() as u64,
            shim::os_map_private_anon() as u64,
            (-1i64) as u64,
            0,
        )
    };
    if ret < 0 {
        core::ptr::null_mut()
    } else {
        ret as *mut u8
    }
}

pub fn sys_mmap_shared_anon(len: usize) -> *mut u8 {
    let ret = unsafe {
        raw_syscall(
            shim::nr_mmap(),
            0,
            len as u64,
            shim::os_prot_read_write() as u64,
            shim::os_map_shared_anon() as u64,
            (-1i64) as u64,
            0,
        )
    };
    if ret < 0 {
        core::ptr::null_mut()
    } else {
        ret as *mut u8
    }
}

pub fn sys_munmap(addr: *mut u8, len: usize) -> i64 {
    unsafe { raw_syscall(shim::nr_munmap(), addr as u64, len as u64, 0, 0, 0, 0) }
}

pub fn sys_mmap_device(fd: i64, len: usize, offset: u64) -> *mut u8 {
    let ret = unsafe {
        raw_syscall(
            shim::nr_mmap(),
            0,
            len as u64,
            shim::os_prot_read_write() as u64,
            shim::os_map_shared() as u64,
            fd as u64,
            offset,
        )
    };
    if ret < 0 {
        core::ptr::null_mut()
    } else {
        ret as *mut u8
    }
}