Moved PIT driver into kernel

This commit is contained in:
Connor Wood
2017-07-14 15:26:04 +01:00
parent 0bd6f11a4f
commit 0b6bde7c68
2 changed files with 23 additions and 9 deletions

View File

@@ -5,6 +5,7 @@ use syscall::io::{Pio, Io};
pub mod cpu;
pub mod local_apic;
pub mod pic;
pub mod pit;
pub mod rtc;
pub mod serial;
pub mod hpet;
@@ -17,16 +18,9 @@ pub unsafe fn init(active_table: &mut ActivePageTable){
pub unsafe fn init_noncore(active_table: &mut ActivePageTable) {
{
if let Some(ref hpet) = ACPI_TABLE.lock().hpet {
// Disable the PIT
// TODO: Move PIT driver to kernel, and just don't enable it in the first place if we have an HPET
let mut pit_cmd = Pio::<u8>::new(0x43);
let mut pit_c0 = Pio::<u8>::new(0x40);
pit_cmd.write(0x30);
pit_c0.write(0);
pit_c0.write(0);
hpet::init(hpet, active_table);
} else {
pit::init();
}
}

20
src/device/pit.rs Normal file
View File

@@ -0,0 +1,20 @@
use syscall::io::{Io, Pio};
pub static mut CHAN0: Pio<u8> = Pio::new(0x40);
pub static mut CHAN1: Pio<u8> = Pio::new(0x41);
pub static mut CHAN2: Pio<u8> = Pio::new(0x42);
pub static mut COMMAND: Pio<u8> = Pio::new(0x43);
static SELECT_CHAN0: u8 = 0;
static LOHI: u8 = 0x30;
static MODE3: u8 = 3;
static CHAN0_DIVISOR: u16 = 2685;
pub unsafe fn init() {
COMMAND.write(SELECT_CHAN0 | LOHI | MODE3);
CHAN0.write((CHAN0_DIVISOR & 0xFF) as u8);
CHAN0.write((CHAN0_DIVISOR >> 8) as u8);
println!("Using PIT");
}