[vortex] Slow thoughput / failed downloading large files from win hosts using linux 2.2.18/3c59x.c

lmonin@metaconcept.com lmonin@metaconcept.com
Wed, 21 Feb 2001 16:05:46 +0100 (CET)


Hi all,

	I've got some problems with 3c905B Cyclone 100baseTx adapter :

	This network adapter is running on a i686/linux-2.2.18 host,
	when downloading using ftp or http from this host to a window$ host on same local network
	i've got very slow transfer rate, and downloading files with large sizes ( > 50Mbytes) it often failed
	with network errors ( sometimes tx82 errors are produced ).
	Win host use a ne2000 pci card under win98.
	I noticed this problem since 2.2.12, and mailed Donald Becker about this a long time ago.

	I think this problem was fixed in last kernels but it seems not.

	Note that i use the driver provided in 2.2.18 :
	
	"3c59x.c 15Sep00 Donald Becker and others http://www.scyld.com/network/vortex.html\n";

	Searching mail archives i found an old patch solving this problem ( it works here ), but i need 
	to apply it to all new kernels.

	vortex-diag -a returns that :
8<--------------------------------------------
vortex-diag.c:v1.09 7/28/99 Donald Becker (becker@cesdis.gsfc.nasa.gov)
Index #1: Found a 3c905B Cyclone 100baseTx adapter at 0xd000.
The Vortex chip may be active, so FIFO registers will not be read.
To see all register values use the '-f' flag.
Initial window 7, registers values by window:
  Window 0: 0000 0000 0000 0000 0000 00bf 0000 0000.
  Window 1: FIFO FIFO 0000 0000 0000 0000 0000 2000.
  Window 2: 1000 555a bdfa 0000 0000 0000 000a 4000.
  Window 3: 0000 0380 05ea 0000 000a 0800 0800 6000.
  Window 4: 0000 0000 0000 0cd8 0001 8880 0000 8000.
  Window 5: 1ffc 0000 0000 0600 6007 06ce 06c6 a000.
  Window 6: 0000 0000 0000 0100 0000 0202 0000 c000.
  Window 7: 0000 0000 0000 0000 0000 0000 0000 e000.
Vortex chip registers at 0xd000
  0xD010: **FIFO** 00000000 0000009d *STATUS*
  0xD020: 00000020 00000000 00080000 00000004
  0xD030: 00000000 1f99e067 07170060 00080004
 Indication enable is 06c6, interrupt enable is 06ce.
 No interrupt sources are pending.
 Transceiver/media interfaces available:  100baseTx 10baseT.
Transceiver type in use:  Autonegotiate.
 MAC settings: half-duplex.
 Station address set to 00:10:5a:55:fa:bd.
 Configuration options 4000.
8<-----------------------------------------


This is the patch i'm using :


8<---------------------------------------
--- 3c59x.c     Wed Feb 21 14:40:51 2001
+++ 3c59x.c     Wed Feb 21 14:49:58 2001
@@ -1247,6 +1247,12 @@
        if (vp->full_bus_master_tx) {           /* Boomerang bus master Tx. */
                vp->cur_tx = vp->dirty_tx = 0;
                outb(PKT_BUF_SZ>>8, ioaddr + TxFreeThreshold); /* Room for a packet. */
+/* patch proposed at http://www.tux.org/hypermail/linux-vortex-bug/1999-Oct/0004.html for 
+   eth0: Transmit error, Tx status register 82. 
+*/
+#define XL_CMD_SET_TX_RECLAIM 0xC000
+outw(XL_CMD_SET_TX_RECLAIM|(PKT_BUF_SZ>>4), ioaddr + EL3_CMD);
+/* End of patch */
                /* Clear the Tx ring. */
                for (i = 0; i < TX_RING_SIZE; i++)
                        vp->tx_skbuff[i] = 0;
8<-----------------------------------------------------------


	Is it a configuration problem ( and is there a mean to get it to works without patch ) ?	
	Is anybody having the same or similar problem ?
	Is this solution doesnt break anything ?
	Why are not driver provided with last 2.2 kernel fixed ?



Laurent MONIN
Systèmes & Réseaux
Metaconcept Sarl
http://www.metaconcept.com