This commit is contained in:
parent
5e934e54fc
commit
6119ebd5b9
4 changed files with 27 additions and 4 deletions
|
@ -18,5 +18,6 @@ log = "0.4.22"
|
||||||
[lints.clippy]
|
[lints.clippy]
|
||||||
missing_safety_doc = "allow"
|
missing_safety_doc = "allow"
|
||||||
needless_range_loop = "allow"
|
needless_range_loop = "allow"
|
||||||
|
too_many_arguments = "allow"
|
||||||
type_complexity = "allow"
|
type_complexity = "allow"
|
||||||
upper_case_acronyms = "allow"
|
upper_case_acronyms = "allow"
|
||||||
|
|
|
@ -23,7 +23,7 @@ use kernel_common::{
|
||||||
paging::{KERNEL_HEAP_INITIAL_SIZE, KERNEL_HEAP_START},
|
paging::{KERNEL_HEAP_INITIAL_SIZE, KERNEL_HEAP_START},
|
||||||
};
|
};
|
||||||
use log::{error, info};
|
use log::{error, info};
|
||||||
use misc::display::{setup_display, DISPLAY};
|
use misc::display::{setup_display, PANIC_DISPLAY};
|
||||||
use sys::{
|
use sys::{
|
||||||
acpica_osl::AE_OK,
|
acpica_osl::AE_OK,
|
||||||
early_acpi::EarlyACPIHandler,
|
early_acpi::EarlyACPIHandler,
|
||||||
|
@ -115,8 +115,9 @@ fn panic(info: &PanicInfo) -> ! {
|
||||||
}
|
}
|
||||||
error!("{}", info);
|
error!("{}", info);
|
||||||
let str = format!("{}", info);
|
let str = format!("{}", info);
|
||||||
let mut display = DISPLAY.lock();
|
let mut display = PANIC_DISPLAY.lock();
|
||||||
if let Some(display) = display.as_mut() {
|
if let Some(display) = display.as_mut() {
|
||||||
|
display.clear();
|
||||||
display.print(&str);
|
display.print(&str);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,7 +18,9 @@ pub struct Display {
|
||||||
current_y: usize,
|
current_y: usize,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//TODO: Change to mutex
|
||||||
pub static DISPLAY: Spinlock<Option<Display>> = Spinlock::new(None);
|
pub static DISPLAY: Spinlock<Option<Display>> = Spinlock::new(None);
|
||||||
|
pub static PANIC_DISPLAY: Spinlock<Option<Display>> = Spinlock::new(None);
|
||||||
|
|
||||||
impl Display {
|
impl Display {
|
||||||
fn write_char(&mut self, x: usize, y: usize, c: char) {
|
fn write_char(&mut self, x: usize, y: usize, c: char) {
|
||||||
|
@ -28,6 +30,12 @@ impl Display {
|
||||||
let text = Text::new(&str, pos, style);
|
let text = Text::new(&str, pos, style);
|
||||||
text.draw(&mut self.framebuffer).unwrap();
|
text.draw(&mut self.framebuffer).unwrap();
|
||||||
}
|
}
|
||||||
|
pub fn clear(&mut self) {
|
||||||
|
self.framebuffer.clear(Bgr888::BLACK).unwrap();
|
||||||
|
self.current_x = 0;
|
||||||
|
self.current_y = 0;
|
||||||
|
self.copy_to_fb();
|
||||||
|
}
|
||||||
fn scroll(&mut self) {
|
fn scroll(&mut self) {
|
||||||
let line_size = self.framebuffer.stride * 20 * 4;
|
let line_size = self.framebuffer.stride * 20 * 4;
|
||||||
self.framebuffer.framebuffer.copy_within(line_size..line_size * self.height, 0);
|
self.framebuffer.framebuffer.copy_within(line_size..line_size * self.height, 0);
|
||||||
|
@ -78,5 +86,20 @@ pub fn setup_display(info: FramebufferInfo) {
|
||||||
current_x: 0,
|
current_x: 0,
|
||||||
current_y: 0,
|
current_y: 0,
|
||||||
};
|
};
|
||||||
|
*PANIC_DISPLAY.lock() = Some(display);
|
||||||
|
let fb = vec![0; info.height as usize * info.stride as usize * 4];
|
||||||
|
let display = Display {
|
||||||
|
framebuffer: FramebufferTarget {
|
||||||
|
framebuffer: fb,
|
||||||
|
width: info.width as usize,
|
||||||
|
height: info.height as usize,
|
||||||
|
stride: info.stride as usize,
|
||||||
|
},
|
||||||
|
framebuffer_addr: addr,
|
||||||
|
width: info.width as usize / 10 - 1,
|
||||||
|
height: info.height as usize / 20 - 1,
|
||||||
|
current_x: 0,
|
||||||
|
current_y: 0,
|
||||||
|
};
|
||||||
*DISPLAY.lock() = Some(display);
|
*DISPLAY.lock() = Some(display);
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,11 +15,9 @@ unsafe impl RawMutex for RawSpinlock {
|
||||||
fn lock(&self) {
|
fn lock(&self) {
|
||||||
self.raw_lock();
|
self.raw_lock();
|
||||||
}
|
}
|
||||||
|
|
||||||
fn try_lock(&self) -> bool {
|
fn try_lock(&self) -> bool {
|
||||||
unimplemented!();
|
unimplemented!();
|
||||||
}
|
}
|
||||||
|
|
||||||
unsafe fn unlock(&self) {
|
unsafe fn unlock(&self) {
|
||||||
self.raw_unlock();
|
self.raw_unlock();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue