Linux and the "Tulip" NIC Architecture
Products Supported
This page contains information on using Linux with "Tulip" architecture Network Interface Controllers (NICs).
The orginal Tulip design was Digital DC21040 chip, loosely based on an earlier AMD architecture. It was the first high performance PCI NIC, and earned a well-deserved reputation for low CPU usage and high transfer rates. Since then many network adapters have used the same interface design. This driver works with almost all of them: the Intel/Digital 21040/21041/21140/21142/21143 series chips, as used on the SMC PCI EtherPower and many other ethercards. This device driver also supports work-alike chips from ADMtek, ASIX, LiteOn, MXIC, STmicro, and relabeled PNIC chips from LinkSys and Netgear.
The master copy of this page resides on the Scyld web server.
See also the
- Tulip driver development page.
- Tulip Media Tables, information on writing transceiver descriptions table for cards with incomplete EEPROM information.
- Tulip Mailing List archive on Tux
- Tulip-bug Mailing List archive on Tux
- Scyld mailing list archive
The driver for the "Tulip" Network Interface Controller (NIC) architecture is available from this web page. This driver has been integrated with the kernel source tree since 1.1.90, although the driver distributed with the 2.4 kernel is a modified version of an old release.
Usage instructions
Installation
The driver installation directions are on the Driver Updates page. You may install just one driver (see below) if you are using a Linux 2.2 or earlier kernel. Most distributions based on the 2.4 kernel have made it much more difficult to add drivers, thus we recommend updating the entire collection of drivers by using 'netdriver.tgz' package.
When updating a single driver you will need to build pci-scan.o along with the specific driver.o file. This means that in addition to the driver.c file, you must download pci-scan.c, pci-scan.h, kern_compat.h, and the Makefile.
Special Notes
When using multiport cards with some (brain-damaged, but technically not broken) PCI BIOSes the Tulip chips are detected in reverse order. This isn't a problem for cards where all chips have individual address EEPROMs, but some multiport cards have only a single EEPROM on the "first" chip which is now detected last. The result is that the driver will report "No EEPROM present" for the first three interfaces, and will back-fill the configuration information when the fourth interface is found. The driver has a module parameter 'reverse_probe=1' that will avoid this annoyance.
Options for Modules
When loaded as a module the following variables may be set:
name | type | description |
debug | int | The debug message level, 0 (no messages) to 31 (all messages). |
options | int[] | The media type override and card operation settings (See list below.) |
full_duplex | int[] | Force full duplex (obsolete -- for backwards compatibility with existing installations only). |
max_interrupt_work | int | Maximum number of events to handle at each interrupt, default 25. |
multicast_filter_limit | int | Breakpoint for switching to Rx-all-multicast mode, default 32 multicast addresses. |
rx_copybreak | int | See driver source for tuning details. |
csr0 | int | PCI Bus Performance register. See driver source for tuning details. |
Transceiver / Media Types
Only a subset of the media types are valid for a specific adapter. The default is usually autosense, but this may be overridden by changing the configuration EEPROM or by passing a driver option. Pay specific attention to the difference between SYM (Symbol mode) and MII (Media Independent Interface) transceivers. Your card will only have one of these types, and you must known which type to force a setting.
The media types are:
index | media |
0 | Auto-select (default to the 10baseT link) |
1 | 10base2 |
2 | AUI |
3 | 100baseTx |
4 | 10baseT-FD |
5 | 100baseTx-FD |
6 | 100baseT4 |
7 | 100baseFx |
8 | 100baseFx-FD |
9 | MII 10baseT |
10 | MII 10baseT-FD |
11 | MII (autoselect) |
12 | Serial 10baseT (no autoselect) |
13 | MII 100baseTx |
14 | MII 100baseTx-FD |
15 | MII 100baseT4 |
16 | MII 100baseFx-HDX (half duplex) |
17 | MII 100baseFx-FDX (full duplex) |
18 | MII Home-PNA 1Mbps |
Notes: Not all cards can have their media type set with 'options'. Many cards support multiple media types with a single MII transceiver, and must always be set to an MII type (preferably 11, but other values 9-15 force a specific setting).
Loading the driver module
An example of loading the Tulip module is insmod tulip.o debug=1 options=0,10 This sets the debug message level to minimal messages, sets the first card to the auto-sense the media type, and the second to 10baseT forced-full-duplex. (Note: card ordering is set by the motherboard's PCI BIOS.)
Setting for Built-in Drivers
The media type option above may be set as the third "LILO" parameter e.g.
Support
Support for the Tulip driver is handled through the following mailing lists:
- tulip-announce
- Annoucements of new drivers and features. Announcements are also made on the driver-announce mailing list.
- tulip
- General driver discussions, including bug reports and fixes.
- tulip-bug
- A list for reporting driver bugs. This list is being phased out to reduce the spam moderation load, please use the 'tulip' list instead.
Diagnostic program
A Tulip diagnostic program is available to show the current state of the hardware, configure the EEPROM, and help debug media selection and board-setup problems. Please send the output from this program with any bug reports.
The diagnostic programs are described at http://www.scyld.com/diag/index.html and source and binary packages are available from ftp://ftp.scyld.com/pub/diag/*
Errata
Due inaccurate documentation, autonegotiation cannot be enabled on the PNIC chip when used with a SYM transceiver.
Tulip Multicast Support
Most Ethernet chips can match a single unicast address -- their own station address -- and support a statistical (aka hash) filter for initial filtering of unwanted multicast packets. This is typically done by taking the CRC intermediate result just after destination address arrives, and using a few bits as the index into a table of which multicast packets are acceptable. The typical chip has 64 bins and uses six bits of CRC.
The Tulip does much better than this. The typical operating mode is matching the incoming destination address against a list of 16 addresses. After reserving two entries for the broadcast and station address, that means up to 14 multicast addresses may be perfectly filtered. With more than 14 multicast addresses the chip matches against a single unicast address and uses a statistical multicast filter with 512 bins, resulting in much better filtering than the 64 bin chips.
Using the 10base2 or AUI Port
The new driver automatically switches media types attempting to find a valid selection. 21040 boards start with the 10baseT port, and switch to the AUI (usually 10base2) media if no link beat is detected. 21041 boards rotate among 10baseT, 10base2 and AUI connectors looking for activity. 21140 and later boards use the EEPROM information to select and switch among media types. If there is no valid EEPROM media table (i.e. a old board design), the driver uses an internal table based on the ethernet address prefix. If no internal table is found, the driver configures the chip to use an MII transceiver.
Compatibility
Macronix network products web page, http://www.mxic.com.tw/publish/2276.htm.
Ethercards reported to use the DEC Tulip chips
Many Ethernet adapter cards use the Tulip chip. The list grows so rapidly that it's impossible to keep up to date, but here are cards that I have received reports on:
- Accton EtherDuo PCI
- Accton EN1207
- All three media types supported.
- Adaptec ANA6901/C
- 21040-AA, tested with v0.66
- Adaptec ANA6911/TX
- 21140-AC, tested with v0.66
- C-NET CNE-935
- 21041
- Cogent EM100
- 21140 with old-style 100mbps-only SYM transceiver
- Cogent EM110
- 21140-A with DP83840 N-Way MII transceiver
- Cogent EM400
- EM100 with 4 21140 100mbps-only ports + PCI Bridge
- Cogent EM960
- 21040, last tested with v0.66
- Cogent EM964 Quartet
- Four 21040 ports and a DEC 21050 PCI bridge.
- Danpex EN-9400P3
- D-Link DFE500-Tx
- 21140-A with DP83840 transceiver
- D-Link DE-530CT
- The DFE-530TX uses the VIA Rhine driver.
- D-Link DFE-540TX
- Linksys EtherPCI
- Note: Recent cards use the similar PNIC chip, which requires a v0.83 or later Tulip driver.
- Kingston EtherX KNT40T
- 21040
- Kingston EtherX KNE100TX
- 21140AE
- Netgear FX310 TX 10/100
- 21140AE, tested with 0.87.
- SMC EtherPower
- With DEC21040.
- SMC 8432BT
- With DEC21041.
- SMC EtherPower10/100
- With DEC21140 and 68836 SYM transceiver.
- SMC EtherPower10/100
- With DEC21140-AC and DP83840 MII transceiver.
Note: The EtherPower II uses the EPIC chip, which requires a different driver. - Surecom EP-320X
- DEC 21140.
- Thomas Conrad TC5048
- Znyx ZX312 EtherAction
- 21040 or 21041
- Znyx ZX314
- Four 21040 10baseT port, DEC 21050 or IBM bridge.
- Znyx ZX315 EtherArray
- Two 21040 10baseT/10base2 ports and a DEC 21050 PCI bridge
- Znyx ZX342
- Early non-NWAY 21140 board with a Level One physicial layer for 10BaseT and a National PHY for 100BaseT.
- ZNYX ZX344
- Four 21140 100BaseTX only ports with a DEC 21050 bridge.
- Znyx ZX345
- 21140-A, usually with the DP83840 N-Way MII transciever. Some ZX345 cards made in 1996 have an ICS 1890 transciver instead.
- Znyx ZX346
- Four 21140-A chips with ICS 1890 transcievers and either a
21052 or 21152 bridge chip.
Incorrect EEPROM (?) causes failed 10baseT detection. - ZNYX ZX348
- Two 21140-A chips using ICS 1890 transcievers and either a 21052 or 21152 bridge. Early versions used National 83840 transcievers, but later versions are depopulated ZX346 boards.
- ZNYX ZX351
- 21140 chip with a Broadcom 100BaseT4 transciever.
Scyld
provides support and development servies for Linux and Beowulf clusters.
Top
Linux Network Drivers Page
SCYLD information.
Author: Donald Becker
See the drivers for the contact email address. Do not bother sending email to zinc.anode@scyld.com, as email to that address adds your domain or IP address to the known-spammer list.