ACC SHELL

Path : /usr/lib/pm-utils/power.d/
File Upload :
Current File : //usr/lib/pm-utils/power.d/sata-pm

#!/bin/sh
#
# Script to set sata power management options
#
# Copyright (C) 2008 Holger Macht <hmacht@suse.de>
# Copyright (C) 2010 Michal Vyskocil <mvyskocilt@suse.cz> - rewrite for udisks
#
# This file is released under the GPLv2.
#

. /usr/lib/pm-utils/functions

IFACE=""
[ -z "$SATA_PM" ] && exit $NA

# Enumerate available devices
udisks_enumerate_devices() {
    ## Enumerate devices
    dbus-send --system --print-reply \
        --dest=org.freedesktop.UDisks \
        /org/freedesktop/UDisks \
        org.freedesktop.UDisks.EnumerateDevices

}

# Usage:
# $1 device name
# $2 property
udisks_get_property() {

    if [ -z "${1}" -o -z "${2}" ]; then
        return 1
    fi
    
    dbus-send --system --print-reply \
        --dest=org.freedesktop.UDisks \
        "${1}" \
        org.freedesktop.DBus.Properties.Get \
        string:`echo "${1}" | tr '/' '.'` ${2}
    
}

# The udisks alternative of 
# hal-find-by-property --key volume.mount_point --string /
# Usage:
# $1 mount point
udisks_find_by_mount_point() {
    
    for device in `udisks_enumerate_devices | grep 'object path' | sed 's@.*"\(.*\)"@\1@'`; do
        if udisks_get_property $device string:DeviceMountPaths | grep -q "string \"${1}\""; then
            echo $device
            break
        fi
    done

}

# prefer UDisks if available
if dbus-send --system  \
        --dest=org.freedesktop.UDisks \
        /org/freedesktop/UDisks \
        org.freedesktop.DBus.Properties.Get \
        string:org.freedesktop.UDisks string:DaemonVersion &> /dev/null; then

    ST_DEV=`udisks_find_by_mount_point "/"`
    HOST=`udisks_get_property $device string:NativePath | grep string | sed -e 's:.*"/sys/devices.*\(host.\)/target.*:\1:g'`

else
# ... else go back to the ancient HAL
# XXX: note this will be probably removed
    UDI=`hal-find-by-property --key volume.mount_point --string /`
    [ -z "$UDI" ] && exit $NA

    ST_DEV=`hal-get-property --udi $UDI --key block.storage_device`
    DEV=`hal-get-property --udi $ST_DEV --key linux.sysfs_path`
    HOST=`echo $DEV | sed -e 's:/sys/devices.*\(host.\)/target.*:\1:g'`
    [ -z "$HOST" ] && exit $NA
    [ -e /sys/class/scsi_host/$HOST/link_power_management_policy ] || exit $NA
fi

[ -z "$HOST" ] && exit $NA

case "$1" in
	true)
		echo "**set power mode for sata device to $SATA_PM" ;;
	false)
		SATA_PM="max_performance"
		echo "**set power mode for sata device to $SATA_PM"
		;;
esac

echo $SATA_PM > /sys/class/scsi_host/$HOST/link_power_management_policy

ACC SHELL 2018