pub struct VirtioBlkDriver {
mmio_base: u64,
transport: VirtioTransport,
features: u64,
info: BlockDeviceInfo,
queue: VirtqueueState,
in_flight: [InFlightRequest; 32],
next_desc_set: u16,
headers_cpu: *mut VirtioBlkReqHeader,
status_cpu: *mut u8,
}Expand description
VirtIO block device driver.
Fields§
§mmio_base: u64MMIO base address (legacy) or common_cfg (PCI Modern)
transport: VirtioTransportTransport handle for device operations
features: u64Negotiated features
info: BlockDeviceInfoDevice info
queue: VirtqueueStateVirtqueue state
in_flight: [InFlightRequest; 32]In-flight requests
next_desc_set: u16Next free descriptor set (each request uses 3)
headers_cpu: *mut VirtioBlkReqHeaderHeaders CPU pointer
status_cpu: *mut u8Status CPU pointer
Implementations§
Source§impl VirtioBlkDriver
impl VirtioBlkDriver
Sourcepub unsafe fn new(
mmio_base: u64,
config: VirtioBlkConfig,
) -> Result<Self, VirtioBlkInitError>
pub unsafe fn new( mmio_base: u64, config: VirtioBlkConfig, ) -> Result<Self, VirtioBlkInitError>
Create and initialize VirtIO-blk driver.
§Safety
mmio_basemust be valid VirtIO-blk MMIO addressconfigmust contain valid physical addresses
Sourcepub unsafe fn new_with_transport(
transport: VirtioTransport,
config: VirtioBlkConfig,
_tsc_freq: u64,
) -> Result<Self, VirtioBlkInitError>
pub unsafe fn new_with_transport( transport: VirtioTransport, config: VirtioBlkConfig, _tsc_freq: u64, ) -> Result<Self, VirtioBlkInitError>
Create and initialize VirtIO-blk driver using transport abstraction.
This supports both MMIO (legacy) and PCI Modern transports.
§Safety
- Transport addresses must be valid
configmust contain valid physical addresses
Sourcefn alloc_desc_set(&mut self) -> Option<(u16, u32)>
fn alloc_desc_set(&mut self) -> Option<(u16, u32)>
Allocate a descriptor set (3 consecutive descriptors).
Sourcefn header_phys(&self, slot_idx: usize) -> u64
fn header_phys(&self, slot_idx: usize) -> u64
Get header physical address for a descriptor set.
Sourcefn status_phys(&self, slot_idx: usize) -> u64
fn status_phys(&self, slot_idx: usize) -> u64
Get status physical address for a descriptor set.
Sourcefn read_status(&self, slot_idx: usize) -> u8
fn read_status(&self, slot_idx: usize) -> u8
Read status byte for a slot.
Trait Implementations§
Source§impl BlockDriver for VirtioBlkDriver
impl BlockDriver for VirtioBlkDriver
Source§fn info(&self) -> BlockDeviceInfo
fn info(&self) -> BlockDeviceInfo
Get device information.
Source§fn can_submit(&self) -> bool
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>
fn submit_read( &mut self, sector: u64, buffer_phys: u64, num_sectors: u32, request_id: u32, ) -> Result<(), BlockError>
Submit a read request. Read more
Source§fn 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>
Submit a write request. Read more
Source§fn poll_completion(&mut self) -> Option<BlockCompletion>
fn poll_completion(&mut self) -> Option<BlockCompletion>
Poll for completed requests. Read more
Source§impl BlockDriverInit for VirtioBlkDriver
impl BlockDriverInit for VirtioBlkDriver
Source§type Error = VirtioBlkInitError
type Error = VirtioBlkInitError
Error type for initialization failures.
Source§type Config = VirtioBlkConfig
type Config = VirtioBlkConfig
Configuration type.
Source§fn supported_vendors() -> &'static [u16]
fn supported_vendors() -> &'static [u16]
PCI vendor IDs this driver supports.
Source§fn supported_devices() -> &'static [u16]
fn supported_devices() -> &'static [u16]
PCI device IDs this driver supports.
impl Send for VirtioBlkDriver
Auto Trait Implementations§
impl Freeze for VirtioBlkDriver
impl RefUnwindSafe for VirtioBlkDriver
impl !Sync for VirtioBlkDriver
impl Unpin for VirtioBlkDriver
impl UnwindSafe for VirtioBlkDriver
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