Author: siefca
Date: Sun Nov 26 09:17:24 2006
New Revision: 7994

Modified:
   rc-scripts/tags/0.4.0.27/AUTHORS
   rc-scripts/tags/0.4.0.27/po/pl.po
   rc-scripts/tags/0.4.0.27/rc.d/init.d/functions
   rc-scripts/tags/0.4.0.27/rc.d/rc.shutdown
Log:
- implemented workaround for Wake-On-Lan in nVidia nForce ethernet driver


Modified: rc-scripts/tags/0.4.0.27/AUTHORS
==============================================================================
--- rc-scripts/tags/0.4.0.27/AUTHORS    (original)
+++ rc-scripts/tags/0.4.0.27/AUTHORS    Sun Nov 26 09:17:24 2006
@@ -29,8 +29,10 @@
 Michał Kochanowicz <[EMAIL PROTECTED]>
        fixes, progress()
        
-Paweł Wilk <[EMAIL PROTECTED]>
-       executing scripts on iface up/down
+Paweł Wilk <[EMAIL PROTECTED]>
+        executing scripts on iface up/down
+        timezone setup & resolvesymlink
+        nVidia ethernet Wake-On-Lan work-around
 
 Robert Ślaski <[EMAIL PROTECTED]>
        ATM support

Modified: rc-scripts/tags/0.4.0.27/po/pl.po
==============================================================================
--- rc-scripts/tags/0.4.0.27/po/pl.po   (original)
+++ rc-scripts/tags/0.4.0.27/po/pl.po   Sun Nov 26 09:17:24 2006
@@ -684,6 +684,10 @@
 msgid "Unsetting time zone information"
 msgstr "Usuwanie informacji o strefie czasowej"
 
+#: ../rc.d/init.d/functions:930
+msgid "Forcing sleep state for the nForce interface %s"
+msgstr "Wymuszanie stanu uśpienia dla interfejsu nForce %s"
+
 #~ msgid "%s (pid %s) is running..."
 #~ msgstr "%s (pid %s) jest uruchomiony..."
 

Modified: rc-scripts/tags/0.4.0.27/rc.d/init.d/functions
==============================================================================
--- rc-scripts/tags/0.4.0.27/rc.d/init.d/functions      (original)
+++ rc-scripts/tags/0.4.0.27/rc.d/init.d/functions      Sun Nov 26 09:17:24 2006
@@ -894,6 +894,59 @@
        echo $SELINUX > $selinuxfs/enforce
 }
 
+# Wake-On-Lan workaround for nForce ethernet drivers.
+# To realy help it also requires patched kernel module.
+# Written by Pawel Wilk using idea from Arjen Verweij,
+# see http://atlas.et.tudelft.nl/verwei90/nforce2/wol.html
+#
+# Call it only when system halts/suspends, there is
+# no return to the D0 power state after execution!
+#
+forcedeth_workaround()
+{
+    [ -x /sbin/ethtool ] || return 2
+    [ -x /sbin/pci-config || return 2
+    grep -qi forcedeth /proc/modules || return 0
+    
+    # TIMERIRQ DISABLED is a token in description, which
+    # protects us against system hang - only patched module will have it
+    modinfo -F description forcedeth | grep -qi 'timerirq disabled' || return 0
+
+    typeset iface bus_dev_fn bus lookfor dev_index cur_state
+
+    for iface in $(ip link show | awk -F'[ :]+' '/eth[0-9]+/ {print $2}')
+    do
+       if LC_ALL=C ethtool -i "${iface}" 2>&1 | egrep -qi 
'driver:[[:blank:]]forcedeth'; then
+           case $(LC_ALL=C ethtool "${iface}" 2>&1 | awk 'tolower($1) ~ 
"wake-on:" {print $2}') in
+               *d*) continue ;; # 'd' letter means that the WON was DISABLED 
for interface
+               "") continue ;;  # empty string means that the WON is not 
supported here
+           esac
+           bus_dev_fn=$(LC_ALL=C ethtool -i ${iface} 2>&1 | awk -F'[ :.]+' 
'/^bus-info:/ {printf ("%d %d %d",$3,$4,$5) }')
+           if [ -n "${bus_dev_fn}" -a "${bus_dev_fn}" != "0 0 0" ]; then
+               bus=$(echo "${bus_dev_fn}" | awk '{print $1}')
+               lookfor=$(echo "${bus_dev_fn}" | awk '{print "at bus "$1" 
device/function "$2"/"$3}')
+               dev_index=$(LC_ALL=C pci-config -B${bus} 2>&1 | grep -i 
"${lookfor}" | awk '/Device \#[0-9]+/ {print $2}')
+               if [ -n "${dev_index}" ]; then
+                   show "Forcing sleep state for the nForce interface %s" 
${iface} ; busy
+                   ip link set ${iface} up 2>&1 >/dev/null # need it to be up
+                   sleep 1
+                   pci-config -S -$dev_index 2>&1 >/dev/null
+                   RESULT=$?
+                   cur_state=$(pci-config -a -$dev_index 2>&1 | awk -F'[ 
\t:.]+' ' tolower($2$3) ~ "powerstate" {print tolower($4)}')
+                   if [ "${cur_state}" != "d3" ]; then
+                       RESULT=1
+                   fi
+                   if [ $RESULT -gt 0 ]; then
+                       fail
+                   else
+                        ok
+                    fi
+               fi
+           fi
+       fi
+    done
+}
+
 # Remove duplicate entries from mtab (for vserver guest use only)
 clean_vserver_mtab() {
        :>/etc/mtab.clean

Modified: rc-scripts/tags/0.4.0.27/rc.d/rc.shutdown
==============================================================================
--- rc-scripts/tags/0.4.0.27/rc.d/rc.shutdown   (original)
+++ rc-scripts/tags/0.4.0.27/rc.d/rc.shutdown   Sun Nov 26 09:17:24 2006
@@ -48,6 +48,9 @@
 halt -w
 
 if ! is_yes "$VSERVER"; then
+       # Work-around for the nVidia drivers Wake-On-Lan functionality.
+       forcedeth_workaround
+
        # Turn off swap, then unmount file systems.
        run_cmd "Turning off swap" swapoff -a
 
_______________________________________________
pld-cvs-commit mailing list
pld-cvs-commit@lists.pld-linux.org
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to