From b0548384e7ffbf78d7150da2799f894a510911f1 Mon Sep 17 00:00:00 2001 From: Jack Halford Date: Thu, 12 Apr 2018 15:32:11 +0200 Subject: [PATCH] context gone --- kernel-rs/src/arch/x86/gdt.rs | 32 +++++++++---------- kernel-rs/src/arch/x86/interrupt/exception.rs | 3 -- kernel-rs/src/arch/x86/mod.rs | 8 ++--- kernel-rs/src/context.rs | 26 --------------- kernel-rs/src/lib.rs | 6 ++-- 5 files changed, 23 insertions(+), 52 deletions(-) delete mode 100644 kernel-rs/src/context.rs diff --git a/kernel-rs/src/arch/x86/gdt.rs b/kernel-rs/src/arch/x86/gdt.rs index 2aae8e3c..f9c46046 100644 --- a/kernel-rs/src/arch/x86/gdt.rs +++ b/kernel-rs/src/arch/x86/gdt.rs @@ -2,27 +2,27 @@ use x86::structures::gdt; use x86::structures::tss; use x86::instructions::segmentation::set_cs; use x86::instructions::tables::load_tss; -// use spin::Once; +use spin::Once; -// static GDT: Once = Once::new(); -// static TSS: Once = Once::new(); +static GDT: Once = Once::new(); +static TSS: Once = Once::new(); pub fn init() { - // let tss = tss::TaskStateSegment::new(); - // let tss = TSS.call_once(|| { - // let mut tss = tss::TaskStateSegment::new(); - // tss - // }); + let tss = tss::TaskStateSegment::new(); + let tss = TSS.call_once(|| { + let mut tss = tss::TaskStateSegment::new(); + tss + }); - // let mut code_selector = gdt::SegmentSelector(0); - // let mut tss_selector = gdt::SegmentSelector(0); + let mut code_selector = gdt::SegmentSelector(0); + let mut tss_selector = gdt::SegmentSelector(0); - // let gdt = GDT.call_once(|| { - // let mut gdt = gdt::Gdt::new(); - // code_selector = gdt.add_entry(gdt::Descriptor::kernel_code_segment()); - // tss_selector = gdt.add_entry(gdt::Descriptor::tss_segment(&tss)); - // gdt - // }); + let gdt = GDT.call_once(|| { + let mut gdt = gdt::Gdt::new(); + code_selector = gdt.add_entry(gdt::Descriptor::kernel_code_segment()); + tss_selector = gdt.add_entry(gdt::Descriptor::tss_segment(&tss)); + gdt + }); // gdt.load(); // unsafe { diff --git a/kernel-rs/src/arch/x86/interrupt/exception.rs b/kernel-rs/src/arch/x86/interrupt/exception.rs index 06c6cdf4..fa1682dc 100644 --- a/kernel-rs/src/arch/x86/interrupt/exception.rs +++ b/kernel-rs/src/arch/x86/interrupt/exception.rs @@ -69,9 +69,6 @@ pub extern "x86-interrupt" fn page_fault( println!("Error code: {:?}", code); println!("{:#?}", stack_frame); flush!(); - unsafe { - asm!("hlt"); - } } exception!(x87_fpu, {}); diff --git a/kernel-rs/src/arch/x86/mod.rs b/kernel-rs/src/arch/x86/mod.rs index 6b68f857..2110ffae 100644 --- a/kernel-rs/src/arch/x86/mod.rs +++ b/kernel-rs/src/arch/x86/mod.rs @@ -6,7 +6,7 @@ pub mod interrupt; pub mod device; pub mod pti; -// pub mod gdt; +pub mod gdt; pub mod idt; use multiboot2; @@ -39,15 +39,15 @@ pub unsafe extern "C" fn x86_rust_start(multiboot_info_addr: usize) { // load idt (exceptions + irqs) idt::init(); + // fill and load gdt + gdt::init(); + // set up heap ::allocator::init(&mut active_table); // set up pic & apic device::init(&mut active_table); - // fill and load gdt - // gdt::init(); - // primary CPU entry point ::kmain(); } diff --git a/kernel-rs/src/context.rs b/kernel-rs/src/context.rs deleted file mode 100644 index 81b76627..00000000 --- a/kernel-rs/src/context.rs +++ /dev/null @@ -1,26 +0,0 @@ -use multiboot2; -use memory; -use vga; - -pub static mut CONTEXT: Option = None; - -pub struct Context { - pub current_term: u8, - pub vga1: vga::Writer, - pub vga2: vga::Writer, -} - -impl Context -{ - pub fn new(multiboot_start: usize) -> Context { - - - Context { - current_term: 0, - boot_info, - vga1, - vga2, - } - } -} - diff --git a/kernel-rs/src/lib.rs b/kernel-rs/src/lib.rs index b1471098..04c00217 100644 --- a/kernel-rs/src/lib.rs +++ b/kernel-rs/src/lib.rs @@ -48,10 +48,10 @@ pub mod arch; /// kernel entry point. arch module is responsible for /// calling this once the core has loaded pub fn kmain() -> ! { - // heap avalaible for tracking free'd frames + // heap avalaible for tracking freed frames memory::init_noncore(); - x86::instructions::interrupts::int3(); + // x86::instructions::interrupts::int3(); // fn stack_overflow() { stack_overflow(); } // stack_overflow(); @@ -60,7 +60,7 @@ pub fn kmain() -> ! { // *(0xdead as *mut u32) = 42; // }; - // vga is *not* cpu specific, chipset specific? + // vga is *not* cpu specific vga::init(); loop {}