1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
|
# -*- sh -*-
# vim:ft=sh:ts=8:sw=4:noet
AddConfigHandler USuspendConfigEnabler
AddOptionHandler USuspendOptionHandler
AddConfigHelp "USuspendMethod <disk|ram|both>" "Enables use of the uswsusp suspend method of newer kernels (>= 2.6.17rc1)"
AddConfigHelp "USuspendRamForce <boolean>" "Passes the -f flag to s2ram to force suspending even if the machine is not recognised"
AddShortOption "n"
AddLongOption "no-suspend"
USUSPEND_STATE_FILE=/sys/power/state
USUSPEND_DEVICE=/dev/snapshot
USUSPEND_PROG=s2disk
USUSPEND_RAM_FORCE=0
USuspendConfigEnabler() {
case "$1" in
ususpendmethod)
case "$2" in
disk|both) USUSPEND_PROG=s2$2;;
ram)
USUSPEND_PROG=s2ram
;;
*)
vecho 1 "$EXE: Invalid value fo USuspendMethod."
return 2
;;
esac
if [ -n "$NO_COMPLAIN_UNSUPPORTED" ] ; then
# Just bail silently if we don't detect it.
if ! test -f $USUSPEND_STATE_FILE || ! test -c $USUSPEND_DEVICE ||
! command -v $USUSPEND_PROG > /dev/null 2>&1 ; then
return 0
fi
fi
;;
ususpendramforce)
BoolIsOn "$1" "$2" && USUSPEND_RAM_FORCE=1 || return 0
;;
*) return 1;;
esac
if [ -z "$USUSPEND_HOOKED" ]; then
UsingSuspendMethod ususpend
AddSuspendHook 10 EnsureUSuspendCapable
AddSuspendHook 99 DoUSuspend
USUSPEND_HOOKED=1
fi
return 0
}
USuspendOptionHandler() {
[ -z "$USUSPEND_HOOKED" ] && return 1
case $1 in
-n|--no-suspend)
USUSPEND_NO_SUSPEND=1
;;
*)
return 1
esac
return 0
}
DoUSuspend() {
if [ -z "$USUSPEND_NO_SUSPEND" ] ; then
vecho 1 "$EXE: Running $USUSPEND_PROG_PATH ${FORCE:+$FORCE }..."
[ "$USUSPEND_PROG" = s2ram ] && [ $USUSPEND_RAM_FORCE -eq 1 ] \
&& FORCE=-f
$USUSPEND_PROG_PATH $FORCE 2>&1 | vcat 2 \
|| vecho 0 "$EXE: $USUSPEND_PROG_PATH failed."
else
vecho 1 "$EXE: Not actually suspending (--no-suspend given)."
fi
return 0
}
EnsureUSuspendCapable() {
if ! USUSPEND_PROG_PATH=$(command -v $USUSPEND_PROG) ; then
vecho 0 "$USUSPEND_PROG not installed."
return 2
fi
if [ "$USUSPEND_PROG" = s2ram ] && [ $USUSPEND_RAM_FORCE -eq 0 ] \
&& ! $USUSPEND_PROG -n >/dev/null; then
vecho 0 "$USUSPEND_PROG: unknown machine, see s2ram(8) and the USuspendRamForce option"
return 2
fi
if ! test -f $USUSPEND_STATE_FILE ; then
vecho 0 "Your kernel does not have power management built in."
return 2
fi
if ! test -c $USUSPEND_DEVICE ; then
vecho 0 "$USUSPEND_DEVICE device not found."
return 2
fi
return 0
}
# $Id: ususpend 1072 2006-10-04 12:29:18Z madduck $
|