5d2d114bf9
Phase I (LG Gram 16 (2025) / Arrow Lake-H S-state work). This commit implements the full Linux 7.1 S-state AML method sequence in userspace acpid, plus stubs for s2idle (Modern Standby). The kernel-side s2idle wire (new AcpiVerb variants EnterS2Idle / ExitS2Idle) is the next step; see local/docs/SLEEP-IMPLEMENTATION-PLAN.md for the gap analysis. Changes: * FACS: add set_waking_vector / set_x_waking_vector methods. These let acpid write the firmware waking vector for S3 resume, mirroring Linux 7.1 drivers/acpi/acpica/hwxfsleep.c:92 (acpi_set_firmware_waking_vector). * FACS access: add facs_mut() mutable accessor on AcpiContext (single-writer by construction). * AML methods: add set_system_status_indicator() that calls \_SI._SST(n). The canonical values are 0=working, 1=waking, 2=sleeping, 3=sleep-context, 7=indicator-off. Mirrors Linux ACPI 6.5 §6.5.1 (System Status Indicator). * wake_from_s_state(): wrap \_WAK(n) with the full Linux wake sequence (\_SI._SST(2) before, \_SI._SST(1) after). Mirrors drivers/acpi/acpica/hwsleep.c:255-314. * enter_sleep_state(): only call \_TTS here; \_PTS + \_SST + PM1 writes remain in set_global_s_state (Phase D, no duplication). * s2idle: add enter_s2idle() and exit_s2idle() methods on AcpiContext. These prepare/finish the s2idle path on systems without \_S3 (LG Gram 2025). Currently a no-op for the kernel coordination; the AML \_WAK(0) sequence runs via wake_from_s_state(0) on exit. Cross-references: * drivers/acpi/sleep.c (Linux 7.1) — acpi_suspend_begin/enter * drivers/acpi/acpica/hwxfsleep.c — acpi_enter_sleep_state_prep * drivers/acpi/acpica/hwsleep.c — acpi_hw_legacy_wake * kernel/power/suspend.c — s2idle_loop, s2idle_state * drivers/acpi/acpica/hwesleep.c — acpi_hw_execute_sleep_method Files changed: drivers/acpid/src/acpi.rs (+203 -14)