42-archive/kernel-rs/src/acpi/rsdt.rs
2018-03-02 15:48:06 +01:00

19 lines
635 B
Rust

use super::{ACPISDTHeader,ACPISDTIter};
static mut RSDT: Option<*const ACPISDTHeader> = None;
/// ## Initialize Root System Description Table (RSDT)
/// input param addr is contain in RSDP
pub fn init(addr: u32) -> Result <(), &'static str> {
if ACPISDTHeader::valid(addr, "RSDT") {
unsafe {RSDT = Some(addr as *const ACPISDTHeader)};
return Ok(());
}
return Err("Can not find Root System Description Table (RSDT).");
}
/// Return a iterable of ptr contained in RSDT
/// RSDT must have been initialized first
pub fn iter() -> Result <ACPISDTIter, &'static str> {
ACPISDTIter::new(unsafe {RSDT}, 4)
}