starnix_core/fs/sysfs/
power_directory.rs1use crate::power::{
6 PowerStateFile, PowerSyncOnSuspendFile, PowerWakeLockFile, PowerWakeUnlockFile,
7 PowerWakeupCountFile,
8};
9use crate::task::Kernel;
10use crate::vfs::pseudo::simple_directory::SimpleDirectoryMutator;
11use crate::vfs::pseudo::simple_file::create_bytes_file_with_handler;
12use starnix_uapi::file_mode::mode;
13
14pub fn build_power_directory(kernel: &Kernel, dir: &SimpleDirectoryMutator) {
15 dir.entry("wakeup_count", PowerWakeupCountFile::new_node(), mode!(IFREG, 0o644));
16 dir.entry("wake_lock", PowerWakeLockFile::new_node(), mode!(IFREG, 0o660));
17 dir.entry("wake_unlock", PowerWakeUnlockFile::new_node(), mode!(IFREG, 0o660));
18 dir.entry("state", PowerStateFile::new_node(), mode!(IFREG, 0o644));
19 dir.entry("sync_on_suspend", PowerSyncOnSuspendFile::new_node(), mode!(IFREG, 0o644));
20 dir.subdir("suspend_stats", 0o755, |dir| {
21 let read_only_file_mode = mode!(IFREG, 0o444);
22 dir.entry(
23 "success",
24 create_bytes_file_with_handler(kernel.weak_self.clone(), |kernel| {
25 kernel.suspend_resume_manager.suspend_stats().success_count.to_string()
26 }),
27 read_only_file_mode,
28 );
29 dir.entry(
30 "fail",
31 create_bytes_file_with_handler(kernel.weak_self.clone(), |kernel| {
32 kernel.suspend_resume_manager.suspend_stats().fail_count.to_string()
33 }),
34 read_only_file_mode,
35 );
36 dir.entry(
37 "last_failed_dev",
38 create_bytes_file_with_handler(kernel.weak_self.clone(), |kernel| {
39 kernel.suspend_resume_manager.suspend_stats().last_failed_device.unwrap_or_default()
40 }),
41 read_only_file_mode,
42 );
43 dir.entry(
44 "last_failed_errno",
45 create_bytes_file_with_handler(kernel.weak_self.clone(), |kernel| {
46 kernel
47 .suspend_resume_manager
48 .suspend_stats()
49 .last_failed_errno
50 .map(|e| format!("-{}", e.code.error_code()))
51 .unwrap_or_else(|| "0".to_string())
53 }),
54 read_only_file_mode,
55 );
56 });
57}