Skip to content
Snippets Groups Projects
Commit 0e22ba24 authored by Jeremy Soller's avatar Jeremy Soller
Browse files

Initialize PIC in Rust

parent 571b2aa2
No related branches found
No related tags found
No related merge requests found
...@@ -2,10 +2,12 @@ use paging::ActivePageTable; ...@@ -2,10 +2,12 @@ use paging::ActivePageTable;
pub mod cpu; pub mod cpu;
pub mod local_apic; pub mod local_apic;
pub mod pic;
pub mod rtc; pub mod rtc;
pub mod serial; pub mod serial;
pub unsafe fn init(active_table: &mut ActivePageTable){ pub unsafe fn init(active_table: &mut ActivePageTable){
pic::init();
local_apic::init(active_table); local_apic::init(active_table);
rtc::init(); rtc::init();
serial::init(); serial::init();
......
use syscall::io::{Io, Pio};
pub static mut MASTER: Pic = Pic::new(0x20);
pub static mut SLAVE: Pic = Pic::new(0xA0);
pub unsafe fn init() {
// Start initialization
MASTER.cmd.write(0x11);
SLAVE.cmd.write(0x11);
// Set offsets
MASTER.data.write(0x20);
SLAVE.data.write(0x28);
// Set up cascade
MASTER.data.write(4);
SLAVE.data.write(2);
// Set up interrupt mode (1 is manual, 2 is auto EOI)
MASTER.data.write(1);
SLAVE.data.write(1);
// Unmask interrupts
MASTER.data.write(0);
SLAVE.data.write(0);
// Ack remaining interrupts
MASTER.ack();
SLAVE.ack();
}
pub struct Pic {
cmd: Pio<u8>,
data: Pio<u8>,
}
impl Pic {
pub const fn new(port: u16) -> Pic {
Pic {
cmd: Pio::new(port),
data: Pio::new(port + 1),
}
}
pub fn ack(&mut self) {
self.cmd.write(0x20);
}
}
...@@ -120,10 +120,6 @@ pub unsafe extern fn kstart() -> ! { ...@@ -120,10 +120,6 @@ pub unsafe extern fn kstart() -> ! {
// Read ACPI tables, starts APs // Read ACPI tables, starts APs
acpi::init(&mut active_table); acpi::init(&mut active_table);
// Clear pending IRQs
// TODO: Remove this and ack all IRQs without listeners
interrupt::irq::acknowledge(8);
BSP_READY.store(true, Ordering::SeqCst); BSP_READY.store(true, Ordering::SeqCst);
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment