#!/bin/sh
#
# powernowd		Starts the powernowd daemon
#
# chkconfig:	345 45 55
# description:	Reduce cpu frequency when idle
# processname:	powernowd
#
# pidfile:	/var/run/powernowd.pid

# Source function library.
. /etc/rc.d/init.d/functions

# Configuration file.
. /etc/sysconfig/powernowd

SYSDIR="/sys/devices/system/cpu/cpu0/cpufreq"

start() {
	# Start daemons.
	if [ ! -f /var/lock/subsys/powernowd ]; then
        LOADMODULE="no"
		if [ ! -f $SYSDIR/scaling_available_governors ]; then
            LOADMODULE="yes"
        else
            if grep -q userspace $SYSDIR/scaling_available_governors; then
                LOADMODULE="yes"
            fi
		fi
        if [ "$LOADMODULE" -eq "yes" ]; then
            _modprobe cpufreq_userspace
        fi

		if [ ! -d $SYSDIR ]; then
			return
		fi

		ARGS=""
		ARGS="$ARGS ${OPERATION_MODE:+-m $OPERATION_MODE}"
		ARGS="$ARGS ${FREQUENCY_STEP:+-s $FREQUENCY_STEP}"
		ARGS="$ARGS ${POLLING_FREQUENCY:+-p $POLLING_FREQUENCY}"
		ARGS="$ARGS ${THREADS_COUNT:+-c $THREADS_COUNT}"
		ARGS="$ARGS ${CPU_UPPER:+-u $CPU_UPPER}"
		ARGS="$ARGS ${CPU_LOWER:+-l $CPU_LOWER}"
		ARGS="$ARGS ${PROGRAM_ARGS}"

		# starting:
		msg_starting powernowd
		daemon /usr/sbin/powernowd -q $ARGS
		RETVAL=$?
		[ $RETVAL -eq 0 ] && touch /var/lock/subsys/powernowd
	else
		msg_already_running powernowd
	fi
}

stop() {
	# Stop daemons.
	if [ -f /var/lock/subsys/powernowd ]; then
		msg_stopping powernowd
		killproc powernowd
		rm -f /var/lock/subsys/powernowd >/dev/null 2>&1
	else
		msg_not_running powernowd
	fi
}

reload() {
	if [ -f /var/lock/subsys/powernowd ]; then
		msg_reloading powernowd
		killproc powernowd -HUP
		RETVAL=$?
	else
		msg_not_running powernowd
		exit 7
	fi
}

condrestart() {
	if [ -f /var/lock/subsys/powernowd ]; then
		stop
		start
	else
		msg_not_running powernowd
		RETVAL=$1
	fi
}

RETVAL=0
# See how we were called.
case "$1" in
  start)
  	start
	;;
  stop)
  	stop
	;;
  restart)
	stop
	start
	;;
  try-restart)
	condrestart 0
	;;
  reload|force-reload)
  	reload
	;;
  status)
	status powernowd
	exit $?
	;;
  *)
	msg_usage "$0 {start|stop|restart|try-restart|reload|force-reload|status}"
	exit 3
esac

exit $RETVAL
