2025-09-08 07:34:48 +00:00
|
|
|
// SPDX-License-Identifier: MPL-2.0
|
|
|
|
|
|
|
|
|
|
use alloc::sync::Arc;
|
|
|
|
|
|
|
|
|
|
use aster_systree::{EmptyNode, SysBranchNode};
|
|
|
|
|
use systree_node::ConfigRootNode;
|
|
|
|
|
|
|
|
|
|
use crate::{fs::configfs::fs::ConfigFsType, prelude::*};
|
|
|
|
|
|
|
|
|
|
mod fs;
|
|
|
|
|
mod inode;
|
|
|
|
|
mod systree_node;
|
|
|
|
|
#[cfg(ktest)]
|
|
|
|
|
mod test;
|
|
|
|
|
|
|
|
|
|
// This method should be called during kernel file system initialization,
|
|
|
|
|
// _after_ `aster_systree::init`.
|
|
|
|
|
pub(super) fn init() {
|
|
|
|
|
let config_kernel_sysnode = EmptyNode::new("config".into());
|
|
|
|
|
super::sysfs::register_kernel_sysnode(config_kernel_sysnode).unwrap();
|
|
|
|
|
|
|
|
|
|
super::registry::register(&ConfigFsType).unwrap();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// Registers a subsystem `SysTree` node under the root node of [`ConfigFs`].
|
|
|
|
|
///
|
|
|
|
|
/// If a subsystem with the same name has already been registered,
|
|
|
|
|
/// this function returns an error.
|
2025-12-26 08:16:42 +00:00
|
|
|
///
|
|
|
|
|
/// [`ConfigFs`]: fs::ConfigFs
|
2026-02-03 08:22:31 +00:00
|
|
|
#[cfg_attr(not(any(ktest, target_arch = "x86_64")), expect(dead_code))]
|
2025-09-08 07:34:48 +00:00
|
|
|
pub fn register_subsystem(subsystem: Arc<dyn SysBranchNode>) -> Result<()> {
|
|
|
|
|
ConfigRootNode::singleton().add_child(subsystem)?;
|
|
|
|
|
|
|
|
|
|
Ok(())
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// Unregisters a subsystem from the root node of [`ConfigFs`] by its name.
|
|
|
|
|
///
|
|
|
|
|
/// If no subsystem with the given name exists, this function returns an error.
|
2025-12-26 08:16:42 +00:00
|
|
|
///
|
|
|
|
|
/// [`ConfigFs`]: fs::ConfigFs
|
2025-09-08 07:34:48 +00:00
|
|
|
#[expect(dead_code)]
|
|
|
|
|
pub fn unregister_subsystem(name: &str) -> Result<()> {
|
|
|
|
|
ConfigRootNode::singleton().remove_child(name)?;
|
|
|
|
|
|
|
|
|
|
Ok(())
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[cfg(ktest)]
|
|
|
|
|
pub fn init_for_ktest() {
|
|
|
|
|
aster_systree::init_for_ktest();
|
|
|
|
|
super::registry::init();
|
|
|
|
|
super::sysfs::init();
|
|
|
|
|
init();
|
|
|
|
|
}
|