JuliOS/src/interrupts/pic/mod.rs
Julien CLEMENT 43eec9621c
All checks were successful
continuous-integration/drone/push Build is passing
cargo-fmt
Signed-off-by: Julien CLEMENT <julien.clement@epita.fr>
2022-12-23 20:07:46 +01:00

43 lines
955 B
Rust

use crate::println;
pub use disk::{disk1_interrupt_handler, disk2_interrupt_handler};
pub use keyboard::keyboard_interrupt_handler;
use pic8259::ChainedPics;
pub use pit::timer_interrupt_handler;
pub mod disk;
pub mod keyboard;
pub mod pit;
pub const PIC_1_OFFSET: u8 = 32;
pub const PIC_2_OFFSET: u8 = PIC_1_OFFSET + 8;
#[derive(Debug, Clone, Copy)]
#[repr(u8)]
pub enum InterruptIndex {
Timer = PIC_1_OFFSET,
Keyboard,
HardDisk1 = PIC_1_OFFSET + 14,
HardDisk2 = PIC_1_OFFSET + 15,
}
impl InterruptIndex {
pub fn as_u8(self) -> u8 {
self as u8
}
pub fn as_usize(self) -> usize {
usize::from(self.as_u8())
}
}
pub static PICS: spin::Mutex<ChainedPics> =
spin::Mutex::new(unsafe { ChainedPics::new(PIC_1_OFFSET, PIC_2_OFFSET) });
pub fn init_pic() {
println!("Initializing PIC");
unsafe {
PICS.lock().initialize();
PICS.lock().write_masks(0b10111000, 0b00001110);
};
}