drivers/graphics: Only pass driver data to add_connector

And instead fill out the rest of DrmConnector in probe_connector.
This commit is contained in:
bjorn3
2025-12-20 20:17:39 +01:00
parent 816d661c9d
commit 090a63d5c6
4 changed files with 36 additions and 54 deletions
@@ -18,17 +18,26 @@ impl<T: GraphicsAdapter> DrmObjects<T> {
}
}
pub fn add_connector(&mut self, connector: DrmConnector<T>) -> 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<T: GraphicsAdapter> DrmObjects<T> {
}),
},
);
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
}
+3 -14
View File
@@ -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<Self>) {
// 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<Self>) {
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,
+17 -18
View File
@@ -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<FrameBuffer>,
}
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<Self>) {
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<Self>) {}
fn probe_connector(&mut self, connector: &mut DrmConnector<Self>) {
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()
+2 -14
View File
@@ -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 });
}
}