diff --git a/graphics/vesad/src/framebuffer.rs b/graphics/vesad/src/framebuffer.rs deleted file mode 100644 index 7eeab2fe4d..0000000000 --- a/graphics/vesad/src/framebuffer.rs +++ /dev/null @@ -1,59 +0,0 @@ -use std::ptr; - -pub struct FrameBuffer { - pub onscreen: *mut [u32], - pub phys: usize, - pub width: usize, - pub height: usize, - pub stride: usize, -} - -impl FrameBuffer { - pub unsafe fn new(phys: usize, width: usize, height: usize, stride: usize) -> Self { - let size = stride * height; - let virt = common::physmap( - phys, - size * 4, - common::Prot { - read: true, - write: true, - }, - common::MemoryType::WriteCombining, - ) - .expect("vesad: failed to map framebuffer") as *mut u32; - - let onscreen = ptr::slice_from_raw_parts_mut(virt, size); - - Self { - onscreen, - phys, - width, - height, - stride, - } - } - - pub unsafe fn parse(var: &str) -> Option { - fn parse_number(part: &str) -> Option { - let (start, radix) = if part.starts_with("0x") { - (2, 16) - } else { - (0, 10) - }; - match usize::from_str_radix(&part[start..], radix) { - Ok(ok) => Some(ok), - Err(err) => { - eprintln!("vesad: failed to parse '{}': {}", part, err); - None - } - } - } - - let mut parts = var.split(','); - let phys = parse_number(parts.next()?)?; - let width = parse_number(parts.next()?)?; - let height = parse_number(parts.next()?)?; - let stride = parse_number(parts.next()?)?; - Some(Self::new(phys, width, height, stride)) - } -} diff --git a/graphics/vesad/src/main.rs b/graphics/vesad/src/main.rs index e107129af0..7549e86a93 100644 --- a/graphics/vesad/src/main.rs +++ b/graphics/vesad/src/main.rs @@ -9,10 +9,8 @@ use std::fs::File; use std::io::Write; use std::os::fd::AsRawFd; -use crate::framebuffer::FrameBuffer; -use crate::scheme::FbAdapter; +use crate::scheme::{FbAdapter, FrameBuffer}; -mod framebuffer; mod scheme; fn main() { diff --git a/graphics/vesad/src/scheme.rs b/graphics/vesad/src/scheme.rs index 63a83896c8..42e4054e41 100644 --- a/graphics/vesad/src/scheme.rs +++ b/graphics/vesad/src/scheme.rs @@ -6,8 +6,6 @@ use driver_graphics::{CursorFramebuffer, CursorPlane, Framebuffer, GraphicsAdapt use graphics_ipc::v1::Damage; use syscall::PAGE_SIZE; -use crate::framebuffer::FrameBuffer; - pub struct FbAdapter { pub framebuffers: Vec, } @@ -60,6 +58,64 @@ impl GraphicsAdapter for FbAdapter { } } +pub struct FrameBuffer { + pub onscreen: *mut [u32], + pub phys: usize, + pub width: usize, + pub height: usize, + pub stride: usize, +} + +impl FrameBuffer { + pub unsafe fn new(phys: usize, width: usize, height: usize, stride: usize) -> Self { + let size = stride * height; + let virt = common::physmap( + phys, + size * 4, + common::Prot { + read: true, + write: true, + }, + common::MemoryType::WriteCombining, + ) + .expect("vesad: failed to map framebuffer") as *mut u32; + + let onscreen = ptr::slice_from_raw_parts_mut(virt, size); + + Self { + onscreen, + phys, + width, + height, + stride, + } + } + + pub unsafe fn parse(var: &str) -> Option { + fn parse_number(part: &str) -> Option { + let (start, radix) = if part.starts_with("0x") { + (2, 16) + } else { + (0, 10) + }; + match usize::from_str_radix(&part[start..], radix) { + Ok(ok) => Some(ok), + Err(err) => { + eprintln!("vesad: failed to parse '{}': {}", part, err); + None + } + } + } + + let mut parts = var.split(','); + let phys = parse_number(parts.next()?)?; + let width = parse_number(parts.next()?)?; + let height = parse_number(parts.next()?)?; + let stride = parse_number(parts.next()?)?; + Some(Self::new(phys, width, height, stride)) + } +} + pub struct GraphicScreen { width: usize, height: usize,