From 0d0fbd1935e57b8b3c1a871154c93faca7ea74e4 Mon Sep 17 00:00:00 2001 From: bjorn3 <17426603+bjorn3@users.noreply.github.com> Date: Thu, 12 Mar 2026 21:00:23 +0100 Subject: [PATCH] drivers/graphics: Mostly remove support for the v1 graphics api Orbclient still needs opening + fpath support for the v1 graphics api. --- drivers/graphics/console-draw/src/lib.rs | 3 +- drivers/graphics/driver-graphics/src/lib.rs | 99 ++------------------- drivers/graphics/graphics-ipc/src/lib.rs | 1 - drivers/graphics/graphics-ipc/src/v1.rs | 2 - drivers/graphics/ihdgd/src/device/scheme.rs | 2 +- drivers/graphics/vesad/src/scheme.rs | 2 +- drivers/graphics/virtio-gpud/src/scheme.rs | 2 +- 7 files changed, 10 insertions(+), 101 deletions(-) delete mode 100644 drivers/graphics/graphics-ipc/src/v1.rs diff --git a/drivers/graphics/console-draw/src/lib.rs b/drivers/graphics/console-draw/src/lib.rs index 25a409042e..74c525a63e 100644 --- a/drivers/graphics/console-draw/src/lib.rs +++ b/drivers/graphics/console-draw/src/lib.rs @@ -7,8 +7,7 @@ use std::{cmp, io, mem, ptr}; use drm::buffer::{Buffer, DrmFourcc}; use drm::control::dumbbuffer::{DumbBuffer, DumbMapping}; use drm::control::{framebuffer, Device}; -use graphics_ipc::v1::Damage; -use graphics_ipc::v2::V2GraphicsHandle; +use graphics_ipc::v2::{Damage, V2GraphicsHandle}; use orbclient::FONT; pub struct V2DisplayMap { diff --git a/drivers/graphics/driver-graphics/src/lib.rs b/drivers/graphics/driver-graphics/src/lib.rs index bcd150d510..8dfb34612c 100644 --- a/drivers/graphics/driver-graphics/src/lib.rs +++ b/drivers/graphics/driver-graphics/src/lib.rs @@ -16,7 +16,6 @@ use drm_sys::{ DRM_MODE_PROP_BLOB, DRM_MODE_PROP_ENUM, DRM_MODE_PROP_IMMUTABLE, DRM_MODE_PROP_OBJECT, DRM_MODE_PROP_RANGE, DRM_MODE_PROP_SIGNED_RANGE, DRM_PROP_NAME_LEN, }; -use graphics_ipc::v1::CursorDamage; use graphics_ipc::v2::Damage; use inputd::{DisplayHandle, VtEventKind}; use libredox::Fd; @@ -297,6 +296,7 @@ struct VtState { } enum Handle { + // This only exists for compatibility with orbclient. V1Screen { vt: usize, screen: usize, @@ -466,8 +466,9 @@ impl SchemeSync for GraphicsSchemeInner { return Err(Error::new(EINVAL)); } - // Ensure the VT exists such that the rest of the methods can freely access it. - Self::get_or_create_vt(&mut self.adapter, &mut self.vts, vt); + if !self.vts.contains_key(&vt) { + return Err(Error::new(ENOENT)); + } Handle::V1Screen { vt, screen: id } }; @@ -501,90 +502,6 @@ impl SchemeSync for GraphicsSchemeInner { Ok(path.len()) } - fn fsync(&mut self, id: usize, _ctx: &CallerCtx) -> syscall::Result<()> { - match self.handles.get(&id).ok_or(Error::new(EBADF))? { - Handle::V1Screen { vt, screen } => { - if *vt != self.active_vt { - // This is a protection against background VT's spamming us with flush requests. We will - // flush the framebuffer on the next VT switch anyway - return Ok(()); - } - Self::update_whole_screen( - &mut self.adapter, - *screen, - &self.vts[vt].display_fbs[*screen], - ); - Ok(()) - } - Handle::V2 { .. } => Err(Error::new(EOPNOTSUPP)), - Handle::SchemeRoot => Err(Error::new(EOPNOTSUPP)), - } - } - - fn read( - &mut self, - id: usize, - buf: &mut [u8], - _offset: u64, - _fcntl_flags: u32, - _ctx: &CallerCtx, - ) -> Result { - match self.handles.get(&id).ok_or(Error::new(EBADF))? { - Handle::V1Screen { .. } => { - //Currently read is only used for Orbital to check GPU cursor support - //and only expects a buf to pass a 0 or 1 flag - if self.adapter.supports_hw_cursor() { - buf[0] = 1; - } else { - buf[0] = 0; - } - - Ok(1) - } - Handle::V2 { .. } => Err(Error::new(EOPNOTSUPP)), - Handle::SchemeRoot => Err(Error::new(EOPNOTSUPP)), - } - } - - fn write( - &mut self, - id: usize, - buf: &[u8], - _offset: u64, - _fcntl_flags: u32, - _ctx: &CallerCtx, - ) -> Result { - match self.handles.get(&id).ok_or(Error::new(EBADF))? { - Handle::V1Screen { vt, screen } => { - if size_of_val(buf) == std::mem::size_of::() { - let cursor_damage = unsafe { &*buf.as_ptr().cast::() }; - - self.handle_cursor_update(*vt, cursor_damage)?; - - return Ok(buf.len()); - } - - if *vt != self.active_vt { - // This is a protection against background VT's spamming us with flush requests. We will - // flush the framebuffer on the next VT switch anyway - return Ok(buf.len()); - } - - let vt_state = self.vts.get_mut(vt).unwrap(); - - assert_eq!(buf.len(), std::mem::size_of::()); - let damage = unsafe { *buf.as_ptr().cast::() }; - - self.adapter - .update_plane(*screen, &vt_state.display_fbs[*screen], damage); - - Ok(buf.len()) - } - Handle::V2 { .. } => Err(Error::new(EOPNOTSUPP)), - Handle::SchemeRoot => Err(Error::new(EOPNOTSUPP)), - } - } - fn call( &mut self, id: usize, @@ -621,10 +538,7 @@ impl SchemeSync for GraphicsSchemeInner { } match self.handles.get_mut(&id).ok_or(Error::new(EBADF))? { - Handle::V1Screen { .. } => { - return Err(Error::new(EOPNOTSUPP)); - } - Handle::SchemeRoot => return Err(Error::new(EOPNOTSUPP)), + Handle::V1Screen { .. } | Handle::SchemeRoot => return Err(Error::new(EOPNOTSUPP)), Handle::V2 { vt, next_id, fbs } => match metadata[0] { ipc::VERSION => ipc::DrmVersion::with(payload, |mut data| { data.set_version_major(1); @@ -984,7 +898,6 @@ impl SchemeSync for GraphicsSchemeInner { ) -> syscall::Result { // log::trace!("KSMSG MMAP {} {:?} {} {}", id, _flags, _offset, _size); let (framebuffer, offset) = match self.handles.get(&id).ok_or(Error::new(EINVAL))? { - Handle::V1Screen { vt, screen } => (&self.vts[vt].display_fbs[*screen], offset), Handle::V2 { vt: _, next_id: _, @@ -995,7 +908,7 @@ impl SchemeSync for GraphicsSchemeInner { .unwrap(), offset & (MAP_FAKE_OFFSET_MULTIPLIER as u64 - 1), ), - Handle::SchemeRoot => return Err(Error::new(EOPNOTSUPP)), + Handle::V1Screen { .. } | Handle::SchemeRoot => return Err(Error::new(EOPNOTSUPP)), }; let ptr = T::map_dumb_framebuffer(&mut self.adapter, framebuffer); Ok(unsafe { ptr.add(offset as usize) } as usize) diff --git a/drivers/graphics/graphics-ipc/src/lib.rs b/drivers/graphics/graphics-ipc/src/lib.rs index fa4553bd0b..a27c4421c6 100644 --- a/drivers/graphics/graphics-ipc/src/lib.rs +++ b/drivers/graphics/graphics-ipc/src/lib.rs @@ -1,5 +1,4 @@ #![feature(macro_metavar_expr_concat)] mod common; -pub mod v1; pub mod v2; diff --git a/drivers/graphics/graphics-ipc/src/v1.rs b/drivers/graphics/graphics-ipc/src/v1.rs deleted file mode 100644 index fbf2227268..0000000000 --- a/drivers/graphics/graphics-ipc/src/v1.rs +++ /dev/null @@ -1,2 +0,0 @@ -pub use crate::common::Damage; -pub use crate::v2::ipc::UpdateCursor as CursorDamage; diff --git a/drivers/graphics/ihdgd/src/device/scheme.rs b/drivers/graphics/ihdgd/src/device/scheme.rs index 8d275c8aeb..742d61a1db 100644 --- a/drivers/graphics/ihdgd/src/device/scheme.rs +++ b/drivers/graphics/ihdgd/src/device/scheme.rs @@ -10,8 +10,8 @@ use driver_graphics::{ StandardProperties, }; use drm_sys::DRM_MODE_DPMS_ON; -use graphics_ipc::v1::Damage; use graphics_ipc::v2::ipc::{DRM_CAP_DUMB_BUFFER, DRM_CLIENT_CAP_CURSOR_PLANE_HOTSPOT}; +use graphics_ipc::v2::Damage; use syscall::{error::EINVAL, PAGE_SIZE}; use super::Device; diff --git a/drivers/graphics/vesad/src/scheme.rs b/drivers/graphics/vesad/src/scheme.rs index 31d18ba54f..ab58b4b14a 100644 --- a/drivers/graphics/vesad/src/scheme.rs +++ b/drivers/graphics/vesad/src/scheme.rs @@ -8,8 +8,8 @@ use driver_graphics::{ StandardProperties, }; use drm_sys::DRM_MODE_DPMS_ON; -use graphics_ipc::v1::Damage; use graphics_ipc::v2::ipc::{DRM_CAP_DUMB_BUFFER, DRM_CLIENT_CAP_CURSOR_PLANE_HOTSPOT}; +use graphics_ipc::v2::Damage; use syscall::{EINVAL, PAGE_SIZE}; #[derive(Debug)] diff --git a/drivers/graphics/virtio-gpud/src/scheme.rs b/drivers/graphics/virtio-gpud/src/scheme.rs index 74544b4958..9aaae63770 100644 --- a/drivers/graphics/virtio-gpud/src/scheme.rs +++ b/drivers/graphics/virtio-gpud/src/scheme.rs @@ -10,8 +10,8 @@ use driver_graphics::{ use drm_sys::{ DRM_CAP_CURSOR_HEIGHT, DRM_CAP_CURSOR_WIDTH, DRM_MODE_DPMS_ON, DRM_MODE_TYPE_PREFERRED, }; -use graphics_ipc::v1::Damage; use graphics_ipc::v2::ipc::{DRM_CAP_DUMB_BUFFER, DRM_CLIENT_CAP_CURSOR_PLANE_HOTSPOT}; +use graphics_ipc::v2::Damage; use syscall::{EINVAL, PAGE_SIZE};