From e49dc8e8be2adce5b7d118bdddc3085aacec7be0 Mon Sep 17 00:00:00 2001 From: bjorn3 <17426603+bjorn3@users.noreply.github.com> Date: Thu, 19 Mar 2026 22:56:46 +0100 Subject: [PATCH] drivers/graphics: Introduce define_object_props helper macro --- .../driver-graphics/src/kms/connector.rs | 23 +++++++++---------- .../driver-graphics/src/kms/objects.rs | 8 +++++-- .../driver-graphics/src/kms/properties.rs | 18 +++++++++++++++ 3 files changed, 35 insertions(+), 14 deletions(-) diff --git a/drivers/graphics/driver-graphics/src/kms/connector.rs b/drivers/graphics/driver-graphics/src/kms/connector.rs index ead45cb985..acb7683db4 100644 --- a/drivers/graphics/driver-graphics/src/kms/connector.rs +++ b/drivers/graphics/driver-graphics/src/kms/connector.rs @@ -9,7 +9,7 @@ use drm_sys::{ use syscall::Result; use crate::kms::objects::{KmsObjectId, KmsObjects}; -use crate::kms::properties::{KmsPropertyData, DPMS, EDID}; +use crate::kms::properties::{define_object_props, KmsPropertyData, DPMS, EDID}; use crate::GraphicsAdapter; impl KmsObjects { @@ -39,23 +39,13 @@ impl KmsObjects { mm_width: 0, mm_height: 0, subpixel: DrmSubpixelOrder::Unknown, - properties: vec![], + properties: KmsConnector::base_properties(), dpms: KmsDpms::Off, edid: KmsObjectId::INVALID, driver_data, })); self.connectors.push(connector_id); - let mut connector = self.get_connector(connector_id).unwrap().lock().unwrap(); - connector.properties.push(KmsPropertyData { - id: DPMS, - getter: |connector| connector.dpms as u64, - }); - connector.properties.push(KmsPropertyData { - id: EDID, - getter: |connector| connector.edid.0.into(), - }); - connector_id } @@ -100,6 +90,15 @@ pub struct KmsConnector { pub driver_data: T, } +define_object_props!(object, KmsConnector { + EDID { + get => u64::from(object.edid.0), + } + DPMS { + get => object.dpms as u64, + } +}); + impl KmsConnector { pub fn update_from_size(&mut self, width: u32, height: u32) { self.modes = vec![Self::modeinfo_for_size(width, height)]; diff --git a/drivers/graphics/driver-graphics/src/kms/objects.rs b/drivers/graphics/driver-graphics/src/kms/objects.rs index 5c68dcbe4d..ae5e13e8f5 100644 --- a/drivers/graphics/driver-graphics/src/kms/objects.rs +++ b/drivers/graphics/driver-graphics/src/kms/objects.rs @@ -10,7 +10,9 @@ use drm_sys::{ use syscall::{Error, Result, EINVAL}; use crate::kms::connector::{KmsConnector, KmsEncoder}; -use crate::kms::properties::{init_standard_props, KmsBlob, KmsProperty, KmsPropertyData}; +use crate::kms::properties::{ + define_object_props, init_standard_props, KmsBlob, KmsProperty, KmsPropertyData, +}; use crate::GraphicsAdapter; #[derive(Debug)] @@ -72,7 +74,7 @@ impl KmsObjects { fb_id: KmsObjectId::INVALID, gamma_size: 0, mode: None, - properties: vec![], + properties: KmsCrtc::base_properties(), driver_data, })); self.crtcs.push(id); @@ -199,6 +201,8 @@ pub struct KmsCrtc { pub driver_data: T, } +define_object_props!(object, KmsCrtc {}); + #[derive(Debug)] pub struct KmsFramebuffer { pub width: u32, diff --git a/drivers/graphics/driver-graphics/src/kms/properties.rs b/drivers/graphics/driver-graphics/src/kms/properties.rs index 71f9626165..585b5a632d 100644 --- a/drivers/graphics/driver-graphics/src/kms/properties.rs +++ b/drivers/graphics/driver-graphics/src/kms/properties.rs @@ -220,3 +220,21 @@ define_properties! { SRC_H: range { 0, u64::from(u32::MAX) } [atomic], FB_DAMAGE_CLIPS: blob [atomic], } + +macro_rules! define_object_props { + ($object:ident, $obj:ident$(<$($T:ident),*>)? { $( + $prop:ident { + get => $get:expr, + } + )* }) => { + impl$(<$($T),*>)? $obj$(<$($T),*>)? { + pub(super) fn base_properties() -> Vec> { + vec![$(KmsPropertyData { + id: $prop, + getter: |$object| $get + }),*] + } + } + }; +} +pub(super) use define_object_props;