Add support for /etc/rc.suspend and /etc/rc.resume for ACPI. They are
called directly from acpiconf(8). Change both scripts to take a subsystem (apm|acpi) and sleep level (suspend,standby|1-5) argument.
This commit is contained in:
parent
edf9c2d50f
commit
2ed04cfc61
@ -4,7 +4,7 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
apm_event SUSPENDREQ {
|
apm_event SUSPENDREQ {
|
||||||
exec "/etc/rc.suspend";
|
exec "/etc/rc.suspend apm suspend";
|
||||||
}
|
}
|
||||||
|
|
||||||
apm_event USERSUSPENDREQ {
|
apm_event USERSUSPENDREQ {
|
||||||
@ -14,7 +14,7 @@ apm_event USERSUSPENDREQ {
|
|||||||
}
|
}
|
||||||
|
|
||||||
apm_event NORMRESUME, STANDBYRESUME {
|
apm_event NORMRESUME, STANDBYRESUME {
|
||||||
exec "/etc/rc.resume";
|
exec "/etc/rc.resume apm resume";
|
||||||
}
|
}
|
||||||
|
|
||||||
# resume event configuration for serial mouse users by
|
# resume event configuration for serial mouse users by
|
||||||
|
@ -29,10 +29,18 @@
|
|||||||
|
|
||||||
# sample run command file for APM Resume Event
|
# sample run command file for APM Resume Event
|
||||||
|
|
||||||
|
if [ $# -ne 2 ]; then
|
||||||
|
echo "Usage: $0 [apm|acpi] [resume|1-5]"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
subsystem=$1
|
||||||
|
state=$2
|
||||||
|
|
||||||
if [ -r /var/run/rc.suspend.pid ]; then
|
if [ -r /var/run/rc.suspend.pid ]; then
|
||||||
kill -9 `cat /var/run/rc.suspend.pid`
|
kill -9 `cat /var/run/rc.suspend.pid`
|
||||||
rm -f /var/run/rc.suspend.pid
|
rm -f /var/run/rc.suspend.pid
|
||||||
echo 'rc.suspend is killed'
|
echo 'rc.resume: killed rc.suspend that was still around'
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Turns on a power supply of a card in the slot inactivated.
|
# Turns on a power supply of a card in the slot inactivated.
|
||||||
@ -40,7 +48,11 @@ fi
|
|||||||
# pccardq | awk -F '~' '$5 == "inactive" \
|
# pccardq | awk -F '~' '$5 == "inactive" \
|
||||||
# { printf("pccardc power %d 1", $1); }' | sh
|
# { printf("pccardc power %d 1", $1); }' | sh
|
||||||
|
|
||||||
logger -t apmd resumed at `date +'%Y%m%d %H:%M:%S'`
|
# UHCI has trouble resuming so we just load/unload it. You
|
||||||
|
# should add any other kernel modules you want reloaded here.
|
||||||
|
# kldload usb
|
||||||
|
|
||||||
|
logger -t $subsystem resumed at `date +'%Y%m%d %H:%M:%S'`
|
||||||
sync && sync && sync
|
sync && sync && sync
|
||||||
|
|
||||||
exit 0
|
exit 0
|
||||||
|
@ -29,6 +29,14 @@
|
|||||||
|
|
||||||
# sample run command file for APM Suspend Event
|
# sample run command file for APM Suspend Event
|
||||||
|
|
||||||
|
if [ $# -ne 2 ]; then
|
||||||
|
echo "Usage: $0 [apm|acpi] [standby,suspend|1-5]"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
subsystem=$1
|
||||||
|
state=$2
|
||||||
|
|
||||||
if [ -r /var/run/rc.suspend.pid ]; then
|
if [ -r /var/run/rc.suspend.pid ]; then
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
@ -40,11 +48,15 @@ echo $$ > /var/run/rc.suspend.pid
|
|||||||
# pccardq | awk -F '~' '$5 == "filled" && $4 ~ /sio/ \
|
# pccardq | awk -F '~' '$5 == "filled" && $4 ~ /sio/ \
|
||||||
# { printf("pccardc power %d 0", $1); }' | sh
|
# { printf("pccardc power %d 0", $1); }' | sh
|
||||||
|
|
||||||
logger -t apmd suspend at `date +'%Y%m%d %H:%M:%S'`
|
# UHCI has trouble resuming so we just load/unload it. You
|
||||||
|
# should add any other kernel modules you want unloaded here.
|
||||||
|
# kldunload usb
|
||||||
|
|
||||||
|
logger -t $subsystem suspend at `date +'%Y%m%d %H:%M:%S'`
|
||||||
sync && sync && sync
|
sync && sync && sync
|
||||||
sleep 3
|
[ $subsystem = "apm" ] && sleep 3
|
||||||
|
|
||||||
rm -f /var/run/rc.suspend.pid
|
rm -f /var/run/rc.suspend.pid
|
||||||
zzz
|
[ $subsystem = "apm" ] && zzz
|
||||||
|
|
||||||
exit 0
|
exit 0
|
||||||
|
@ -58,7 +58,8 @@ Enters the specified sleep mode.
|
|||||||
Recognized types are
|
Recognized types are
|
||||||
.Cm 1
|
.Cm 1
|
||||||
(only the CPU clock is stopped),
|
(only the CPU clock is stopped),
|
||||||
.Cm 2 ,
|
.Cm 2
|
||||||
|
(not implemented on most systems but similar to S1),
|
||||||
.Cm 3
|
.Cm 3
|
||||||
(the CPU context is lost and memory context is preserved),
|
(the CPU context is lost and memory context is preserved),
|
||||||
.Cm 4
|
.Cm 4
|
||||||
@ -69,6 +70,12 @@ and
|
|||||||
Sleep states may also be given as S1, S2, etc.
|
Sleep states may also be given as S1, S2, etc.
|
||||||
The supported states depend on BIOS implementation, including ACPI
|
The supported states depend on BIOS implementation, including ACPI
|
||||||
byte code (AML).
|
byte code (AML).
|
||||||
|
If the
|
||||||
|
.Pa /etc/rc.suspend
|
||||||
|
and
|
||||||
|
.Pa /etc/rc.resume
|
||||||
|
scripts are executable, they will be run before and after entering
|
||||||
|
the given sleep state.
|
||||||
.El
|
.El
|
||||||
.Sh SEE ALSO
|
.Sh SEE ALSO
|
||||||
.Xr acpi 4 ,
|
.Xr acpi 4 ,
|
||||||
|
@ -37,10 +37,11 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
#include <dev/acpica/acpiio.h>
|
#include <dev/acpica/acpiio.h>
|
||||||
|
|
||||||
#include <contrib/dev/acpica/acpi.h>
|
#include <contrib/dev/acpica/acpi.h>
|
||||||
|
|
||||||
#define ACPIDEV "/dev/acpi"
|
#define ACPIDEV "/dev/acpi"
|
||||||
|
#define RC_SUSPEND_PATH "/etc/rc.suspend"
|
||||||
|
#define RC_RESUME_PATH "/etc/rc.resume"
|
||||||
|
|
||||||
static int acpifd;
|
static int acpifd;
|
||||||
|
|
||||||
@ -68,7 +69,26 @@ acpi_enable_disable(int enable)
|
|||||||
static int
|
static int
|
||||||
acpi_sleep(int sleep_type)
|
acpi_sleep(int sleep_type)
|
||||||
{
|
{
|
||||||
if (ioctl(acpifd, ACPIIO_SETSLPSTATE, &sleep_type) == -1)
|
char cmd[64];
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
/* Run the suspend rc script, if available. */
|
||||||
|
if (access(RC_SUSPEND_PATH, X_OK) == 0) {
|
||||||
|
snprintf(cmd, sizeof(cmd), "%s acpi %d", RC_SUSPEND_PATH,
|
||||||
|
sleep_type);
|
||||||
|
system(cmd);
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = ioctl(acpifd, ACPIIO_SETSLPSTATE, &sleep_type);
|
||||||
|
|
||||||
|
/* Run the resume rc script, if available. */
|
||||||
|
if (access(RC_RESUME_PATH, X_OK) == 0) {
|
||||||
|
snprintf(cmd, sizeof(cmd), "%s acpi %d", RC_RESUME_PATH,
|
||||||
|
sleep_type);
|
||||||
|
system(cmd);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ret != 0)
|
||||||
err(EX_IOERR, "sleep type (%d) failed", sleep_type);
|
err(EX_IOERR, "sleep type (%d) failed", sleep_type);
|
||||||
|
|
||||||
return (0);
|
return (0);
|
||||||
|
Loading…
Reference in New Issue
Block a user