#!/bin/sh
#
# /etc/rc.d/scripts/idetune - run once at boot time from rc.sysinit
#

# Turn on ide device optimization.
# There is only one file /etc/sysconfig/harddisks with default paramenetrs
# for all disks. If you need different hdparm parameters for some of your
# devices, copy /etc/sysconfig/harddisks to /etc/sysconfig/harddisk/hda
# (hdb, hdc...) and modify it.
# each device witch has no special parameters will use the defaults.
 
WITHOUT_RC_COMPAT=1

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

HDPARM=/sbin/hdparm
[ -x "$HDPARM" ] || exit 0

for i in a b c d e f g h i j k l m n o p r s t; do
	if [ -e "/proc/ide/hd$i/media" ]; then
		hdmedia=`cat /proc/ide/hd$i/media`
		if [ "$hdmedia" = disk ]; then
			# Reset parameters.
			MULTIPLE_IO=
			USE_DMA=
			EIDE_32BIT=
			UNMASKIRQ=
			LOOKAHEAD=
			EXTRA_PARAMS=
			sourced=
			SourceIfNotEmpty /etc/sysconfig/harddisks && sourced=1
			SourceIfNotEmpty /etc/sysconfig/harddisk/hd$i && sourced=1
			[ -n "$sourced" ] || continue
			HDFLAGS=
			if [ -n "$MULTIPLE_IO" ] && [ "$MULTIPLE_IO" -ge 0 ] 2>/dev/null; then
				HDFLAGS="-q -m$MULTIPLE_IO"
			fi
			if [ -n "$USE_DMA" ] && [ "$USE_DMA" -ge 0 ] 2>/dev/null; then
				HDFLAGS="$HDFLAGS -q -d$USE_DMA"
			fi
			if [ -n "$EIDE_32BIT" ] && [ "$EIDE_32BIT" -ge 0 ] 2>/dev/null; then
				HDFLAGS="$HDFLAGS -q -c$EIDE_32BIT"
			fi
			if [ -n "$UNMASKIRQ" ] && [ "$UNMASKIRQ" -ge 0 ] 2>/dev/null; then
				HDFLAGS="$HDFLAGS -q -u$UNMASKIRQ"
			fi
			if [ -n "$LOOKAHEAD" ] && [ "$LOOKAHEAD" -ge 0 ] 2>/dev/null; then
				HDFLAGS="$HDFLAGS -q -A$LOOKAHEAD"
			fi
			if [ -n "$EXTRA_PARAMS" ]; then
				HDFLAGS="$HDFLAGS $EXTRA_PARAMS"
			fi
			if [ -n "$HDFLAGS" ]; then
				action "Setting hard drive parameters for hd$i:" "$HDPARM" $HDFLAGS /dev/hd$i
			fi
		elif [ "$hdmedia" = cdrom ]; then
			# Reset parameters.
			USE_DMA=
			EIDE_32BIT=
			UNMASKIRQ=
			EXTRA_PARAMS=
			SPEED=
			sourced=
			SourceIfNotEmpty /etc/sysconfig/harddisks && sourced=1
			SourceIfNotEmpty /etc/sysconfig/harddisk/hd$i && sourced=1
			[ -n "$sourced" ] || continue
			HDFLAGS=
			if [ -n "$USE_DMA" ] && [ "$USE_DMA" -ge 0 ] 2>/dev/null; then
				HDFLAGS="$HDFLAGS -q -d$USE_DMA"
			fi
			if [ -n "$EIDE_32BIT" ] && [ "$EIDE_32BIT" -ge 0 ] 2>/dev/null; then
				HDFLAGS="$HDFLAGS -q -c$EIDE_32BIT"
			fi
			if [ -n "$UNMASKIRQ" ] && [ "$UNMASKIRQ" -ge 0 ] 2>/dev/null; then
				HDFLAGS="$HDFLAGS -q -u$UNMASKIRQ"
			fi
			if [ -n "$SPEED" ] && [ "$SPEED" -ge 0 ] 2>/dev/null; then
				HDFLAGS="$HDFLAGS -q -E$SPEED"
			fi
			if [ -n "$EXTRA_PARAMS" ]; then
				HDFLAGS="$HDFLAGS $EXTRA_PARAMS"
			fi
			if [ -n "$HDFLAGS" ]; then
				action "Setting cdrom parameters for hd$i:" "$HDPARM" $HDFLAGS /dev/hd$i
			fi
		fi
	fi
done
