Get vesad framebuffer from env
This commit is contained in:
+16
-14
@@ -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
|
||||
|
||||
@@ -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,
|
||||
}
|
||||
Reference in New Issue
Block a user