morpheus_network::driver::block_traits

Trait BlockDriver

Source
pub trait BlockDriver {
    // Required methods
    fn info(&self) -> BlockDeviceInfo;
    fn can_submit(&self) -> bool;
    fn submit_read(
        &mut self,
        sector: u64,
        buffer_phys: u64,
        num_sectors: u32,
        request_id: u32,
    ) -> Result<(), BlockError>;
    fn submit_write(
        &mut self,
        sector: u64,
        buffer_phys: u64,
        num_sectors: u32,
        request_id: u32,
    ) -> Result<(), BlockError>;
    fn poll_completion(&mut self) -> Option<BlockCompletion>;
    fn notify(&mut self);

    // Provided method
    fn flush(&mut self) -> Result<(), BlockError> { ... }
}
Expand description

Core block device interface.

All block drivers must implement this trait. Operations are non-blocking with fire-and-forget semantics.

Required Methods§

Source

fn info(&self) -> BlockDeviceInfo

Get device information.

Source

fn can_submit(&self) -> bool

Check if device can accept a new request.

Source

fn submit_read( &mut self, sector: u64, buffer_phys: u64, num_sectors: u32, request_id: u32, ) -> Result<(), BlockError>

Submit a read request.

§Arguments
  • sector: Starting sector number
  • buffer_phys: Physical address of destination buffer
  • num_sectors: Number of sectors to read
  • request_id: Caller-provided ID for tracking
§Returns
  • Ok(()): Request submitted
  • Err(BlockError): Submit failed
§Contract
  • MUST return immediately (fire-and-forget)
  • Buffer must remain valid until completion
Source

fn submit_write( &mut self, sector: u64, buffer_phys: u64, num_sectors: u32, request_id: u32, ) -> Result<(), BlockError>

Submit a write request.

§Arguments
  • sector: Starting sector number
  • buffer_phys: Physical address of source buffer
  • num_sectors: Number of sectors to write
  • request_id: Caller-provided ID for tracking
§Returns
  • Ok(()): Request submitted
  • Err(BlockError): Submit failed
Source

fn poll_completion(&mut self) -> Option<BlockCompletion>

Poll for completed requests.

§Returns
  • Some(completion): A request completed
  • None: No completions available
Source

fn notify(&mut self)

Notify device that requests are pending.

Called after one or more submit calls.

Provided Methods§

Source

fn flush(&mut self) -> Result<(), BlockError>

Flush any pending writes (if supported).

Implementors§