Sophie

Sophie

distrib > Fedora > 13 > i386 > media > updates-src > by-pkgid > 2d32152b8011ac85f607e062a0ade538 > files > 5

pm-utils-1.2.6.1-4.fc13.src.rpm

#!/bin/bash
# vim:noexpandtab
#
#    Author: Till Maas <opensource@till.name>
#    This program is free software: you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation, either version 2 of the License, or
#    (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.

PATH=/sbin:/bin:/usr/sbin:/usr/bin

source "${PM_FUNCTIONS}"



source /etc/pm-utils-hd-apm-restore.conf

if [ ! -x "$(which hdparm 2>/dev/null)" ]
then
    echo "hdparm not found in path '${PATH}' or not executable."
    exit $NA
fi

HD_APM_DEVICES=""
for udi in $(hal-find-by-capability --capability storage)
do
    drive_type=$(hal-get-property --udi "${udi}" --key storage.drive_type)
    if [ "${drive_type}" == "disk" ]
    then
        HD_APM_DEVICES+="$(hal-get-property --udi "${udi}" --key block.device | sed 's,^/dev/,,') "

    fi
done

case "$1" in
    hibernate|suspend)
        for DEVICE in ${HD_APM_DEVICES}
        do
            HD_APM_FEATURE=$(hdparm -I "/dev/${DEVICE}" | grep "Advanced Power Management feature set")
            if [[ "${HD_APM_FEATURE}" != "" ]]
            then
                if (echo "${HD_APM_FEATURE}" | grep -q "*" )
                then
                    HD_APM_LEVEL=$(hdparm -I "/dev/${DEVICE}" | grep "Advanced power management level" | cut -d" " -f 5)
                else
                    HD_APM_LEVEL=255
                fi
                if [[ "${HD_APM_LEVEL}" != "unknown" ]]
                then
                    echo "saving level ${HD_APM_LEVEL} for device ${DEVICE}"
                    savestate "${DEVICE}" "${HD_APM_LEVEL}"
                else
                    echo "Advanced Power Management value of device ${DEVICE} unknown"
                fi
            else
                echo "Advanced Power Management not supported by device ${DEVICE}."
            fi
        done
        ;;
    thaw|resume)
        for DEVICE in ${HD_APM_DEVICES}
        do
            HD_APM_LEVEL=$(restorestate "${DEVICE}")
            if [[ "${HD_APM_LEVEL}" != "" ]]
            then
                echo "restoring level ${HD_APM_LEVEL} for device ${DEVICE}"
                hdparm -B "${HD_APM_LEVEL}" "/dev/${DEVICE}"
            fi
        done
        ;;
    *)
        ;;
esac

exit $?