Skip to main content

Device

Struct Device 

Source
pub struct Device<T: Driver, C: DeviceContext = Normal> { /* private fields */ }
Expand description

A typed DRM device with a specific drm::Driver implementation and DeviceContext.

A device in the Registered context is currently registered with userspace and its parent bus device is bound. The Normal context is the general-purpose, reference-counted context.

§Invariants

  • self.dev is a valid instance of a struct device.
  • The data layout of Self remains the same across all implementations of C.
  • Any invariants for C also apply.

Implementations§

Source§

impl<T: Driver> Device<T, Ioctl>

Source

pub fn registration_guard(&self) -> Option<RegistrationGuard<'_, T>>

Guard against the parent bus device being unbound.

Returns a RegistrationGuard if the device has not been unplugged, None otherwise.

While RegistrationGuard is held the parent device is guaranteed to be bound.

Source§

impl<T: Driver> Device<T, Registered>

Source

pub fn registration_data_with<R, F>(&self, f: F) -> R
where F: for<'a> FnOnce(&'a T::RegistrationData<'a>) -> R,

Access the registration data through a closure, with the lifetime tied to the closure scope.

The data is owned by Registration and is guaranteed to remain valid as long as the device is registered, since Registration’s drop calls drm_dev_unplug() which waits for all drm_dev_enter() critical sections to complete.

Trait Implementations§

Source§

impl<T: Driver> AlwaysRefCounted for Device<T>

Source§

fn inc_ref(&self)

Increments the reference count on the object.
Source§

unsafe fn dec_ref(obj: NonNull<Self>)

Decrements the reference count on the object. Read more
Source§

impl<T: Driver> AsRef<<T as Driver>::ParentDevice<Bound>> for Device<T, Registered>

Source§

fn as_ref(&self) -> &T::ParentDevice<Bound>

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl<T: Driver> AsRef<<T as Driver>::ParentDevice<Normal>> for Device<T>

Source§

fn as_ref(&self) -> &T::ParentDevice<Normal>

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl<T: Driver> Deref for Device<T>

Source§

type Target = <T as Driver>::Data

The resulting type after dereferencing.
Source§

fn deref(&self) -> &Self::Target

Dereferences the value.
Source§

impl<T: Driver> Deref for Device<T, Registered>

Source§

type Target = Device<T>

The resulting type after dereferencing.
Source§

fn deref(&self) -> &Self::Target

Dereferences the value.
Source§

impl<T: Driver> Deref for Device<T, Ioctl>

Source§

type Target = Device<T>

The resulting type after dereferencing.
Source§

fn deref(&self) -> &Self::Target

Dereferences the value.
Source§

impl<T, C, const ID: u64> HasDelayedWork<Device<T, C>, ID> for Device<T, C>
where T: Driver, T::Data: HasDelayedWork<Self, ID>, C: DeviceContext,

Source§

impl<T, C, const ID: u64> HasWork<Device<T, C>, ID> for Device<T, C>
where T: Driver, T::Data: HasWork<Self, ID>, C: DeviceContext,

Source§

unsafe fn raw_get_work(ptr: *mut Self) -> *mut Work<Self, ID>

Returns a pointer to the Work<T, ID> field. Read more
Source§

unsafe fn work_container_of(ptr: *mut Work<Self, ID>) -> *mut Self

Returns a pointer to the struct containing the Work<T, ID> field. Read more
Source§

impl<T: Driver, C: DeviceContext> Send for Device<T, C>

Source§

impl<T: Driver, C: DeviceContext> Sync for Device<T, C>

Source§

impl<T: Driver, const ID: u64> WorkItem<ID> for Device<T>
where T::Data: WorkItem<ID, Pointer = ARef<Self>> + HasWork<Self, ID>,

Source§

type Pointer = ARef<Device<T>>

The pointer type that this struct is wrapped in. This will typically be Arc<Self> or Pin<KBox<Self>>.
Source§

fn run(ptr: ARef<Self>)

The method that should be called when this work item is executed.

Auto Trait Implementations§

§

impl<T, C = Normal> !Freeze for Device<T, C>

§

impl<T, C = Normal> !RefUnwindSafe for Device<T, C>

§

impl<T, C = Normal> !Unpin for Device<T, C>

§

impl<T, C = Normal> !UnsafeUnpin for Device<T, C>

§

impl<T, C> UnwindSafe for Device<T, C>
where <T as Driver>::Data: UnwindSafe, C: UnwindSafe, <T as Driver>::RegistrationData<'static>: RefUnwindSafe,

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Init<T> for T

Source§

unsafe fn __init(self, slot: *mut T) -> Result<(), Infallible>

Initializes slot. Read more
Source§

fn chain<F>(self, f: F) -> ChainInit<Self, F, T, E>
where F: FnOnce(&mut T) -> Result<(), E>,

First initializes the value using self then calls the function f with the initialized value. 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> KnownSize for T

Source§

const MIN_SIZE: usize = const MIN_SIZE: usize = size_of::<T>();

Minimum size of this type known at compile-time.
Source§

const MIN_ALIGN: Alignment = const MIN_ALIGN: Alignment = Alignment::of::<T>();

Minimum alignment of this type known at compile-time.
Source§

fn size(_: *const T) -> usize

Get the size of an object of this type in bytes, with the metadata of the given pointer.
Source§

impl<T> PinInit<T> for T

Source§

unsafe fn __pinned_init(self, slot: *mut T) -> Result<(), Infallible>

Initializes slot. Read more
Source§

fn pin_chain<F>(self, f: F) -> ChainPinInit<Self, F, T, E>
where F: FnOnce(Pin<&mut T>) -> Result<(), E>,

First initializes the value using self then calls the function f with the initialized value. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
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.
Source§

impl<T, U, const N: u32> TryIntoBounded<T, N> for U
where T: Integer, U: TryInto<T>,

Source§

fn try_into_bounded(self) -> Option<Bounded<T, N>>

Attempts to convert self into a Bounded using N bits. Read more