pub struct PvPanicPciDevice {
    pci_address: Option<PciAddress>,
    config_regs: PciConfiguration,
    evt_wrtube: SendTube,
}

Fields§

§pci_address: Option<PciAddress>§config_regs: PciConfiguration§evt_wrtube: SendTube

Implementations§

Trait Implementations§

source§

impl PciDevice for PvPanicPciDevice

source§

fn debug_label(&self) -> String

Returns a label suitable for debug output.
source§

fn allocate_address( &mut self, resources: &mut SystemAllocator ) -> Result<PciAddress, Error>

Allocate and return an unique bus, device and function number for this device. May be called multiple times; on subsequent calls, the device should return the same address it returned from the first call.
source§

fn allocate_io_bars( &mut self, resources: &mut SystemAllocator ) -> Result<Vec<BarRange>, Error>

Allocates the needed IO BAR space using the allocate function which takes a size and returns an address. Returns a Vec of BarRange{addr, size, prefetchable}.
source§

fn keep_rds(&self) -> Vec<RawDescriptor>

A vector of device-specific file descriptors that must be kept open after jailing. Must be called before the process is jailed.
source§

fn get_bar_configuration(&self, bar_num: usize) -> Option<PciBarConfiguration>

Returns the configuration of a base address register, if present.
source§

fn read_config_register(&self, reg_idx: usize) -> u32

Reads from a PCI configuration register. Read more
source§

fn write_config_register(&mut self, reg_idx: usize, offset: u64, data: &[u8])

Writes to a PCI configuration register. Read more
source§

fn setup_pci_config_mapping( &mut self, shmem: &SharedMemory, base: usize, len: usize ) -> Result<bool, Error>

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 Ok(true), after which no more calls to read_config_register will be made. If support isn’t implemented, it should return Ok(false). Otherwise, it should return an error (a failure here is not treated as a fatal setup error). Read more
source§

fn read_bar(&mut self, bar_index: PciBarIndex, offset: u64, data: &mut [u8])

Reads from a BAR region mapped in to the device. Read more
source§

fn write_bar(&mut self, bar_index: PciBarIndex, offset: u64, data: &[u8])

Writes to a BAR region mapped in to the device. Read more
source§

fn preferred_address(&self) -> Option<PciAddress>

Preferred PCI address for this device, if any.
source§

fn preferred_irq(&self) -> PreferredIrq

Preferred IRQ for this device. The device may request a specific pin and IRQ number by returning a Fixed value. If a device does not support INTx# interrupts at all, it should return None. Otherwise, an appropriate IRQ will be allocated automatically. The device’s assign_irq function will be called with its assigned IRQ either way.
source§

fn assign_irq( &mut self, _irq_evt: IrqLevelEvent, _pin: PciInterruptPin, _irq_num: u32 )

Assign a legacy PCI IRQ to this device. The device may write to irq_evt to trigger an interrupt. When irq_resample_evt is signaled, the device should re-assert irq_evt if necessary.
source§

fn allocate_device_bars( &mut self, _resources: &mut SystemAllocator ) -> Result<Vec<BarRange>, Error>

Allocates the needed device BAR space. Returns a Vec of BarRange{addr, size, prefetchable}. Unlike MMIO BARs (see allocate_io_bars), device BARs are not expected to incur VM exits Read more
source§

fn register_device_capabilities(&mut self) -> Result<(), Error>

Register any capabilties specified by the device.
source§

fn get_vm_memory_client(&self) -> Option<&VmMemoryClient>

Gets a reference to the API client for sending VmMemoryRequest. Any devices that uses ioevents must provide this.
source§

fn read_virtual_config_register(&self, _reg_idx: usize) -> u32

Reads from a virtual config register. Read more
source§

fn write_virtual_config_register(&mut self, _reg_idx: usize, _value: u32)

Writes to a virtual config register. Read more
source§

fn on_device_sandboxed(&mut self)

Invoked when the device is sandboxed.
source§

fn generate_acpi(&mut self, sdts: Vec<SDT>) -> Option<Vec<SDT>>

source§

fn generate_acpi_methods(&mut self) -> (Vec<u8>, Option<(u32, MemoryMapping)>)

Construct customized acpi method, and return the AML code and shared memory
source§

fn set_gpe(&mut self, _resources: &mut SystemAllocator) -> Option<u32>

source§

fn destroy_device(&mut self)

Invoked when the device is destroyed
source§

fn get_removed_children_devices(&self) -> Vec<PciAddress>

Get the removed children devices under pci bridge
source§

fn get_new_pci_bus(&self) -> Option<Arc<Mutex<PciBus>>>

Get the pci bus generated by this pci device
source§

fn configure_bridge_window( &mut self, _resources: &mut SystemAllocator, _bar_ranges: &[BarRange] ) -> Result<Vec<BarRange>, Error>

if device is a pci brdige, configure pci bridge window
source§

fn set_subordinate_bus(&mut self, _bus_no: u8)

if device is a pci bridge, configure subordinate bus number
source§

fn supports_iommu(&self) -> bool

Indicates whether the device supports IOMMU
source§

fn set_iommu(&mut self, _iommu: IpcMemoryMapper) -> Result<()>

Sets the IOMMU for the device if supports_iommu()
source§

fn as_virtio_pci_device(&self) -> Option<&VirtioPciDevice>

source§

impl Suspendable for PvPanicPciDevice

source§

fn snapshot(&mut self) -> Result<Value>

Save the device state in an image that can be restored.
source§

fn restore(&mut self, data: Value) -> Result<()>

Load a saved snapshot of an image.
source§

fn sleep(&mut self) -> Result<()>

Stop all threads related to the device. Sleep should be idempotent.
source§

fn wake(&mut self) -> Result<()>

Create/Resume all threads related to the device. Wake should be idempotent.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> BusDevice for T
where T: PciDevice,

source§

fn debug_label(&self) -> String

Returns a label suitable for debug output.
source§

fn device_id(&self) -> DeviceId

Returns a unique id per device type suitable for metrics gathering.
source§

fn read(&mut self, info: BusAccessInfo, data: &mut [u8])

Reads at offset from this device
source§

fn write(&mut self, info: BusAccessInfo, data: &[u8])

Writes at offset into this device
source§

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

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

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)

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

Gets a register from the virtual config space. Only used by PCI. Read more
source§

fn on_sandboxed(&mut self)

Invoked when the device is sandboxed.
source§

fn get_ranges(&self) -> Vec<(BusRange, BusType)>

Gets a list of all ranges registered by this BusDevice.
source§

fn destroy_device(&mut self)

Invoked when the device is destroyed
source§

fn is_bridge(&self) -> Option<u8>

Returns the secondary bus number if this bus device is pci bridge
source§

impl<T> BusDeviceObj for T
where T: 'static + PciDevice,

§

impl<T> Downcast for T
where T: 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>

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)

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)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V