mod complete;
mod encode;
mod helpers;
mod poll;
mod queue;
#[cfg(test)]
mod tests;
pub use complete::{
complete_io_request, complete_io_requests_batch, try_complete_io_request,
try_complete_io_requests_batch,
};
pub(crate) use encode::empty_io_queue_byte_len;
pub use encode::{
encode_empty_io_queue, try_encode_empty_io_queue, try_encode_empty_io_queue_into,
validate_io_queue_bytes,
};
pub use helpers::io_completion_poll_body;
pub use poll::{
claim_io_requests_into, poll_io_requests, try_claim_io_requests_into, try_poll_io_requests,
try_poll_io_requests_into,
};
pub use queue::MegakernelIoQueue;
pub const IO_SLOT_WORDS: u32 = 8;
pub const IO_SLOT_COUNT: u32 = 64;
pub const IO_SOURCE_CAPABILITY_TABLE: &str = "io_source_capability_table";
pub const IO_DESTINATION_CAPABILITY_TABLE: &str = "io_destination_capability_table";
pub const IO_QUEUE_DMA_TAG: &str = "io_queue_dma";
pub mod io_word {
pub const OP_TYPE: u32 = 0;
pub const SRC_HANDLE: u32 = 1;
pub const DST_HANDLE: u32 = 2;
pub const OFFSET_LO: u32 = 3;
pub const OFFSET_HI: u32 = 4;
pub const BYTE_COUNT: u32 = 5;
pub const STATUS: u32 = 6;
pub const TAG: u32 = 7;
}
pub mod io_op {
pub const READ: u32 = 0x01;
pub const WRITE: u32 = 0x02;
pub const FENCE: u32 = 0x03;
}
pub mod io_status {
pub const OK: u32 = 0x10;
pub const ERROR: u32 = 0x11;
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct IoRequest {
pub slot_idx: u32,
pub op_type: u32,
pub src_handle: u32,
pub dst_handle: u32,
pub offset: u64,
pub byte_count: u32,
pub tag: u32,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct IoCompletion {
pub slot_idx: u32,
pub mapped_slot: u32,
pub byte_count: u32,
pub tag: u32,
}