Instrukcja obsugi patcha wczajcego funkcjonalno Wake-On-Lan
dla kart sieciowych zintegrowanych z pytami nVidia nForce.

Dotyczy urzdze:

* nForce Ethernet Controller
* nForce2 Ethernet Controller
* nForce3 Ethernet Controller
* CK804 Ethernet Controller
* MCP04 Ethernet Controller
* MCP51 Ethernet Controller
* MCP55 Ethernet Controller

Poprawka wymaga modyfikacji w dwch miejscach:

* w module do jdra o nazwie rofcedeth
* w skryptach zatrzymujcych system

Poprawka wymaga posiadania nastpujcych narzdzi:

* wget
* patch
* diff
* make
* gcc

Jeli uywasz PLD-Linux to sprawd, czy nie masz tego ju w systemie
uywajc polece:

grep -qi forcedeth_workaround /etc/rc.d/rc.shutdown && echo mam wsparcie w skryptach!
/sbin/modinfo -F description forcedeth | grep -qi "timerirq disabled" && echo mam wsparcie w module!

Ok, jeli gdzie masz wsparcie i ju troch si orientujesz to bdziesz wiedzia,
ktre punkty pomin. Jedziemy:

1.) Zainstaluj narzdzie ethtool
    - jeli nie masz w swojej distro we z http://sourceforge.net/projects/gkernel/


2.) Upewnij si, e polecenie ethtool jest w /sbin lub w /usr/sbin


3.) Postaraj si o rda jdra ktrego uywasz (maj by w /usr/src/linux)


4.) Wykonaj z roota:

cd /tmp && mkdir cosik && cd cosik
wget ftp://ftp.pld-linux.org/people/siefca/\
patches/nvidia/pci-config.c
wget ftp://ftp.pld-linux.org/people/siefca/\
patches/nvidia/forcedeth_sleep.sh
kver=`uname -r | awk -F'[ .]' '{print $1"."$2"."$3}'`
export kver
wget -O linux-forcedeth-WON.patch \
ftp://ftp.pld-linux.org/people/siefca/\
patches/nvidia/linux-${kver}-forcedeth-WON.patch 

gcc -O2 ./pci-config.c -o ./pci-config
strip ./pci-config
mv ./pci-config /sbin

[ -d /etc/rc.d ] || mkdir /etc/rc.d
mv forcedeth_sleep.sh /etc/rc.d
chmod a+rx /etc/rc.d/forcedeth_sleep.sh /sbin/pci-config


5.) Spjrz czy w bieacym katalogu powsta plik o nazwie:
	 linux-forcedeth-WON.patch

     Jeli POWSTA przejd do 5.2.
     Jeli NIE MA GO to przejd do 5.1 (nastpny krok).


5.1) Musisz samodzielnie przygotowa poprawki do moduu jdra.
     To jest atwe i polega na wyszukaniu kilku rzeczy i zastpieniu ich.
     Przejd do katalogu: /usr/src/linux/drivers/net
     Wykonaj: cp forcedeth.c forcedeth.c.orig

     Otwrz edytorem plik: forcedeth.c

     [1] zmie linijk:

	#define DEV_NEED_TIMERIRQ      0x0001  /* set the timer irq flag in the irq mask */

       na takie dwie:

	#define DEV_NEED_TIMERIRQ      0x0000  /* work-around for Wake-On-Lan */
	#define DEV_NEED_TIMERIRQ_ORIG 0x0001  /* set the timer irq flag in the irq mask */

     [2] zmie linijk:

       	if (id->driver_data & DEV_NEED_TIMERIRQ)

       na tak:

	if (id->driver_data & DEV_NEED_TIMERIRQ_ORIG)

     [3] zmie linijk:

	MODULE_DESCRIPTION("Reverse Engineered nForce ethernet driver");

       na tak:

	MODULE_DESCRIPTION("Reverse Engineered nForce ethernet driver (TIMERIRQ DISABLED)");

     Ok. Ju prawie. :)

     Wykonaj: diff -Nu forcedeth.c.orig forcedeth.c >./linux-${kver}-forcedeth-WON.patch
     Wylij mi e-mailem (na dole strony) plik ktry powsta. Pomoesz w ten sposb innym.
     Jeli nie znasz nazwy wykonaj: ls linux-*forcedeth*

     Przejd do punktu 5.3


5.2) Patchowanie moduu.

# tu czesc zwiazana z module do kernela
mv linux-forcedeth-WON.patch /usr/src/linux
cd /usr/src/linux && patch -p1 <./linux-forcedeth-WON.patch


5.3) Kompilacja i instalacja moduu.

# kompilujemy modul do kernela
cd /usr/src/linux
make menuconfig   # wykonaj jeli nie kompilowae wczeniej tego kernela, a dopiero co cigne
		  # wyjd z menu jak tylko si pojawi odpowiadajc twierdzco na pytanie o to czy
		  # zapisa zmiany w konfiguracji
make
make modules

# instalujemy modul do kernela 
cd /usr/src/linux
make modules install
depmod -a


6.) Zrestartuj system, aby wsta z nowym moduem:

ifdown twj_kopotliwy_interface
rmmod forcedeth
reboot

7.) Teraz wana rzecz - trzeba wczy funkcjonalno w pliku
    odpowiedzialnym za wyczanie systemu. znajd taki plik u siebie
    (u mnie to jest /etc/rc.d/rc.shutdown) i dodaj w nim, w odpowiednim
    miejscu wywoanie /etc/rc.d/forcedeth_sleep.sh

    Po prostu poszukaj wewntrz /etc/rc.d, ktry plik zawiera komunikat
    w stylu "Turning off swap" i ponad tym poleceniem (odmontowywania swap
    w tym przypadku) dopisz linijk: /etc/rc.d/forcedeth_sleep.sh.

   Na przykad u mnie wygldao to tak:

|    /etc/rc.d/forcedeth_sleep.sh
|
|   # Turn off swap, then unmount file systems.
|    run_cmd "Turning off swap" swapoff -a
|
|    [ -x /etc/rc.d/rc.acct ] && /etc/rc.d/rc.acct stop

8.) Jeli nie wiesz jak zrobi powysze to zapytaj kogo kto si zna.
    Spytaj w ktrym momencie i w jakim pliku rc s odmontowywane systemy
    plikw przy zatrzymywaniu pracy systemu. Musisz wstawi wywoanie skryptu
    tu przed tym.

9.) Na koniec nie zapomnij powiedzie swojej karcie, e ma czuwa, kiedy komputer
    jest wyczony wydajc polecenie:

	ethtool -s nazwa_interfejsu wol g

10.) Sprawd czy dziaa.

-- 
Pawe Wilk < pw at gnu dot org >

