From 338c2cab495d3d3d62cb7094b7dad78aea7f53eb Mon Sep 17 00:00:00 2001 From: Yu YongZhen Date: Wed, 25 Apr 2018 09:25:18 +0800 Subject: [PATCH] pm:sleep.d: remove unused sleep hooks --- pm/sleep.d/00powersave | 13 -- pm/sleep.d/01grub | 34 --- pm/sleep.d/49bluetooth | 35 --- pm/sleep.d/55NetworkManager | 42 ---- pm/sleep.d/75modules | 31 --- pm/sleep.d/90clock | 27 --- pm/sleep.d/94cpufreq | 46 ---- pm/sleep.d/95led | 16 -- pm/sleep.d/98video-quirk-db-handler | 450 ------------------------------------ pm/sleep.d/99video | 219 ------------------ pm/sleep.d/Makefile.am | 12 +- pm/sleep.d/Makefile.in | 12 +- 12 files changed, 2 insertions(+), 935 deletions(-) delete mode 100644 pm/sleep.d/00powersave delete mode 100644 pm/sleep.d/01grub delete mode 100755 pm/sleep.d/49bluetooth delete mode 100755 pm/sleep.d/55NetworkManager delete mode 100755 pm/sleep.d/75modules delete mode 100755 pm/sleep.d/90clock delete mode 100755 pm/sleep.d/94cpufreq delete mode 100755 pm/sleep.d/95led delete mode 100755 pm/sleep.d/98video-quirk-db-handler delete mode 100755 pm/sleep.d/99video diff --git a/pm/sleep.d/00powersave b/pm/sleep.d/00powersave deleted file mode 100644 index bf0f98b..0000000 --- a/pm/sleep.d/00powersave +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/sh - -. "${PM_FUNCTIONS}" - -command_exists pm-powersave || exit $NA - -case $1 in - suspend|hibernate) pm-powersave false ;; - resume|thaw) pm-powersave ;; - *) exit $NA ;; -esac -exit 0 - \ No newline at end of file diff --git a/pm/sleep.d/01grub b/pm/sleep.d/01grub deleted file mode 100644 index db1d53b..0000000 --- a/pm/sleep.d/01grub +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/sh -# Ensure grub will load the correct kernel on resume from hibernate, -# TODO: This is rather redhat specific, and very grub specific. - -default_resume_kernel() -{ - [ "$1" = "suspend" ] && return $NA - case $(uname -m) in - i?86|x86_64|athlon) - ;; - *) # this is only valid for x86 and x86_64 - return $NA - ;; - esac - - [ -x /sbin/grubby -a -x /sbin/grub ] || return $NA - [ -e "/boot/vmlinuz-$(uname -r)" ] || return 1 - out=$(/sbin/grubby --info /boot/vmlinuz-$(uname -r) |grep index) - [ -n "${out}" ] || return 1 - current=${out#index=} - echo "savedefault --default=${current} --once" | \ - /sbin/grub --device-map=/boot/grub/device.map \ - --batch --no-floppy --no-curses >/dev/null - - return 0 -} - -case "$1" in - hibernate|suspend) - default_resume_kernel $2 - ;; - *) exit $NA - ;; -esac diff --git a/pm/sleep.d/49bluetooth b/pm/sleep.d/49bluetooth deleted file mode 100755 index d46ba49..0000000 --- a/pm/sleep.d/49bluetooth +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/sh -# IBM specific hack to disable/enable bluetooth. -# TODO: Doesn't the working USB suspend/resume functionality -# make this code more or less obsolete? - -. "${PM_FUNCTIONS}" - -[ -f /proc/acpi/ibm/bluetooth ] || exit $NA - -suspend_bluetooth() -{ - if grep -q enabled /proc/acpi/ibm/bluetooth; then - savestate ibm_bluetooth enable - echo disable > /proc/acpi/ibm/bluetooth - else - savestate ibm_bluetooth disable - fi -} - -resume_bluetooth() -{ - state_exists ibm_bluetooth || return - restorestate ibm_bluetooth > /proc/acpi/ibm/bluetooth -} - -case "$1" in - hibernate|suspend) - suspend_bluetooth - ;; - thaw|resume) - resume_bluetooth - ;; - *) exit $NA - ;; -esac diff --git a/pm/sleep.d/55NetworkManager b/pm/sleep.d/55NetworkManager deleted file mode 100755 index f3c6df5..0000000 --- a/pm/sleep.d/55NetworkManager +++ /dev/null @@ -1,42 +0,0 @@ -#!/bin/sh -# If we are running NetworkManager, tell it we are going to sleep. -# TODO: Make NetworkManager smarter about how to handle sleep/resume -# If we are asleep for less time than it takes for TCP to reset a -# connection, and we are assigned the same IP on resume, we should -# not break established connections. Apple can do this, and it is -# rather nifty. - -. "${PM_FUNCTIONS}" - -suspend_nm() -{ - # Tell NetworkManager to shut down networking - printf "Having NetworkManager put all interaces to sleep..." - dbus_send --system \ - --dest=org.freedesktop.NetworkManager \ - /org/freedesktop/NetworkManager \ - org.freedesktop.NetworkManager.sleep && \ - echo Done. || echo Failed. -} - -resume_nm() -{ - # Wake up NetworkManager and make it do a new connection - printf "Having NetworkManager wake interfaces back up..." - dbus_send --system \ - --dest=org.freedesktop.NetworkManager \ - /org/freedesktop/NetworkManager \ - org.freedesktop.NetworkManager.wake && \ - echo Done. || echo Failed. -} - -case "$1" in - hibernate|suspend) - suspend_nm - ;; - thaw|resume) - resume_nm - ;; - *) exit $NA - ;; -esac diff --git a/pm/sleep.d/75modules b/pm/sleep.d/75modules deleted file mode 100755 index 261e70d..0000000 --- a/pm/sleep.d/75modules +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/sh -# Unload requested modules. - -. "${PM_FUNCTIONS}" - -suspend_modules() -{ - [ -z "$SUSPEND_MODULES" ] && return $NA - for x in $SUSPEND_MODULES ; do - printf "Unloading kernel module %s..." "$x" - modunload $x && echo Done. || echo Failed. - done - return 0 -} - -resume_modules() -{ - modreload - echo "Reloaded unloaded modules." -} - -case "$1" in - hibernate|suspend) - suspend_modules - ;; - thaw|resume) - resume_modules - ;; - *) exit $NA - ;; -esac diff --git a/pm/sleep.d/90clock b/pm/sleep.d/90clock deleted file mode 100755 index d81e2a6..0000000 --- a/pm/sleep.d/90clock +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/sh -# Synchronize system time with hardware time. -# Modern kernels handle this correctly so we skip this hook by default. - -. "${PM_FUNCTIONS}" - -suspend_clock() -{ - printf "Saving system time to hardware clock..." - /sbin/hwclock --systohc >/dev/null 2>&1 0<&1 && echo Done. || \ - echo Failed. -} - -resume_clock() -{ - printf "Loading system time from hardware clock..." - /sbin/hwclock --hctosys >/dev/null 2>&1 0<&1 && echo Done. || \ - echo Failed. -} - -is_set "$NEED_CLOCK_SYNC" || exit $NA - -case "$1" in - hibernate|suspend) suspend_clock ;; - thaw|resume) resume_clock ;; - *) exit $NA ;; -esac diff --git a/pm/sleep.d/94cpufreq b/pm/sleep.d/94cpufreq deleted file mode 100755 index 6807681..0000000 --- a/pm/sleep.d/94cpufreq +++ /dev/null @@ -1,46 +0,0 @@ -#!/bin/sh -# Ensure cpu governor is set to something sane. -# TODO: Which of the cpu governors is still insane? File bugs against -# those that are. - -. "${PM_FUNCTIONS}" - -[ -d /sys/devices/system/cpu/ ] || exit $NA - -hibernate_cpufreq() -{ - ( cd /sys/devices/system/cpu/ - for x in cpu[0-9]*; do - # if cpufreq is a symlink, it is handled by another cpu. Skip. - [ -L "$x/cpufreq" ] && continue - gov="$x/cpufreq/scaling_governor" - # if we do not have a scaling_governor file, skip. - [ -f "$gov" ] || continue - # if our temporary governor is not available, skip. - grep -q "$TEMPORARY_CPUFREQ_GOVERNOR" \ - "$x/cpufreq/scaling_available_governors" || continue - savestate "${x}_governor" < "$gov" - echo "$TEMPORARY_CPUFREQ_GOVERNOR" > "$gov" - done ) -} - -thaw_cpufreq() -{ - ( cd /sys/devices/system/cpu/ - for x in cpu[0-9]*/cpufreq/scaling_governor ; do - [ -f "$x" ] || continue - state_exists "${x%%/*}_governor" || continue - restorestate "${x%%/*}_governor" > "$x" - done ) -} - -case "$1" in - suspend|hibernate) - hibernate_cpufreq - ;; - resume|thaw) - thaw_cpufreq - ;; - *) exit $NA - ;; -esac diff --git a/pm/sleep.d/95led b/pm/sleep.d/95led deleted file mode 100755 index b4bb970..0000000 --- a/pm/sleep.d/95led +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/sh -# On an IBM system. make the suspend LED blink. -# TODO: Merge with 95led? Should be trivial. - -[ -f /proc/acpi/ibm/led ] || exit $NA - -case "$1" in - hibernate|suspend) - echo "7 blink" >/proc/acpi/ibm/led - ;; - thaw|resume) - echo "7 off" >/proc/acpi/ibm/led - ;; - *) exit $NA - ;; -esac diff --git a/pm/sleep.d/98video-quirk-db-handler b/pm/sleep.d/98video-quirk-db-handler deleted file mode 100755 index e9ea3ca..0000000 --- a/pm/sleep.d/98video-quirk-db-handler +++ /dev/null @@ -1,450 +0,0 @@ -#!/bin/bash -# Prototype video quirk database handler that does not rely on HAL. - -shopt -s extglob - -. "${PM_FUNCTIONS}" - -[[ $PM_DEBUG ]] && { - export PS4='${BASH_SOURCE}@${LINENO}(${FUNCNAME[0]}): '; - set -x -} - -possible_video_quirks=" --quirk-dpms-on - --quirk-dpms-suspend - --quirk-s3-mode - --quirk-s3-bios - --quirk-vbe-post - --quirk-vbe-post - --quirk-vga-mode-3 - --quirk-vbemode-restore - --quirk-vbestate-restore - --quirk-reset-brightness - --quirk-radeon-off - --quirk-no-fb - --quirk-save-pci" - -possible_system_properties="system.firmware.version - system.firmware.vendor - system.firmware.release_date - system.hardware.vendor - system.hardware.product - system.hardware.version - system.board.product - system.board.version - system.board.vendor - system.hardware.primary_video.vendor - system.hardware.primary_video.product - system.hardware.primary_video.driver - system.hardware.primary_video.using_kms - system.kernel.version" - -has_video_parameters() { - local p params=$(get_parameters) - [[ $params ]] || return 1 - for p in $params; do - [[ $possible_video_quirks = *$p* ]] && return - done - return 1 -} - -# video specific helper functions. - -# Are we using the nVidia binary driver? -using_nvidia() { [[ -d /sys/module/nvidia ]]; } - -# How about the ATI one? -using_fglrx() { [[ -d /sys/module/fglrx ]]; } - -# OK, what about a driver that is using kernel modesetting? -using_kms() { grep -q -E '(nouveau|drm)fb' /proc/fb; } - -# Get some video related values when HAL has not gotten them for us, or -# HAL is not available. -videoget() { - local dev pci - pci="/sys/bus/pci/devices" - for dev in "$pci"/*; do - [[ -f "${dev}/class" ]] || continue - [[ "$(cat "${dev}/class")" = "0x030000" ]] || continue - case $1 in - vendor) RES="$(cat "${dev}/vendor")" ;; - device) RES="$(cat "${dev}/device")" ;; - driver) - if [[ -L ${dev}/driver ]]; then - RES="$(readlink "${dev}/driver")" - RES="${RES##*/}" - elif using_nvidia; then - RES=nvidia - elif using_fglrx; then - RES=fglrx - fi - ;; - using_kms) - if using_kms; then - RES=true - else - RES=false - fi - ;; - esac - break - done -} - -# Get some important information about this system. - -# If we have /sys/class/dmi/id, life is easy, and we do not need to -# depend on HAL or dmidecode. -_dmisysget() { - [[ -r /sys/class/dmi/id/$1 ]] || RES="" - read RES < "/sys/class/dmi/id/$1" -} - -dmisysget() { - case $1 in - system.firmware.vendor) _dmisysget bios_vendor ;; - system.firmware.version) _dmisysget bios_version ;; - system.firmware.release_date) _dmisysget bios_date ;; - system.hardware.vendor) _dmisysget sys_vendor ;; - system.hardware.product) _dmisysget product_name ;; - system.hardware.version) _dmisysget product_version ;; - system.board.product) _dmisysget board_name ;; - system.board.version) _dmisysget board_version ;; - system.board.vendor) _dmisysget board_vendor ;; - system.hardware.primary_video.vendor) videoget vendor ;; - system.hardware.primary_video.product) videoget device ;; - system.hardware.primary_video.driver) videoget driver ;; - system.hardware.primary_video.using_kms) videoget using_kms ;; - system.kernel.version) RES=$(uname -r) ;; - *) return 1 - esac -} - -# Get system information using dmidecode. Slow and ugly, but -# should be supported just about everywhere. -_dmidecodeget() { - RES=$(dmidecode -s $1) -} - -dmidecodeget() { - case $1 in - system.firmware.vendor) _dmidecodeget bios-vendor ;; - system.firmware.version) _dmidecodeget bios-version ;; - system.firmware.release_date) _dmidecodeget bios-release-date;; - system.hardware.vendor) _dmidecodeget system-manufacturer;; - system.hardware.product) _dmidecodeget system-product-name;; - system.hardware.version) _dmidecodeget system-version;; - system.board.product) _dmidecodeget baseboard-product-name;; - system.board.version) _dmidecodeget baseboard-version;; - system.board.vendor) _dmidecodeget baseboard-manufacturer;; - *) return 1 - esac -} - -# If we have HAL, it has already done most of the work for us. -halget() { - local hgp="hal-get-property --udi /org/freedesktop/Hal/devices/computer --key" - case $1 in - system.firmware.version) RES=$($hgp "$1") ;; - system.firmware.vendor) RES=$($hgp "$1") ;; - system.firmware.release_date) RES=$($hgp "$1") ;; - system.hardware.vendor) RES=$($hgp "$1") ;; - system.hardware.product) RES=$($hgp "$1") ;; - system.hardware.version) RES=$($hgp "$1") ;; - system.board.product) RES=$($hgp "$1") ;; - system.board.version) RES=$($hgp "$1") ;; - system.board.vendor) RES=$($hgp "$1") ;; - *) return 1 - esac -} - -canonicalize_dmivar() { - [[ $1 =~ ^[a-z._-]+$ && $possible_system_properties = *$1* ]] || return 1 - echo "${1//[-.]/_}" -} - -# Precache the DMI and other information we will need as shell variables. -# This will make things easier when we start running for real. -precache_dmivars() { - local p q f - for q in $possible_system_properties; do - p=$(canonicalize_dmivar $q) || return 1 - RES="" - for f in dmisysget halget dmidecodeget; do - "$f" "$q" && break || continue 2 - done - RES="${RES##+( )}" - RES="${RES%%+( )}" - read "$p" <<<$RES - done - RES="" -} - -# Use bash variable indirection to set RES to the actual parameter -# we are looking for. Sanity check the variable we were passed to -# keep things sane. -getprop() { - RES="" - local p - if ! p=$(canonicalize_dmivar $1); then - echo "Unable to obtain DMI information for $1" >&2 - exit 1 - fi - RES="${!p}" -} - -# test to see if the parameter passed is a decimal or hexidecimal number -# Note the complete lack of floating point support. -isnum() { - [[ $1 =~ ^[0-9]+\$ || $1 =~ ^0[xX][0-9a-fA-F]+\$ ]] -} - -# for all the matching functions, -# $2 = the given constant (or regular expression), -# $1 = the raw data grabbed from HAL or dmidecode or wherever - -regex() { [[ $1 =~ ${2//;/|} ]]; } - -regex_ncase() { - local r - shopt -s nocasematch - regex "$1" "$2" - r=$? - shopt -u nocasematch - return $r -} - -regex_inverse() { ! regex "$1" "$2"; } -compare_eq() { [[ $1 = $2 ]]; } -compare_ne() { [[ $1 != $2 ]]; } -compare_gt() { [[ $1 > $2 ]]; } -compare_ge() { compare_eq "$@" || compare_gt "$@"; } -compare_lt() { [[ $1 < $2 ]]; } -compare_le() { compare_eq "$@" || compare_lt "$@"; } -numeric_compare_eq() { (( $1 == $2 )); } -numeric_compare_ne() { (( $1 != $2 )); } -numeric_compare_gt() { (( $1 > $2 )); } -numeric_compare_ge() { (( $1 >= $2 )); } -numeric_compare_lt() { (( $1 < $2 )); } -numeric_compare_le() { (( $1 <= $2 )); } -numeric_compare_eq_list() { - local key val - # $1 = key val to compare - # $2 = list to compare to - key=$1 - val="${2//;/ }" - for x in $val; do - (( $key == $x )) && return 0 - done - return 1 -} - -# Helper function for nVidia g80 gpus. They require extra special handling -# when not using the nVidia binary driver. -have_nvidia_g80() { - numeric_compare_eq $system_hardware_primary_video_vendor 0x10de || return - numeric_compare_eq_list $system_hardware_primary_video_product \ - '0x190;0x191;0x192;0x193;0x194;0x195;0x196;0x197;0x198;0x199;0x19a;0x19b;0x19c;0x19d;0x19e;0x19f;0x400;0x401;0x402;0x403;0x404;0x405;0x406;0x407;0x408;0x409;0x40a;0x40b;0x40c;0x40d;0x40e;0x40f;0x420;0x421;0x422;0x423;0x424;0x425;0x426;0x427;0x428;0x429;0x42a;0x42b;0x42c;0x42d;0x42e;0x42f' || return -} - -# Helper function for recent Intel framebuffer drivers. -have_smart_intel() { - local kernel_rev=$system_kernel_revision - local driver=$system_hardware_primary_video_driver - # currently, intel kernel modesetting is not quite smart enough - # we still need acpi s3 kernel modesetting hooks, so don't remove those - # options if they were passed. - [[ $driver = i915 && ( $kernel_rev > 2.6.26 || $kernel_rev = 2.6.26 ) ]] -} - -# find the appropriate quirks for this system using the native-format -# quirks database. Since the database is tree-ish, we use some stupid -# recursion tricks. - -# $1 = whether to ignore what we are reading -_find_native() { - local action key matcher regex - while read action key matcher regex; do - [[ $action && ${action:0:1} != '#' ]] || continue - case $action in - match) - if [[ $1 = ignore ]]; then - _find_native $1 - else - getprop "$key" - [[ $matcher && $regex ]] || find_native ignore - # if this matcher matches, look at nodes farther out. - if $matcher "$RES" "$regex"; then - _find_native work - else - _find_native ignore - fi - fi - ;; - endmatch) - [[ $found ]] && return 0 || return 1 ;; - addquirk) [[ $1 = ignore ]] && continue - found=true - add_parameters "$key" - ;; - delquirk) [[ $1 = ignore ]]&& continue - found=true - remove_parameters "$key" - ;; - esac - done -} - -find_native() ( - [[ -f $1 ]] || return 1 - exec <"$1" - _find_native work - res=$? - get_parameters - return $res -) - -# If we resumed, write out the quirks we used as our last known -# working ones for this hardware, kernel, driver, and KMS setting. -write_last_known_working() ( - local matcher quirk - precache_dmivars - exec >"$PM_LKW_QUIRKS" - for prop in system.firmware.version system.firmware.vendor \ - system.firmware.release_date system.hardware.vendor \ - system.hardware.product system.hardware.version \ - system.board.product system.board.version system.board.vendor \ - system.hardware.primary_video.vendor \ - system.hardware.primary_video.product \ - system.hardware.primary_video.driver \ - system.hardware.primary_video.using_kms \ - system.kernel.version; do - getprop "$prop" - if isnum "$RES"; then - matcher=numeric_compare_eq - else - matcher=compare_eq - fi - echo "match $prop $matcher ${RES}" - done - if [[ $QUIRKS ]]; then - for quirk in $QUIRKS; do - echo "addquirk $quirk" - done - else - echo "addquirk --quirk-none" - fi - for ((x=1; x<14; x++)); do - echo endmatch - done -) - -case $1 in - suspend|hibernate) - # Aaand.... GO - # cache all the properties we will need. - precache_dmivars - - # This logic can also be expressed using entries in the quirkdb, - # but I am too lazy to do that until a final quirk database is - # formalized. - if has_parameter --quirk-test && has_video_parameters; then - # The user is explicitly testing video parameters. - # Use them without the usual filtering. This may cause the system - # to blow up, but they explicitly asked for it. - remove_parameters --quirk-test - echo "Quirk testing mode enabled." - elif using_kms; then - # Using kernel modesetting? No quirks, and do not change vts. - remove_parameters $possible_video_quirks - add_parameters --quirk-no-chvt - echo "Kernel modesetting video driver detected, not using quirks." - elif using_nvidia; then - # Ditto for nVidia binary drivers - remove_parameters $possible_video_quirks - echo "nVidia binary video drive detected, not using quirks." - elif using_fglrx; then - # fglrx may or may not have to change vts, reports one - # way or the other welcome. - remove_parameters $possible_video_quirks - add_parameters --quirk-none - echo "ATI Catalyst driver detected, not using quirks." - elif have_nvidia_g80; then - # nVidia G80 GPUs require special handling when not using nvidia - # binary drivers. I do not know if noveau requires help or not. - remove_parameters $possible_video_quirks - add_parameters --quirk-vbe-post - echo "nVidia g80 series card detected." - else - # Go ahead and get our quirks. - if has_video_parameters; then - # Parameters from the command line take precedence - # over the database, so do not query it. - echo "Using quirks passed as parameters." - elif [[ $PM_QUIRKS ]]; then - # If we have $PM_QUIRKS. use it instead of the quirk database - add_parameters $PM_QUIRKS - echo "Using PM_QUIRKS environment variable for quirks." - # If we were not passed any quirks on the command line, - # get them from the database. - elif QUIRKS=$(find_native "$PM_LKW_QUIRKS"); then - # Known working quirks from our last run are still valid. - # Use them. - add_parameters $QUIRKS - echo "Using last known working set of quirks." - else - # Our known working quirks from the last run are either - # nonexistent or invalid. Either way, start over. - rm "$PM_LKW_QUIRKS" >/dev/null 2>&1 - for f in "$PM_QUIRKDB"/*.quirkdb - do - QUIRKS=$(find_native "$f") && break - done - # some default quirks if we did not get any. - if [[ -z $QUIRKS ]]; then - QUIRKS="--quirk-vbe-post --quirk-dpms-on - --quirk-dpms-suspend --quirk-vbestate-restore - --quirk-vbemode-restore --quirk-vga-mode-3" - echo "No quirk database entry for this system, using default." - else - echo "Using quirks for this system from quirk database." - fi - add_parameters $QUIRKS - savestate video_quirks "$QUIRKS" - fi - if have_smart_intel; then - # Intel without KMS does not require most quirks, no matter - # what anything else says. The only ones that seem to - # matter are the --quirk-s3 ones, so remove everything else. - remove_parameters --quirk-dpms-on \ - --quirk-dpms-suspend \ - --quirk-vbe-post \ - --quirk-vbe-post \ - --quirk-vga-mode-3 \ - --quirk-vbemode-restore \ - --quirk-vbestate-restore \ - --quirk-reset-brightness \ - --quirk-radeon-off \ - --quirk-no-fb \ - --quirk-save-pci - echo "Cleaning up quirks not needed by Intel video cards." - fi - fi - ;; - thaw|resume) - if state_exists video_quirks; then - QUIRKS=$(restorestate video_quirks); - write_last_known_working - echo "Saving last known working quirks: $QUIRKS" - elif has_parameter --store-quirks-as-lkw; then - for x in $(get_parameters); do - for y in $possible_video_quirks; do - [[ $x = $y ]] && QUIRKS=" $QUIRKS $x" - done - done - write_last_known_working - echo "Saving last known working quirks: $QUIRKS" - fi - ;; -esac diff --git a/pm/sleep.d/99video b/pm/sleep.d/99video deleted file mode 100755 index 452a88a..0000000 --- a/pm/sleep.d/99video +++ /dev/null @@ -1,219 +0,0 @@ -#!/bin/sh -# -# Copyright 2006-2007 Richard Hughes -# Copyright 2007 Peter Jones -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of version 2 of the GNU General Public License as -# published by the Free Software Foundation. - -# Handle video quirks. If you are having suspend/resume issues, -# troubleshooting using this hook is probably the best place to start. -# If it weren't for video card quirks, suspend/resume on Linux would be -# a whole lot more stable. - -. "${PM_FUNCTIONS}" - -for opt in $PM_CMDLINE; do - case "${opt##--quirk-}" in # just quirks, please - dpms-on) QUIRK_DPMS_ON="true" ;; - dpms-suspend) QUIRK_DPMS_SUSPEND="true" ;; - radeon-off) QUIRK_RADEON_OFF="true" ;; - reset-brightness) QUIRK_RESET_BRIGHTNESS="true" ;; - s3-bios) QUIRK_S3_BIOS="true" ;; - s3-mode) QUIRK_S3_MODE="true" ;; - vbe-post) QUIRK_VBE_POST="true" ;; - vbemode-restore) QUIRK_VBEMODE_RESTORE="true" ;; - vbestate-restore) QUIRK_VBESTATE_RESTORE="true" ;; - vga-mode-3) QUIRK_VGA_MODE_3="true" ;; - no-fb) QUIRK_NOFB="true" ;; - save-pci) QUIRK_SAVE_PCI="true" ;; - no-chvt) QUIRK_NO_CHVT="true" ;; - none) QUIRK_NONE="true" ;; - *) continue ;; - esac -done - -reset_brightness() -{ - for bl in /sys/class/backlight/* ; do - [ -f "$bl/brightness" ] || continue - BR="$(cat $bl/brightness)" - echo 0 > "$bl/brightness" - echo "$BR" > "$bl/brightness" - done -} - -if command_exists vbetool; then - vbe() { vbetool "$@"; } -else - vbe() { echo "vbetool not installed!" 1>&2; return 1; } -fi - -if command_exists radeontool; then - radeon() { radeontool "$@"; } -else - radeon() { echo "radeontool not found" 1>&2; return 1; } -fi - -die_if_framebuffer() -{ - [ -d "/sys/class/graphics/fb0" ] || return - echo "--quirk-no-fb passed, but system is using a framebuffer." - echo "Aborting." - exit 1 -} - - -save_fbcon() -{ - local con - for con in /sys/class/graphics/*/state; do - [ -f $con ] || continue - echo 1 >"${con}" - done -} - -resume_fbcon() -{ - local con - for con in /sys/class/graphics/*/state; do - [ -f $con ] || continue - echo 0 >"${con}" - done -} - -maybe_chvt() -{ - is_set "$QUIRK_NO_CHVT" && return - fgconsole |savestate console - chvt 63 -} - -maybe_deallocvt() -{ - state_exists console || return 0 - chvt $(restorestate console) - deallocvt 63 -} - -# Some tiny helper functions for quirk handling -quirk() { is_set "$1" && [ -z $QUIRK_NONE ]; } - -# save/restore vbe state -vbe_savestate() { vbe vbestate save |savestate vbestate; } -vbe_restorestate() { restorestate vbestate |vbe vbestate restore; } - -# save/restore the vbe mode -vbe_savemode() { vbe vbemode get |savestate vbemode; } -vbe_restoremode() -{ - # this is a little mode complicated to handle special-casing mode 3. - local vbemode=$(restorestate vbemode) - if [ "$vbemode" = "3" ]; then - vbe vgamode set $vbemode - else - vbe vbemode set $vbemode - fi -} - -# post the video card -vbe_post() -{ - local rom="/var/run/video.rom" - # if we do not have a romfile, do not post with it. - [ -f "$rom" ] || unset rom - vbe post $rom - sleep 0.1 -} - -# turn critical bits of radeon cards off/on -radeon_off() { radeon dac off; radeon light off; } -radeon_on() { radeon dac on; radeon light on; } - -# save and restore video card PCI config state -save_pci() -{ - local pci="/sys/bus/pci/devices" - for dev in "${pci}"/*; do - [ -f "${dev}/class" ] || continue - [ $(cat "${dev}/class") = "0x030000" ] || continue - [ -f "${dev}/config" ] || continue - # it is a video card, it has a configuration. Save it. - savestate "pci_video_${dev##*/}" <${dev}/config - done -} - -restore_pci() -{ - local pci="/sys/bus/pci/devices" - for dev in "${pci}"/*; do - state_exists "pci_video_${dev##*/}" || continue - restorestate "pci_video_${dev##*/}" > "${dev}/config" - done -} - -suspend_video() -{ - # 0=nothing, 1=s3_bios, 2=s3_mode, 3=both - local acpi_flag=0 - quirk "${QUIRK_S3_BIOS}" && acpi_flag=$(($acpi_flag + 1)) - quirk "${QUIRK_S3_MODE}" && acpi_flag=$(($acpi_flag + 2)) - sysctl -w kernel.acpi_video_flags=$acpi_flag - - quirk "${QUIRK_NOFB}" && die_if_framebuffer - quirk "${QUIRK_VBESTATE_RESTORE}" && vbe_savestate - quirk "${QUIRK_VBEMODE_RESTORE}" && vbe_savemode - quirk "${QUIRK_RADEON_OFF}" && radeon_off - quirk "${QUIRK_SAVE_PCI}" && save_pci - quirk "${QUIRK_VGA_MODE_3}" && vbe vbemode set 3 - quirk "${QUIRK_DPMS_SUSPEND}" && vbe dpms suspend - save_fbcon -} -resume_video() -{ - # We might need to do one or many of these quirks - quirk "${QUIRK_SAVE_PCI}" && restore_pci - quirk "${QUIRK_VBE_POST}" && vbe_post - quirk "${QUIRK_VBESTATE_RESTORE}" && vbe_restorestate - quirk "${QUIRK_VBEMODE_RESTORE}" && vbe_restoremode - resume_fbcon # also should be handled by a quirk. - quirk "${QUIRK_RADEON_OFF}" && radeon_on - quirk "${QUIRK_DPMS_ON}" && vbe dpms on - quirk "${QUIRK_RESET_BRIGHTNESS}" && reset_brightness - return 0 # avoid spurious hook exit failure message. -} - -help() { - echo # first echo makes it look nicer. - echo "Video quirk handler options:" - echo - echo " --quirk-dpms-on" - echo " --quirk-dpms-suspend" - echo " --quirk-radeon-off" - echo " --quirk-reset-brightness" - echo " --quirk-s3-bios" - echo " --quirk-s3-mode" - echo " --quirk-vbe-post" - echo " --quirk-vbemode-restore" - echo " --quirk-vbestate-restore" - echo " --quirk-vga-mode-3" - echo " --quirk-none" -} - -case "$1" in - suspend) maybe_chvt; suspend_video ;; - hibernate) maybe_chvt - if is_set "$HIBERNATE_RESUME_POST_VIDEO"; then - suspend_video - fi - ;; - resume) resume_video; maybe_deallocvt;; - thaw) - if is_set "${HIBERNATE_RESUME_POST_VIDEO}"; then - resume_video - fi - maybe_deallocvt - ;; - help) help ;; -esac diff --git a/pm/sleep.d/Makefile.am b/pm/sleep.d/Makefile.am index 2350825..1d7e0fa 100644 --- a/pm/sleep.d/Makefile.am +++ b/pm/sleep.d/Makefile.am @@ -1,17 +1,7 @@ sleepdir = $(libdir)/pm-utils/sleep.d sleep_SCRIPTS = \ - 00logging \ - 00powersave \ - 01grub \ - 49bluetooth \ - 55NetworkManager \ - 75modules \ - 90clock \ - 94cpufreq \ - 95led \ - 98video-quirk-db-handler \ - 99video + 00logging EXTRA_DIST=$(sleep_SCRIPTS) diff --git a/pm/sleep.d/Makefile.in b/pm/sleep.d/Makefile.in index d5a9243..c929d17 100644 --- a/pm/sleep.d/Makefile.in +++ b/pm/sleep.d/Makefile.in @@ -155,17 +155,7 @@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ sleepdir = $(libdir)/pm-utils/sleep.d sleep_SCRIPTS = \ - 00logging \ - 00powersave \ - 01grub \ - 49bluetooth \ - 55NetworkManager \ - 75modules \ - 90clock \ - 94cpufreq \ - 95led \ - 98video-quirk-db-handler \ - 99video + 00logging EXTRA_DIST = $(sleep_SCRIPTS) all: all-am -- 1.9.1