#!/sbin/openrc-run
# Copyright 1999-2012 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$

depend() {
	before bootmisc
}

do_hdparm() {
	local e=
	eval e=\$${extra_args}
	[ -z "${args}${all_args}${e}" ] && return 0
	
	if [ -n "${args:=${all_args} ${e}}" ] ; then
		local orgdevice=$(readlink -f "${device}")
		if [ -b "${orgdevice}" ] ; then
			ebegin "Running hdparm on ${device}"
			hdparm ${args} "${device}" > /dev/null
			eend $?
		fi
	fi
}

scan_nondevfs() {
	# non-devfs compatible system
	local device

	for device in /dev/hd* /dev/sd* /dev/cdrom* ; do
		[ -e "${device}" ] || continue
		case "${device}" in
			*[0-9]) continue ;;
			/dev/hd*)  extra_args="pata_all_args" ;;
			/dev/sd*)  extra_args="sata_all_args" ;;
			*)         extra_args="_no_xtra_args" ;;
		esac

		# check that the block device really exists by
		# opening it for reading
		local errmsg= status= nomed=1
		errmsg=$(export LC_ALL=C ; : 2>&1 <"${device}")
		status=$?
		case ${errmsg} in
		    *": No medium found") nomed=0;;
		esac
		args=""
		if [ -b "${device}" ] && [ "${status}" = "0" -o "${nomed}" = "0" ] ; then
			local conf_var="${device##*/}_args"
			eval args=\$${conf_var}
		fi

		# allows a disk to be configured using its id (override above)
		# we replace all dashes by underscores
		for alias in /dev/disk/by-id/* ; do
			if [ "${alias}" -ef "${device}" ] ; then
				eval args_tmp=\$"$(basename "${alias}" | sed -e 's/-/_/g' -e 's/:/_/g')"_args
				if [ -n "${args_tmp}" ]; then
					args="${args_tmp}"
				fi
				break
			fi
		done

		if [ -n "$args" ]; then
			do_hdparm
		fi;
	done
}

start() {
	if get_bootparam "nohdparm" ; then
		ewarn "Skipping hdparm init as requested in kernel cmdline"
		return 0
	fi

	scan_nondevfs
}