The branch main has been updated by olce:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=660a491c41a2b90c35fe121c0b6a046b9af3cc00

commit 660a491c41a2b90c35fe121c0b6a046b9af3cc00
Author:     Olivier Certner <[email protected]>
AuthorDate: 2026-06-04 09:48:33 +0000
Commit:     Olivier Certner <[email protected]>
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

Reply via email to