#[repr(C)]pub struct Cap {
    pub cap_vndr: u8,
    pub cap_next: u8,
    pub cap_len: u8,
    pub cfg_type: u8,
    pub bar: u8,
    pub id: u8,
    pub padding: [u8; 2],
    pub offset: le32,
    pub length: le32,
}Expand description
PCI Capability
See CapData for reading additional fields.
Fields§
§cap_vndr: u8Generic PCI field: PCI_CAP_ID_VNDR
0x09; Identifies a vendor-specific capability.
cap_next: u8Generic PCI field: next ptr.
Link to next capability in the capability list in the PCI configuration space.
cap_len: u8Generic PCI field: capability length
Length of this capability structure, including the whole of struct virtio_pci_cap, and extra data if any. This length MAY include padding, or fields unused by the driver.
cfg_type: u8Identifies the structure.
Each structure is detailed individually below.
The device MAY offer more than one structure of any type - this makes it
possible for the device to expose multiple interfaces to drivers.  The order of
the capabilities in the capability list specifies the order of preference
suggested by the device.  A device may specify that this ordering mechanism be
overridden by the use of the id field.
For example, on some hypervisors, notifications using IO accesses are
faster than memory accesses. In this case, the device would expose two
capabilities with cfg_type set to VIRTIO_PCI_CAP_NOTIFY_CFG:
the first one addressing an I/O BAR, the second one addressing a memory BAR.
In this example, the driver would use the I/O BAR if I/O resources are available, and fall back on
memory BAR when I/O resources are unavailable.
bar: u8Where to find it.
values 0x0 to 0x5 specify a Base Address register (BAR) belonging to the function located beginning at 10h in PCI Configuration Space and used to map the structure into Memory or I/O Space. The BAR is permitted to be either 32-bit or 64-bit, it can map Memory Space or I/O Space.
Any other value is reserved for future use.
id: u8Multiple capabilities of the same type
Used by some device types to uniquely identify multiple capabilities of a certain type. If the device type does not specify the meaning of this field, its contents are undefined.
padding: [u8; 2]Pad to full dword.
offset: le32Offset within bar.
indicates where the structure begins relative to the base address associated
with the BAR.  The alignment requirements of offset are indicated
in each structure-specific section below.
length: le32Length of the structure, in bytes.
indicates the length of the structure.
length MAY include padding, or fields unused by the driver, or
future extensions.
For example, a future device might present a large structure size of several MBytes. As current devices never utilize structures larger than 4KBytes in size, driver MAY limit the mapped structure size to e.g. 4KBytes (thus ignoring parts of structure after the first 4KBytes) to allow forward compatibility with such devices without loss of functionality and without wasting resources.
Implementations§
Source§impl Cap
 
impl Cap
pub fn read( addr: PciCapabilityAddress, access: impl ConfigRegionAccess, ) -> Option<Self>
Trait Implementations§
Source§impl FromBytes for Cap
 
impl FromBytes for Cap
Source§fn ref_from_bytes(
    source: &[u8],
) -> Result<&Self, ConvertError<AlignmentError<&[u8], Self>, SizeError<&[u8], Self>, Infallible>>where
    Self: KnownLayout + Immutable,
 
fn ref_from_bytes(
    source: &[u8],
) -> Result<&Self, ConvertError<AlignmentError<&[u8], Self>, SizeError<&[u8], Self>, Infallible>>where
    Self: KnownLayout + Immutable,
Source§fn ref_from_prefix(
    source: &[u8],
) -> Result<(&Self, &[u8]), ConvertError<AlignmentError<&[u8], Self>, SizeError<&[u8], Self>, Infallible>>where
    Self: KnownLayout + Immutable,
 
fn ref_from_prefix(
    source: &[u8],
) -> Result<(&Self, &[u8]), ConvertError<AlignmentError<&[u8], Self>, SizeError<&[u8], Self>, Infallible>>where
    Self: KnownLayout + Immutable,
Source§fn ref_from_suffix(
    source: &[u8],
) -> Result<(&[u8], &Self), ConvertError<AlignmentError<&[u8], Self>, SizeError<&[u8], Self>, Infallible>>where
    Self: Immutable + KnownLayout,
 
fn ref_from_suffix(
    source: &[u8],
) -> Result<(&[u8], &Self), ConvertError<AlignmentError<&[u8], Self>, SizeError<&[u8], Self>, Infallible>>where
    Self: Immutable + KnownLayout,
&Self. Read moreSource§fn ref_from_bytes_with_elems(
    source: &[u8],
    count: usize,
) -> Result<&Self, ConvertError<AlignmentError<&[u8], Self>, SizeError<&[u8], Self>, Infallible>>
 
fn ref_from_bytes_with_elems( source: &[u8], count: usize, ) -> Result<&Self, ConvertError<AlignmentError<&[u8], Self>, SizeError<&[u8], Self>, Infallible>>
Source§fn ref_from_prefix_with_elems(
    source: &[u8],
    count: usize,
) -> Result<(&Self, &[u8]), ConvertError<AlignmentError<&[u8], Self>, SizeError<&[u8], Self>, Infallible>>
 
fn ref_from_prefix_with_elems( source: &[u8], count: usize, ) -> Result<(&Self, &[u8]), ConvertError<AlignmentError<&[u8], Self>, SizeError<&[u8], Self>, Infallible>>
Source§fn ref_from_suffix_with_elems(
    source: &[u8],
    count: usize,
) -> Result<(&[u8], &Self), ConvertError<AlignmentError<&[u8], Self>, SizeError<&[u8], Self>, Infallible>>
 
fn ref_from_suffix_with_elems( source: &[u8], count: usize, ) -> Result<(&[u8], &Self), ConvertError<AlignmentError<&[u8], Self>, SizeError<&[u8], Self>, Infallible>>
Source§impl KnownLayout for Capwhere
    le32: KnownLayout,
 
impl KnownLayout for Capwhere
    le32: KnownLayout,
Source§type PointerMetadata = <Le<u32> as KnownLayout>::PointerMetadata
 
type PointerMetadata = <Le<u32> as KnownLayout>::PointerMetadata
Self. Read moreSource§fn size_for_metadata(meta: Self::PointerMetadata) -> Option<usize>
 
fn size_for_metadata(meta: Self::PointerMetadata) -> Option<usize>
Self with the given pointer
metadata. Read moreSource§impl TryFromBytes for Cap
 
impl TryFromBytes for Cap
Source§fn try_ref_from_bytes(
    source: &[u8],
) -> Result<&Self, ConvertError<AlignmentError<&[u8], Self>, SizeError<&[u8], Self>, ValidityError<&[u8], Self>>>where
    Self: KnownLayout + Immutable,
 
fn try_ref_from_bytes(
    source: &[u8],
) -> Result<&Self, ConvertError<AlignmentError<&[u8], Self>, SizeError<&[u8], Self>, ValidityError<&[u8], Self>>>where
    Self: KnownLayout + Immutable,
Source§fn try_ref_from_prefix(
    source: &[u8],
) -> Result<(&Self, &[u8]), ConvertError<AlignmentError<&[u8], Self>, SizeError<&[u8], Self>, ValidityError<&[u8], Self>>>where
    Self: KnownLayout + Immutable,
 
fn try_ref_from_prefix(
    source: &[u8],
) -> Result<(&Self, &[u8]), ConvertError<AlignmentError<&[u8], Self>, SizeError<&[u8], Self>, ValidityError<&[u8], Self>>>where
    Self: KnownLayout + Immutable,
Source§fn try_ref_from_suffix(
    source: &[u8],
) -> Result<(&[u8], &Self), ConvertError<AlignmentError<&[u8], Self>, SizeError<&[u8], Self>, ValidityError<&[u8], Self>>>where
    Self: KnownLayout + Immutable,
 
fn try_ref_from_suffix(
    source: &[u8],
) -> Result<(&[u8], &Self), ConvertError<AlignmentError<&[u8], Self>, SizeError<&[u8], Self>, ValidityError<&[u8], Self>>>where
    Self: KnownLayout + Immutable,
Source§fn try_ref_from_bytes_with_elems(
    source: &[u8],
    count: usize,
) -> Result<&Self, ConvertError<AlignmentError<&[u8], Self>, SizeError<&[u8], Self>, ValidityError<&[u8], Self>>>
 
fn try_ref_from_bytes_with_elems( source: &[u8], count: usize, ) -> Result<&Self, ConvertError<AlignmentError<&[u8], Self>, SizeError<&[u8], Self>, ValidityError<&[u8], Self>>>
Source§fn try_ref_from_prefix_with_elems(
    source: &[u8],
    count: usize,
) -> Result<(&Self, &[u8]), ConvertError<AlignmentError<&[u8], Self>, SizeError<&[u8], Self>, ValidityError<&[u8], Self>>>
 
fn try_ref_from_prefix_with_elems( source: &[u8], count: usize, ) -> Result<(&Self, &[u8]), ConvertError<AlignmentError<&[u8], Self>, SizeError<&[u8], Self>, ValidityError<&[u8], Self>>>
source as a &Self with
a DST length equal to count. Read moreSource§fn try_ref_from_suffix_with_elems(
    source: &[u8],
    count: usize,
) -> Result<(&[u8], &Self), ConvertError<AlignmentError<&[u8], Self>, SizeError<&[u8], Self>, ValidityError<&[u8], Self>>>
 
fn try_ref_from_suffix_with_elems( source: &[u8], count: usize, ) -> Result<(&[u8], &Self), ConvertError<AlignmentError<&[u8], Self>, SizeError<&[u8], Self>, ValidityError<&[u8], Self>>>
source as a &Self with
a DST length equal to count. Read more