You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
34 lines
789 B
34 lines
789 B
pub mod vga;
|
|
pub mod acpi;
|
|
pub mod apic;
|
|
pub mod mp;
|
|
pub mod serial;
|
|
pub mod pic;
|
|
pub mod keyboard;
|
|
pub mod pit;
|
|
pub mod ide;
|
|
|
|
pub fn init(mut page_map: impl FnMut(usize, usize)) -> acpi::AcpiResult {
|
|
assert_has_not_been_called!();
|
|
|
|
page_map(0, 1); // EBDA
|
|
page_map(0xe0_000, 0x100 - 0xe0);
|
|
page_map(0x07fe1000, 1); // RSDT
|
|
page_map(0xfee00000, 1); // LAPIC
|
|
page_map(0xfec00000, 1); // IOAPIC
|
|
|
|
let acpi = acpi::init().expect("Failed to init ACPI");
|
|
assert_eq!(acpi.lapic_addr as usize, 0xfee00000);
|
|
trace!("acpi = {:?}", acpi);
|
|
|
|
if cfg!(feature = "use_apic") {
|
|
pic::disable();
|
|
apic::init(acpi.lapic_addr, acpi.ioapic_id);
|
|
} else {
|
|
pic::init();
|
|
}
|
|
pit::init();
|
|
serial::init();
|
|
keyboard::init();
|
|
acpi
|
|
} |