summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--kernel/src/interrupts/apic.rs3
-rw-r--r--kernel/src/interrupts/exception_handlers.rs8
-rw-r--r--kernel/src/interrupts/idt.rs2
-rw-r--r--kernel/src/interrupts/interrupt_handlers.rs12
-rw-r--r--kernel/src/interrupts/mod.rs2
-rw-r--r--kernel/src/io/panic_screen.rs27
-rw-r--r--kernel/src/io/vga_text.rs13
-rw-r--r--kernel/src/testing/panic.rs14
8 files changed, 33 insertions, 48 deletions
diff --git a/kernel/src/interrupts/apic.rs b/kernel/src/interrupts/apic.rs
index 2761fb9..0e89943 100644
--- a/kernel/src/interrupts/apic.rs
+++ b/kernel/src/interrupts/apic.rs
@@ -7,7 +7,6 @@ const APIC_BASE_MSR: u32 = 0x001b;
// APIC constant register values
const APIC_DISABLE: u32 = 0x0001_0000;
const APIC_NMI: u32 = 0x0000_0400;
-const APIC_SW_ENABLE: u32 = 0x0000_0100;
pub fn is_x2apic() -> bool {
let info: u32;
@@ -98,7 +97,7 @@ impl Apic {
return None;
}
Self::disable_pic();
- let mut base_apic = unsafe { Msr::new(APIC_BASE_MSR).read() };
+ let base_apic = unsafe { Msr::new(APIC_BASE_MSR).read() };
let mut apic = Self::from_base_apic(base_apic);
apic.set(ApicRegister::LogicalDst, 0);
diff --git a/kernel/src/interrupts/exception_handlers.rs b/kernel/src/interrupts/exception_handlers.rs
index c689501..ce8f6c0 100644
--- a/kernel/src/interrupts/exception_handlers.rs
+++ b/kernel/src/interrupts/exception_handlers.rs
@@ -13,16 +13,16 @@ macro_rules! exception_default {
};
}
-static mut expected_fault: InterruptType = InterruptType::None;
+static mut EXPECTED_FAULT: InterruptType = InterruptType::None;
pub unsafe fn expect_fault(int: InterruptType) {
- if expected_fault == InterruptType::None {
- expected_fault = int;
+ if EXPECTED_FAULT == InterruptType::None {
+ EXPECTED_FAULT = int;
}
}
fn get_expected_fault() -> InterruptType {
- unsafe { expected_fault }
+ unsafe { EXPECTED_FAULT }
}
pub extern "x86-interrupt" fn breakpoint_handler(stack_frame: &mut InterruptStackFrame) {
diff --git a/kernel/src/interrupts/idt.rs b/kernel/src/interrupts/idt.rs
index 641e44e..4e5dd77 100644
--- a/kernel/src/interrupts/idt.rs
+++ b/kernel/src/interrupts/idt.rs
@@ -34,7 +34,7 @@ lazy_static! {
}
pub extern "x86-interrupt" fn dummy_handler(
- stack_frame: &mut x86_64::structures::idt::InterruptStackFrame,
+ _stack_frame: &mut x86_64::structures::idt::InterruptStackFrame,
) {
panic!("unhandled interrupt recieved");
}
diff --git a/kernel/src/interrupts/interrupt_handlers.rs b/kernel/src/interrupts/interrupt_handlers.rs
index e7af0e1..831211b 100644
--- a/kernel/src/interrupts/interrupt_handlers.rs
+++ b/kernel/src/interrupts/interrupt_handlers.rs
@@ -1,20 +1,18 @@
-use super::InterruptType;
-use crate::io::qemu;
use core::fmt::Write;
-use x86_64::structures::idt::{InterruptStackFrame, PageFaultErrorCode};
+use x86_64::structures::idt::InterruptStackFrame;
use x86_64::structures::port;
-pub extern "x86-interrupt" fn timer_handler(stack_frame: &mut InterruptStackFrame) {
- write!(crate::io::vga_text::OStream::new(), "Timer");
+pub extern "x86-interrupt" fn timer_handler(_stack_frame: &mut InterruptStackFrame) {
+ crate::io::vga_text::OStream::new().print(b"Timer");
if let Some(apic) = unsafe { super::apic::get_local_apic() } {
apic.end_of_interrupt()
}
}
-pub extern "x86-interrupt" fn keyboard_handler(stack_frame: &mut InterruptStackFrame) {
+pub extern "x86-interrupt" fn keyboard_handler(_stack_frame: &mut InterruptStackFrame) {
let code: u8 = unsafe { port::PortRead::read_from_port(0x60) };
- write!(crate::io::vga_text::OStream::new(), "{}", code);
+ let _ = write!(crate::io::vga_text::OStream::new(), "{}", code);
if let Some(apic) = unsafe { super::apic::get_local_apic() } {
apic.end_of_interrupt()
}
diff --git a/kernel/src/interrupts/mod.rs b/kernel/src/interrupts/mod.rs
index 6a92c3f..3f5e09a 100644
--- a/kernel/src/interrupts/mod.rs
+++ b/kernel/src/interrupts/mod.rs
@@ -24,7 +24,7 @@ pub enum InterruptType {
StackSegmentFault,
GeneralProtectionFault,
PageFault,
- x87Floating = 16,
+ X87Floating = 16,
AlignmentCheck,
MachineCheck,
SIMD,
diff --git a/kernel/src/io/panic_screen.rs b/kernel/src/io/panic_screen.rs
index ce2c118..7b81676 100644
--- a/kernel/src/io/panic_screen.rs
+++ b/kernel/src/io/panic_screen.rs
@@ -1,11 +1,10 @@
-use core::fmt::Write;
-use crate::io::vga_text::{OStream, CharState, Color};
+use crate::io::vga_text::{CharState, Color, OStream};
const PANIC_SCREEN_MESSAGE_BUFFER_SIZE: usize = 2048;
struct TextBuffer<'a> {
dst: &'a mut [u8],
- len: usize
+ len: usize,
}
impl<'a> TextBuffer<'a> {
@@ -23,7 +22,7 @@ impl<'a> core::fmt::Write for TextBuffer<'a> {
Err(core::fmt::Error)
} else {
let s = s.as_bytes();
- (&mut self.dst[self.len..self.len+s.len()]).clone_from_slice(s);
+ (&mut self.dst[self.len..self.len + s.len()]).clone_from_slice(s);
Ok(self.len += s.len())
}
}
@@ -31,27 +30,21 @@ impl<'a> core::fmt::Write for TextBuffer<'a> {
pub fn show(args: Option<&core::fmt::Arguments>) {
let mut stderr = OStream::new();
- stderr.set_state(CharState::from_colors(
- Color::LightRed,
- Color::Red,
- ));
+ stderr.set_state(CharState::from_colors(Color::LightRed, Color::Red));
stderr.clear();
stderr.print(b"uff-os");
stderr.set_row(10);
- stderr.set_state(CharState::from_colors(
- Color::White,
- Color::Red,
- ));
+ stderr.set_state(CharState::from_colors(Color::White, Color::Red));
stderr.print_centered(b"<kernel panic>");
stderr.set_row(14);
- stderr.set_state(CharState::from_colors(
- Color::Cyan,
- Color::Red,
- ));
+ stderr.set_state(CharState::from_colors(Color::Cyan, Color::Red));
stderr.set_centered(true);
let buffer: &mut [u8] = &mut [b' '; PANIC_SCREEN_MESSAGE_BUFFER_SIZE];
let mut tbuffer = TextBuffer::new(buffer);
- let _ = core::fmt::write(&mut tbuffer, *args.unwrap_or(&format_args!("no panic information obtainable")));
+ let _ = core::fmt::write(
+ &mut tbuffer,
+ *args.unwrap_or(&format_args!("no panic information obtainable")),
+ );
stderr.print(tbuffer.get());
stderr.set_centered(false);
}
diff --git a/kernel/src/io/vga_text.rs b/kernel/src/io/vga_text.rs
index 277db73..72c4d85 100644
--- a/kernel/src/io/vga_text.rs
+++ b/kernel/src/io/vga_text.rs
@@ -23,7 +23,7 @@ pub const WIDTH: usize = 80;
pub const HEIGHT: usize = 25;
#[derive(Clone, Copy)]
-#[repr(C)]
+#[repr(C, packed)]
pub struct CharState(pub u8);
impl CharState {
@@ -40,9 +40,8 @@ impl CharState {
}
}
-#[no_mangle]
#[derive(Clone, Copy)]
-#[repr(C)]
+#[repr(C, packed)]
pub struct VgaChar {
pub byte: u8,
pub state: CharState,
@@ -58,7 +57,7 @@ pub struct OStream {
pos: (usize, usize),
cursor: *mut VgaChar,
state: CharState,
- centered_mode: bool
+ centered_mode: bool,
}
impl OStream {
@@ -158,10 +157,10 @@ impl OStream {
}
pub fn print_centered(&mut self, s: &[u8]) {
- let mut line_start = 0;
- let mut line_len = 0;
for line in s.split(|&c| c == b'\n') {
- if line.is_empty() { self.new_line() }
+ if line.is_empty() {
+ self.new_line()
+ }
for chunk in line.chunks(WIDTH) {
self.set_col((WIDTH - chunk.len()) >> 1);
self.put_bytes(chunk);
diff --git a/kernel/src/testing/panic.rs b/kernel/src/testing/panic.rs
index de07ba8..11469f2 100644
--- a/kernel/src/testing/panic.rs
+++ b/kernel/src/testing/panic.rs
@@ -1,17 +1,15 @@
-use crate::io::{qemu, serial, vga_text};
+use crate::io::{qemu, serial};
use core::fmt::Write;
use core::panic::PanicInfo;
use qemu::{exit_qemu, QemuExitCode};
use serial::SerialStream;
-use vga_text::OStream;
use x86_64::instructions::interrupts;
-pub fn serial_should_panic(info: &PanicInfo) -> ! {
+pub fn serial_should_panic(_info: &PanicInfo) -> ! {
interrupts::disable();
let mut stdout = SerialStream::new();
write!(stdout, "\nOK\nsuccessfully panicked\n").unwrap();
- exit_qemu(QemuExitCode::Success);
- loop {}
+ exit_qemu(QemuExitCode::Success)
}
pub fn serial_panic(info: &PanicInfo) -> ! {
@@ -24,14 +22,12 @@ pub fn serial_panic(info: &PanicInfo) -> ! {
info
)
.unwrap();
- exit_qemu(QemuExitCode::Failed);
- loop {}
+ exit_qemu(QemuExitCode::Failed)
}
pub fn should_panic(_info: &PanicInfo) -> ! {
interrupts::disable();
- exit_qemu(QemuExitCode::Success);
- loop {}
+ exit_qemu(QemuExitCode::Success)
}
pub fn panic(info: &PanicInfo) -> ! {