#!/sbin/sh
#
# Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
# Use is subject to license terms.
#
#ident	"@(#)svc-power	1.14	08/06/06 SMI"
#
# If the /etc/power.conf file does not have a "statefile" entry
# to specify the pathname of the cpr statefile, build one and
# add the line.  We choose the largest of the standard Sun partitions.

init_statefile_entry() {
	[ ! -f /etc/power.conf -o ! -w /etc/power.conf ] && return

	# Whitespace regular expression below is [<TAB><SPACE>]

	pattern="^[ 	]*statefile[	 ][	 ]*/"
	[ `/usr/bin/grep -c "$pattern" /etc/power.conf` -ge 1 ] && return

	avail=0			# Free blocks in current filesystem
	max_avail=0		# Most available free blocks encountered so far
 	statefile=.CPR		# Default cpr statefile name

	# Remove old statefile (if any) from root
	[ -f /$statefile ] && /usr/bin/rm -f /$statefile

	/usr/bin/df -k -F ufs |
	(
		read line	# Skip past the header line of the df output

		while read device kbytes used avail capacity filesys; do
			case $filesys in
			/|/usr|/var|/export/home)
				if [ $avail -gt $max_avail ]; then
					max_avail=$avail
					winner=$filesys
				fi
				;;
			esac
		done

		if [ $max_avail -gt 0 ]; then
			echo "statefile		${winner}/${statefile}" \
			    >>/etc/power.conf
		fi

		return
	)
	if [ $max_avail -eq 0 ]; then
		if [ X`df -n / | awk '{print $3}'` != "Xzfs" ] ; then
			return
		fi
		rootpool=`zfs mount | grep ' \/$' | awk '{print $1 }' |\
		    sed 's/\/.*$//'`
		if [ X$rootpool = "X" ] || \
		    [ ! -L /dev/zvol/dsk/$rootpool/dump ]; then
			return
		fi
		echo "statefile /dev/zvol/dsk/$rootpool/dump" \
			>> /etc/power.conf
	fi
}

case "$1" in
'start')
	[ -z "$_INIT_UTS_ISA" ] && _INIT_UTS_ISA=`/usr/bin/uname -p`

	if [ $_INIT_UTS_ISA = sparc ]; then
		init_statefile_entry
	fi

	if [ -x /usr/sbin/pmconfig -a -r /etc/power.conf ]; then
		/usr/sbin/pmconfig >/dev/console 2>&1
	fi
	;;

'stop')
	if [ -x /usr/sbin/pmconfig ]; then 
		/usr/sbin/pmconfig -r >/dev/null 2>/dev/null
	fi
	;;

*)
	echo "Usage: $0 { start | stop }"
	exit 1
	;;
esac
exit 0
