From ce313ba28dfaeea0a32c95e3ae5be5b2222b72b7 Mon Sep 17 00:00:00 2001 From: 4lDO2 <4lDO2@protonmail.com> Date: Wed, 6 Sep 2023 23:12:10 +0200 Subject: [PATCH] Add global scheme IDs to map, for now. --- src/scheme/mod.rs | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/scheme/mod.rs b/src/scheme/mod.rs index 4c6edf628f..6c515704e2 100644 --- a/src/scheme/mod.rs +++ b/src/scheme/mod.rs @@ -109,7 +109,7 @@ impl<'a> Iterator for SchemeIter<'a> { /// Scheme list type pub struct SchemeList { map: BTreeMap, - names: BTreeMap, SchemeId>>, + pub(crate) names: BTreeMap, SchemeId>>, next_ns: usize, next_id: usize, } @@ -121,9 +121,24 @@ impl SchemeList { names: BTreeMap::new(), // Scheme namespaces always start at 1. 0 is a reserved namespace, the null namespace next_ns: 1, - next_id: 1 + core::mem::variant_count::(), + next_id: MAX_GLOBAL_SCHEMES, }; + let mut insert_globals = |globals: &[GlobalSchemes]| { + for &g in globals { + list.map.insert(SchemeId::from(g as usize), KernelSchemes::Global(g)); + } + }; + + // TODO: impl TryFrom and bypass map for global schemes? + { + use GlobalSchemes::*; + insert_globals(&[Debug, Event, Memory, Pipe, Serio, Irq]); + + #[cfg(all(feature = "acpi", any(target_arch = "x86", target_arch = "x86_64")))] + insert_globals(&[Acpi]); + } + list.new_null(); list.new_root(); list @@ -438,6 +453,11 @@ pub enum GlobalSchemes { #[cfg(all(feature = "acpi", any(target_arch = "x86", target_arch = "x86_64")))] Acpi, } +pub const MAX_GLOBAL_SCHEMES: usize = 16; + +const _: () = { + assert!(1 + core::mem::variant_count::() < MAX_GLOBAL_SCHEMES); +}; impl core::ops::Deref for KernelSchemes { type Target = dyn KernelScheme;