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:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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 });
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user