Returns the Framebuffer currently assigned in an atomic plane state. Signed-off-by: Lyude Paul <lyude@xxxxxxxxxx> --- rust/kernel/drm/kms/framebuffer.rs | 1 - rust/kernel/drm/kms/plane.rs | 18 +++++++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/rust/kernel/drm/kms/framebuffer.rs b/rust/kernel/drm/kms/framebuffer.rs index 5a60b580fe0bf..99f366e8813e2 100644 --- a/rust/kernel/drm/kms/framebuffer.rs +++ b/rust/kernel/drm/kms/framebuffer.rs @@ -66,7 +66,6 @@ impl<T: KmsDriver> Framebuffer<T> { /// The caller guarantews that `ptr` points to a initialized `struct drm_framebuffer` for at /// least the entire lifetime of `'a`. #[inline] - #[allow(dead_code)] pub(super) unsafe fn from_raw<'a>(ptr: *const bindings::drm_framebuffer) -> &'a Self { // SAFETY: Our data layout is identical to drm_framebuffer unsafe { &*ptr.cast() } diff --git a/rust/kernel/drm/kms/plane.rs b/rust/kernel/drm/kms/plane.rs index 63b453b7307fd..1d50632ae473f 100644 --- a/rust/kernel/drm/kms/plane.rs +++ b/rust/kernel/drm/kms/plane.rs @@ -5,7 +5,7 @@ //! C header: [`include/drm/drm_plane.h`](srctree/include/drm/drm_plane.h) use super::{ - atomic::*, crtc::*, KmsDriver, ModeObject, ModeObjectVtable, StaticModeObject, + atomic::*, crtc::*, framebuffer::*, KmsDriver, ModeObject, ModeObjectVtable, StaticModeObject, UnregisteredKmsDevice, }; use crate::{ @@ -646,6 +646,22 @@ fn atomic_helper_check<S, D>( ) }) } + + /// Return the framebuffer currently set for this plane state + #[inline] + fn framebuffer<D>(&self) -> Option<&Framebuffer<D>> + where + Self::Plane: ModeObject<Driver = D>, + D: KmsDriver, + { + // SAFETY: The layout of Framebuffer<T> is identical to `fb` + unsafe { + self.as_raw() + .fb + .as_ref() + .map(|fb| Framebuffer::from_raw(fb)) + } + } } impl<T: AsRawPlaneState + ?Sized> RawPlaneState for T {} -- 2.48.1