hw.power, machdep.lidaction, machdep.pwraction for macppc
authorgkoehler <gkoehler@openbsd.org>
Fri, 21 Oct 2022 22:42:36 +0000 (22:42 +0000)
committergkoehler <gkoehler@openbsd.org>
Fri, 21 Oct 2022 22:42:36 +0000 (22:42 +0000)
commitc1cc27a74adfab431ed95c467b02b6c4875726e1
tree5126b5e66197742f8444261be59afab8d8eab66a
parent103c086e19642966bfe961a5a93373021c22310f
hw.power, machdep.lidaction, machdep.pwraction for macppc

I can now use the power button to power off my macppcs running
OpenBSD.  The new sysctls machdep.lidaction and machdep.pwraction act
like acpibtn(4), but we are missing code to suspend or hibernate a
macppc.  Small kernels (bsd.rd) continue to ignore the power button.

adb(4) sends an environment interrupt when I unplug my PowerBook's AC
or close its lid.  Rename PMU_INT_WAKEUP to PMU_INT_ENVIRONMENT like
other BSDs and Linux.  Handle PMU_ENV_LID_CLOSED as a lid sensor and
PMU_ENV_AC_POWER by setting sysctl hw.power.  Power buttons can either
use PMU_ENV_POWER_BUTTON or go through akbd(4); handle both kinds of
power buttons in the same way.  Other models of macppc, with different
power buttons or lids, might not work yet.  The lid sensor looks like,

$ sysctl hw.sensors
hw.sensors.adb0.indicator0=On (lid open)

kettenis@ warned against calling prsignal() from interrupt context,
and pointed me to task_add(9).
sys/arch/macppc/dev/adb.c
sys/arch/macppc/dev/pm_direct.c
sys/arch/macppc/dev/pm_direct.h
sys/arch/macppc/include/cpu.h
sys/arch/macppc/macppc/machdep.c
sys/dev/adb/adb.h
sys/dev/adb/akbd.c