From 63118337658f849c14188cebf66d881fb72faedf Mon Sep 17 00:00:00 2001 From: bjorn3 <17426603+bjorn3@users.noreply.github.com> Date: Tue, 14 Apr 2026 21:18:43 +0200 Subject: [PATCH] drivers/graphics/bgad: Remove bgad The only thing it does it changing the size of the region that the graphics adapter sees as framebuffer. It doesn't actually tell vesad to resize the framebuffer nor does it implement an actual full graphics driver. For basic usage the bootloader setup framebuffer is sufficient and for anything more advanced, virtio-gpu is a much better option that we already have a full graphics driver for. --- Cargo.lock | 15 ---- Cargo.toml | 1 - drivers/README.md | 1 - drivers/graphics/bgad/Cargo.toml | 20 ----- drivers/graphics/bgad/config.toml | 6 -- drivers/graphics/bgad/src/bga.rs | 51 ------------ drivers/graphics/bgad/src/main.rs | 79 ------------------- drivers/graphics/bgad/src/scheme.rs | 116 ---------------------------- 8 files changed, 289 deletions(-) delete mode 100644 drivers/graphics/bgad/Cargo.toml delete mode 100644 drivers/graphics/bgad/config.toml delete mode 100644 drivers/graphics/bgad/src/bga.rs delete mode 100644 drivers/graphics/bgad/src/main.rs delete mode 100644 drivers/graphics/bgad/src/scheme.rs diff --git a/Cargo.lock b/Cargo.lock index ac92d1f8b9..bce49e16c3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -216,21 +216,6 @@ dependencies = [ "redox_syscall 0.7.3", ] -[[package]] -name = "bgad" -version = "0.1.0" -dependencies = [ - "common", - "daemon", - "inputd", - "libredox", - "log", - "orbclient", - "pcid", - "redox-scheme", - "redox_syscall 0.7.3", -] - [[package]] name = "bincode" version = "1.3.3" diff --git a/Cargo.toml b/Cargo.toml index 5b9b6e24fb..63e2b9a6b2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -33,7 +33,6 @@ members = [ "drivers/audio/ihdad", "drivers/audio/sb16d", - "drivers/graphics/bgad", "drivers/graphics/console-draw", "drivers/graphics/fbbootlogd", "drivers/graphics/driver-graphics", diff --git a/drivers/README.md b/drivers/README.md index 1ef40ba8eb..5f33f2c70a 100644 --- a/drivers/README.md +++ b/drivers/README.md @@ -66,7 +66,6 @@ ### Graphics -- [graphics/bgad](graphics/bgad/) - Bochs video driver - [graphics/ihdgd](graphics/ihdgd/) - Intel graphics driver - [graphics/vesad](graphics/vesad/) - VESA video driver - [graphics/virtio-gpud](graphics/virtio-gpud/) - VirtIO-GPU device driver diff --git a/drivers/graphics/bgad/Cargo.toml b/drivers/graphics/bgad/Cargo.toml deleted file mode 100644 index 47fb0fbc29..0000000000 --- a/drivers/graphics/bgad/Cargo.toml +++ /dev/null @@ -1,20 +0,0 @@ -[package] -name = "bgad" -description = "Bochs graphics driver" -version = "0.1.0" -edition = "2021" - -[dependencies] -orbclient.workspace = true -log.workspace = true -redox-scheme.workspace = true -redox_syscall.workspace = true - -common = { path = "../../common" } -daemon = { path = "../../../daemon" } -inputd = { path = "../../inputd" } -pcid = { path = "../../pcid" } -libredox.workspace = true - -[lints] -workspace = true diff --git a/drivers/graphics/bgad/config.toml b/drivers/graphics/bgad/config.toml deleted file mode 100644 index c76de694b1..0000000000 --- a/drivers/graphics/bgad/config.toml +++ /dev/null @@ -1,6 +0,0 @@ -[[drivers]] -name = "QEMU Graphics Array" -class = 0x03 -vendor = 0x1234 -device = 0x1111 -command = ["bgad"] diff --git a/drivers/graphics/bgad/src/bga.rs b/drivers/graphics/bgad/src/bga.rs deleted file mode 100644 index 5014100c2f..0000000000 --- a/drivers/graphics/bgad/src/bga.rs +++ /dev/null @@ -1,51 +0,0 @@ -const BGA_INDEX_XRES: u16 = 1; -const BGA_INDEX_YRES: u16 = 2; -const BGA_INDEX_BPP: u16 = 3; -const BGA_INDEX_ENABLE: u16 = 4; - -pub struct Bga { - bar: *mut u8, -} - -impl Bga { - pub unsafe fn new(bar: *mut u8) -> Bga { - Bga { bar } - } - - fn bochs_dispi_addr(&mut self, index: u16) -> *mut u16 { - assert!(index <= 0x10); - unsafe { - self.bar - .byte_add(0x500) - .cast::() - .add(usize::from(index)) - } - } - - fn bochs_dispi_read(&mut self, index: u16) -> u16 { - unsafe { self.bochs_dispi_addr(index).read_volatile() } - } - - fn bochs_dispi_write(&mut self, index: u16, data: u16) { - assert!(index <= 0x10); - unsafe { - self.bochs_dispi_addr(index).write_volatile(data); - } - } - - pub fn width(&mut self) -> u16 { - self.bochs_dispi_read(BGA_INDEX_XRES) - } - - pub fn height(&mut self) -> u16 { - self.bochs_dispi_read(BGA_INDEX_YRES) - } - - pub fn set_size(&mut self, width: u16, height: u16) { - self.bochs_dispi_write(BGA_INDEX_ENABLE, 0); - self.bochs_dispi_write(BGA_INDEX_XRES, width); - self.bochs_dispi_write(BGA_INDEX_YRES, height); - self.bochs_dispi_write(BGA_INDEX_BPP, 32); - self.bochs_dispi_write(BGA_INDEX_ENABLE, 0x41); - } -} diff --git a/drivers/graphics/bgad/src/main.rs b/drivers/graphics/bgad/src/main.rs deleted file mode 100644 index 266c430c74..0000000000 --- a/drivers/graphics/bgad/src/main.rs +++ /dev/null @@ -1,79 +0,0 @@ -//! - -use inputd::ProducerHandle; -use pcid_interface::PciFunctionHandle; -use redox_scheme::{ - scheme::{register_sync_scheme, SchemeState}, - RequestKind, SignalBehavior, Socket, -}; - -use crate::bga::Bga; -use crate::scheme::BgaScheme; - -mod bga; -mod scheme; - -// FIXME add a driver-graphics implementation - -fn main() { - pcid_interface::pci_daemon(daemon); -} - -fn daemon(daemon: daemon::Daemon, mut pcid_handle: PciFunctionHandle) -> ! { - let pci_config = pcid_handle.config(); - - let mut name = pci_config.func.name(); - name.push_str("_bga"); - - common::setup_logging( - "graphics", - "pci", - &name, - common::output_level(), - common::file_level(), - ); - - log::info!("BGA {}", pci_config.func.display()); - - let socket = Socket::create().expect("bgad: failed to create bga scheme"); - - let bar = unsafe { pcid_handle.map_bar(2) }.ptr.as_ptr(); - - let mut bga = unsafe { Bga::new(bar) }; - log::debug!("BGA {}x{}", bga.width(), bga.height()); - - let mut state = SchemeState::new(); - let mut scheme = BgaScheme { - bga, - display: ProducerHandle::new().ok(), - }; - - register_sync_scheme(&socket, "bga", &mut scheme).expect("bgad: failed to register bga scheme"); - - daemon.ready(); - - libredox::call::setrens(0, 0).expect("bgad: failed to enter null namespace"); - - loop { - let Some(request) = socket - .next_request(SignalBehavior::Restart) - .expect("bgad: failed to get next scheme request") - else { - // Scheme likely got unmounted - std::process::exit(0); - }; - match request.kind() { - RequestKind::Call(call) => { - let response = call.handle_sync(&mut scheme, &mut state); - - socket - .write_response(response, SignalBehavior::Restart) - .expect("bgad: failed to write next scheme response"); - } - RequestKind::OnClose { id } => { - scheme.on_close(id); - } - _ => (), - } - } -} diff --git a/drivers/graphics/bgad/src/scheme.rs b/drivers/graphics/bgad/src/scheme.rs deleted file mode 100644 index 2401fcf6de..0000000000 --- a/drivers/graphics/bgad/src/scheme.rs +++ /dev/null @@ -1,116 +0,0 @@ -use inputd::ProducerHandle; -use redox_scheme::scheme::SchemeSync; -use redox_scheme::{CallerCtx, OpenResult}; -use std::str; -use syscall::data::Stat; -use syscall::schemev2::NewFdFlags; -use syscall::{Error, Result, EACCES, EINVAL, MODE_CHR}; - -use crate::bga::Bga; - -pub struct BgaScheme { - pub bga: Bga, - pub display: Option, -} - -const SCHEME_ROOT_ID: usize = 1; - -impl SchemeSync for BgaScheme { - fn scheme_root(&mut self) -> Result { - Ok(SCHEME_ROOT_ID) - } - fn openat( - &mut self, - dirfd: usize, - _path: &str, - _flags: usize, - _fcntl_flags: u32, - ctx: &CallerCtx, - ) -> Result { - if dirfd != SCHEME_ROOT_ID { - return Err(Error::new(EACCES)); - } - if ctx.uid == 0 { - Ok(OpenResult::ThisScheme { - number: 0, - flags: NewFdFlags::empty(), - }) - } else { - Err(Error::new(EACCES)) - } - } - - fn read( - &mut self, - _id: usize, - buf: &mut [u8], - _offset: u64, - _fcntl_flags: u32, - _ctx: &CallerCtx, - ) -> Result { - let mut i = 0; - let data = format!("{},{}\n", self.bga.width(), self.bga.height()).into_bytes(); - while i < buf.len() && i < data.len() { - buf[i] = data[i]; - i += 1; - } - Ok(i) - } - - fn write( - &mut self, - _id: usize, - buf: &[u8], - _offset: u64, - _fcntl_flags: u32, - _ctx: &CallerCtx, - ) -> Result { - let string = str::from_utf8(buf).or(Err(Error::new(EINVAL)))?; - let string = string.trim(); - - let mut parts = string.split(','); - - let width = if let Some(part) = parts.next() { - part.parse::().or(Err(Error::new(EINVAL)))? - } else { - self.bga.width() - }; - - let height = if let Some(part) = parts.next() { - part.parse::().or(Err(Error::new(EINVAL)))? - } else { - self.bga.height() - }; - - self.bga.set_size(width, height); - - Ok(buf.len()) - } - - fn fpath(&mut self, _file: usize, buf: &mut [u8], _ctx: &CallerCtx) -> Result { - let mut i = 0; - let scheme_path = b"bga"; - while i < buf.len() && i < scheme_path.len() { - buf[i] = scheme_path[i]; - i += 1; - } - Ok(i) - } - - fn fstat(&mut self, _id: usize, stat: &mut Stat, _ctx: &CallerCtx) -> Result<()> { - *stat = Stat { - st_mode: MODE_CHR | 0o666, - ..Default::default() - }; - - Ok(()) - } - - fn fcntl(&mut self, _id: usize, _cmd: usize, _arg: usize, _ctx: &CallerCtx) -> Result { - Ok(0) - } -} - -impl BgaScheme { - pub fn on_close(&mut self, _id: usize) {} -}