From 090a63d5c6becd6cd404fb3dda793f0d17ca2741 Mon Sep 17 00:00:00 2001 From: bjorn3 <17426603+bjorn3@users.noreply.github.com> Date: Sat, 20 Dec 2025 20:17:39 +0100 Subject: [PATCH] drivers/graphics: Only pass driver data to add_connector And instead fill out the rest of DrmConnector in probe_connector. --- .../graphics/driver-graphics/src/objects.rs | 22 +++++++----- drivers/graphics/ihdgd/src/device/scheme.rs | 17 ++------- drivers/graphics/vesad/src/scheme.rs | 35 +++++++++---------- drivers/graphics/virtio-gpud/src/scheme.rs | 16 ++------- 4 files changed, 36 insertions(+), 54 deletions(-) diff --git a/drivers/graphics/driver-graphics/src/objects.rs b/drivers/graphics/driver-graphics/src/objects.rs index 562a44817f..6efaae37b9 100644 --- a/drivers/graphics/driver-graphics/src/objects.rs +++ b/drivers/graphics/driver-graphics/src/objects.rs @@ -18,17 +18,26 @@ impl DrmObjects { } } - pub fn add_connector(&mut self, connector: DrmConnector) -> DrmObjectId { + pub fn add_connector(&mut self, driver_data: T::Connector) -> DrmObjectId { let connector_id = self.next_id; + let encoder_id = DrmObjectId(self.next_id.0 + 1); self.objects.insert( connector_id, DrmObject { - kind: DrmObjectKind::Connector(connector), + kind: DrmObjectKind::Connector(DrmConnector { + modes: vec![], + encoder_id, + connector_type: 0, + connector_type_id: 0, + connection: DrmConnectorStatus::Unknown, + mm_width: 0, + mm_height: 0, + subpixel: DrmSubpixelOrder::Unknown, + driver_data, + }), }, ); - self.next_id.0 += 1; - let encoder_id = self.next_id; self.objects.insert( encoder_id, DrmObject { @@ -39,10 +48,7 @@ impl DrmObjects { }), }, ); - self.next_id.0 += 1; - - // Attach encoder to connector - self.get_connector_mut(connector_id).unwrap().encoder_id = encoder_id; + self.next_id.0 += 2; connector_id } diff --git a/drivers/graphics/ihdgd/src/device/scheme.rs b/drivers/graphics/ihdgd/src/device/scheme.rs index 761c475014..1c311cd48f 100644 --- a/drivers/graphics/ihdgd/src/device/scheme.rs +++ b/drivers/graphics/ihdgd/src/device/scheme.rs @@ -4,9 +4,7 @@ use std::alloc::{self, Layout}; use std::convert::TryInto; use std::ptr::{self, NonNull}; -use driver_graphics::objects::{ - DrmConnector, DrmConnectorStatus, DrmObjectId, DrmObjects, DrmSubpixelOrder, -}; +use driver_graphics::objects::{DrmConnector, DrmConnectorStatus, DrmObjects}; use driver_graphics::{ modeinfo_for_size, CursorFramebuffer, CursorPlane, Framebuffer, GraphicsAdapter, }; @@ -42,17 +40,7 @@ impl GraphicsAdapter for Device { fn init(&mut self, objects: &mut DrmObjects) { // FIXME enumerate actual connectors for (framebuffer_id, _) in self.framebuffers.iter().enumerate() { - objects.add_connector(DrmConnector { - modes: vec![], - encoder_id: DrmObjectId::INVALID, - connector_type: 0, - connector_type_id: 0, - connection: DrmConnectorStatus::Connected, - mm_width: 0, - mm_height: 0, - subpixel: DrmSubpixelOrder::Unknown, - driver_data: Connector { framebuffer_id }, - }); + objects.add_connector(Connector { framebuffer_id }); } } @@ -73,6 +61,7 @@ impl GraphicsAdapter for Device { fn probe_connector(&mut self, connector: &mut DrmConnector) { let framebuffer = &self.framebuffers[connector.driver_data.framebuffer_id]; + connector.connection = DrmConnectorStatus::Connected; connector.modes = vec![modeinfo_for_size( framebuffer.width as u32, framebuffer.height as u32, diff --git a/drivers/graphics/vesad/src/scheme.rs b/drivers/graphics/vesad/src/scheme.rs index cf6dcda08f..98cd13a0b8 100644 --- a/drivers/graphics/vesad/src/scheme.rs +++ b/drivers/graphics/vesad/src/scheme.rs @@ -2,9 +2,7 @@ use std::alloc::{self, Layout}; use std::convert::TryInto; use std::ptr::{self, NonNull}; -use driver_graphics::objects::{ - DrmConnector, DrmConnectorStatus, DrmObjectId, DrmObjects, DrmSubpixelOrder, -}; +use driver_graphics::objects::{DrmConnector, DrmConnectorStatus, DrmObjects}; use driver_graphics::{ modeinfo_for_size, CursorFramebuffer, CursorPlane, Framebuffer, GraphicsAdapter, }; @@ -16,12 +14,17 @@ pub struct FbAdapter { pub framebuffers: Vec, } +pub struct Connector { + width: u32, + height: u32, +} + pub enum VesadCursor {} impl CursorFramebuffer for VesadCursor {} impl GraphicsAdapter for FbAdapter { - type Connector = (); + type Connector = Connector; type Framebuffer = GraphicScreen; type Cursor = VesadCursor; @@ -36,19 +39,9 @@ impl GraphicsAdapter for FbAdapter { fn init(&mut self, objects: &mut DrmObjects) { for framebuffer in &self.framebuffers { - objects.add_connector(DrmConnector { - modes: vec![modeinfo_for_size( - framebuffer.width as u32, - framebuffer.height as u32, - )], - encoder_id: DrmObjectId::INVALID, - connector_type: 0, - connector_type_id: 0, - connection: DrmConnectorStatus::Connected, - mm_width: 0, - mm_height: 0, - subpixel: DrmSubpixelOrder::Unknown, - driver_data: (), + objects.add_connector(Connector { + width: framebuffer.width as u32, + height: framebuffer.height as u32, }); } } @@ -67,7 +60,13 @@ impl GraphicsAdapter for FbAdapter { } } - fn probe_connector(&mut self, _connector: &mut DrmConnector) {} + fn probe_connector(&mut self, connector: &mut DrmConnector) { + connector.modes = vec![modeinfo_for_size( + connector.driver_data.width, + connector.driver_data.height, + )]; + connector.connection = DrmConnectorStatus::Connected; + } fn display_count(&self) -> usize { self.framebuffers.len() diff --git a/drivers/graphics/virtio-gpud/src/scheme.rs b/drivers/graphics/virtio-gpud/src/scheme.rs index 18977202b5..28a50ebcfe 100644 --- a/drivers/graphics/virtio-gpud/src/scheme.rs +++ b/drivers/graphics/virtio-gpud/src/scheme.rs @@ -1,9 +1,7 @@ use std::sync::Arc; use common::{dma::Dma, sgl}; -use driver_graphics::objects::{ - DrmConnector, DrmConnectorStatus, DrmObjectId, DrmObjects, DrmSubpixelOrder, -}; +use driver_graphics::objects::{DrmConnector, DrmConnectorStatus, DrmObjects}; use driver_graphics::{ modeinfo_for_size, CursorFramebuffer, CursorPlane, Framebuffer, GraphicsAdapter, GraphicsScheme, }; @@ -229,17 +227,7 @@ impl<'a> GraphicsAdapter for VirtGpuAdapter<'a> { }); for display_id in 0..self.config.num_scanouts.get() { - objects.add_connector(DrmConnector { - modes: vec![], - encoder_id: DrmObjectId::INVALID, - connector_type: 0, - connector_type_id: 0, - connection: DrmConnectorStatus::Disconnected, - mm_width: 0, - mm_height: 0, - subpixel: DrmSubpixelOrder::Unknown, - driver_data: VirtGpuConnector { display_id }, - }); + objects.add_connector(VirtGpuConnector { display_id }); } }