1Linux and the 3Com EtherLink III Series Ethercards (driver v1.18c and higher)
   4This file contains the instructions and caveats for v1.18c and higher versions
   5of the 3c509 driver. You should not use the driver without reading this file.
   7release 1.0
   828 February 2002
   9Current maintainer (corrections to):
  10  David Ruggiero <>
  14(0) Introduction
  16The following are notes and information on using the 3Com EtherLink III series
  17ethercards in Linux. These cards are commonly known by the most widely-used
  18card's 3Com model number, 3c509. They are all 10mb/s ISA-bus cards and shouldn't
  19be (but sometimes are) confused with the similarly-numbered PCI-bus "3c905"
  20(aka "Vortex" or "Boomerang") series.  Kernel support for the 3c509 family is
  21provided by the module 3c509.c, which has code to support all of the following
  24  3c509 (original ISA card)
  25  3c509B (later revision of the ISA card; supports full-duplex)
  26  3c589 (PCMCIA)
  27  3c589B (later revision of the 3c589; supports full-duplex)
  28  3c529 (MCA)
  29  3c579 (EISA)
  31Large portions of this documentation were heavily borrowed from the guide
  32written the original author of the 3c509 driver, Donald Becker. The master
  33copy of that document, which contains notes on older versions of the driver,
  34currently resides on Scyld web server:
  37(1) Special Driver Features
  39Overriding card settings
  41The driver allows boot- or load-time overriding of the card's detected IOADDR,
  42IRQ, and transceiver settings, although this capability shouldn't generally be
  43needed except to enable full-duplex mode (see below). An example of the syntax
  44for LILO parameters for doing this:
  46    ether=10,0x310,3,0x3c509,eth0 
  48This configures the first found 3c509 card for IRQ 10, base I/O 0x310, and
  49transceiver type 3 (10base2). The flag "0x3c509" must be set to avoid conflicts
  50with other card types when overriding the I/O address. When the driver is
  51loaded as a module, only the IRQ and transceiver setting may be overridden.
  52For example, setting two cards to 10base2/IRQ10 and AUI/IRQ11 is done by using
  53the xcvr and irq module options:
  55   options 3c509 xcvr=3,1 irq=10,11
  58(2) Full-duplex mode
  60The v1.18c driver added support for the 3c509B's full-duplex capabilities.
  61In order to enable and successfully use full-duplex mode, three conditions
  62must be met: 
  64(a) You must have a Etherlink III card model whose hardware supports full-
  65duplex operations. Currently, the only members of the 3c509 family that are
  66positively known to support full-duplex are the 3c509B (ISA bus) and 3c589B
  67(PCMCIA) cards. Cards without the "B" model designation do *not* support
  68full-duplex mode; these include the original 3c509 (no "B"), the original
  693c589, the 3c529 (MCA bus), and the 3c579 (EISA bus).
  71(b) You must be using your card's 10baseT transceiver (i.e., the RJ-45
  72connector), not its AUI (thick-net) or 10base2 (thin-net/coax) interfaces.
  73AUI and 10base2 network cabling is physically incapable of full-duplex
  76(c) Most importantly, your 3c509B must be connected to a link partner that is
  77itself full-duplex capable. This is almost certainly one of two things: a full-
  78duplex-capable  Ethernet switch (*not* a hub), or a full-duplex-capable NIC on
  79another system that's connected directly to the 3c509B via a crossover cable.
  81/////Extremely important caution concerning full-duplex mode/////
  82Understand that the 3c509B's hardware's full-duplex support is much more
  83limited than that provide by more modern network interface cards. Although
  84at the physical layer of the network it fully supports full-duplex operation,
  85the card was designed before the current Ethernet auto-negotiation (N-way)
  86spec was written. This means that the 3c509B family ***cannot and will not
  87auto-negotiate a full-duplex connection with its link partner under any
  88circumstances, no matter how it is initialized***. If the full-duplex mode
  89of the 3c509B is enabled, its link partner will very likely need to be
  90independently _forced_ into full-duplex mode as well; otherwise various nasty
  91failures will occur - at the very least, you'll see massive numbers of packet
  92collisions. This is one of very rare circumstances where disabling auto-
  93negotiation and forcing the duplex mode of a network interface card or switch
  94would ever be necessary or desirable.
  97(3) Available Transceiver Types
  99For versions of the driver v1.18c and above, the available transceiver types are:
 1010  transceiver type from EEPROM config (normally 10baseT); force half-duplex
 1021  AUI (thick-net / DB15 connector)
 1032  (undefined)
 1043  10base2 (thin-net == coax / BNC connector)
 1054  10baseT (RJ-45 connector); force half-duplex mode
 1068  transceiver type and duplex mode taken from card's EEPROM config settings
 10712 10baseT (RJ-45 connector); force full-duplex mode
 109Prior to driver version 1.18c, only transceiver codes 0-4 were supported. Note
 110that the new transceiver codes 8 and 12 are the *only* ones that will enable
 111full-duplex mode, no matter what the card's detected EEPROM settings might be.
 112This insured that merely upgrading the driver from an earlier version would
 113never automatically enable full-duplex mode in an existing installation;
 114it must always be explicitly enabled via one of these code in order to be
 118(4a) Interpretation of error messages and common problems
 120Error Messages
 122eth0: Infinite loop in interrupt, status 2011. 
 123These are "mostly harmless" message indicating that the driver had too much
 124work during that interrupt cycle. With a status of 0x2011 you are receiving
 125packets faster than they can be removed from the card. This should be rare
 126or impossible in normal operation. Possible causes of this error report are:
 128   - a "green" mode enabled that slows the processor down when there is no
 129     keyboard activity. 
 131   - some other device or device driver hogging the bus or disabling interrupts.
 132     Check /proc/interrupts for excessive interrupt counts. The timer tick
 133     interrupt should always be incrementing faster than the others. 
 135No received packets 
 136If a 3c509, 3c562 or 3c589 can successfully transmit packets, but never
 137receives packets (as reported by /proc/net/dev or 'ifconfig') you likely
 138have an interrupt line problem. Check /proc/interrupts to verify that the
 139card is actually generating interrupts. If the interrupt count is not
 140increasing you likely have a physical conflict with two devices trying to
 141use the same ISA IRQ line. The common conflict is with a sound card on IRQ10
 142or IRQ5, and the easiest solution is to move the 3c509 to a different
 143interrupt line. If the device is receiving packets but 'ping' doesn't work,
 144you have a routing problem.
 146Tx Carrier Errors Reported in /proc/net/dev 
 147If an EtherLink III appears to transmit packets, but the "Tx carrier errors"
 148field in /proc/net/dev increments as quickly as the Tx packet count, you
 149likely have an unterminated network or the incorrect media transceiver selected. 
 1513c509B card is not detected on machines with an ISA PnP BIOS. 
 152While the updated driver works with most PnP BIOS programs, it does not work
 153with all. This can be fixed by disabling PnP support using the 3Com-supplied
 154setup program. 
 1563c509 card is not detected on overclocked machines 
 157Increase the delay time in id_read_eeprom() from the current value, 500,
 158to an absurdly high value, such as 5000. 
 161(4b) Decoding Status and Error Messages
 163The bits in the main status register are: 
 165value   description
 1660x01    Interrupt latch
 1670x02    Tx overrun, or Rx underrun
 1680x04    Tx complete
 1690x08    Tx FIFO room available
 1700x10    A complete Rx packet has arrived
 1710x20    A Rx packet has started to arrive
 1720x40    The driver has requested an interrupt
 1730x80    Statistics counter nearly full
 175The bits in the transmit (Tx) status word are: 
 177value   description
 1780x02    Out-of-window collision.
 1790x04    Status stack overflow (normally impossible).
 1800x08    16 collisions.
 1810x10    Tx underrun (not enough PCI bus bandwidth).
 1820x20    Tx jabber.
 1830x40    Tx interrupt requested.
 1840x80    Status is valid (this should always be set).
 187When a transmit error occurs the driver produces a status message such as 
 189   eth0: Transmit error, Tx status register 82
 191The two values typically seen here are:
 194Out of window collision. This typically occurs when some other Ethernet
 195host is incorrectly set to full duplex on a half duplex network. 
 19816 collisions. This typically occurs when the network is exceptionally busy
 199or when another host doesn't correctly back off after a collision. If this
 200error is mixed with 0x82 errors it is the result of a host incorrectly set
 201to full duplex (see above).
 203Both of these errors are the result of network problems that should be
 204corrected. They do not represent driver malfunction.
 207(5) Revision history (this file)
 20928Feb02 v1.0  DR   New; major portions based on Becker original 3c509 docs
 211 kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.