drivers/graphics: Introduce define_object_props helper macro
This commit is contained in:
@@ -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<T: GraphicsAdapter> KmsObjects<T> {
|
||||
@@ -39,23 +39,13 @@ impl<T: GraphicsAdapter> KmsObjects<T> {
|
||||
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<T> {
|
||||
pub driver_data: T,
|
||||
}
|
||||
|
||||
define_object_props!(object, KmsConnector<T> {
|
||||
EDID {
|
||||
get => u64::from(object.edid.0),
|
||||
}
|
||||
DPMS {
|
||||
get => object.dpms as u64,
|
||||
}
|
||||
});
|
||||
|
||||
impl<T> KmsConnector<T> {
|
||||
pub fn update_from_size(&mut self, width: u32, height: u32) {
|
||||
self.modes = vec![Self::modeinfo_for_size(width, height)];
|
||||
|
||||
@@ -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<T: GraphicsAdapter> KmsObjects<T> {
|
||||
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<T> {
|
||||
pub driver_data: T,
|
||||
}
|
||||
|
||||
define_object_props!(object, KmsCrtc<T> {});
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct KmsFramebuffer<T, Buf> {
|
||||
pub width: u32,
|
||||
|
||||
@@ -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<KmsPropertyData<Self>> {
|
||||
vec![$(KmsPropertyData {
|
||||
id: $prop,
|
||||
getter: |$object| $get
|
||||
}),*]
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
pub(super) use define_object_props;
|
||||
|
||||
Reference in New Issue
Block a user