68 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			68 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# $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:
							 | 
						||
| 
								 | 
							
								#
							 |