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(
16 "wakeup_count",
17 PowerWakeupCountFile::new_node(kernel.suspend_resume_manager.clone()),
18 mode!(IFREG, 0o644),
19 );
20 dir.entry("wake_lock", PowerWakeLockFile::new_node(), mode!(IFREG, 0o660));
21 dir.entry("wake_unlock", PowerWakeUnlockFile::new_node(), mode!(IFREG, 0o660));
22 dir.entry("state", PowerStateFile::new_node(), mode!(IFREG, 0o644));
23 dir.entry("sync_on_suspend", PowerSyncOnSuspendFile::new_node(), mode!(IFREG, 0o644));
24 dir.subdir("suspend_stats", 0o755, |dir| {
25 let read_only_file_mode = mode!(IFREG, 0o444);
26 dir.entry(
27 "success",
28 create_bytes_file_with_handler(kernel.weak_self.clone(), |kernel| {
29 kernel.suspend_resume_manager.suspend_stats().success_count.to_string()
30 }),
31 read_only_file_mode,
32 );
33 dir.entry(
34 "fail",
35 create_bytes_file_with_handler(kernel.weak_self.clone(), |kernel| {
36 kernel.suspend_resume_manager.suspend_stats().fail_count.to_string()
37 }),
38 read_only_file_mode,
39 );
40 dir.entry(
41 "last_failed_dev",
42 create_bytes_file_with_handler(kernel.weak_self.clone(), |kernel| {
43 kernel.suspend_resume_manager.suspend_stats().last_failed_device.unwrap_or_default()
44 }),
45 read_only_file_mode,
46 );
47 dir.entry(
48 "last_failed_errno",
49 create_bytes_file_with_handler(kernel.weak_self.clone(), |kernel| {
50 kernel
51 .suspend_resume_manager
52 .suspend_stats()
53 .last_failed_errno
54 .map(|e| format!("-{}", e.code.error_code()))
55 .unwrap_or_else(|| "0".to_string())
57 }),
58 read_only_file_mode,
59 );
60 });
61}