#! /bin/sh

REFRESH=5

if [ ! -d /sys/devices/system/cpu/cpufreq ] ; then
  echo "Your CPU doesn't seem to support frequency scaling."
  exit 1
fi

while getopts "r:" OPTION ; do
  case $OPTION in
    r) REFRESH="$OPTARG" ;;
  esac
done

while true ; do 
  CPU=0
  CPU_MAX=`cat /sys/devices/system/cpu/online | cut -d "-" -f 2`
  clear
  [ "$USER" != "root" ] && echo "Note: non-root users don't have access to hardware frequency\n"
  while [ $CPU -le $CPU_MAX ] ; do
    echo "CPU $CPU:"
    FREQ_FILE_PATH="/sys/devices/system/cpu/cpu"$CPU"/cpufreq"
    GOV_CUR=`cat $FREQ_FILE_PATH/scaling_governor`
    GOV_STRING=`cat $FREQ_FILE_PATH/scaling_available_governors | sed -e "s/$GOV_CUR/\*$GOV_CUR/"`
    echo "Governors (* current):       $GOV_STRING"
    [ "$USER" = "root" ] && echo "Hardware freq (min/max/cur): `cat $FREQ_FILE_PATH/cpuinfo_min_freq`/`cat $FREQ_FILE_PATH/cpuinfo_max_freq`/`cat $FREQ_FILE_PATH/cpuinfo_cur_freq`"
    echo "Scaling  freq (min/max/cur): `cat $FREQ_FILE_PATH/scaling_min_freq`/`cat $FREQ_FILE_PATH/scaling_max_freq`/`cat $FREQ_FILE_PATH/scaling_cur_freq`"
    echo
    CPU=$((CPU+1))
  done
  echo -n "Press Ctrl-C to stop."
  sleep $REFRESH
done
