Add a common directory for all the functions we will use later in the test 
scripts.

Signed-off-by: Daniel Lezcano <daniel.lezc...@linaro.org>
---
 include/functions.sh |  251 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 251 insertions(+), 0 deletions(-)
 create mode 100644 include/functions.sh

diff --git a/include/functions.sh b/include/functions.sh
new file mode 100644
index 0000000..67c356a
--- /dev/null
+++ b/include/functions.sh
@@ -0,0 +1,251 @@
+#!/bin/bash
+#
+# PM-QA validation test suite for the power management on ARM
+#
+# Copyright (C) 2011, Linaro Limited.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# 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, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, 
USA.
+#
+# Contributors:
+#     Daniel Lezcano <daniel.lezc...@linaro.org> (IBM Corporation)
+#       - initial API and implementation
+#
+
+CPU_PATH="/sys/devices/system/cpu"
+TEST_NAME=$(basename ${0%.sh})
+PREFIX=$TEST_NAME
+BLOCK=$(basename $(pwd))
+
+setprefix_cpu() {
+    PREFIX=$BLOCK:$TEST_NAME/$1
+}
+
+log_begin() {
+    printf "%-75s" "$PREFIX $@ ... "
+}
+
+log_end() {
+    printf "$*\n"
+}
+
+log_skip() {
+    log_begin "$@"
+    log_end "SKIP"
+}
+
+for_each_cpu() {
+
+    local func=$1
+    shift 1
+
+    cpus=$(ls $CPU_PATH | grep "cpu[0-9].*")
+
+    for cpu in $cpus; do
+       setprefix_cpu $cpu
+       $func $cpu $@
+    done
+
+    return 0
+}
+
+for_each_governor() {
+
+    local cpu=$1
+    local func=$2
+    local dirpath=$CPU_PATH/$cpu/cpufreq
+    local governors=$(cat $dirpath/scaling_available_governors)
+    shift 2
+
+    for governor in $governors; do
+       $func $cpu $governor $@
+    done
+
+    return 0
+}
+
+for_each_frequency() {
+
+    local cpu=$1
+    local func=$2
+    local dirpath=$CPU_PATH/$cpu/cpufreq
+    local frequencies=$(cat $dirpath/scaling_available_frequencies)
+    shift 2
+
+    for frequency in $frequencies; do
+       $func $cpu $frequency $@
+    done
+
+    return 0
+}
+
+set_governor() {
+
+    local cpu=$1
+    local dirpath=$CPU_PATH/$cpu/cpufreq/scaling_governor
+    local newgov=$2
+
+    echo $newgov > $dirpath
+}
+
+get_governor() {
+
+    local cpu=$1
+    local dirpath=$CPU_PATH/$cpu/cpufreq/scaling_governor
+
+    cat $dirpath
+}
+
+wait_latency() {
+    local cpu=$1
+    local dirpath=$CPU_PATH/$cpu/cpufreq
+    local latency=$(cat $dirpath/cpuinfo_transition_latency)
+    local nrfreq=$(cat $dirpath/scaling_available_frequencies | wc -w)
+
+    nrfreq=$((nrfreq + 1))
+    ../utils/nanosleep $(($nrfreq * $latency))
+}
+
+frequnit() {
+    local freq=$1
+    local ghz=$(echo "scale=1;($freq / 1000000)" | bc -l)
+    local mhz=$(echo "scale=1;($freq / 1000)" | bc -l)
+
+    res=$(echo "($ghz > 1.0)" | bc -l)
+    if [ "$res" = "1" ]; then
+       echo $ghz GHz
+       return 0
+    fi
+
+    res=$(echo "($mhz > 1.0)" | bc -l)
+    if [ "$res" = "1" ];then
+       echo $mhz MHz
+       return 0
+    fi
+
+    echo $freq KHz
+}
+
+set_frequency() {
+
+    local cpu=$1
+    local dirpath=$CPU_PATH/$cpu/cpufreq
+    local newfreq=$2
+    local setfreqpath=$dirpath/scaling_setspeed
+
+    echo $newfreq > $setfreqpath
+    wait_latency $cpu
+}
+
+get_frequency() {
+    local cpu=$1
+    local dirpath=$CPU_PATH/$cpu/cpufreq/scaling_cur_freq
+    cat $dirpath
+}
+
+get_max_frequency() {
+    local cpu=$1
+    local dirpath=$CPU_PATH/$cpu/cpufreq/scaling_max_freq
+    cat $dirpath
+}
+
+get_min_frequency() {
+    local cpu=$1
+    local dirpath=$CPU_PATH/$cpu/cpufreq/scaling_min_freq
+    cat $dirpath
+}
+
+check() {
+
+    local descr=$1
+    local func=$2
+    shift 2;
+
+    log_begin "checking $descr"
+
+    $func $@
+    if [ $? != 0 ]; then
+       log_end "FAIL"
+       return 1
+    fi
+
+    log_end "PASS"
+
+    return 0
+}
+
+check_cpufreq_files() {
+
+    local dirpath=$CPU_PATH/$1/cpufreq
+    shift 1
+
+    for i in $@; do
+       check "$i exists" "test -f" $dirpath/$i  || return 1
+    done
+
+    return 0
+}
+
+save_governors() {
+
+    governors_backup=
+    local index=0
+
+    for i in $(ls $CPU_PATH | grep "cpu[0-9].*"); do
+       governors_backup[$index]=$(cat $CPU_PATH/$i/cpufreq/scaling_governor)
+       index=$((index + 1))
+    done
+}
+
+restore_governors() {
+
+    local index=0
+    local oldgov=
+
+    for i in $(ls $CPU_PATH | grep "cpu[0-9].*"); do
+       oldgov=${governors_backup[$index]}
+       echo $oldgov > $CPU_PATH/$i/cpufreq/scaling_governor
+       index=$((index + 1))
+    done
+}
+
+save_frequencies() {
+
+    frequencies_backup=
+    local index=0
+    local cpus=$(ls $CPU_PATH | grep "cpu[0-9].*")
+    local cpu=
+
+    for cpu in $cpus; do
+       frequencies_backup[$index]=$(cat 
$CPU_PATH/$cpu/cpufreq/scaling_cur_freq)
+       index=$((index + 1))
+    done
+}
+
+restore_frequencies() {
+
+    local index=0
+    local oldfreq=
+    local cpus=$(ls $CPU_PATH | grep "cpu[0-9].*")
+
+    for cpu in $cpus; do
+       oldfreq=${frequencies_backup[$index]}
+       echo $oldfreq > $CPU_PATH/$cpu/cpufreq/scaling_setspeed
+       index=$((index + 1))
+    done
+}
+
+sigtrap() {
+    exit 255
+}
\ No newline at end of file
-- 
1.7.4.1


_______________________________________________
linaro-dev mailing list
linaro-dev@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/linaro-dev

Reply via email to