pub struct SmcccTrng {}Expand description
An backend implementation of the SMCCC TRNG (DEN0098).
Might not be fully spec-compliant regarding the conditioned entropy.
Implementations§
Source§impl SmcccTrng
impl SmcccTrng
Sourcepub const HVC32_FID_RANGE: Range<u32>
pub const HVC32_FID_RANGE: Range<u32>
Standard function ID ranges for TRNG 32-bit calls, defined in SMCCC (DEN0028).
Sourcepub const HVC64_FID_RANGE: Range<u32>
pub const HVC64_FID_RANGE: Range<u32>
Standard function ID ranges for TRNG 64-bit calls, defined in SMCCC (DEN0028).
const FID_TRNG_VERSION: u32 = 2_214_592_592u32
const FID_TRNG_FEATURES: u32 = 2_214_592_593u32
const FID_TRNG_GET_UUID: u32 = 2_214_592_594u32
const FID_TRNG_RND32: u32 = 2_214_592_595u32
const FID_TRNG_RND64: u32 = 3_288_334_419u32
const VERSION: (u16, u16)
Sourceconst UUID: Uuid
const UUID: Uuid
CrosVM SMCCC TRNG back-end UUID.
Equivalent to Uuid::new_v8(*b"SMCCCTRNG-CrosVM").
fn version(&self) -> Result<U31, SmcccTrngError>
fn features(&self, func_id: u32) -> Result<U31, SmcccTrngError>
fn get_uuid(&self) -> Result<[u32; 4], SmcccTrngError>
fn rnd32(&self, n_bits: u32) -> Result<[u32; 3], SmcccTrngError>
fn rnd64(&self, n_bits: u64) -> Result<[u64; 3], SmcccTrngError>
Trait Implementations§
Source§impl BusDevice for SmcccTrng
impl BusDevice for SmcccTrng
Source§fn device_id(&self) -> DeviceId
fn device_id(&self) -> DeviceId
Returns a unique id per device type suitable for metrics gathering.
Source§fn debug_label(&self) -> String
fn debug_label(&self) -> String
Returns a label suitable for debug output.
Source§fn handle_hypercall(&self, abi: &mut HypercallAbi) -> Result<()>
fn handle_hypercall(&self, abi: &mut HypercallAbi) -> Result<()>
Handles a hypercall. Only used by hypercall-based devices. Read more
Source§fn read(&mut self, _info: BusAccessInfo, _data: &mut [u8])
fn read(&mut self, _info: BusAccessInfo, _data: &mut [u8])
Performs a read access to this device, based on
info.Source§fn write(&mut self, _info: BusAccessInfo, _data: &[u8])
fn write(&mut self, _info: BusAccessInfo, _data: &[u8])
Performs a write access to this device, based on
info.Source§fn config_register_write(
&mut self,
reg_idx: usize,
offset: u64,
data: &[u8],
) -> ConfigWriteResult
fn config_register_write( &mut self, reg_idx: usize, offset: u64, data: &[u8], ) -> ConfigWriteResult
Sets a register in the configuration space. Only used by PCI. Read more
Source§fn config_register_read(&self, reg_idx: usize) -> u32
fn config_register_read(&self, reg_idx: usize) -> u32
Gets a register from the configuration space. Only used by PCI. Read more
Source§fn init_pci_config_mapping(
&mut self,
shmem: &SharedMemory,
base: usize,
len: usize,
) -> bool
fn init_pci_config_mapping( &mut self, shmem: &SharedMemory, base: usize, len: usize, ) -> bool
Provides a memory region to back MMIO access to the configuration
space. If the device can keep the memory region up to date, then it
should return true, after which no more calls to config_register_read
will be made. Otherwise the device should return false. Read more
Source§fn virtual_config_register_write(&mut self, reg_idx: usize, value: u32)
fn virtual_config_register_write(&mut self, reg_idx: usize, value: u32)
Sets a register in the virtual config space. Only used by PCI. Read more
Source§fn virtual_config_register_read(&self, reg_idx: usize) -> u32
fn virtual_config_register_read(&self, reg_idx: usize) -> u32
Gets a register from the virtual config space. Only used by PCI. Read more
Source§fn on_sandboxed(&mut self)
fn on_sandboxed(&mut self)
Invoked when the device is sandboxed.
Source§fn get_ranges(&self) -> Vec<(BusRange, BusType)>
fn get_ranges(&self) -> Vec<(BusRange, BusType)>
Gets a list of all ranges registered by this BusDevice.
Source§fn destroy_device(&mut self)
fn destroy_device(&mut self)
Invoked when the device is destroyed
Source§impl BusDeviceSync for SmcccTrng
impl BusDeviceSync for SmcccTrng
fn read(&self, _info: BusAccessInfo, _data: &mut [u8])
fn write(&self, _info: BusAccessInfo, _data: &[u8])
fn snapshot_sync(&self) -> Result<AnySnapshot>
Source§fn restore_sync(&self, _data: AnySnapshot) -> Result<()>
fn restore_sync(&self, _data: AnySnapshot) -> Result<()>
Load a saved snapshot of an image.
Source§fn sleep_sync(&self) -> Result<()>
fn sleep_sync(&self) -> Result<()>
Stop all threads related to the device.
Sleep should be idempotent.
Auto Trait Implementations§
impl Freeze for SmcccTrng
impl RefUnwindSafe for SmcccTrng
impl Send for SmcccTrng
impl Sync for SmcccTrng
impl Unpin for SmcccTrng
impl UnwindSafe for SmcccTrng
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
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Convert
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Convert
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Convert
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Convert
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.