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 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 Associated Constants§

source

const DRIVER_DATA_OFFSET: usize

The offset to the context/data field.

Required Methods§

source

fn index(&self) -> usize

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

Object Safety§

This trait is not object safe.

Implementors§

source§

impl RawDeviceId for kernel::of::DeviceId

§

type RawType = of_device_id

source§

const DRIVER_DATA_OFFSET: usize = 192usize

source§

impl RawDeviceId for kernel::pci::DeviceId

§

type RawType = pci_device_id

source§

const DRIVER_DATA_OFFSET: usize = 24usize