#
# disk-functions
#

PROFILES='bat adp dyn quiet'
PROFILE_DEFAULT=adp

ata()
{
	echo /sys/devices/pci*/*/ata*/host*/target*/*/block/*sd[a-z]
}
usb()
{
	local arg dev val
	for dev in /sys/devices/pci*/*/usb*/*/*/host*/target*/*/block/*sd[a-z]; do
		read val <${dev}/removable
		case "${val}" in
			(1) echo noop >${dev}/queue/scheduler;;
			(0)
				for arg in bfq cfq; do
					if grep -qws "${arg}" ${dev}/queue/scheduler; then
						echo "${arg}"  >${dev}/queue/scheduler
						break
					fi
				done
			;;
		esac
	done
}
disk()
{
	usb
	local dev
	for dev in $(ata); do
		hdparm -q -S${1:-0} -B${2:-254} /dev/${dev##*/} >${NULL} 2>&1
	done
}

start_test()
{
	local file=/sys/class/power_supply/AC0/online state
	if [ ! -r ${file} ]; then
		echo "adp"
		return 0
	fi
	read state <${file}
	case "${state}" in
		(0) printf "bat";;
		(*) printf "adp";;
	esac
}

start_post()
{
	local arg dev
	for dev in $(ata); do
		for arg in bfq cfq; do
			if grep -qws "${arg}" ${dev}/queue/scheduler; then
				echo "${arg}"  >${dev}/queue/scheduler
				break
			fi
		done
    	# NCQ opitmizations
    	echo 31   >${dev}/queue/nr_requests
    	echo 2    >${dev}/device/queue_depth
	done
}

start_adp()
{
	disk
}
start_bat()
{
	disk 255 254 254
}
start_dyn()
{
	disk 0 254 254
}
start_quiet()
{
	disk 255 254 254
}

#
# vim:fenc=utf-8:ft=sh:ci:pi:sts=0:sw=4:ts=4:
#
