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§
Sourcefn info(&self) -> BlockDeviceInfo
fn info(&self) -> BlockDeviceInfo
Get device information.
Sourcefn can_submit(&self) -> bool
fn can_submit(&self) -> bool
Check if device can accept a new request.
Sourcefn submit_read(
&mut self,
sector: u64,
buffer_phys: u64,
num_sectors: u32,
request_id: u32,
) -> Result<(), BlockError>
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 numberbuffer_phys: Physical address of destination buffernum_sectors: Number of sectors to readrequest_id: Caller-provided ID for tracking
§Returns
Ok(()): Request submittedErr(BlockError): Submit failed
§Contract
- MUST return immediately (fire-and-forget)
- Buffer must remain valid until completion
Sourcefn submit_write(
&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>
Sourcefn poll_completion(&mut self) -> Option<BlockCompletion>
fn poll_completion(&mut self) -> Option<BlockCompletion>
Poll for completed requests.
§Returns
Some(completion): A request completedNone: No completions available
Provided Methods§
Sourcefn flush(&mut self) -> Result<(), BlockError>
fn flush(&mut self) -> Result<(), BlockError>
Flush any pending writes (if supported).