#!/bin/sh
version="0.5"
curdir=`pwd`

chipname=$PLAT

query_mode=true
control_mode=
control_mask=".*"
runtime_status_mask=".*"

# check kernel version
uver=`uname -r|cut -d. -f3 |cut -d- -f1`

[ $uver -lt 32 ] && echo "Script relies on runtime PM features available in kernel 2.6.32 and later" && exit 1


usage()
{
cat << EOF
SATA power management utility $version
Usage: pmsata [OPTIONS] [DEVICES]
  -m MODE      - on|auto. If omitted, status is displayed (query mode)
  -c CMASK     - control file mask (query mode only)
  -s SMASK     - runtime status file mask (query mode only)
EOF
}

while getopts "m:h?c:s:a:" option
do
	case $option in
	m)
		query_mode=false
		control_mode=$OPTARG
		if [ ! "$control_mode" = "auto" -a ! "$control_mode" = "on" ] ; then
			usage
			exit 1
		fi
		;;
	c)
		control_mask=$OPTARG ;;
	s)
		runtime_status_mask=$OPTARG ;;
	h|?|*)
		usage
		exit 1 ;;
	esac
done

check_if_sata_controller()
{
	fname=$1
	is_sata_controller="no"
	[ -e "$fname/uevent" ] && grep -q "DRIVER=sata_brcmstb" $fname/uevent && is_sata_controller="yes"
	[ -e "$fname/uevent" ] && grep -q "DRIVER=ahci" $fname/uevent && is_sata_controller="yes"
}

# function generates a list of all 'power' folders found in
# the current tree
gen_powerlist()
{
	devfolder=$1
	powerlist=
	if [ -d $devfolder ] ; then
		cd -P $devfolder
		powerlist=`find . -name power -type d`
	fi
}

# process each power folder
# in query mode - display runtime_status and control settings
# in update mode - change runtime control mode

scan_powerlist()
{
	powerlist=$1
	for j in $powerlist ; do
		control_file=$j/control
		status_file=$j/runtime_status
		if [ "$query_mode" == "true" ] ; then
			filter_out=0
			[ -f "$control_file" ] && [ -z "`grep $control_mask $control_file`" ] && filter_out=1
			[ -f "$status_file" ] && [ -z "`grep $runtime_status_mask $status_file`" ] && filter_out=1
			if [ $filter_out -eq 0 ] ; then
				short_devname=$i/$j
				short_devname=${short_devname//\/\.\//\/} # /./ -> /
				short_devname=${short_devname%%/power}
				echo $short_devname
				[ -f $control_file ] && (     echo -n "control:        "; cat $control_file )
				[ -f $status_file ] && (      echo -n "runtime_status: "; cat $status_file )
			fi
		else
			supported=yes
			[ -f $status_file ] || supported=no
			[ "$supported" == "yes" ] && [ -f $control_file ] && [ ! -z "$control_mode" ] && echo $control_mode > $control_file
		fi
	done

}

# first process all scsi disks found in the system
devlist=`ls -d /sys/class/scsi_disk /sys/bus/scsi/devices/host?/target*/* 2>>/dev/null`

for i in $devlist ; do
	gen_powerlist $i
	scan_powerlist $powerlist
done

# now scan all pci devices and find SATA controller
devlist=`ls -d /sys/devices/pci*/* 2>>/dev/null`

for i in $devlist ; do
	gen_powerlist $i
	check_if_sata_controller $i
	[ "$is_sata_controller" == "yes" ] && scan_powerlist $powerlist
done

cd $curdir

