Trait RawDeviceId

Source
pub unsafe trait RawDeviceId {
    type RawType: Copy;

    const DRIVER_DATA_OFFSET: usize;

    // Required method
    fn index(&self) -> usize;
}
Expand description

Marker trait to indicate a Rust device ID type represents a corresponding C device ID type.

This is meant to be implemented by buses/subsystems so that they can use IdTable to guarantee (at compile-time) zero-termination of device id tables provided by drivers.

§Safety

Implementers must ensure that:

  • Self is layout-compatible with RawDeviceId::RawType; i.e. it’s safe to transmute to RawDeviceId.

    This requirement is needed so IdArray::new can convert Self to RawType when building the ID table.

    Ideally, this should be achieved using a const function that does conversion instead of transmute; however, const trait functions relies on const_trait_impl unstable feature, which is broken/gone in Rust 1.73.

  • DRIVER_DATA_OFFSET is the offset of context/data field of the device ID (usually named driver_data) of the device ID, the field is suitable sized to write a usize value.

    Similar to the previous requirement, the data should ideally be added during Self to RawType conversion, but there’s currently no way to do it when using traits in const.

Required Associated Constants§

Source

const DRIVER_DATA_OFFSET: usize

The offset to the context/data field.

Required Associated Types§

Source

type RawType: Copy

The raw type that holds the device id.

Id tables created from Self are going to hold this type in its zero-terminated array.

Required Methods§

Source

fn index(&self) -> usize

The index stored at DRIVER_DATA_OFFSET of the implementor of the RawDeviceId trait.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§

Source§

impl RawDeviceId for kernel::auxiliary::DeviceId

Source§

const DRIVER_DATA_OFFSET: usize = 32usize

Source§

type RawType = auxiliary_device_id

Source§

impl RawDeviceId for kernel::of::DeviceId

Source§

const DRIVER_DATA_OFFSET: usize = 192usize

Source§

type RawType = of_device_id

Source§

impl RawDeviceId for kernel::pci::DeviceId

Source§

const DRIVER_DATA_OFFSET: usize = 24usize

Source§

type RawType = pci_device_id