Skip to main content

Device

Struct Device 

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

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

Since DRM devices can be used before being fully initialized and registered with userspace, C represents the furthest DeviceContext we can guarantee that this Device has reached.

Keep in mind: this means that an unregistered device can still have the registration state Registered as long as it was registered with userspace once in the past, and that the behavior of such a device is still well-defined. Additionally, a device with the registration state Uninit simply does not have a guaranteed registration state at compile time, and could be either registered or unregistered. Since there is no way to guarantee a long-lived reference to an unregistered device would remain unregistered, we do not provide a DeviceContext for this.

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

Trait Implementations§

Source§

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

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, C: DeviceContext> AsRef<Device> for Device<T, C>

Source§

fn as_ref(&self) -> &Device

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

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

Source§

type Target = <T as Driver>::Data

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, C, const ID: u64> WorkItem<ID> for Device<T, C>
where T: Driver, T::Data: WorkItem<ID, Pointer = ARef<Self>> + HasWork<Self, ID>, C: DeviceContext,

Source§

type Pointer = ARef<Device<T, C>>

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 = Registered> !Freeze for Device<T, C>

§

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

§

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

§

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

§

impl<T, C> UnwindSafe for Device<T, C>
where <T as Driver>::Data: UnwindSafe, C: UnwindSafe,

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
§

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

§

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§

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
§

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