diff --git a/src/scheme/dtb.rs b/src/scheme/dtb.rs index c46179400c..a37d20efec 100644 --- a/src/scheme/dtb.rs +++ b/src/scheme/dtb.rs @@ -1,7 +1,7 @@ use core::sync::atomic::{self, AtomicUsize}; use alloc::boxed::Box; -use hashbrown::HashMap; +use alloc::collections::BTreeMap; use spin::{Once, RwLock}; use crate::dtb::DTB_BINARY; @@ -30,14 +30,12 @@ struct Handle { stat: bool, } -static HANDLES: RwLock> = RwLock::new(HashMap::new()); +static HANDLES: RwLock> = RwLock::new(BTreeMap::new()); static NEXT_FD: AtomicUsize = AtomicUsize::new(0); static DATA: Once> = Once::new(); -static SCHEME_ID: Once = Once::new(); impl DtbScheme { - pub fn new(id: SchemeId) -> Self { - let mut id_init = false; + pub fn init() { let mut data_init = false; DATA.call_once(|| { @@ -51,16 +49,9 @@ impl DtbScheme { Box::from(dtb) }); - SCHEME_ID.call_once(|| { - id_init = true; - - id - }); - if !data_init || !id_init { + if !data_init { log::error!("DtbScheme::new called multiple times"); } - - Self } } diff --git a/src/scheme/mod.rs b/src/scheme/mod.rs index 6a6b261e55..68f06a69b4 100644 --- a/src/scheme/mod.rs +++ b/src/scheme/mod.rs @@ -501,5 +501,9 @@ pub fn init_globals() { { AcpiScheme::init(); } + #[cfg(target_arch = "aarch64")] + { + DtbScheme::init(); + } IrqScheme::init(); }