[<prev] [next>] [day] [month] [year] [list]
Message-ID: <20250305230406.567126-9-lyude@redhat.com>
Date: Wed, 5 Mar 2025 17:59:24 -0500
From: Lyude Paul <lyude@...hat.com>
To: dri-devel@...ts.freedesktop.org,
rust-for-linux@...r.kernel.org
Cc: Danilo Krummrich <dakr@...nel.org>,
mcanal@...lia.com,
Alice Ryhl <aliceryhl@...gle.com>,
Maxime Ripard <mripard@...nel.org>,
Simona Vetter <sima@...ll.ch>,
Daniel Almeida <daniel.almeida@...labora.com>,
Miguel Ojeda <ojeda@...nel.org>,
Alex Gaynor <alex.gaynor@...il.com>,
Boqun Feng <boqun.feng@...il.com>,
Gary Guo <gary@...yguo.net>,
Björn Roy Baron <bjorn3_gh@...tonmail.com>,
Benno Lossin <benno.lossin@...ton.me>,
Andreas Hindborg <a.hindborg@...nel.org>,
Trevor Gross <tmgross@...ch.edu>,
linux-kernel@...r.kernel.org (open list)
Subject: [RFC v3 08/33] rust: drm/kms: Add UnregisteredConnector::attach_encoder()
This adds a simple binding for completing the last step of creating a DRM
connector - attaching its encoder. This function should only be called
before the connector is registered, and DRM should enforce this itself by
returning an error if a driver tries to add an encoder to an
already-registered DRM connector.
Note that unlike most of the methods we'll be adding to DRM mode objects,
this is directly implemented on the Connector<T> type since I don't really
think it would make sense for us to allow this operation on an
OpaqueConnector (a DRM connector without a known DriverConnector
implementation, something we'll be adding in the next few commits).
Signed-off-by: Lyude Paul <lyude@...hat.com>
---
V3:
* Move to UnregisteredConnector interface
* Improve safety comments
Signed-off-by: Lyude Paul <lyude@...hat.com>
---
rust/kernel/drm/kms/connector.rs | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/rust/kernel/drm/kms/connector.rs b/rust/kernel/drm/kms/connector.rs
index ed65c06ece627..6fe0a7517bd55 100644
--- a/rust/kernel/drm/kms/connector.rs
+++ b/rust/kernel/drm/kms/connector.rs
@@ -4,7 +4,7 @@
//!
//! C header: [`include/drm/drm_connector.h`](srctree/include/drm/drm_connector.h)
-use super::{KmsDriver, ModeObject, RcModeObject};
+use super::{encoder::*, KmsDriver, ModeObject, RcModeObject};
use crate::{
alloc::KBox,
bindings,
@@ -362,6 +362,18 @@ pub fn new<'a>(
// SAFETY: We just allocated the connector above, so this pointer must be valid
Ok(unsafe { &*this })
}
+
+ /// Attach an encoder to this [`Connector`].
+ #[must_use]
+ pub fn attach_encoder(&self, encoder: &impl AsRawEncoder) -> Result {
+ // SAFETY:
+ // - Both as_raw() calls are guaranteed to return a valid pointer
+ // - We're guaranteed this connector is not registered via our type invariants, thus this
+ // function is safe to call
+ to_result(unsafe {
+ bindings::drm_connector_attach_encoder(self.as_raw(), encoder.as_raw())
+ })
+ }
}
unsafe extern "C" fn connector_destroy_callback<T: DriverConnector>(
--
2.48.1
Powered by blists - more mailing lists