Moved PIT driver into kernel
This commit is contained in:
@@ -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
20
src/device/pit.rs
Normal 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");
|
||||
}
|
||||
Reference in New Issue
Block a user