#!/bin/sh # $Id: cpufreq,v 1.4 2010/02/17 18:44:54 friedman Exp $ # Display current frequency values, or set new thresholds initialize() { sys=/sys/devices/system/cpu # These are the min/max values which the core is capable of. read cpuinfo_min_freq < $sys/cpu0/cpufreq/cpuinfo_min_freq read cpuinfo_max_freq < $sys/cpu0/cpufreq/cpuinfo_max_freq read scaling_min_freq < $sys/cpu0/cpufreq/scaling_min_freq read scaling_max_freq < $sys/cpu0/cpufreq/scaling_max_freq read scaling_cur_freq < $sys/cpu0/cpufreq/scaling_cur_freq read scaling_available_frequencies < $sys/cpu0/cpufreq/scaling_available_frequencies } display_all() { echo cpuinfo_min_freq=$cpuinfo_min_freq echo cpuinfo_max_freq=$cpuinfo_max_freq echo echo scaling_min_freq=$scaling_min_freq echo scaling_max_freq=$scaling_max_freq echo scaling_cur_freq=$scaling_cur_freq echo echo scaling_available=$scaling_available_frequencies } check_avail() { case " $scaling_available_frequencies " in *" $1 "* ) return 0 ;; esac echo Available frequencies: $scaling_available_frequencies 1>&2 exit 1 } set_freq() { param=$1 new=$2 check_avail $new for cpu in $sys/cpu*/cpufreq ; do echo $new > $cpu/$param || return $? done echo $param=$new } min() { case $1 in '' ) echo $scaling_min_freq ;; min ) set_freq scaling_min_freq $cpuinfo_min_freq ;; max ) set_freq scaling_min_freq $cpuinfo_max_freq ;; * ) set_freq scaling_min_freq $1 ;; esac } max() { case $1 in '' ) echo $scaling_max_freq ;; min ) set_freq scaling_max_freq $cpuinfo_min_freq ;; max ) set_freq scaling_max_freq $cpuinfo_max_freq ;; * ) set_freq scaling_max_freq $1 ;; esac } usage() { usage="Usage: ${0##*/} {options} Options are: -h, --help This help. -a, --all Display all cpu frequency parameters --min {freq} Display current min frequency, or set it. --max {freq} Display current max frequency, or set it. --avail Display available frequencies. The optional frequency parameter to \`--min' and \`--max' can be the literals \"min\" or \"max\" to indicate the minimum or maximum possible frequency, respectively." echo "$usage" exit 0 } main() { initialize case $1 in --* ) x=${1#--} ; shift ; set x "$x" "$@" ; shift ;; -* ) x=${1#-} ; shift ; set x "$x" "$@" ; shift ;; esac case $1:$2 in h:* | h*:* ) usage ;; a:* | all:* ) display_all ;; avail*:* ) echo $scaling_available_frequencies ;; : ) echo $scaling_cur_freq ;; min:* ) min $2 ;; max:* ) max $2 ;; [0-9]*: ) max $1 ;; esac } main "$@" # eof