diff options
Diffstat (limited to 'sys-apps/hdparm/files/hdparm-init-6')
-rw-r--r-- | sys-apps/hdparm/files/hdparm-init-6 | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/sys-apps/hdparm/files/hdparm-init-6 b/sys-apps/hdparm/files/hdparm-init-6 new file mode 100644 index 000000000000..96960108f928 --- /dev/null +++ b/sys-apps/hdparm/files/hdparm-init-6 @@ -0,0 +1,132 @@ +#!/sbin/runscript +# METHOD +# ------ +# if /dev/ide exists, find all block devices beneath it named disc, cd, or +# generic. +# +# for the disc and cd ones, if there is a a matching /dev/hdX symlink and +# hdX_args is set in the config file, use hdX_args. otherwise, if there is a +# matching /dev/discs/discX or /dev/cdroms/cdromX symlink, and discX_args or +# cdromX_args is set in the config file, use discX_args / cdromX_args. finally, +# if all_args is set in the config file, use that. +# +# for the generic ones, sort them and look for genericX_args in the config file +# or use all_args. +# +# if /dev/ide does not exist, check the /dev/hdX entries, and see which ones +# correspond to real devices by opening them for reading. then check hdX_args +# and all_args in the config file. +# +# for each device considered, if no args are found in the config file, do not +# run hdparm. + +depend() { + before bootmisc +} + +do_hdparm() { + if [[ ${args:=$all_args} ]] + then + orgdevice=`readlink -f $device` + if [ -b $orgdevice ]; then + ebegin "Running hdparm on $device" + hdparm $args $device > /dev/null || ewarn "Failed to run hdparm on $device" + fi + fi +} + +start() { + + ebegin 'Starting hdparm' + + which hdparm &>/dev/null + eend $? 'hdparm executable not found' + + if [ -e /dev/.devfsd ] || [ -e /dev/.udev ] + then + + # devfs and udev system + for device in $(find /dev/ide -name disc) + do + + args='' + + for alias in /dev/hd? + do + if [ $alias -ef $device ] + then + device=$alias + eval args=\${`basename $alias`_args} + break + fi + done + + [ -z $args ] && for alias in /dev/discs/* + do + if [ $alias/disc -ef $device ] + then + device=$alias/disc + eval args=\${`basename $alias`_args} + break + fi + done + + do_hdparm + + done + + for device in $(find /dev/ide -name cd) + do + + args='' + + for alias in /dev/hd? + do + if [ $alias -ef $device ] + then + device=$alias + eval args=\${`basename $alias`_args} + break + fi + done + + [ -z $args ] && for alias in /dev/cdroms/* + do + if [ $alias -ef $device ] + then + device=$alias + eval args=\${`basename $alias`_args} + break + fi + done + + do_hdparm + + done + + let count=0 + # of course, the sort approach would fail here if any of the + # host/bus/target/lun numbers reached 2 digits.. + for device in $(find /dev/ide -name generic | sort) + do + eval args=\${generic${count}_args} + do_hdparm + let count=count+1 + done + + else + + # non-devfs system + for device in /dev/hd? + do + # check that the block device really exists + # by opening it for reading + if [ -b $device ] && ( : <$device ) 2>/dev/null + then + eval args=\${`basename $device`_args} + do_hdparm + fi + done + + fi +} |