Scyld

Network Driver Updates for Linux kernels 1.2.0 through 2.4

Index

Release Information

This update contains two components:


Using the Source RPM Package

The updated drivers are best installed by using the source RPM to create a custom binary RPM with kernel modules for your system:
ftp://ftp.scyld.com/pub/network/netdrivers-3.1-1.src.rpm

Use the following commands to install and test the driver pack:

# Transfer the Scyld PCI Netdriver package # Perhaps use ncftpget ftp://ftp.scyld.com/pub/network/netdrivers-3.1-1.src.rpm rpm -i ftp://ftp.scyld.com/pub/network/netdrivers-3.1-1.src.rpm # Build the binary version for your kernel cd /usr/src/{redhat,TurboLinux,packages}/ rpm -bb SPECS/netdriver*.spec # Now install it your newly built package. rpm -i --force RPMS/i386/netdrivers-3.1-1.i386.rpm

The --force option is needed because the new drivers may conflict with the existing drivers installed by the kernel package. If this occurs you will see a warning message for each driver that has been updated.


Installing Individual Drivers

Drivers may be updated individually by following the directions in http://scyld.com/expert/modules.html. You will need to build both the driver.o and pci-scan.o modules using the following source files from ftp://ftp.scyld.com/pub/network/

In the instructions below driver.c refers to the name of the driver source file for your device e.g. 3c59x.c, and driver.o refers to the compiled driver binary module.

Special instructions for Red Hat 7.0

Red Hat 7.0 has a flawed configuration with their default install. The symptom is a variety of errors when trying to compile the driver update source RPM. The easiest work-around is to use a precompiled RPM for Red Hat 7.0 running the x86 uniprocessor kernel from ftp://ftp.scyld.com/pub/network/netdrivers-rh70.i386.rpm

Red Hat 7.0 uses the header files from an unreleased 2.3.99 kernel, rather than installing the header files from the kernel that is actually running. This was an attempt to make user-level binaries independent of the specific kernel version, but it makes it impossible to automatically build kernel modules.

A second problem is that 7.0 provides an experimental version of gcc that was not intended for public release. The stable version of gcc needed to correctly compile the kernel has been renamed to kgcc.

The work-around is to substitute kgcc for gcc and to add -I/usr/src/linux/include on the compile command line when compiling by hand. The Makefile in the tar file and RPM automatically include this compile flag, however they cannot automatically use 'kgcc'.

To repeat: this is a flaw that was introduced with Red Hat 7.0. It is a Red Hat configuration problem, not a driver update distribution bug. The symptom of this bug is compile error messages such as

tulip.c: In function `tulip_open': tulip.c:1437: structure has no member named `tbusy' tulip.c:1438: structure has no member named `start' ...

Building updated drivers into the kernel

The updated drivers may be also be linked into the kernel, rather than being used as a module that is linked later. Replace the drivers in drivers/net/* with the updated driver list.

Most kernel versions do not natively support the pci-scan.c layer. You will have to explicitly add pci-scan.o to the L_OBJS entry in drivers/net/Makefile.

L_TARGET := net.a -L_OBJS := auto_irq.o +L_OBJS := auto_irq.o pci-scan.o -M_OBJS := +M_OBJS := pci-scan.o MOD_LIST_NAME := NET_MODULES

Note that the 2.4 kernel is supported only as an experimental system. We do not recommend using 2.4 kernels on production systems.


Using the driver update with CardBus

The new driver structure is designed for in-kernel support of CardBus and hot-swap-PCI. The in-kernel implementation in the 2.3.* kernel is still unreliable, and few hot-swap PCI implementations exists, so most users will using the PCMCIA package from David Hinds with CardBus adapters. (Ref. ftp://sourceforge.org/pcmcia/*)

Using the new drivers with the existing PCMCIA package requires the PCI driver management module, pci-scan.c, and a CardBus-specific shim module named cb_shim.c.

These new modules, along with the drivers, should be compiled using the Makefile and the resulting *.o files installed in /lib/modules/'uname -r'/pcmcia/ with the make install. The following configuration lines should be added to /etc/pcmcia/config.opts and the PCMCIA system restarted with the new configuration.

# An updated list of Tulip-based cards. device "tulip" class "network" module "cb_enabler", "pci-scan", "cb_shim", "tulip" card "Accton EN2227 (ADMtek Centaur)" manfid 0x01bf, 0x2227 bind "tulip" card "Allied Telesyn AT-2800TX" manfid 0x0101, 0x0001 bind "tulip" card "Ambicom AMB8100 10/100 Ethernet" manfid 0x9513, 0x0081 bind "tulip" card "Ambicom AMB8100A Ethernet" manfid 0x022d, 0x810a bind "tulip" card "Compex Linkport TX" manfid 0x8a01, 0x0100 bind "tulip" card "D-Link DFE-660" manfid 0x50c7, 0xcafe bind "tulip" card "IBM 10/100 EtherJet CardBus" manfid 0x00a4, 0x0113 bind "tulip" card "Intel EtherExpress PRO/100 CardBus" manfid 0x0089, 0x0102 bind "tulip" card "Kingston KNE-CB4TX" manfid 0x0186, 0x0101 bind "tulip" card "Linksys EtherFast 10/100" manfid 0x0149, 0x0231 bind "tulip" card "Linksys EtherFast 10/100 v2.0" manfid 0x0149, 0xc2ab bind "tulip" card "Linksys EtherFast PCM200 v2" manfid 0x13d1, 0xab02 bind "tulip" card "Linksys EtherFast PCM200" manfid 0x13d1, 0xab03 bind "tulip" card "SMC EZ CardBus 10/100 Ethernet" manfid 0x01bf, 0x2220 bind "tulip" card "SMC EZ CardBus 10/100 Ethernet" manfid 0x01bf, 0x2225 bind "tulip" card "TDK CardBus NetworkFlyer 10/100" manfid 0x0105, 0x0500 bind "tulip" card "UMAX Technologies UMAX250" manfid 0x9513, 0x0081 bind "tulip" card "Xircom CBE-10/1000" manfid 0x0105, 0x0101 bind "tulip" # The 3Com Boomerang/Cyclone/Tornado CardBus cards. device "vortex" class "network" module "cb_enabler", "pci-scan", "cb_shim" opts "debug=7", "3c59x" card "3Com 3c575-TX Fast EtherLink XL" manfid 0x0101, 0x5057 bind "vortex" card "3CCFE575BT" manfid 0x0101, 0x5157 bind "vortex" card "3CCFE575CT" manfid 0x0101, 0x5257 bind "vortex" card "3CCFE656BT" manfid 0x0102, 0x6560 bind "vortex" to 0, "serial_cb" to 1 # The 656 cards have a WinModem :-( card "3CCFE656BT" manfid 0x0102, 0x6562 bind "vortex" card "3CCFEM656C" manfid 0x0102, 0x6564 bind "vortex" to 0, "serial_cb" to 1 # SMSC EPIC cards device "epic100" class "network" module "cb_enabler", "pci-scan", "cb_shim", "epic100" card "Trumpcard:7oS Ethernet" manfid 0x0140, 0x0011 bind "epic100" card "Trumpcard:JoS Ethernet" manfid 0x0140, 0x000F bind "epic100" to 0, "serial_cb" to 1 card "SMSC LAN EPIC" manfid 0x0108, 0xe104 bind "epic100" card "SMSC LAN EPIC + Modem" manfid 0x0108, 0xe302 bind "epic100" to 0, "serial_cb" to 1 # The CardBus version of the RealTek rtl8139b. device "realtek" class "network" module "cb_enabler", "pci-scan", "cb_shim", "rtl8139" # Bogus vendor ID from Best Data. card "Best Data RTL8139B" manfid 0x0000, 0x021b bind "realtek" card "Ambicom RTL8139B" manfid 0x0101, 0x8139 bind "realtek" card "Ambicom RTL8139B" manfid 0x1395, 0x2100 bind "realtek" card "Argosy EN235 RTL8139B" manfid 0x0260, 0x0235 bind "realtek" card "Compex LinkPort/TX32A" manfid 0x018a, 0x0106 bind "realtek" card "Laneed LD-10/100CBA" manfid 0x01bf, 0x2230 bind "realtek" card "RealTek RTL8139B" manfid 0x0000, 0x024c bind "realtek" # The few Intel eepro100 designs. device "eepro100" class "network" module "cb_enabler", "pci-scan", "cb_shim", "eepro100" card "Intel Pro/100 CardBus II" manfid 0x0089, 0x0103 bind "eepro100" card "Intel Pro/100 LAN+Modem56 CardBus II" manfid 0x0089, 0x1103 bind "eepro100" card "Ambicom AMB-8200 LAN+Modem56 (eepro100)" manfid 0x8086, 0x1229 bind "eepro100" # Uncomment this line only if you have 3.1.20 or later with PCI ID support. #card "Ambicom AMB-8200 LAN+Modem56 (eepro100)" pci 0x8086, 0x1229 bind "eepro100" device "firewire" class "ieee1394" module "cb_enabler", "pci-scan", "cb_shim", "firewire" # CardBus serial/modem support (generally combo with Ethernet) device "serial_cb" class "serial" module "cb_enabler", "serial_cb"

Discussion of the new driver structure

From the casual user perspective, the change to the new PCI scan code only adds complexity. Instead of each driver being a single self-contained file, you must now deal with two new header files, kern_compat.h and pci-scan.h, and a support module, pci-scan.c. For CardBus or hot-swap-PCI use an additional shim module, named cb_shim.c for CardBus, is used to enable translate power management and removal events.

The benefits of the new driver generation are subtle


Scyld Computing Corporation
Author: Donald Becker