Skip to main content

PciExpressCapability

Struct PciExpressCapability 

Source
pub struct PciExpressCapability { /* private fields */ }
Expand description

Configurable PCI Express capability.

Implementations§

Source§

impl PciExpressCapability

Source

pub fn new( typ: DevicePortType, flr_handler: Option<Arc<dyn FlrHandler>>, ) -> Self

Creates a new PCI Express capability with FLR support.

§Arguments
  • typ - The spec-defined device or port type.
  • flr_handler - Optional handler to be called when FLR is initiated. This emulator will report that FLR is supported if flr_handler = Some(_)
Source

pub fn with_hotplug_support(self, slot_number: u32) -> Self

Enable hotplug support for this PCIe capability. This configures the appropriate registers to support hotpluggable devices. Panics if called on device types other than RootPort or DownstreamSwitchPort.

§Arguments
  • slot_number - The physical slot number to assign to this hotplug-capable port
Source

pub fn with_tlp_prefixing_supported( self, max_prefixes: MaxEndEndTlpPrefixes, ) -> Self

Enable TLP prefixing support for this PCIe capability.

This configures the appropriate registers to indicate that the function supports end-to-end TLP prefixes. We do not currently implement TLP prefixing in endpoint DMA APIs but this still may be required for ports upstream of passthrough devices that support TLP prefixing (ex. for guest controlled PASID with a virtual IOMMU).

Source

pub fn set_presence_detect_state(&self, present: bool)

Set the physical presence state used to derive slot and link status.

§Arguments
  • present - true if a device is present in the slot, false if the slot is empty
Source

pub fn set_hotplug_changed_bits(&self)

Set the RW1C changed bits in Slot Status to signal a hotplug event. Call this only for runtime hotplug events, not build-time device attachment.

Source

pub fn set_hotplug_state(&self, present: bool)

Atomically update presence detect state, link active state, and changed bits for a hotplug event.

Source

pub fn hot_plug_interrupt_enabled(&self) -> bool

Returns whether the hot plug interrupt is enabled in Slot Control.

Source

pub fn ari_forwarding_enable(&self) -> bool

Returns whether ARI Forwarding is enabled in Device Control 2.

When set on a downstream-facing port, the port no longer enforces the requirement that the Device Number be 0 when turning a Type 1 configuration request into a Type 0 request, allowing the full 8-bit ARI function number to reach the connected device. See PCIe Base Spec 7.0 §6.13.

Source

pub fn slot_capabilities(&self) -> &SlotCapabilities

Returns a reference to the slot capabilities register.

Trait Implementations§

Source§

impl Inspect for PciExpressCapability

Source§

fn inspect(&self, req: Request<'_>)

Inspects the object.
Source§

impl PciCapability for PciExpressCapability

Source§

fn label(&self) -> &str

A descriptive label for use in Save/Restore + Inspect output
Source§

fn capability_id(&self) -> CapabilityId

Returns the PCI capability ID for this capability
Source§

fn len(&self) -> usize

Length of the capability structure
Source§

fn read(&self, offset: u16, value: ByteEnabledDwordRead<'_>)

Read a byte-enabled DWORD at the given capability-relative offset. The offset must be 32-bit aligned.
Source§

fn write(&mut self, offset: u16, val: ByteEnabledDwordWrite)

Write a byte-enabled DWORD to the given capability-relative offset. The offset must be 32-bit aligned.
Source§

fn reset(&mut self)

Reset the capability
Source§

fn as_pci_express(&self) -> Option<&PciExpressCapability>

Downcast to PCI Express capability
Source§

fn as_pci_express_mut(&mut self) -> Option<&mut PciExpressCapability>

Downcast to PCI Express capability (mutable)
Source§

fn as_msi_cap(&self) -> Option<&MsiCapability>

Downcast to MSI capability
Source§

fn as_msi_cap_mut(&mut self) -> Option<&mut MsiCapability>

Downcast to MSI capability (mutable)
Source§

impl SaveRestore for PciExpressCapability

Source§

type SavedState = SavedState

The concrete saved state type.
Source§

fn save(&mut self) -> Result<Self::SavedState, SaveError>

Saves the object’s state.
Source§

fn restore(&mut self, saved: Self::SavedState) -> Result<(), RestoreError>

Restores the object’s state.

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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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.

§

impl<T> ProtobufSaveRestore for T
where T: SaveRestore, <T as SaveRestore>::SavedState: 'static + Send + SavedStateRoot,

§

fn save(&mut self) -> Result<SavedStateBlob, SaveError>

Save the object.
§

fn restore(&mut self, state: SavedStateBlob) -> Result<(), RestoreError>

Restore the object.
Source§

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

Source§

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>,

Source§

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<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more