Get vesad framebuffer from env

This commit is contained in:
Jeremy Soller
2022-02-05 19:57:11 -07:00
parent 36b3af4262
commit 5e3248ce26
2 changed files with 16 additions and 51 deletions
+16 -14
View File
@@ -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
-37
View File
@@ -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,
}