pub struct VirtioBlkBlockIo<'a> {
driver: &'a mut VirtioBlkDriver,
dma_buffer: &'a mut [u8],
dma_buffer_phys: u64,
next_request_id: u32,
timeout_ticks: u64,
}Expand description
BlockIo adapter for VirtIO-blk driver.
Provides synchronous block I/O by wrapping the async VirtIO-blk driver and using a DMA-capable buffer for transfers.
Fields§
§driver: &'a mut VirtioBlkDriverThe underlying VirtIO-blk driver
dma_buffer: &'a mut [u8]DMA buffer for transfers (must be physically contiguous)
dma_buffer_phys: u64Physical address of DMA buffer
next_request_id: u32Next request ID
timeout_ticks: u64Timeout in TSC ticks
Implementations§
Source§impl<'a> VirtioBlkBlockIo<'a>
impl<'a> VirtioBlkBlockIo<'a>
Sourcepub const MAX_TRANSFER_SIZE: usize = 65_536usize
pub const MAX_TRANSFER_SIZE: usize = 65_536usize
Maximum transfer size per request (64KB default)
Sourcepub fn new(
driver: &'a mut VirtioBlkDriver,
dma_buffer: &'a mut [u8],
dma_buffer_phys: u64,
timeout_ticks: u64,
) -> Result<Self, BlockIoError>
pub fn new( driver: &'a mut VirtioBlkDriver, dma_buffer: &'a mut [u8], dma_buffer_phys: u64, timeout_ticks: u64, ) -> Result<Self, BlockIoError>
Sourcefn wait_for_completion(&mut self, request_id: u32) -> Result<(), BlockIoError>
fn wait_for_completion(&mut self, request_id: u32) -> Result<(), BlockIoError>
Wait for a specific request to complete.
Sourcefn sync_read(
&mut self,
sector: u64,
num_sectors: u32,
dst: &mut [u8],
) -> Result<(), BlockIoError>
fn sync_read( &mut self, sector: u64, num_sectors: u32, dst: &mut [u8], ) -> Result<(), BlockIoError>
Perform a synchronous read.
Sourcefn sync_write(
&mut self,
sector: u64,
num_sectors: u32,
src: &[u8],
) -> Result<(), BlockIoError>
fn sync_write( &mut self, sector: u64, num_sectors: u32, src: &[u8], ) -> Result<(), BlockIoError>
Perform a synchronous write.
Trait Implementations§
Source§impl<'a> BlockIo for VirtioBlkBlockIo<'a>
impl<'a> BlockIo for VirtioBlkBlockIo<'a>
Source§type Error = BlockIoError
type Error = BlockIoError
IO error type.
Source§fn block_size(&self) -> BlockSize
fn block_size(&self) -> BlockSize
Get the [
BlockSize]. The return value is not allowed to
change.Source§fn num_blocks(&mut self) -> Result<u64, Self::Error>
fn num_blocks(&mut self) -> Result<u64, Self::Error>
Get the number of logical blocks in the disk. Read more
Source§fn read_blocks(
&mut self,
start_lba: Lba,
dst: &mut [u8],
) -> Result<(), Self::Error>
fn read_blocks( &mut self, start_lba: Lba, dst: &mut [u8], ) -> Result<(), Self::Error>
Read contiguous blocks from the disk. The
dst buffer size must
be a multiple of block_size. Implementations are permitted
to panic if this precondition is not met, e.g. by calling
[BlockSize::assert_valid_block_buffer].Source§fn write_blocks(
&mut self,
start_lba: Lba,
src: &[u8],
) -> Result<(), Self::Error>
fn write_blocks( &mut self, start_lba: Lba, src: &[u8], ) -> Result<(), Self::Error>
Write contiguous block to the disk. The
src buffer size must
be a multiple of block_size. Implementations are permitted
to panic if this precondition is not met, e.g. by calling
[BlockSize::assert_valid_block_buffer]. Read moreAuto Trait Implementations§
impl<'a> Freeze for VirtioBlkBlockIo<'a>
impl<'a> RefUnwindSafe for VirtioBlkBlockIo<'a>
impl<'a> Send for VirtioBlkBlockIo<'a>
impl<'a> !Sync for VirtioBlkBlockIo<'a>
impl<'a> Unpin for VirtioBlkBlockIo<'a>
impl<'a> !UnwindSafe for VirtioBlkBlockIo<'a>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more