Patch against pm-utils master (should apply cleanly to pm-utils 1.2.0 as well).

Hal specifies that we need to handle these quirks, but we apparently never have.

Anyways, we now handle pci_save and no_fb quirks.  Anyone got a system that 
needs the pci_save
quirk they are willing to test this patch on?

Assuming there are no objections, this patch series will be applied to master 
and backported to
the pm-utils 1.1 branch as well.
---
 pm/sleep.d/99video |   38 +++++++++++++++++++++++++++++++++++++-
 1 files changed, 37 insertions(+), 1 deletions(-)

diff --git a/pm/sleep.d/99video b/pm/sleep.d/99video
index b927a1b..dc8590a 100755
--- a/pm/sleep.d/99video
+++ b/pm/sleep.d/99video
@@ -26,6 +26,8 @@ for opt in $PM_CMDLINE; do
                vbemode-restore)   QUIRK_VBEMODE_RESTORE="true" ;;
                vbestate-restore)  QUIRK_VBESTATE_RESTORE="true" ;;
                vga-mode3)         QUIRK_VGA_MODE_3="true" ;;
+               no-fb)             QUIRK_NOFB="true" ;;
+               pci-save)          QUIRK_PCI_SAVE="true" ;;
                none)              QUIRK_NONE="true" ;;
                *) continue ;;
        esac
@@ -53,6 +55,15 @@ 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
@@ -105,6 +116,28 @@ vbe_post()
 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
@@ -113,16 +146,19 @@ suspend_video()
        quirk "${QUIRK_S3_MODE}" &&             acpi_flag=$(($acpi_flag + 2))
        [ 0 -ne $acpi_flag ] && 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_PCI_SAVE}" &&            pci_save
        quirk "${QUIRK_VGA_MODE_3}" &&          vbe vbemode set 3
        quirk "${QUIRK_DPMS_SUSPEND}" &&        vbe dpms suspend
-       save_fbcon # there should be a quirk, but HAL does not pass it.
+       save_fbcon
 }
 resume_video()
 {
        # We might need to do one or many of these quirks
+       quirk "${QUIRK_PCI_SAVE}" &&            pci_restore
        quirk "${QUIRK_VBE_POST}" &&            vbe_post
        quirk "${QUIRK_VBESTATE_RESTORE}" &&    vbe_restorestate
        quirk "${QUIRK_VBEMODE_RESTORE}" &&     vbe_restoremode
-- 
1.5.6.5

_______________________________________________
Pm-utils mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/pm-utils

Reply via email to