From 4060ac558c6c60bbc3ae64ec258924da9916c071 Mon Sep 17 00:00:00 2001 From: Philipp Oppermann Date: Fri, 25 Jan 2019 14:09:12 +0100 Subject: [PATCH] Add a timer interrupt handler --- src/interrupts.rs | 14 +++++++++++--- src/main.rs | 1 - 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/interrupts.rs b/src/interrupts.rs index e0d2d688..de314e97 100644 --- a/src/interrupts.rs +++ b/src/interrupts.rs @@ -3,15 +3,17 @@ // for a Windows system. #![cfg(not(windows))] -use crate::{gdt, println}; +use crate::{gdt, print, println}; use lazy_static::lazy_static; -use x86_64::structures::idt::{ExceptionStackFrame, InterruptDescriptorTable}; use pic8259_simple::ChainedPics; use spin; +use x86_64::structures::idt::{ExceptionStackFrame, InterruptDescriptorTable}; pub const PIC_1_OFFSET: u8 = 32; pub const PIC_2_OFFSET: u8 = PIC_1_OFFSET + 8; +pub const TIMER_INTERRUPT_ID: u8 = PIC_1_OFFSET; + pub static PICS: spin::Mutex = spin::Mutex::new(unsafe { ChainedPics::new(PIC_1_OFFSET, PIC_2_OFFSET) }); @@ -21,9 +23,11 @@ lazy_static! { idt.breakpoint.set_handler_fn(breakpoint_handler); idt.double_fault.set_handler_fn(double_fault_handler); unsafe { - idt.double_fault.set_handler_fn(double_fault_handler) + idt.double_fault + .set_handler_fn(double_fault_handler) .set_stack_index(gdt::DOUBLE_FAULT_IST_INDEX); } + idt[usize::from(TIMER_INTERRUPT_ID)].set_handler_fn(timer_interrupt_handler); idt }; } @@ -43,3 +47,7 @@ extern "x86-interrupt" fn double_fault_handler( println!("EXCEPTION: DOUBLE FAULT\n{:#?}", stack_frame); loop {} } + +extern "x86-interrupt" fn timer_interrupt_handler(_stack_frame: &mut ExceptionStackFrame) { + print!("."); +} diff --git a/src/main.rs b/src/main.rs index 1f628a36..1cdc2645 100644 --- a/src/main.rs +++ b/src/main.rs @@ -21,7 +21,6 @@ pub extern "C" fn _start() -> ! { loop {} } - /// This function is called on panic. #[cfg(not(test))] #[panic_handler]