From 5e3248ce26f0736f2f5a28e9a6cd625ee13e6296 Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Sat, 5 Feb 2022 19:57:11 -0700 Subject: [PATCH] Get vesad framebuffer from env --- vesad/src/main.rs | 30 ++++++++++++++++-------------- vesad/src/mode_info.rs | 37 ------------------------------------- 2 files changed, 16 insertions(+), 51 deletions(-) delete mode 100644 vesad/src/mode_info.rs diff --git a/vesad/src/main.rs b/vesad/src/main.rs index e1249a1a2e..8962a80dcc 100644 --- a/vesad/src/main.rs +++ b/vesad/src/main.rs @@ -10,12 +10,10 @@ use std::io::{Read, Write}; use std::os::unix::io::{RawFd, FromRawFd}; use syscall::{physmap, physunmap, Packet, SchemeMut, EVENT_READ, PHYSMAP_WRITE, PHYSMAP_WRITE_COMBINE}; -use crate::mode_info::VBEModeInfo; use crate::primitive::fast_set64; use crate::scheme::{DisplayScheme, HandleKind}; pub mod display; -pub mod mode_info; pub mod primitive; pub mod scheme; pub mod screen; @@ -33,19 +31,23 @@ fn main() { } } - let width; - let height; - let physbaseptr; + let width = usize::from_str_radix( + &env::var("FRAMEBUFFER_WIDTH") + .expect("FRAMEBUFFER_WIDTH not set"), + 16 + ).expect("failed to parse FRAMEBUFFER_WIDTH"); + let height = usize::from_str_radix( + &env::var("FRAMEBUFFER_HEIGHT") + .expect("FRAMEBUFFER_HEIGHT not set"), + 16 + ).expect("failed to parse FRAMEBUFFER_HEIGHT"); + let physbaseptr = usize::from_str_radix( + &env::var("FRAMEBUFFER_ADDR") + .expect("FRAMEBUFFER_ADDR not set"), + 16 + ).expect("failed to parse FRAMEBUFFER_ADDR"); - { - let mode_info = unsafe { &*(physmap(0x5200, 4096, syscall::PhysmapFlags::empty()).expect("vesad: failed to map VBE info") as *const VBEModeInfo) }; - - width = mode_info.xresolution as usize; - height = mode_info.yresolution as usize; - physbaseptr = mode_info.physbaseptr as usize; - - unsafe { let _ = physunmap(mode_info as *const _ as usize); } - } + println!("vesad: {}x{} at 0x{:X}", width, height, physbaseptr); if physbaseptr > 0 { // Daemonize diff --git a/vesad/src/mode_info.rs b/vesad/src/mode_info.rs deleted file mode 100644 index 7d59af6452..0000000000 --- a/vesad/src/mode_info.rs +++ /dev/null @@ -1,37 +0,0 @@ -/// The info of the VBE mode -#[derive(Copy, Clone, Default, Debug)] -#[repr(packed)] -pub struct VBEModeInfo { - attributes: u16, - win_a: u8, - win_b: u8, - granularity: u16, - winsize: u16, - segment_a: u16, - segment_b: u16, - winfuncptr: u32, - bytesperscanline: u16, - pub xresolution: u16, - pub yresolution: u16, - xcharsize: u8, - ycharsize: u8, - numberofplanes: u8, - bitsperpixel: u8, - numberofbanks: u8, - memorymodel: u8, - banksize: u8, - numberofimagepages: u8, - unused: u8, - redmasksize: u8, - redfieldposition: u8, - greenmasksize: u8, - greenfieldposition: u8, - bluemasksize: u8, - bluefieldposition: u8, - rsvdmasksize: u8, - rsvdfieldposition: u8, - directcolormodeinfo: u8, - pub physbaseptr: u32, - offscreenmemoryoffset: u32, - offscreenmemsize: u16, -}