dope-core 0.33.0

Owned native I/O and completion driver for dope
Documentation
use std::mem;

use dope_sys::ring::layout;

use crate::driver::{
    result,
    result::IoOperation,
    storage::{Address, Bytes, Count},
};

#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum Mapping {
    Unregister {
        cause: crate::Errno,
    },
    Length {
        element: Bytes,
        count: Count,
    },
    Alignment {
        element: Bytes,
        supported: Bytes,
    },
    Syscall {
        operation: IoOperation,
        bytes: Bytes,
        cause: result::Kernel,
    },
    Ring {
        operation: IoOperation,
        region: layout::Region,
        bytes: Bytes,
        cause: result::Kernel,
    },
    Unmap {
        operation: IoOperation,
        address: Address,
        bytes: Bytes,
        cause: result::Kernel,
    },
    Null {
        operation: IoOperation,
        bytes: Bytes,
    },
    RingNull {
        operation: IoOperation,
        region: layout::Region,
        bytes: Bytes,
    },
}

impl Mapping {
    pub(crate) const fn unmap(
        op: IoOperation,
        address: Address,
        bytes: Bytes,
        cause: result::Kernel,
    ) -> Self {
        Self::Unmap {
            operation: op,
            address,
            bytes,
            cause,
        }
    }
}

const _: () = {
    assert!(mem::size_of::<Address>() == mem::size_of::<*mut core::ffi::c_void>());
    assert!(mem::size_of::<Bytes>() == mem::size_of::<usize>());
};