EtherPrime ep3200r Ethernet card slow with Linux?

I have had speed problems with the EtherPrime RTL8029 based Ethernet bg card under Linux. (This applies to the 10Base2 port, I don't know about 10BaseT/AUI). Everything seems to work OK, but when I installed some disk less machines I noticed how slow it was. Starting Emacs could take over 30 seconds vis about 10 seconds normally, and worse, restarting it (from the cache) could take 10-15 seconds vis normally under 2 seconds.

I did testing with kernels 2.0.37, 2.2.10, 2.2.13 and with the newest driver from http://cesdis.gsfc.nasa.gov/linux/drivers/ne2k-pci.html but all had similar behavior.

I had one D-link sn3200 board that worked perfectly and it was nearly identical to the ones that didn't.
The crucial difference was the contents of the EEprom.

So until the driver issue is resolved and if you have the same problem and are daring enough you can do the following:

WARNING: THIS MAY RENDER YOUR ETHERNET BOARD UNUSABLE!
READ THE DOCUMENTATION AT http://cesdis.gsfc.nasa.gov/linux/diag FIRST!

UPDATE: These files seems not to be available at cesdis anymore. An alternative site is: http://www.scyld.com/diag/index.html

Download this patched version of Donald Becker's diagnostic program ne2k-pci-diag-zap.c and compile and run (as root) with the following commands:

gcc -O ne2k-pci-diag-zap.c -o ne2k-pci-diag-zap
./ne2k-pci-diag-zap -e >backup-of-my-eeprom.txt
./ne2k-pci-diag-zap -Z 4711 -w

This will write the contents (except the station address of course) of my working sn3200 card into your card.
You will most likely have to reboot to make the card working again, so make sure you don't depend on anything mounted via NFS or so.

If things get really bad, and you want to have your old EEprom contents back, you'll have to edit "ne2k-pci-diag-zap.c" and insert the EEprom values from your backup file.

If you intend to fix the driver instead, here are diagnostic printouts from the working and a non-working card.

Questions and comments can be sent to:
thordn@stacken.kth.se