68 lines
1.7 KiB
Bash
68 lines
1.7 KiB
Bash
#
|
|
# $Header: profiles/power/start Exp $
|
|
#
|
|
|
|
local cpu pci usb hda nmi vmw aspm scsi
|
|
declare -A opt
|
|
opt=(
|
|
[cpu]=${1:-powersave}
|
|
[pci]=${2:-auto}
|
|
[usb]=${3:-auto}
|
|
[hda]=${5:-1}
|
|
[nmi]=${6:-0}
|
|
[vmw]=${7:-1000}
|
|
[aspm]=${8:-default}
|
|
[scsi]=${4:-min_power}
|
|
)
|
|
|
|
for cpu in /sys/devices/system/cpu/cpu[0-9]*; do
|
|
echo ${opt[cpu]} >$cpu/cpufreq/scaling_governor
|
|
done
|
|
|
|
[ -e /sys/module/pcie_aspm/parameters/policy ] &&
|
|
echo ${opt[aspm]} >/sys/module/pcie_aspm/parameters/policy >/dev/null 2>&1
|
|
for scsi in /sys/class/scsi_host/host[0-9]*; do
|
|
[ -e $scsi/link_power_management_policy ] || continue
|
|
case "$(< $scsi/proc_name)" in
|
|
(ahci|usb-storage)
|
|
echo ${opt[scsi]} >$scsi/link_power_management_policy;;
|
|
(*) ;;
|
|
esac
|
|
done
|
|
|
|
# set usb host to auto powersave
|
|
for usb in /sys/bus/usb/devices/{usb[0-9],[0-9]-[0-9]}; do
|
|
echo ${opt[usb]} >$usb/power/control
|
|
done
|
|
|
|
# pci power control
|
|
for pci in /sys/bus/pci/devices/0000:0*; do
|
|
echo ${opt[pci]} >$pci/power/control
|
|
done
|
|
|
|
# snd-hda-intel powersave
|
|
[ -e /sys/module/snd_hda_intel/parameters/power_save ] &&
|
|
echo ${opt[hda]} >/sys/module/snd_hda_intel/parameters/power_save
|
|
|
|
# turn off NMI watchdog
|
|
[ -e /proc/sys/kernel/nmi_watchdog ] &&
|
|
echo ${opt[nmi]} >/proc/sys/kernel/nmi_watchdog
|
|
|
|
# VM write back timeout
|
|
[ -e /proc/sys/vm/dirty_writeback_centisecs ] &&
|
|
echo ${opt[vmw]} >/proc/sys/vm/dirty_writeback_centisecs
|
|
|
|
unset opt
|
|
|
|
[[ "${HPROFILE[power]}" == "network" ]] || return
|
|
local iface running
|
|
|
|
for iface in $(ifconfig | sed -nre 's/(^[ew].*[0-9]{1}):.*/\1/p'); do
|
|
running="$(ifconfig $iface | sed -nre /$iface/'s/.*(RUNNING).*/\1/p')"
|
|
[[ "$running" ]] || ifconfig "$iface" down
|
|
done
|
|
|
|
#
|
|
# vim:fenc=utf-8:ft=sh:ci:pi:sts=0:sw=4:ts=4:
|
|
#
|