git: 660a491c41a2 - main - acpi: Button sleep/wake callbacks: Expose true argument types
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 22 Jun 2026 21:42:38 UTC
The branch main has been updated by olce:
URL: https://cgit.FreeBSD.org/src/commit/?id=660a491c41a2b90c35fe121c0b6a046b9af3cc00
commit 660a491c41a2b90c35fe121c0b6a046b9af3cc00
Author: Olivier Certner <olce@FreeBSD.org>
AuthorDate: 2026-06-04 09:48:33 +0000
Commit: Olivier Certner <olce@FreeBSD.org>
CommitDate: 2026-06-22 21:40:13 +0000
acpi: Button sleep/wake callbacks: Expose true argument types
This makes the interface composed of the
acpi_event_{power,sleep}_button_{sleep,wake}() functions more accurate
and clears the risk of calling them with a wrong object (such as a wrong
softc).
Reviewed by: obiwac
Event: Halifax Hackathon 202606
Sponsored by: The FreeBSD Foundation
Pull Request: https://github.com/OlCe2/freebsd-src/pull/8
---
sys/dev/acpica/acpi.c | 48 +++++++++++++++++++-----------------------------
sys/dev/acpica/acpivar.h | 8 ++++----
2 files changed, 23 insertions(+), 33 deletions(-)
diff --git a/sys/dev/acpica/acpi.c b/sys/dev/acpica/acpi.c
index d599094718f7..91913c1daa60 100644
--- a/sys/dev/acpica/acpi.c
+++ b/sys/dev/acpica/acpi.c
@@ -2701,14 +2701,14 @@ acpi_enable_fixed_events(struct acpi_softc *sc)
if ((AcpiGbl_FADT.Flags & ACPI_FADT_POWER_BUTTON) == 0) {
AcpiClearEvent(ACPI_EVENT_POWER_BUTTON);
AcpiInstallFixedEventHandler(ACPI_EVENT_POWER_BUTTON,
- acpi_event_power_button_sleep, sc);
+ (ACPI_EVENT_HANDLER)acpi_event_power_button_sleep, sc);
if (first_time)
device_printf(sc->acpi_dev, "Power Button (fixed)\n");
}
if ((AcpiGbl_FADT.Flags & ACPI_FADT_SLEEP_BUTTON) == 0) {
AcpiClearEvent(ACPI_EVENT_SLEEP_BUTTON);
AcpiInstallFixedEventHandler(ACPI_EVENT_SLEEP_BUTTON,
- acpi_event_sleep_button_sleep, sc);
+ (ACPI_EVENT_HANDLER)acpi_event_sleep_button_sleep, sc);
if (first_time)
device_printf(sc->acpi_dev, "Sleep Button (fixed)\n");
}
@@ -4141,37 +4141,30 @@ acpi_system_eventhandler_wakeup(void *arg, enum power_stype stype)
return_VOID;
}
-/*
+/*
* ACPICA Event Handlers (FixedEvent, also called from button notify handler)
*/
static void
-acpi_invoke_sleep_eventhandler(void *context)
+acpi_invoke_sleep_eventhandler(const enum power_stype *const stype)
{
-
- EVENTHANDLER_INVOKE(acpi_sleep_event, *(enum power_stype *)context);
+ EVENTHANDLER_INVOKE(acpi_sleep_event, *stype);
}
static void
-acpi_invoke_wake_eventhandler(void *context)
+acpi_invoke_wake_eventhandler(const enum power_stype *const stype)
{
-
- EVENTHANDLER_INVOKE(acpi_wakeup_event, *(enum power_stype *)context);
+ EVENTHANDLER_INVOKE(acpi_wakeup_event, *stype);
}
UINT32
-acpi_event_power_button_sleep(void *context)
+acpi_event_power_button_sleep(struct acpi_softc *sc)
{
-#if defined(__amd64__) || defined(__i386__)
- struct acpi_softc *sc = (struct acpi_softc *)context;
-#else
- (void)context;
-#endif
-
ACPI_FUNCTION_TRACE((char *)(uintptr_t)__func__);
#if defined(__amd64__) || defined(__i386__)
if (ACPI_FAILURE(AcpiOsExecute(OSL_NOTIFY_HANDLER,
- acpi_invoke_sleep_eventhandler, &sc->acpi_power_button_stype)))
+ (ACPI_OSD_EXEC_CALLBACK)acpi_invoke_sleep_eventhandler,
+ &sc->acpi_power_button_stype)))
return_VALUE (ACPI_INTERRUPT_NOT_HANDLED);
#else
shutdown_nice(RB_POWEROFF);
@@ -4181,40 +4174,37 @@ acpi_event_power_button_sleep(void *context)
}
UINT32
-acpi_event_power_button_wake(void *context)
+acpi_event_power_button_wake(struct acpi_softc *sc)
{
- struct acpi_softc *sc = (struct acpi_softc *)context;
-
ACPI_FUNCTION_TRACE((char *)(uintptr_t)__func__);
if (ACPI_FAILURE(AcpiOsExecute(OSL_NOTIFY_HANDLER,
- acpi_invoke_wake_eventhandler, &sc->acpi_power_button_stype)))
+ (ACPI_OSD_EXEC_CALLBACK)acpi_invoke_wake_eventhandler,
+ &sc->acpi_power_button_stype)))
return_VALUE (ACPI_INTERRUPT_NOT_HANDLED);
return_VALUE (ACPI_INTERRUPT_HANDLED);
}
UINT32
-acpi_event_sleep_button_sleep(void *context)
+acpi_event_sleep_button_sleep(struct acpi_softc *sc)
{
- struct acpi_softc *sc = (struct acpi_softc *)context;
-
ACPI_FUNCTION_TRACE((char *)(uintptr_t)__func__);
if (ACPI_FAILURE(AcpiOsExecute(OSL_NOTIFY_HANDLER,
- acpi_invoke_sleep_eventhandler, &sc->acpi_sleep_button_stype)))
+ (ACPI_OSD_EXEC_CALLBACK)acpi_invoke_sleep_eventhandler,
+ &sc->acpi_sleep_button_stype)))
return_VALUE (ACPI_INTERRUPT_NOT_HANDLED);
return_VALUE (ACPI_INTERRUPT_HANDLED);
}
UINT32
-acpi_event_sleep_button_wake(void *context)
+acpi_event_sleep_button_wake(struct acpi_softc *sc)
{
- struct acpi_softc *sc = (struct acpi_softc *)context;
-
ACPI_FUNCTION_TRACE((char *)(uintptr_t)__func__);
if (ACPI_FAILURE(AcpiOsExecute(OSL_NOTIFY_HANDLER,
- acpi_invoke_wake_eventhandler, &sc->acpi_sleep_button_stype)))
+ (ACPI_OSD_EXEC_CALLBACK)acpi_invoke_wake_eventhandler,
+ &sc->acpi_sleep_button_stype)))
return_VALUE (ACPI_INTERRUPT_NOT_HANDLED);
return_VALUE (ACPI_INTERRUPT_HANDLED);
}
diff --git a/sys/dev/acpica/acpivar.h b/sys/dev/acpica/acpivar.h
index 5d1415a8f543..aa30e5fef26e 100644
--- a/sys/dev/acpica/acpivar.h
+++ b/sys/dev/acpica/acpivar.h
@@ -457,10 +457,10 @@ ACPI_STATUS acpi_parse_resources(device_t dev, ACPI_HANDLE handle,
struct acpi_parse_resource_set *set, void *arg);
/* ACPI event handling */
-UINT32 acpi_event_power_button_sleep(void *context);
-UINT32 acpi_event_power_button_wake(void *context);
-UINT32 acpi_event_sleep_button_sleep(void *context);
-UINT32 acpi_event_sleep_button_wake(void *context);
+UINT32 acpi_event_power_button_sleep(struct acpi_softc *sc);
+UINT32 acpi_event_power_button_wake(struct acpi_softc *sc);
+UINT32 acpi_event_sleep_button_sleep(struct acpi_softc *sc);
+UINT32 acpi_event_sleep_button_wake(struct acpi_softc *sc);
#define ACPI_EVENT_PRI_FIRST 0
#define ACPI_EVENT_PRI_DEFAULT 10000