Linux and the 3Com 3c515 ISA Fast EtherLink

This page contains information on using Linux with the 3Com 3c515 ISA Fast EtherLink board.

The master copy of this page resides on the Scyld web server.

The Linux driver for the 3Com 3c515 "Corkscrew" board is available from this web page.

Usage instructions

Plug-and-Play Support

The 3c515 must be activated with ISA Plug-and-Play before it exists in I/O space. If your motherboard does not support ISA Plug-and-Play (this won't be subtle -- the module won't find your 3c515 card) you will need to run the following program to activate your board before loading the driver as a module:
http://www.roestock.demon.co.uk/isapnptools/.

The 'isapnp' program in this package requires a configuration file. Use the 'pnpdump' program to generate a config file like this

   pnpdump > /etc/isapnp.conf
Then edit /etc/isapnp.conf, uncommenting the IRQ, CHANNEL and BASE lines and changing the numbers so they don't conflict with other devices. Also, uncomment the ACT line.

The following basic configuration sets the card to 0x280, DMA 5, IRQ12. But since the ISA-PnP program unwisely requires the serial number of your specific card it won't work without modification.

(READPORT 0x0203)
(ISOLATE)
(IDENTIFY *)

# Card 1: (serial identifier a5 24 d7 49 51 51 50 6d 50)
# TCM5051
# ANSI string -->3Com Fast EtherLink ISA<-- (MODE (ACT (BASE +E))) TCM5051/? 

Edit your configuration in /etc/isapnp.conf and activating the board by running

isapnp /etc/isapnp.conf
before loading the module.

Installation instructions for the Modules version

Linux has a facility for linking device drivers into the running kernel. This is called Modules support. While probing for ISA devices at run time is a generally a bad idea, loading a module is the only reasonable way to support ISA PnP cards on motherboards without PnP BIOS support.

Here's how to make and load the Modules version:

  • Verify that the source code for your current kernel version is installed.
  • If you don't have a /usr/include/linux/version.h file, do
    cd /usr/src/linux; make include/linux/version.h
  • Copy the driver source code to a source directory. I usually use /usr/src/modules/3c515.c, but some people prefer /usr/src/linux/modules.
  • Compile the file using the compile-command at the bottom of the source file.
  • As 'root', load the module using "insmod 3c515.o". You should first test this by hand in single-user mode. If it works as expected you should add the insmod command (and the isapnp command if needed) to /etc/rc.d/rc.inet1 or /etc/rc.d/rc.local.

Possible problems and solutions

If you get an "linux/version.h no such file or directory" you either have not installed the kernel source code, or you haven't run

	cd /usr/src/linux; make include/linux/version.h
yet. Some distributions allow you to install just the essential header files of the kernel source code, including a pre-built "version.h", so this isn't always necessary.

If you get the error message "kernel_version needed, but can't be found" you forgot the -DMODULE flag when compiling. That probably means you didn't use the compile command at the bottom of the source as instructed above.

Diagnotic program

A 3c515 diagnostic program is available to help debug register settings, EEPROM contents and board-setup problems.

Options

When loaded as a module the following variables may be set:

 name	 type	description
 debug	 int	The debug message level, 0 (no messages) to 6 (wordy).
 options int[]	The media type override and card operation settings.

An example of loading the 3c515 module is insmod 3c515.o debug=1 options=0,16 This sets the debug message level to minimal messages.

Possible media type settings

	0	10baseT
	1	10Mbps AUI (not available on most cards)
	2	undefined (special case: 10baseT from the LILO prompt)
	3	10base2 (not available on most cards)
	4	100base-TX
	5	100base-FX (not available on most cards)
	6	MII  (not available on current cards)
	7	
Add 8 to these setting to force full duplex. Typical media type overrides are
0
10baseT
4
100baseTx
8
10baseT-FD
12
100baseTx-FD

Support

Note: These mailing lists do not yet exist.
Until they do, email me directly with reports. I'll create them when there is a mailing list request or the volume warrants.

Support for the 3c515 driver is being handled through mailing lists. See http://www.scyld.com/mailman/listinfo for the driver support mailing lists.

Errata

  • Bus-master operation is available in the hardware but not used by the driver. Using bus-master operation will significantly reduce the CPU load, at the expensve of network throughput.

Issues...

Performance

The 3c515 is an ISA bus adapter. The ISA bus is nominally limited to 5.3 MB/second.

Bus-master support

The March 1997 version of the driver does not yet support bus-master operation, which has a serious negative effect on the CPU load while handling heavy traffic. The current driver does include the 'Boomerang' code with the basic bus-master operation, but this is not enabled. To add bus-master support requires adding bounce buffer support (see the LANCE driver for an example) to both the transmit and receive routines.

Driver commonality

This driver shares much source code with the Vortex and Boomerang drivers. A natural question is "when will the drivers be merged?". Since I've written and am maintaining many drivers, including the all modern 3Com ones, it would simplify my job to do so.

The problem is that the register offsets differ between the cards, apparently a result of trying to fit cleanly into the ISA I/O space limitations. While it has often been said "all computer science problems can be solved by a layer of indirection", I feel a layer of indirection when accessing hardware registers would likely have considerable impact on driver performance. Until I have measurements that indicate otherwise, I'm keeping the 3c515 driver as a separate source code tree.

3c515 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 EtherLink III series has no multicast filter, and can only receive-no or receive-all multicast packets.


Linux Network Drivers Page
SCYLD information.
Author: Donald Becker, becker@scyld.com
.
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.
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.