diff --git a/src/acpi/aml/mod.rs b/src/acpi/aml/mod.rs index a50ec4c..7ad0473 100644 --- a/src/acpi/aml/mod.rs +++ b/src/acpi/aml/mod.rs @@ -59,13 +59,11 @@ pub fn parse_aml_table(sdt: &'static Sdt) -> Result, let mut global_namespace = BTreeMap::new(); term_list.execute(&mut global_namespace, global_namespace_specifier.clone()); - println!("{:#?}", global_namespace); - Ok(global_namespace) } pub fn is_aml_table(sdt: &'static Sdt) -> bool { - if &sdt.signature == b"DSDT" {//|| &sdt.signature == b"SSDT" { + if &sdt.signature == b"DSDT" || &sdt.signature == b"SSDT" { true } else { false diff --git a/src/acpi/mod.rs b/src/acpi/mod.rs index e1f617f..ead12f5 100644 --- a/src/acpi/mod.rs +++ b/src/acpi/mod.rs @@ -5,6 +5,7 @@ use core::intrinsics::{atomic_load, atomic_store}; use core::sync::atomic::Ordering; use collections::btree_map::BTreeMap; use collections::string::String; +use alloc::boxed::Box; use spin::Mutex; @@ -198,14 +199,20 @@ fn parse_sdt(sdt: &'static Sdt, active_table: &mut ActivePageTable) { } } } else if is_aml_table(sdt) { - ACPI_TABLE.lock().namespace = match parse_aml_table(sdt) { + match parse_aml_table(sdt) { Ok(res) => { println!(": Parsed"); - Some(res) + let ref mut namespace = ACPI_TABLE.lock().namespace; + + if let Some(ref mut ns) = *namespace { + let mut res = res.clone(); + ns.append(&mut res); + } else { + *namespace = Some(res); + } }, Err(AmlError::AmlParseError(e)) => { println!(": {}", e); - None } }; } else {