The branch main has been updated by obiwac: URL: https://cgit.FreeBSD.org/src/commit/?id=4a71fc3b5cebdf3e6227470d50cf559bab28f26b
commit 4a71fc3b5cebdf3e6227470d50cf559bab28f26b Author: Aymeric Wibo <[email protected]> AuthorDate: 2026-02-02 23:46:44 +0000 Commit: Aymeric Wibo <[email protected]> CommitDate: 2026-02-02 23:51:17 +0000 acpi: Post/pre device suspend/resume eventhandlers These eventhandlers are called after suspending the device tree and before resuming it. This is useful for PMC (power management controller) drivers. Reviewed by: olce Approved by: olce Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D48735 --- sys/dev/acpica/acpi.c | 2 ++ sys/dev/acpica/acpivar.h | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/sys/dev/acpica/acpi.c b/sys/dev/acpica/acpi.c index 6944adafed8e..60a2dba91b05 100644 --- a/sys/dev/acpica/acpi.c +++ b/sys/dev/acpica/acpi.c @@ -3634,6 +3634,7 @@ acpi_EnterSleepState(struct acpi_softc *sc, enum power_stype stype) device_printf(sc->acpi_dev, "device_suspend failed\n"); goto backout; } + EVENTHANDLER_INVOKE(acpi_post_dev_suspend, stype); slp_state |= ACPI_SS_DEV_SUSPEND; if (stype != POWER_STYPE_SUSPEND_TO_IDLE) { @@ -3683,6 +3684,7 @@ backout: slp_state &= ~ACPI_SS_GPE_SET; } if ((slp_state & ACPI_SS_DEV_SUSPEND) != 0) { + EVENTHANDLER_INVOKE(acpi_pre_dev_resume, stype); DEVICE_RESUME(root_bus); slp_state &= ~ACPI_SS_DEV_SUSPEND; } diff --git a/sys/dev/acpica/acpivar.h b/sys/dev/acpica/acpivar.h index 0ffb9f7c7cc3..eea54178060f 100644 --- a/sys/dev/acpica/acpivar.h +++ b/sys/dev/acpica/acpivar.h @@ -482,12 +482,14 @@ UINT32 acpi_event_sleep_button_wake(void *context); #define ACPI_EVENT_PRI_DEFAULT 10000 #define ACPI_EVENT_PRI_LAST 20000 -typedef void (*acpi_event_handler_t)(void *, int); +typedef void (*acpi_event_handler_t)(void *, enum power_stype); EVENTHANDLER_DECLARE(acpi_sleep_event, acpi_event_handler_t); EVENTHANDLER_DECLARE(acpi_wakeup_event, acpi_event_handler_t); EVENTHANDLER_DECLARE(acpi_acad_event, acpi_event_handler_t); EVENTHANDLER_DECLARE(acpi_video_event, acpi_event_handler_t); +EVENTHANDLER_DECLARE(acpi_post_dev_suspend, acpi_event_handler_t); +EVENTHANDLER_DECLARE(acpi_pre_dev_resume, acpi_event_handler_t); /* Device power control. */ ACPI_STATUS acpi_pwr_wake_enable(ACPI_HANDLE consumer, int enable);
