Modularize PIC-rust stuff
This commit is contained in:
@@ -16,19 +16,35 @@ extern {
|
|||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub extern fn rust_setup_PIC() {
|
pub extern fn rust_setup_PIC() {
|
||||||
|
PIC::setup_PIC();
|
||||||
|
}
|
||||||
|
|
||||||
|
mod PIC {
|
||||||
|
use x86_asm::out;
|
||||||
|
|
||||||
|
const PIC1_COMMAND: u16 = 0x20;
|
||||||
|
const PIC2_COMMAND: u16 = 0xa0;
|
||||||
|
const PIC1_DATA: u16 = 0x21;
|
||||||
|
const PIC2_DATA: u16 = 0xa1;
|
||||||
|
|
||||||
|
pub fn setup_PIC() {
|
||||||
|
|
||||||
let interrupt_mask1: u8 = 0xfc;
|
let interrupt_mask1: u8 = 0xfc;
|
||||||
let interrupt_mask2: u8 = 0xff;
|
let interrupt_mask2: u8 = 0xff;
|
||||||
|
|
||||||
unsafe {
|
unsafe {
|
||||||
out(0x21, interrupt_mask1);
|
out(PIC1_DATA, interrupt_mask1);
|
||||||
out(0xa1, interrupt_mask2);
|
out(PIC2_DATA, interrupt_mask2);
|
||||||
asm!("sti");
|
asm!("sti");
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
unsafe fn out(port: u16, value: u8) {
|
mod x86_asm {
|
||||||
|
|
||||||
|
pub unsafe fn out(port: u16, value: u8) {
|
||||||
asm!("outb %%dx, %%al" : : "dx" (port), "al"(value));
|
asm!("outb %%dx, %%al" : : "dx" (port), "al"(value));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
|
|||||||
Reference in New Issue
Block a user