patches/syscall: add P1-acpiverb-enter-exit-s2idle.patch (Phase I/J)
Phase I/J: the overlay patch backing the syscall EnterS2Idle/ExitS2Idle extension. Verifies cleanly against fresh upstream redox-os/syscall 0.8.1 (commit79cb6d9). Mirrors Linux 7.1: * EnterS2Idle (= 3) — s2idle_enter() in kernel/power/suspend.c:91 * ExitS2Idle (= 4) — s2idle_wake() in kernel/power/suspend.c:133 Hardware-agnostic: works for any platform with Modern Standby firmware (Dell, HP, Lenovo, LG Gram, etc.), not just LG Gram. Applied to local/sources/syscall in the inner git history (commitd9f7a9e) and to base's [patch.crates-io] redox_syscall = { path = "../syscall" }. When upstream updates (periodic rebase via 'git fetch upstream && git rebase upstream/master' in local/sources/syscall), this patch is re-applied to the new upstream HEAD.
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
diff --git a/src/flag.rs b/src/flag.rs
|
||||
index 455ec36..1dd5040 100644
|
||||
--- a/src/flag.rs
|
||||
+++ b/src/flag.rs
|
||||
@@ -310,12 +310,29 @@ pub enum AcpiVerb {
|
||||
ReadRxsdt = 1,
|
||||
// no payload, just returns 0 or 1
|
||||
CheckShutdown = 2,
|
||||
+ /// Red Bear OS extension (Phase I): acpid requests the kernel
|
||||
+ /// enter s2idle (Modern Standby / S0ix). The kernel sets
|
||||
+ /// `S2IDLE_REQUESTED`; the idle path calls `mwait_loop()`. Read
|
||||
+ /// payload (1 byte) returns the *previous* value of the flag.
|
||||
+ /// Write payload is opaque (ignored by current kernel).
|
||||
+ /// Mirrors Linux 7.1 `s2idle_enter()` in
|
||||
+ /// `kernel/power/suspend.c:91`. Hardware-agnostic — works on
|
||||
+ /// any platform with Modern Standby firmware (Dell, HP, Lenovo,
|
||||
+ /// LG Gram, etc.), not just LG Gram.
|
||||
+ EnterS2Idle = 3,
|
||||
+ /// Red Bear OS extension (Phase I): acpid signals s2idle
|
||||
+ /// exit. Kernel clears `S2IDLE_REQUESTED`. Read payload (1
|
||||
+ /// byte) always returns 0. Mirrors Linux 7.1 `s2idle_wake()` in
|
||||
+ /// `kernel/power/suspend.c:133`. Hardware-agnostic.
|
||||
+ ExitS2Idle = 4,
|
||||
}
|
||||
impl AcpiVerb {
|
||||
pub const fn try_from_raw(value: u64) -> Option<Self> {
|
||||
Some(match value {
|
||||
1 => Self::ReadRxsdt,
|
||||
2 => Self::CheckShutdown,
|
||||
+ 3 => Self::EnterS2Idle,
|
||||
+ 4 => Self::ExitS2Idle,
|
||||
_ => return None,
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user