Struct mycelium_pci::device::Header

source ·
#[repr(C)]
pub struct Header { pub id: RawIds, pub command: Command, pub status: Status, pub revision_id: u8, pub cache_line_size: u8, pub latency_timer: u8, pub bist: Bist, /* private fields */ }
Expand description

A PCI device header.

This stores data common to all PCI devices, whether they are standard PCI devices, PCI-to-PCI bridges, or PCI-to-CardBus bridges.

The header has the following layout:

WordBits 31-24Bits 23-16Bits 15-8Bits 7-0
0x0Device IDVendor ID
0x1StatusCommand
0x2ClassSubclassProgIfRevision ID
0x3BIST registerHeaderTypeLatency timerCache line size

Much of the documentation for this struct’s fields was copied from the OSDev Wiki.

Fields§

§id: RawIds

The device’s raw vendor ID and device ID.

Use the Header::id method to attempt to resolve the raw numeric IDs to a known vendor and device in the PCI IDs database.

§command: Command

The device’s Command register.

This register provides control over a device’s ability to generate and respond to PCI cycles. When a 0 is written to this register, the device is disconnected from the PCI bus. Other values may be written to this register to send other commands, depending on the device.

§status: Status

The device’s Status register.

This register can be read from to access status information about PCI events.

§revision_id: u8

Specifies a revision identifier for a particular device.

Revision IDs are allocated by the device’s vendor.

§cache_line_size: u8

Specifies the system cache line size in 32-bit units.

A device can limit the number of cacheline sizes it can support, if a unsupported value is written to this field, the device will behave as if a value of 0 was written.

§latency_timer: u8

Specifies the latency timer in units of PCI bus clocks.

§bist: Bist

A read-write register for running the device’s Built-In Self Test (BIST).

Implementations§

source§

impl Header

source

pub fn header_type(&self) -> Result<HeaderType, UnexpectedValue<u8>>

Returns the device’s header type, or an error if the header type code is invalid.

This value identifies the device kind, and the layout of the rest of the device’s PCI configuration space header.

A device is one of the following:

source

pub fn is_multifunction(&self) -> bool

Returns true if this device has multiple functions.

source

pub fn id(&self) -> Id

Returns the device’s Id.

This will attempt to resolve the device’s vendor ID and device ID in the PCI IDs database. If the device ID can be resolved, an Id::Known is returned. Otherwise, if the device’s vendor ID or device ID does not exist in the PCI ID database, an Id::Unknown is returned.

source

pub fn classes(&self) -> Result<Classes, UnexpectedValue<RawClasses>>

Returns the device’s Classes (its Class and Subclass), or an error if this header’s class or subclass code does not exist in the PCI ID database.

source

pub fn class(&self) -> Result<Class, UnexpectedValue<u8>>

Returns the device’s Class.

The class indicates what general category of device (e.g. a display controller, network controller, etc) this header describes. The class value is used to determine the meaning of the Subclass code, which describes a subcategory of device within that class.

Returns
  • Ok(Class) if the header’s class code exists in the PCI ID database.
  • Err(error::UnexpectedValue) if the header’s class code was not present in the PCI ID database. This generally indicates that the device header was read incorrectly or the device is malfunctioning, as all devices should have a known class code.
source

pub fn subclass(&self) -> Result<Subclass, UnexpectedValue<u8>>

Returns the device’s Subclass.

The subclass describes a more specific category of device within a Class.

Returns
  • Ok(Subclass) if the header’s class and subclass codes exist in the PCI ID database.
  • Err(error::UnexpectedValue) if the header’s class or subclass code was not present in the PCI ID database. This generally indicates that the device header was read incorrectly or the device is malfunctioning, as all devices should have known class and subclass codes.
source

pub fn prog_if(&self) -> Result<ProgIf, UnexpectedValue<u8>>

Returns the register-level programming interface (“prog IF”) for this device, or an error if the device’s class or subclass code (which are necessary for determining the programming interface) could not be resolved.

source

pub fn raw_prog_if(&self) -> u8

Returns the raw programming interface code of this device.

This can be used with the Subclass::prog_if method.

Trait Implementations§

source§

impl Clone for Header

source§

fn clone(&self) -> Header

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Header

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Copy for Header

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

source§

fn az<Dst>(self) -> Dst
where T: Cast<Dst>,

Casts the value.
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<Src, Dst> CastFrom<Src> for Dst
where Src: Cast<Dst>,

source§

fn cast_from(src: Src) -> Dst

Casts the value.
source§

impl<T> CheckedAs for T

source§

fn checked_as<Dst>(self) -> Option<Dst>
where T: CheckedCast<Dst>,

Casts the value.
source§

impl<Src, Dst> CheckedCastFrom<Src> for Dst
where Src: CheckedCast<Dst>,

source§

fn checked_cast_from(src: Src) -> Option<Dst>

Casts the value.
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
§

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.

source§

impl<T> OverflowingAs for T

source§

fn overflowing_as<Dst>(self) -> (Dst, bool)
where T: OverflowingCast<Dst>,

Casts the value.
source§

impl<Src, Dst> OverflowingCastFrom<Src> for Dst
where Src: OverflowingCast<Dst>,

source§

fn overflowing_cast_from(src: Src) -> (Dst, bool)

Casts the value.
source§

impl<T> SaturatingAs for T

source§

fn saturating_as<Dst>(self) -> Dst
where T: SaturatingCast<Dst>,

Casts the value.
source§

impl<Src, Dst> SaturatingCastFrom<Src> for Dst
where Src: SaturatingCast<Dst>,

source§

fn saturating_cast_from(src: Src) -> Dst

Casts the value.
source§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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.
source§

impl<T> UnwrappedAs for T

source§

fn unwrapped_as<Dst>(self) -> Dst
where T: UnwrappedCast<Dst>,

Casts the value.
source§

impl<Src, Dst> UnwrappedCastFrom<Src> for Dst
where Src: UnwrappedCast<Dst>,

source§

fn unwrapped_cast_from(src: Src) -> Dst

Casts the value.
§

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
source§

impl<T> WrappingAs for T

source§

fn wrapping_as<Dst>(self) -> Dst
where T: WrappingCast<Dst>,

Casts the value.
source§

impl<Src, Dst> WrappingCastFrom<Src> for Dst
where Src: WrappingCast<Dst>,

source§

fn wrapping_cast_from(src: Src) -> Dst

Casts the value.