TingHuang dd9f1fc1a4
新增SysFS (#250)
* 添加sysfs

* 注册sysfs

* 添加sysfs相关

* 添加rust-anlyzer辅助配置

* 将设备与sysfs相关联

* 添加单独的文件管理sysfs下的文件夹
2023-04-21 16:03:42 +08:00

55 lines
1.9 KiB
Rust
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

use super::{LockedSysFSInode, SYS_BUS_INODE};
use crate::{filesystem::vfs::IndexNode, kdebug, syscall::SystemError};
use alloc::sync::Arc;
/// @brief: 注册bus在sys/bus下生成文件夹
/// @parameter bus_name: 总线文件夹名
/// @return: 操作成功返回inode操作失败返回错误码
#[inline]
#[allow(dead_code)]
pub fn bus_register(bus_name: &str) -> Result<Arc<dyn IndexNode>, SystemError> {
let binding: Arc<dyn IndexNode> = SYS_BUS_INODE();
kdebug!("Before bus_register: ls /sys/bus/: {:?}", binding.list());
binding
.as_any_ref()
.downcast_ref::<LockedSysFSInode>()
.ok_or(SystemError::E2BIG)
.unwrap()
.add_dir(bus_name)
}
/// @brief: 注销bus在sys/bus删除文件夹
/// @parameter bus_name: 总线文件夹名
/// @return: 操作成功,返回(),操作失败,返回错误码
#[inline]
#[allow(dead_code)]
pub fn bus_unregister(bus_name: &str) -> Result<(), SystemError> {
let binding: Arc<dyn IndexNode> = SYS_BUS_INODE();
binding
.as_any_ref()
.downcast_ref::<LockedSysFSInode>()
.ok_or(SystemError::E2BIG)
.unwrap()
.remove(bus_name)
}
/// @brief: 在相应总线文件夹下生成devices和drivers文件夹
/// @parameter inode: 总线文件夹inode
/// @return: 操作成功返回devices inode和drivers inode操作失败返回错误码
#[inline]
#[allow(dead_code)]
pub fn bus_init(
inode: &Arc<dyn IndexNode>,
) -> Result<(Arc<dyn IndexNode>, Arc<dyn IndexNode>), SystemError> {
match inode.as_any_ref().downcast_ref::<LockedSysFSInode>() {
Some(lock_bus) => match lock_bus.add_dir("devices") {
Ok(devices) => match lock_bus.add_dir("drivers") {
Ok(drivers) => Ok((devices, drivers)),
Err(err) => Err(err),
},
Err(err) => Err(err),
},
None => Err(SystemError::E2BIG),
}
}