pub struct VirtioRngDevice {
base_addr: usize,
virtqueues: Mutex<[VirtQueue<'static>; 1]>,
buffer: Mutex<VecDeque<u8>>,
features: RwLock<u32>,
initialized: RwLock<bool>,
}Expand description
VirtIO RNG Device
This device provides access to a hardware random number generator through the VirtIO interface, acting as an entropy source for the kernel RNG.
Fields§
§base_addr: usizeBase memory address for MMIO access
virtqueues: Mutex<[VirtQueue<'static>; 1]>VirtIO queue for random number requests
buffer: Mutex<VecDeque<u8>>Internal buffer for random data
features: RwLock<u32>Negotiated features
initialized: RwLock<bool>Device initialization status
Implementations§
Source§impl VirtioRngDevice
impl VirtioRngDevice
Sourcefn fill_buffer(&self) -> Result<usize, &'static str>
fn fill_buffer(&self) -> Result<usize, &'static str>
Fill the internal buffer with random data from the device
This method requests random data from the VirtIO RNG device and stores it in the internal buffer for later reads.
§Returns
The number of bytes added to the buffer, or an error message
Sourcefn read_byte_internal(&self) -> Option<u8>
fn read_byte_internal(&self) -> Option<u8>
Read a byte from the internal buffer, filling it if necessary
§Returns
A byte from the buffer, or None if unable to get random data
Trait Implementations§
Source§impl EntropySource for VirtioRngDevice
impl EntropySource for VirtioRngDevice
Source§fn read_entropy(&self, buffer: &mut [u8]) -> usize
fn read_entropy(&self, buffer: &mut [u8]) -> usize
Read random bytes from this source Read more
Source§fn is_available(&self) -> bool
fn is_available(&self) -> bool
Check if this source is available and ready
Source§impl VirtioDevice for VirtioRngDevice
impl VirtioDevice for VirtioRngDevice
fn get_base_addr(&self) -> usize
fn get_virtqueue_count(&self) -> usize
fn get_virtqueue_size(&self, queue_idx: usize) -> usize
Source§fn get_queue_desc_addr(&self, queue_idx: usize) -> Option<u64>
fn get_queue_desc_addr(&self, queue_idx: usize) -> Option<u64>
Get the descriptor address for a virtqueue
Source§fn get_queue_driver_addr(&self, queue_idx: usize) -> Option<u64>
fn get_queue_driver_addr(&self, queue_idx: usize) -> Option<u64>
Get the driver area address for a virtqueue
Source§fn get_queue_device_addr(&self, queue_idx: usize) -> Option<u64>
fn get_queue_device_addr(&self, queue_idx: usize) -> Option<u64>
Get the device area address for a virtqueue
Source§fn get_supported_features(&self, _device_features: u32) -> u32
fn get_supported_features(&self, _device_features: u32) -> u32
Get device features supported by this driver Read more
fn debug_dump_mmio_state(&self, tag: &'static str)
fn debug_log_status_transition( &self, tag: &'static str, old: u32, new: u32, readback: u32, )
fn wait_for_status_zero( &self, tag: &'static str, max_iters: usize, ) -> Result<(), &'static str>
fn is_modern_device(&self) -> bool
fn supports_feature(&self, feature: u32) -> bool
Source§fn reset(&mut self) -> Result<(), &'static str>
fn reset(&mut self) -> Result<(), &'static str>
Reset the device by writing 0 to the Status register
Source§fn acknowledge(&mut self)
fn acknowledge(&mut self)
Set ACKNOWLEDGE status bit
Source§fn set_failed(&mut self)
fn set_failed(&mut self)
Set FAILED status bit
Source§fn negotiate_features(&mut self) -> Result<u32, &'static str>
fn negotiate_features(&mut self) -> Result<u32, &'static str>
Negotiate device features Read more
fn allow_ring_features(&self) -> bool
Source§fn setup_queue(&mut self, queue_idx: usize, queue_size: usize) -> bool
fn setup_queue(&mut self, queue_idx: usize, queue_size: usize) -> bool
Set up a virtqueue Read more
Source§fn read_config<T: Sized>(&self, offset: usize) -> T
fn read_config<T: Sized>(&self, offset: usize) -> T
Read device-specific configuration Read more
Source§fn write_config<T: Sized>(&self, offset: usize, value: T)
fn write_config<T: Sized>(&self, offset: usize, value: T)
Write device-specific configuration Read more
Source§fn get_device_info(&self) -> (u32, u32)
fn get_device_info(&self) -> (u32, u32)
Get device and vendor IDs Read more
Source§fn get_interrupt_status(&self) -> u32
fn get_interrupt_status(&self) -> u32
Get interrupt status Read more
Source§fn process_interrupts(&mut self) -> u32
fn process_interrupts(&mut self) -> u32
Process interrupts (polling method) Read more
Source§fn memory_barrier(&self)
fn memory_barrier(&self)
Memory barrier for ensuring memory operations ordering
Source§fn notify(&self, virtqueue_idx: usize)
fn notify(&self, virtqueue_idx: usize)
Notify the device about new buffers in a specified virtqueue Read more
Source§fn read32_register(&self, register: Register) -> u32
fn read32_register(&self, register: Register) -> u32
Read a 32-bit value from a device register Read more
Source§fn write32_register(&self, register: Register, value: u32)
fn write32_register(&self, register: Register, value: u32)
Write a 32-bit value to a device register Read more
Source§fn read64_register(&self, register: Register) -> u64
fn read64_register(&self, register: Register) -> u64
Read a 64-bit value from a device register Read more
Source§fn write64_register(&self, register: Register, value: u64)
fn write64_register(&self, register: Register, value: u64)
Write a 64-bit value to a device register Read more