diff --git a/drivers/graphics/driver-graphics/src/lib.rs b/drivers/graphics/driver-graphics/src/lib.rs index 1daf1eab2e..b2177e4e4a 100644 --- a/drivers/graphics/driver-graphics/src/lib.rs +++ b/drivers/graphics/driver-graphics/src/lib.rs @@ -213,84 +213,7 @@ impl GraphicsScheme { .expect("driver-graphics: failed to read display handle") { match vt_event.kind { - VtEventKind::Activate => { - log::info!("activate {}", vt_event.vt); - - // Disable the kernel graphical debug writing once switching vt's for the - // first time. This way the kernel graphical debug remains enabled if the - // userspace logging infrastructure doesn't start up because for example a - // kernel panic happened prior to it starting up or logd crashed. - if let Some(mut disable_graphical_debug) = - self.inner.disable_graphical_debug.take() - { - let _ = disable_graphical_debug.write(&[1]); - } - - self.inner.active_vt = vt_event.vt; - - let vt_state = GraphicsSchemeInner::get_or_create_vt( - &self.inner.objects, - &mut self.inner.vts, - vt_event.vt, - ); - - for (connector_idx, connector_state) in - vt_state.connector_state.iter().enumerate() - { - let connector_id = self.inner.objects.connector_ids()[connector_idx]; - let mut connector = self - .inner - .objects - .get_connector(connector_id) - .unwrap() - .lock() - .unwrap(); - connector.state = connector_state.clone(); - } - - for (crtc_idx, crtc_state) in vt_state.crtc_state.iter().enumerate() { - let crtc_id = self.inner.objects.crtc_ids()[crtc_idx]; - let crtc = self.inner.objects.get_crtc(crtc_id).unwrap(); - let connector_id = self.inner.objects.connector_ids()[crtc_idx]; - - let fb = crtc_state.fb_id.map(|fb_id| { - self.inner - .objects - .get_framebuffer(fb_id) - .expect("removed framebuffers should be unset") - }); - - self.inner - .adapter - .set_crtc( - &self.inner.objects, - crtc, - crtc_state.clone(), - Damage { - x: 0, - y: 0, - width: fb.map_or(0, |fb| fb.width), - height: fb.map_or(0, |fb| fb.height), - }, - ) - .unwrap(); - - self.inner - .objects - .get_connector(connector_id) - .unwrap() - .lock() - .unwrap() - .state - .crtc_id = crtc_id; - } - - if self.inner.adapter.hw_cursor_size().is_some() { - self.inner - .adapter - .handle_cursor(&vt_state.cursor_plane, true); - } - } + VtEventKind::Activate => self.inner.activate_vt(vt_event.vt), } } } @@ -387,6 +310,71 @@ impl GraphicsSchemeInner { }, }) } + + fn activate_vt(&mut self, vt: usize) { + log::info!("activate {}", vt); + + // Disable the kernel graphical debug writing once switching vt's for the + // first time. This way the kernel graphical debug remains enabled if the + // userspace logging infrastructure doesn't start up because for example a + // kernel panic happened prior to it starting up or logd crashed. + if let Some(mut disable_graphical_debug) = self.disable_graphical_debug.take() { + let _ = disable_graphical_debug.write(&[1]); + } + + self.active_vt = vt; + + let vt_state = GraphicsSchemeInner::get_or_create_vt(&self.objects, &mut self.vts, vt); + + for (connector_idx, connector_state) in vt_state.connector_state.iter().enumerate() { + let connector_id = self.objects.connector_ids()[connector_idx]; + let mut connector = self + .objects + .get_connector(connector_id) + .unwrap() + .lock() + .unwrap(); + connector.state = connector_state.clone(); + } + + for (crtc_idx, crtc_state) in vt_state.crtc_state.iter().enumerate() { + let crtc_id = self.objects.crtc_ids()[crtc_idx]; + let crtc = self.objects.get_crtc(crtc_id).unwrap(); + let connector_id = self.objects.connector_ids()[crtc_idx]; + + let fb = crtc_state.fb_id.map(|fb_id| { + self.objects + .get_framebuffer(fb_id) + .expect("removed framebuffers should be unset") + }); + + self.adapter + .set_crtc( + &self.objects, + crtc, + crtc_state.clone(), + Damage { + x: 0, + y: 0, + width: fb.map_or(0, |fb| fb.width), + height: fb.map_or(0, |fb| fb.height), + }, + ) + .unwrap(); + + self.objects + .get_connector(connector_id) + .unwrap() + .lock() + .unwrap() + .state + .crtc_id = crtc_id; + } + + if self.adapter.hw_cursor_size().is_some() { + self.adapter.handle_cursor(&vt_state.cursor_plane, true); + } + } } const MAP_FAKE_OFFSET_MULTIPLIER: usize = 0x10_000_000; diff --git a/drivers/graphics/ihdgd/src/device/buffer.rs b/drivers/graphics/ihdgd/src/device/buffer.rs index 2cd83ea9e9..4ffbc8937f 100644 --- a/drivers/graphics/ihdgd/src/device/buffer.rs +++ b/drivers/graphics/ihdgd/src/device/buffer.rs @@ -1,6 +1,4 @@ -use std::{mem, ptr, slice}; - -use common::dma::Dma; +use std::{ptr, slice}; use crate::device::ggtt::GlobalGtt; use crate::device::MmioRegion; diff --git a/drivers/inputd/src/lib.rs b/drivers/inputd/src/lib.rs index 68fdfc8639..514f8045f8 100644 --- a/drivers/inputd/src/lib.rs +++ b/drivers/inputd/src/lib.rs @@ -59,27 +59,6 @@ impl ConsumerHandle { self.0.as_fd() } - pub fn open_display(&self) -> io::Result { - let mut buffer = [0; 1024]; - let fd = self.0.as_raw_fd(); - let written = libredox::call::fpath(fd as usize, &mut buffer)?; - - assert!(written <= buffer.len()); - - let display_path = std::str::from_utf8(&buffer[..written]) - .expect("init: display path UTF-8 check failed") - .to_owned(); - - let display_file = - libredox::call::open(&display_path, (O_CLOEXEC | O_NONBLOCK | O_RDWR) as _, 0) - .map(|socket| unsafe { File::from_raw_fd(socket as RawFd) }) - .unwrap_or_else(|err| { - panic!("failed to open display {}: {}", display_path, err); - }); - - Ok(display_file) - } - pub fn open_display_v2(&self) -> io::Result { let mut buffer = [0; 1024]; let fd = self.0.as_raw_fd(); @@ -167,9 +146,6 @@ impl DisplayHandle { let mut event = VtEvent { kind: VtEventKind::Activate, vt: usize::MAX, - width: u32::MAX, - height: u32::MAX, - stride: u32::MAX, }; let nread = self.0.read(unsafe { any_as_u8_slice_mut(&mut event) })?; @@ -219,10 +195,6 @@ pub enum VtEventKind { pub struct VtEvent { pub kind: VtEventKind, pub vt: usize, - - pub width: u32, - pub height: u32, - pub stride: u32, } pub struct ProducerHandle(File); diff --git a/drivers/inputd/src/main.rs b/drivers/inputd/src/main.rs index f2dcfefa22..a05bfc824c 100644 --- a/drivers/inputd/src/main.rs +++ b/drivers/inputd/src/main.rs @@ -122,9 +122,6 @@ impl InputScheme { pending.push(VtEvent { kind: VtEventKind::Activate, vt: new_active, - width: 0, - height: 0, - stride: 0, }); *notified = false; } @@ -250,9 +247,6 @@ impl SchemeSync for InputScheme { vec![VtEvent { kind: VtEventKind::Activate, vt: active_vt, - width: 0, - height: 0, - stride: 0, }] } else { vec![] diff --git a/init.d/20_vesad.service b/init.d/20_vesad.service index 70fbfb35f1..4d907c314f 100644 --- a/init.d/20_vesad.service +++ b/init.d/20_vesad.service @@ -6,7 +6,6 @@ requires_weak = ["10_inputd.service"] cmd = "vesad" inherit_envs = [ "FRAMEBUFFER_ADDR", - "FRAMEBUFFER_VIRT", "FRAMEBUFFER_WIDTH", "FRAMEBUFFER_HEIGHT", "FRAMEBUFFER_STRIDE",