blob: 917ecaaec5ef3782f5d7044be6601afb4fd42bf1 [file] [log] [blame]
#! /bin/sh
#
# Laptop mode tools module: Ethernet power saving tweaks.
#
if [ x$CONTROL_ETHERNET = x1 ] ; then
if [ $ON_AC -eq 1 ]; then
if [ "$ACTIVATE" -eq 1 ]; then
THROTTLE_ETHERNET="$LM_AC_THROTTLE_ETHERNET"
else
THROTTLE_ETHERNET="$NOLM_AC_THROTTLE_ETHERNET"
fi
if [ x$DISABLE_ETHERNET_ON_BATTERY = x1 ]; then
# We are ON_AC and Disable feature is requested
# So we might be required to re-enable the device.
DISABLE_ETHERNET=0 #zero would mean that the device needs be re-enabled.
else
DISABLE_ETHERNET=2
# IF this is the case, don't touch the device for
# enable/disable
fi
else
THROTTLE_ETHERNET="$BATT_THROTTLE_ETHERNET"
if [ x$DISABLE_ETHERNET_ON_BATTERY = x1 ]; then
DISABLE_ETHERNET=1
else
DISABLE_ETHERNET=0
fi
fi
for DEVICE in $ETHERNET_DEVICES ; do
DISABLED=0
path=`readlink -f /sys/class/net/$DEVICE`
log "VERBOSE" "ethernet: $path"
if ! [ -z $path ]; then
if [ -d $path/device ]; then
dev_path=`readlink -f $path/device`
log "VERBOSE" "ethernet: $dev_path"
fi
fi
if ! [ -z $dev_path ] && [ -f $dev_path/enable ]; then
if [ x$DISABLE_ETHERNET = x1 ]; then
if [ -f $dev_path/enable ]; then
echo 0 > $dev_path/enable
log "VERBOSE" "ethernet: Disabling ethernet device $DEVICE"
DISABLED=1
fi
elif [ x$DISABLE_ETHERNET = x0 ]; then
if [ -f $dev_path/enable ]; then
echo 1 > $dev_path/enable
log "VERBOSE" "ethernet: Re-enabling ethernet device $DEVICE"
DISABLED=1
fi
elif [ x$DISABLE_ETHERNET = x2 ]; then
DISABLED=0 # Be safe. :-)
else
DISABLED=0 # Same here. Be safe. :-)
# For all other cases also, just disable it.
fi
else
log "VERBOSE" "$DEVICE does not seem to be supporting enable/disable"
fi
if [ x$DISABLED = x1 ]; then
continue
fi
# Wakeup-on-LAN handling
if [ x$DISABLE_WAKEUP_ON_LAN = x1 ] ; then
ret=`ethtool -s $DEVICE wol d 2>&1`
exit_status=$?;
log "VERBOSE" "$ret"
if [ $exit_status -eq 0 ]; then
log "VERBOSE" "Enabled wakeup-on-LAN for $DEVICE"
else
log "VERBOSE" "Could not enable wakeup-on-LAN for $DEVICE"
fi
fi
# Determine speed
speed=`mii-tool -v $DEVICE | grep capabilities | tr ' ' '\n' |\
sort -n | sed -ne '/^1.*/p' | cut -d "b" -f1`
if [ -z "$speed" ]; then
speed=0;
fi
max_s=0;
min_s=100000;
for s in $speed;
do
if [ $s -gt $max_s ]; then
max_s=$s
fi
if [ $s -lt $min_s ]; then
min_s=$s
fi
done
MAX_SPEED=$max_s;
case "$THROTTLE_SPEED" in
"slowest")
THROTTLE_SPEED=$min_s
;;
"fastest")
THROTTLE_SPEED=$max_s
;;
esac
# Handle throttling
if [ x$THROTTLE_ETHERNET = x1 ] ; then
# Handle auto-negotiation
ret=`ethtool -s $DEVICE autoneg off 2>&1`
exit_status=$?;
log "VERBOSE" "$ret";
if [ $exit_status -eq 0 ]; then
log "VERBOSE" "Switched auto-negotiation to off for $DEVICE"
else
log "VERBOSE" "Could not set auto-negotiation to off for $DEVICE"
fi
# Handle Speed Throttling
ret=`ethtool -s $DEVICE speed $THROTTLE_SPEED 2>&1`
exit_status=$?;
log "VERBOSE" "$ret";
if [ $exit_status -eq 0 ]; then
log "VERBOSE" "Throttled speed to $THROTTLE_SPEED Mbit for $DEVICE"
else
log "VERBOSE" "Could not throttle speed for $DEVICE"
fi
else
# Handle auto-negotiation
ret=`ethtool -s $DEVICE autoneg on 2>&1`
exit_status=$?;
log "VERBOSE" "$ret";
if [ $exit_status -eq 0 ]; then
log "VERBOSE" "Switched auto-negotiation to on for $DEVICE"
else
log "VERBOSE" "Could not set auto-negotiation to on for $DEVICE"
fi
# Handle Speed Throttling
ret=`ethtool -s $DEVICE speed $MAX_SPEED 2>&1`
exit_status=$?;
log "VERBOSE" "$ret";
if [ $exit_status -eq 0 ]; then
log "VERBOSE" "Restored speed to $MAX_SPEED Mbit for $DEVICE"
else
log "VERBOSE" "Could not restore speed for $DEVICE"
fi
fi
done
else
log "VERBOSE" "Ethernet module is disabled."
fi