diff options
Diffstat (limited to 'common/scripts/pm-qa/include/suspend_functions.sh')
-rw-r--r-- | common/scripts/pm-qa/include/suspend_functions.sh | 294 |
1 files changed, 0 insertions, 294 deletions
diff --git a/common/scripts/pm-qa/include/suspend_functions.sh b/common/scripts/pm-qa/include/suspend_functions.sh deleted file mode 100644 index f06689f..0000000 --- a/common/scripts/pm-qa/include/suspend_functions.sh +++ /dev/null @@ -1,294 +0,0 @@ -#!/bin/bash -# -# Script to automate suspend / resume -# -# Copyright (C) 2008-2009 Canonical Ltd. -# -# Authors: -# Michael Frey <michael.frey@canonical.com> -# Andy Whitcroft <apw@canonical.com> -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2, -# as published by the Free Software Foundation. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. - -# -# Script to automate suspend / resume -# -# We set a RTC alarm that wakes the system back up and then sleep -# for seconds before we go back to sleep. -# -# Changelog: -# -# Version for Linaro PM-QA: -# - this script is edited and integrated into Linaro PM-QA -# - hongbo.zhang@linaro.org, March, 2012 -# - - -LOGDIR='/var/lib/pm-utils' -LOGFILE="$LOGDIR/stress.log" - -# Options Config -dry=0 -auto=1 -pm_trace=1 -timer_sleep=20 - -# root is needed to fiddle with the clock and use the rtc wakeups. -if [ $(id -u) != 0 ]; then - log_skip "run as non-root" - exit 0 -fi - -# Ensure the log directory exists. -mkdir -p "$LOGDIR" - -setup_wakeup_timer () -{ - timeout="$1" - - # Request wakeup from the RTC or ACPI alarm timers. Set the timeout - # at 'now' + $timeout seconds. - ctl='/sys/class/rtc/rtc0/wakealarm' - if [ -f "$ctl" ]; then - # Cancel any outstanding timers. - echo "0" >"$ctl" - # rtcN/wakealarm can use relative time in seconds - echo "+$timeout" >"$ctl" - return 0 - fi - ctl='/proc/acpi/alarm' - if [ -f "$ctl" ]; then - echo `date '+%F %H:%M:%S' -d '+ '$timeout' seconds'` >"$ctl" - return 0 - fi - - echo "no method to awaken machine automatically" 1>&2 - exit 1 -} - -suspend_system () -{ - if [ "$dry" -eq 1 ]; then - echo "DRY-RUN: suspend machine for $timer_sleep" - sleep 1 - return - fi - - setup_wakeup_timer "$timer_sleep" - - dmesg >"$LOGFILE.dmesg.A" - - # Initiate suspend in different ways. - case "$1" in - dbus) - dbus-send --session --type=method_call \ - --dest=org.freedesktop.PowerManagement \ - /org/freedesktop/PowerManagement \ - org.freedesktop.PowerManagement.Suspend \ - >> "$LOGFILE" || { - ECHO "FAILED: dbus suspend failed" 1>&2 - return 1 - } - ;; - pmsuspend) - pm-suspend >> "$LOGFILE" - ;; - mem) - `echo "mem" > /sys/power/state` >> "$LOGFILE" - ;; - esac - - # Wait on the machine coming back up -- pulling the dmesg over. - echo "v---" >>"$LOGFILE" - retry=30 - while [ "$retry" -gt 0 ]; do - let "retry=$retry-1" - - # Accumulate the dmesg delta. - dmesg >"$LOGFILE.dmesg.B" - diff "$LOGFILE.dmesg.A" "$LOGFILE.dmesg.B" | \ - grep '^>' >"$LOGFILE.dmesg" - mv "$LOGFILE.dmesg.B" "$LOGFILE.dmesg.A" - - echo "Waiting for suspend to complete $retry to go ..." \ - >> "$LOGFILE" - cat "$LOGFILE.dmesg" >> "$LOGFILE" - - if [ "`grep -c 'Back to C!' $LOGFILE.dmesg`" -ne 0 ]; then - break; - fi - sleep 1 - done - echo "^---" >>"$LOGFILE" - rm -f "$LOGFILE.dmesg"* - if [ "$retry" -eq 0 ]; then - ECHO "SUSPEND FAILED, did not go to sleep" 1>&2 - return 1 - fi -} - -ECHO () -{ - echo "$@" | tee -a "$LOGFILE" -} - -enable_trace() -{ - if [ -w /sys/power/pm_trace ]; then - echo 1 > '/sys/power/pm_trace' - fi -} - -disable_trace() -{ - if [ -w /sys/power/pm_trace ]; then - echo 0 > '/sys/power/pm_trace' - fi -} - -trace_state=-1 - -save_trace() -{ - if [ -r /sys/power/pm_trace ]; then - trace_state=`cat /sys/power/pm_trace` - fi -} - -restore_trace() -{ - if [ "$trace_state" -ne -1 -a -w /sys/power/pm_trace ]; then - echo "$trace_state" > '/sys/power/pm_trace' - fi -} - -battery_count() -{ - cat /proc/acpi/battery/*/state 2>/dev/null | \ - awk ' - BEGIN { total = 0 } - /present:.*yes/ { total += 1 } - END { print total } - ' -} - -battery_capacity() -{ - cat /proc/acpi/battery/*/state 2>/dev/null | \ - awk ' - BEGIN { total = 0 } - /remaining capacity:/ { total += $3 } - END { print total } - ' -} - -ac_needed=-1 -ac_is=-1 -ac_becomes=-1 - -ac_required() -{ - ac_check - - ac_needed="$1" - ac_becomes="$1" -} - -ac_transitions() -{ - ac_check - - ac_needed="$1" - ac_becomes="$2" -} - -ac_online() -{ - cat /proc/acpi/ac_adapter/*/state 2>/dev/null | \ - awk ' - BEGIN { online = 0; offline = 0 } - /on-line/ { online = 1 } - /off-line/ { offline = 1 } - END { - if (online) { - print "1" - } else if (offline) { - print "0" - } else { - print "-1" - } - } - ' -} - -ac_check() -{ - typeset ac_current=`ac_online` - - if [ "$ac_becomes" -ne -1 -a "$ac_current" -ne -1 -a \ - "$ac_current" -ne "$ac_becomes" ]; then - ECHO "*** WARNING: AC power not in expected state" \ - "($ac_becomes) after test" - fi - ac_is="$ac_becomes" -} - -phase=0 -phase_first=1 -phase_interactive=1 - -phase() -{ - typeset sleep - - let phase="$phase+1" - - if [ "$ac_needed" -ne "$ac_is" ]; then - case "$ac_needed" in - 0) echo "*** please ensure your AC cord is detached" ;; - 1) echo "*** please ensure your AC cord is attached" ;; - esac - ac_is="$ac_needed" - fi - - if [ "$timer_sleep" -gt 60 ]; then - let sleep="$timer_sleep / 60" - sleep="$sleep minutes" - else - sleep="$timer_sleep seconds" - fi - echo "*** machine will suspend for $sleep" - - if [ "$auto" -eq 1 ]; then - : - - elif [ "$phase_interactive" -eq 1 ]; then - echo "*** press return when ready" - read x - - elif [ "$phase_first" -eq 1 ]; then - echo "*** NOTE: there will be no further user interaction from this point" - echo "*** press return when ready" - phase_first=0 - read x - fi -} - -save_trace - -if [ "$pm_trace" -eq 1 ]; then - enable_trace -else - disable_trace -fi - |