home *** CD-ROM | disk | FTP | other *** search
- <!--
-
- The SGML source of the Ethernet-Howto
- =====================================
-
- Maintained by Paul Gortmaker.
-
- Modification Date: Nov 18th, 1995
-
- (Don't forget to update the reference to the current kernel version
- in the Introduction section, and the date/version in the abstract!)
-
- The "==" are because two dashes together inside an SGML comment
- will crash it. :-(
-
- History:
-
- 1) About July '93 == I was looking for info for e'net support for
- a notebook, and was browsing the files on Don's ftp site
- (was ftp.super.org then) == Don had a bunch of informational
- files scattered about, and while talking to him, he mentioned
- that someday it would be good if all that info was rolled
- into one document. The Howto project was just started, with
- the NET-Howto being the first howto, (grown from all the
- confusion of the big net-switch at 0.99pl10). I rolled
- all Don's info into one, added a bunch of info that I had
- gleaned from postings, copied the general style of the
- NET-Howto, and the first Ethernet-Howto hit the internet
- sometime in August 93.
-
- 2) About December 93, Don hacked together a HTML version of the
- Ethernet-Howto, but it didn't get much distribution, and
- I only kept the ASCII version up to date.
-
- 3) Spring 94, and the Ethernet-Howto gets published in the
- Linux Bible == 30 pages of a ~750 page book, published
- by Linux System Labs.
-
- 4) Don moves jobs, and sets up a WWW home page with up-to-date
- information on new linux drivers, and other ethernet news.
- Look for the url contained in this document.
-
- 5) A year (July 94) after its beginning, and the ugly tab+space
- formatting is dead. The last ASCII version that was maintained
- by hand was called version 1.03, and dated June 22/94. Any ASCII
- versions newer than that were generated from this SGML source.
-
- 6) I sat on the converted doc until Oct 94 because of a bug in the
- cross-referencing with HTML. A fix was to be forthcoming, but
- didn't eventuate. I eventually found a work-around.
-
- 7) Nov 95 sees a major reorganization, which puts the FAQ section
- and all the interesting bits first. People never read more
- than the first few pages anyway... :-)
-
- TODO:
-
- Add more URLs to this and that?
-
-
- -->
-
- <!doctype linuxdoc system>
-
- <article>
-
- <title>Linux Ethernet-Howto
- <author>Paul Gortmaker, Editor.
- <date>v2.5, 18 November 1995
-
- <abstract>
- This is the Ethernet-Howto, which is a compilation of information
- about which ethernet devices can be used for Linux, and how to
- set them up. It hopefully answers all the frequently asked questions
- about using ethernet cards with Linux. Note that this Howto is focused
- on the hardware and low level driver aspect of the ethernet cards,
- and does not cover the software end of things. See the NET2-Howto
- for that stuff.
- </abstract>
-
- <toc>
-
- <sect>Introduction<label id="main-intro">
- <p>
-
- The Ethernet-Howto covers what cards you should and
- shouldn't buy; how to set
- them up, how to run more than one, and other common problems and
- questions. It contains detailed information on the current level
- of support for <em/all of the most common ethernet cards available./
- It does <em/not/ cover the software end of things, as that
- is covered in the NET-2 Howto. Also note that general non-Linux
- specific questions about Ethernet are not (or at least they should
- not be) answered here. For those types of questions, see the
- excellent amount of information in the <em/comp.dcom.lans.ethernet/
- FAQ. You can FTP it from <tt/dorm.rutgers.edu/ in the directory
- <tt>/pub/novell/info_and_docs/</tt>
-
- This present revision covers distribution kernels up to and
- including v1.2.13. Information pertaining to development
- kernels up to version 1.3.42 is also documented.
-
- The Ethernet-Howto is edited and maintained by:
- <quote>
- Paul Gortmaker, <tt/Paul.Gortmaker@anu.edu.au/
- </quote>
-
- The primary source of the information for the initial
- Ethernet-Howto was from:
- <quote>
- Donald J. Becker, <tt/becker@cesdis.gsfc.nasa.gov/
- </quote>
-
- who we have to thank for writing the vast majority of ethernet
- card drivers that are presently available for Linux. He also
- is the original author of the NFS server too. Thanks Donald! We
- owe ya one! :-)
-
- Net-surfers may wish to check out the following URL:
-
- <url url="http://cesdis.gsfc.nasa.gov/pub/people/becker/whoiam.html"
- name="Donald Becker">
-
- <sect1>New Versions of this Document<label id="new-doc">
- <p>
-
- New versions of this document can be retrieved via anonymous
- FTP from:
-
- <url url="ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/"
- name="Sunsite HOWTO Archive">
-
- and various Linux ftp mirror sites. Updates will be made
- as new information and/or drivers becomes available. If this copy
- that you are reading is more than 4 months old, it is either out of
- date, or it means that I have been lazy and haven't updated it.
- This document was produced by using the SGML system that was
- specifically set up for the Linux Howto project, and there are
- various output formats available, including, postscript, dvi,
- ascii, html, and soon TeXinfo.
-
- I would recommend viewing it in the html (via a WWW browser) or the
- Postscript/dvi format. Both of these contain cross-references
- that are lost in the ascii translation.
-
- If you want to get the official copy off sunsite, here is URL.
-
- <url url="http://sunsite.unc.edu/mdw/HOWTO/Ethernet-HOWTO.html"
- name="Ethernet-HOWTO">
-
- If minor additions and changes have been made, you can view the
- latest working copy from this URL.
-
- <url url="http://rsphy1.anu.edu.au/˜gpg109/Ethernet-HOWTO.html"
- name="Working Copy">
-
- <sect1>Using the Ethernet-Howto<label id="using">
- <p>
-
- As this guide is getting bigger and bigger, you probably don't want
- to spend the rest of your afternoon reading the whole thing. And you
- don't <em/have/ to read it all. If you haven't got an ethernet card, then
- you will want to start with
- <ref id="what-card" name="What card should I buy...">
- to see what you should buy,
- and what you should avoid. If you have already got an ethernet card,
- but are not sure if you can use it with Linux, then you will want to
- read <ref id="card-intro" name="Vendor Specific...">
- which contains specific information on each
- manufacturer, and their cards. If you are having trouble with your
- card, then you will want to read the specific information about
- your card mentioned above, and the troubleshooting information in
- <ref id="faq" name="the FAQ section">.
- If you are interested in some of the technical aspects
- of the device drivers, then you can find that information in
- <ref id="tech-intro" name="Technical Information">
-
- <sect1>Disclaimer and Copyright<label id="copyright">
- <p>
-
- This document is <em/not/ gospel. However, it is probably the most
- up to date info that you will be able to find. Nobody is responsible
- for what happens to your hardware but yourself. If your ethercard
- or any other hardware goes up in smoke (...nearly impossible!)
- we take no responsibility. ie. THE AUTHORS ARE NOT RESPONSIBLE
- FOR ANY DAMAGES INCURRED DUE TO ACTIONS TAKEN BASED ON THE
- INFORMATION INCLUDED IN THIS DOCUMENT.
-
- This document is Copyright (c) 1993, 1994, 1995 by Donald Becker and
- Paul Gortmaker. Permission is granted to make and distribute
- verbatim copies of this manual provided the copyright notice
- and this permission notice are preserved on all copies.
-
- Permission is granted to copy and distribute modified versions
- of this document under the conditions for verbatim copying,
- provided that this copyright notice is included exactly as in
- the original, and that the entire resulting derived work is
- distributed under the terms of a permission notice identical
- to this one.
-
- Permission is granted to copy and distribute translations
- of this document into another language, under the above
- conditions for modified versions.
-
- If you are intending to incorporate this document into a
- published work, please contact me, and I will make an effort
- to ensure that you have the most up to date information
- available. In the past, out of date versions of the Linux
- howto documents have been published, which caused the developers
- undue grief from being plagued with questions that were already
- answered in the up to date versions.
-
- <sect>What card should I buy for Linux?<label id="what-card">
- <p>
-
- The answer to this question depends heavily on exactly what
- you intend on doing with your net connection, and how much
- traffic it will see.
-
- If you only expect a single user to be doing the occasional
- ftp session or WWW connection, then an old 8 bit wd8003 card
- will keep you happy.
-
- If you intend to set up a server, and you require the CPU
- overhead of Rx'ing and Tx'ing ether packets to be kept
- at a minimum, you probably want to look at one of the
- newer PCI cards with the DEC 21040 chip, or the
- AMD PCnet-PCI chip.
-
- If you fall somewhere in the middle of the above, then any
- one of the 16 bit ISA cards with stable drivers will do the
- job for you.
-
- <sect1>So What Drivers are Stable?
- <p>
-
- Of the 16 bit ISA cards, the following drivers are very
- mature, and you shouldn't have any problems if you buy
- a card that uses these drivers.
-
- SMC-Ultra/EtherEZ, WD80x3, 3c509, 3c503/16, Lance, NE2000.
-
- This is not to say that all the other drivers are unstable.
- It just happens that the above are the oldest and most
- used of all the linux drivers, making them the safest
- choice.
-
- Note that some el-cheapo motherboards can have trouble
- with the bus-mastering that the lance cards do, and
- some el-cheapo NE2000 clones can have trouble getting
- detected at boot.
-
- As for PCI cards, the PCnet-PCI cards that use the
- lance driver are a safe choice (except for the Boca
- cards as they have hardware flaws). The Allied Telsyn AT2450
- is a PCnet-PCI implementation that is known to work well.
-
- The DEC 21040 `tulip' driver and the 3c59x `vortex' driver
- are relatively new drivers, but have proven themselves to be quite
- stable already. (The newer 21041 based cards may be slightly
- problematic at the moment, but this will no doubt be
- resolved quickly.)
-
- <sect1>Eight bit vs 16 bit Cards<label id="8-vs-16">
- <p>
-
- You probably can't buy a new 8 bit ISA ethercard anymore,
- but you will find lots of them turning up at computer swap
- meets and the like for the next few years, at very low prices.
- This will make them popular for ``home-ethernet'' systems.
-
- Some 8 bit cards that will provide adequate performance for
- light to average use are the wd8003, the 3c503 and the ne1000.
- The 3c501 provides poor performance, and these poor 10 year
- old relics of the XT days should be avoided.
-
- The 8 bit data path doesn't hurt performance that much, as you
- can still expect to get about 500 to 800kB/s ftp download speed
- to an 8 bit wd8003 card (on a fast ISA bus) from a fast host.
- And if most of your net-traffic is going to remote sites, then
- the bottleneck in the path will be elsewhere, and the only speed
- difference you will notice is during net activity on your local
- subnet.
-
- <sect1>32 Bit / VLB / PCI Ethernet Cards
- <p>
-
- There aren't many 32 bit ethercard device drivers because there
- aren't that many 32 bit ethercards.
- There aren't many 32 bit ethercards out there because a 10Mbs
- network doesn't justify spending the 5x price increment for
- the 32 bit interface. (For a 100Mbs network, it is a different
- story though.)
-
- See <ref id="data-xfer" name="Programmed I/O vs. ..."> as to why
- having an ethercard on an 8MHz ISA bus is really not a
- bottleneck. Even though having the ethercard on a fast bus won't
- necessarily mean faster transfers, it will usually mean reduced
- CPU overhead, which is good for multi-user systems.
-
- AMD has the 32 bit PCnet-VLB and PCnet-PCI chips.
- See <ref id="pcnet-32" name="AMD PCnet-32"> for info on the
- 32 bit versions of the LANCE / PCnet-ISA chip.
-
- The DEC 21040 PCI chip is another option
- (see <ref id="dec-21040" name="DEC 21040">) for power-users.
- Many manufacturers produce cards that use this chip.
-
- 3Com's `Vortex' PCI cards are also another option, and the price
- is quite cheap if you can get one under their evaluation
- deal while it lasts. (see <ref id="vortex" name="3c590/3c595">)
-
- <sect1>Available 100Mbs Cards and Drivers
- <p>
-
- The present list of supported 100Mbs hardware is as follows:
- cards with the DEC 21140 chip; the 3c595 Vortex card;
- and the HP 100VG ANY-LAN. The drivers for the first two are
- quite stable, but feedback on the HP driver has been low
- so far as it has only been around since early 1.3.x kernels.
-
- The EtherExpressPro10/100 is not presently supported.
- Getting documentation out of intel is difficult to
- impossible, which is the main reason.
-
- The 21140 100Base-? chip is supported with the same driver as
- its 10Mbs counterpart, the 21040. SMC's 100Mbs EtherPower PCI
- card uses this chip. As with the 21040, you have a choice of
- two drivers to pick from.
-
- Also have a look at the information on Donald's WWW site,
- at the following URL:
-
- <url url="http://cesdis.gsfc.nasa.gov/linux/misc/100mbs.html"
- name="100Mbs Ethernet">
-
- Donald has been doing most of his work with the
- SMC EtherPower-10/100 cards, and reports getting about 4.6MB/s
- application to application with TCP on P5-100 Triton machines.
-
- (See <ref id="vortex" name="3c595"> and
- <ref id="dec-21040" name="DEC 21140"> for more details.)
-
- For 100VG information, see
- <url url="http://cesdis.gsfc.nasa.gov/linux/drivers/100vg.html"
- name="Donald's 100VG Page">
-
- You may also be interested in looking at:
-
- <url url="http://alumni.caltech.edu/~dank/fe/"
- name="Dan Kegel's Fast Ethernet Page">
-
- <sect1>Programmed I/O vs. Shared Memory vs. DMA<label id="data-xfer">
- <p>
-
- Ethernet is 10Mbs. (Don't be pedantic, 3Mbs and 100Mbs don't count.)
- If you can already send and receive back-to-back packets, you just
- can't put more bits over the wire. Every modern ethercard can receive
- back-to-back packets. The Linux DP8390 drivers come pretty close to
- sending back-to-back packets (depending on the current interrupt
- latency) and the 3c509 and AT1500 hardware has no problem at all
- automatically sending back-to-back packets.
-
- The ISA bus can do 5.3MB/sec (42Mb/sec), which sounds like more than
- enough. You can use that bandwidth in several ways:
-
- <sect2>Programmed I/O (e.g. NE2000, HP)
- <p>
-
- Pro: Doesn't use any constrained system resources,
- just a few I/O registers, and has no 16M limit.
-
- Con: Usually the slowest transfer rate, the CPU is waiting
- the whole time, and interleaved packet access is usually
- difficult to impossible.
-
- <sect2>Shared memory (e.g. WD80x3, SMC-Ultra, 3c503)
- <p>
-
- Pro: Simple, faster than programmed I/O, and allows random
- access to packets. The linux drivers compute the checksum of
- incoming IP packets as they are copied off the card, resulting in
- a further reduction of CPU usage vs. an equivalent PIO card.
-
- Con: Uses up memory space (a big one for DOS users, only a minor
- issue under Linux), and it still ties up the CPU.
-
- <sect2>Slave (normal) Direct Memory Access (e.g. none for Linux!)
- <p>
-
- Pro: Frees up the CPU during the actual data transfer.
-
- Con: Checking boundary conditions, allocating contiguous buffers,
- and programming the DMA registers makes it the slowest
- of all techniques. It also uses up a scarce DMA
- channel, and requires aligned low memory buffers.
-
- <sect2>Bus Master Direct Memory Access (e.g. LANCE, DEC 21040) <label id="master">
- <p>
-
- Pro: Frees up the CPU during the data transfer, can string
- together buffers, can require little or no CPU time lost on
- the ISA bus.
-
- Con: Requires low-memory buffers and a DMA channel. Any
- bus-master will have problems with other bus-masters that
- are bus-hogs, such as some primitive SCSI adaptors. A few
- badly-designed motherboard chipsets have problems with
- bus-masters. And a reason for not using <em/any/ type of
- DMA device is using a 486 processor designed for
- plug-in replacement of a 386: these processors must
- flush their cache with each DMA cycle. (This includes
- the Cx486DLC, Ti486DLC, Cx486SLC, Ti486SLC, etc.)
-
- <sect1>Type of cable that your card should support<label id="cable-intro">
- <p>
-
- If you are setting up a small ``personal'' network, you will probably
- want to use thinnet or thin ethernet cable. This is the style with the
- standard BNC connectors. See <ref id="cable" name="Cables, Coax...">
- for other concerns with different types of ethernet cable.
-
- Most ethercards also come in a `Combo' version for only
- $10-$20 more.
- These have both twisted pair and thinnet transceiver built-in,
- allowing you to change your mind later.
-
- The twisted pair cables, with the RJ-45 (giant phone jack)
- connectors is technically called 10BaseT. You may also
- hear it called UTP (Unsheilded Twisted Pair).
-
- The thinnet, or thin ethernet cabling, (RG-58 coaxial cable)
- with the BNC (metal push and turn-to-lock) connectors is
- technically called 10Base2.
-
- The older thick ethernet (10mm coaxial cable) which is only
- found in older installations is called 10Base5.
-
- Large corporate installations will most likely use 10BaseT
- instead of 10Base2. 10Base2 does not offer an easy upgrade
- path to the new upcoming 100Base-whatever.
-
- <sect>Frequently Asked Questions<label id="faq">
- <p>
-
- Here are some of the more frequently asked questions about using
- Linux with an Ethernet connection. Some of the more specific
- questions are sorted on a `per manufacturer basis'.
- However, since this
- document is basically `old' by the time you get it, any `new' problems
- will not appear here instantly. For these, I suggest that you make
- efficient use of your newsreader. For example, nn users would type
-
- <tscreen>
- nn -xX -s'3c'
- </tscreen>
-
- to get all the news articles in your subscribed list that have
- `3c' in the subject. (ie. 3com, 3c509, 3c503, etc.)
- The moral: Read the man page for your newsreader.
-
- <sect1>Alpha Drivers -- Getting and Using them<label id="alfa">
- <p>
-
- I heard that there is an updated or alpha driver available
- for my card. Where can I get it?
-
- The newest of the `new' drivers can be found on Donald's new
- ftp site: <tt/cesdis.gsfc.nasa.gov/ in the
- <tt>/pub/linux/</tt> area. Things
- change here quite frequently, so just look around for it.
- There is still all the stuff on the old ftp site <tt/ftp.super.org/
- in <tt>/pub/linux</tt>, but this is not being actively maintained,
- and hence will be of limited value to most people.
-
- Note that most of the `useable' alpha drivers have been
- included in the standard kernel source tree. When running
- <tt/make config/ you will be asked if you want to be offered
- ALPHA test drivers.
-
- Now, if it really is an alpha, or pre-alpha driver, then please
- treat it as such. In other words, don't complain because you
- can't figure out what to do with it. If you can't figure out
- how to install it, then you probably shouldn't be testing it.
- Also, if it brings your machine down, don't complain. Instead,
- send us a well documented bug report, or even better, a patch!
-
- People reading this while <em/net-surfing/ may want to check out:
-
- <url url="http://cesdis.gsfc.nasa.gov/pub/linux/linux.html"
- name="Don's Linux Home Page">
-
- for the latest dirt on what is new and upcoming.
-
- <sect1>Using More than one Ethernet Card per Machine<label id="two-card">
- <p>
-
- What needs to be done so that Linux can run two ethernet cards?
-
- The hooks for multiple ethercards are all there.
- However, note that only <em/one/ ethercard is
- auto-probed for by default. This avoids a lot of possible
- boot time hangs caused by probing sensitive cards.
-
- There are two ways that you can enable auto-probing for
- the second (and third, and...) card. The easiest
- method is to pass boot-time arguments to the kernel,
- which is usually done by LILO. Probing for the
- second card can be achieved by using a boot-time argument
- as simple as <tt/ether=0,0,eth1/. In this
- case <tt/eth0/ and <tt/eth1/ will be assigned in the order
- that the cards are found at boot. Say if you want
- the card at <tt/0x300/ to be <tt/eth0/ and
- the card at <tt/0x280/ to be <tt/eth1/ then you could use
-
- <tscreen>
- LILO: linux ether=5,0x300,eth0 ether=15,0x280,eth1
- </tscreen>
-
- The <tt/ether=/ command accepts more than the IRQ + i/o
- + name shown above. Please have a look at
- <ref id="lilo" name="Passing Ethernet Arguments...">
- for the full syntax, card specific parameters, and LILO tips.
-
- These boot time arguments can be made permanent so that you
- don't have to re-enter them every time. See the LILO
- configuration option `<tt/append/' in the LILO manual.
-
- The second way (not recommended) is to edit the file
- <tt/Space.c/ and replace the <tt/0xffe0/ entry for the
- i/o address with a zero. The <tt/0xffe0/ entry tells it
- not to probe for that device -- replacing it with a zero
- will enable autoprobing for that device.
- If you <em/really/ need more than four ethernet
- cards in one machine, then you can add an <tt/eth4/ entry
- and an <tt/eth5/ entry and so on.
-
- Note that if you are intending to use Linux as a gateway between
- two networks, you will have to re-compile a kernel with IP
- forwarding enabled. Usually using an old AT/286 with something
- like the `kbridge' software is a better solution.
-
- If you are viewing this while <em/net-surfing/, you may wish
- to look at a mini-howto Donald has on his WWW site. Check out
- <url url="http://cesdis.gsfc.nasa.gov/linux/misc/multicard.html"
- name="Multiple Ethercards">.
-
- For module users with 8390 based cards, you can have a single
- module control multiple cards as well. Please see
- <ref id="multmod8390" name="8390 Based Cards as Modules"> for
- module specific information about using multiple cards.
-
-
-
- <sect1>Poor NE2000 Clones<label id="ne2k-clones">
- <p>
-
- Here is a list of some of the NE-2000 clones that are known to
- have various problems. Most of them aren't fatal. In the case
- of the ones listed as `bad clones' -- this usually indicates that
- the cards don't have the two NE2000 identifier bytes. NEx000-clones
- have a Station Address PROM (SAPROM) in the packet buffer memory space.
- NE2000 clones have <tt/0x57,0x57/ in bytes <tt/0x0e,0x0f/
- of the SAPROM, while other supposed NE2000 clones must be
- detected by their SA prefix.
-
- This is not a comprehensive list of all the NE2000 clones that
- don't have the <tt/0x57,0x57/ in bytes <tt/0x0e,0x0f/
- of the SAPROM. There are probably hundreds of them. If you
- get a card that causes the driver to report an `invalid
- signature' then you will have to add your cards signature
- to the driver. The process for doing this is described
- below.
-
- <bf/Accton NE2000/
- -- might not get detected at boot, see below.
-
- <bf/Aritsoft LANtastic AE-2/
- -- OK, but has flawed error-reporting registers.
-
- <bf/AT-LAN-TEC NE2000/
- -- clone uses Winbond chip that traps SCSI drivers
-
- <bf/ShineNet LCS-8634/
- -- clone uses Winbond chip that traps SCSI drivers
-
- <bf/Cabletron E10**, E20**, E10**-x, E20**-x/
- -- bad clones, but the driver checks for them. See
- <ref id="e10xx" name="E10**">.
-
- <bf/D-Link Ethernet II/
- -- bad clones, but the driver checks for them. See
- <ref id="de-100" name="DE-100 / DE-200">.
-
- <bf/DFI DFINET-300, DFINET-400/
- -- bad clones, but the driver checks for them. See
- <ref id="dfi-300" name="DFI-300 / DFI-400">
-
- <bf/EtherNext UTP8, EtherNext UTP16/
- -- bad clones, but the driver checks for them.
-
- <sect1>Problems with NE1000 / NE2000 cards (and clones)<label id="ne2k-probs">
- <p>
-
- <bf/Problem:/
- NE*000 card hangs machine, sometimes with a `DMA conflict'
- message, sometimes completely silently.
-
- <bf/Reason:/
- There were some bugs in the driver and the upper networking
- layers that caused this. They have been fixed in kernels
- v1.2.9 and above. Upgrade your kernel.
-
- <bf/Problem:/
- NE*000 card hangs machine during NE probe, or can not
- read station address properly.
-
- <bf/Reason:/
- Kernels previous to v1.3.7 did not fully reset the card
- after finding it at boot. Some cheap cards are not left in
- a reasonable state after power-up and need to be fully
- reset before any attempt is made to use them. Also, a
- previous probe may have upset the NE card prior to the
- NE probe taking place. In that case, look in to using
- the ``reserve='' boot keyword to protect the card from other
- probes.
-
- <bf/Problem:/
- NE*000 driver reports `not found (no reset ack)' during boot
- probe.
-
- <bf/Reason:/
- This is related to the above change. After the initial
- verification that an 8390 is at the probed i/o address, the
- reset is performed. When the card has completed the reset,
- it is supposed to acknowedge that the reset has completed.
- Your card doesn't, and so the driver assumes that no NE card
- is present.
-
- <bf/Solution:/
-
- Change the two lines as shown below in <tt>drivers/net/ne.c</tt>
- <code>
- - printk(" not found (no reset ack).\n");
- - return ENODEV;
- + printk(" (warning: no reset ack)");
- + break;
- </code>
-
- This will allow the card detection to continue, even if your
- card doesn't ACK the reset.
-
- <bf/Problem:/
- NE*000 card hangs machine at first network access.
-
- <bf/Reason:/
- This problem has been reported for kernels as old as 1.1.57
- to the present. It appears confined to the software configurable
- clone cards. It appears that they expect to be initialized in
- some special way.
-
- <bf/Solution:/
- Several people have reported that running the supplied DOS
- software config program and/or the supplied DOS driver prior
- to warm booting (i.e. loadlin or the `three-finger-salute')
- into linux allowed the card to work. This would indicate
- that these cards need to be initialized in a particular
- fashion, slightly different than what the present Linux
- driver does.
-
- <bf/Problem:/
- NE*000 ethercard at <tt/0x360/ doesn't get detected anymore.
-
- <bf/Reason:/
- Recent kernels ( > 1.1.7X) have more sanity checks with respect
- to overlapping i/o regions. Your NE2000 card is <tt/0x20/ wide in
- i/o space, which makes it hit the parallel port at <tt/0x378/.
- Other devices that could be there are the second floppy
- controller (if equipped) at <tt/0x370/ and the secondary
- IDE controller at <tt/0x376--0x377/.
- If the port(s) are already registered by another driver, the
- kernel will not let the probe happen.
-
- <bf/Solution:/
- Either move your card to an address like <tt/0x280, 0x340, 0x320/
- or compile without parallel printer support.
-
- <bf/Problem:/
- Network `goes away' every time I print something (NE2000)
-
- <bf/Reason:/
- Same problem as above, but you have an older kernel that
- doesn't check for overlapping i/o regions. Use the
- same fix as above, and get a new kernel while you are at it.
-
- <bf/Problem:/
- NE*000 ethercard probe at 0xNNN: 00 00 C5 ... not found.
- (invalid signature yy zz)
-
- <bf/Reason:/
- First off, do you have a NE1000 or NE2000 card at the addr. 0xNNN?
- And if so, does the hardware address reported look like a valid
- one? If so, then you have a poor NE*000 clone. All NE*000 clones
- are supposed to have the value <tt/0x57/ in bytes 14 and 15 of the
- SA PROM on the card. Yours doesn't -- it has `yy zz' instead.
-
- <bf/Solution:/
- The driver (/usr/src/linux/drivers/net/ne.c) has a "Hall of Shame"
- list at about line 42. This list is used to detect poor clones.
- For example, the DFI cards use `DFI' in the first 3 bytes of the
- prom, instead of using 0x57 in bytes 14 and 15, like they are
- supposed to.
-
- You can determine what the first 3 bytes of your card PROM are
- by adding a line like:
-
- <verb>
- printk("PROM prefix: %2.2x %2.2x %2.2x\n",SA_prom[0],SA_prom[1],SA_prom[2]);
- </verb>
-
- into the driver, right after the error message you got above, and
- just before the "return ENXIO" at line 227.
-
- Reboot with this change in place, and after the detection fails, you
- will get the three bytes from the PROM like the DFI example above.
- Then you can add your card to the bad_clone_list&lsqb&rsqb at about
- line 43. Say the above line printed out:
-
- <tscreen>
- PROM prefix: 0x3F 0x2D 0x1C
- </tscreen>
-
- after you rebooted. And say that the 8 bit version of your card was
- called the "FOO-1k" and the 16 bit version the "FOO-2k". Then you would
- add the following line to the bad_clone_list&lsqb&rsqb:
-
- <tscreen>
- {"FOO-1k", "FOO-2k", {0x3F, 0x2D, 0x1C,}},
- </tscreen>
-
- Note that the 2 name strings you add can be anything -- they are just
- printed at boot, and not matched against anything on the card.
- You can also take out the "printk()" that you added above, if you want.
- It shouldn't hit that line anymore anyway. Then recompile once more,
- and your card should be detected.
-
- <bf/Problem:/
- Errors like <tt/DMA address mismatch/
-
- Is the chip a real NatSemi 8390? (DP8390, DP83901, DP83902 or DP83905)?
- If not, some clone chips don't correctly implement the transfer
- verification register. MS-DOS drivers never do error checking,
- so it doesn't matter to them. (Note: The DMA address check is not done
- by default as of v1.2.4 for performance reasons. Enable it with
- the `NE_SANITY' define in <tt/ne.c/ if you want the check done.)
-
- Are most of the messages off by a factor of 2?
- If so: Are you using the NE2000 in a 16 bit slot?
- Is it jumpered to use only 8 bit transfers?
-
- The Linux driver expects a NE2000 to be in a 16 bit slot. A NE1000 can
- be in either size slot. This problem can also occur with some clones,
- notably D-Link 16 bit cards, that don't have the correct ID bytes
- in the station address PROM.
-
- Are you running the bus faster than 8Mhz?
- If you can change the speed (faster or slower), see if that
- makes a difference. Most NE2000 clones will run at 16MHz, but
- some may not. Changing speed can also mask a noisy bus.
-
- What other devices are on the bus?
- If moving the devices around changes the reliability, then you
- have a bus noise problem -- just what that error message was
- designed to detect. Congratulations, you've probably found the
- source of other problems as well.
-
- <bf/Problem:/
- The machine hangs during boot right after the `8390...' or
- `WD....' message. Removing the NE2000 fixes the problem.
-
- <bf/Solution:/
- Change your NE2000 base address to <tt/0x340/. Alternatively, you
- can use the device registrar implemented in 0.99pl13 and later
- kernels.
-
- <bf/Reason:/
- Your NE2000 clone isn't a good enough clone. An active
- NE2000 is a bottomless pit that will trap any driver
- autoprobing in its space. The other ethercard drivers take
- great pain to reset the NE2000 so that it's safe, but some
- clones cannot be reset. Clone chips to watch out for:
- Winbond 83C901. Changing the NE2000 to a less-popular
- address will move it out of the way of other autoprobes,
- allowing your machine to boot.
-
-
- <bf/Problem:/
- The machine hangs during the SCSI probe at boot.
-
- <bf/Reason:/
- It's the same problem as above, change the
- ethercard's address, or use the device registrar.
-
- <bf/Problem:/
- The machine hangs during the soundcard probe at boot.
-
- <bf/Reason:/
- No, that's really during the silent SCSI probe, and it's
- the same problem as above.
-
- <bf/Problem:/
- NE2000 not detected at boot - no boot messages at all
-
- Donald writes:
- `A few people have reported a problem with detecting the Accton NE2000.
- This problem occurs only at boot-time, and the card is later detected
- at run-time by the identical code my (alpha-test) ne2k diagnostic
- program. Accton has been very responsive, but I still haven't tracked
- down what is going on. I've been unable to reproduce this problem
- with the Accton cards we purchased. If you are having this problem,
- please send me an immediate bug report. For that matter, if you have
- an Accton card send me a success report, including the type of the
- motherboard. I'm especially interested in finding out if this problem
- moves with the particular ethercard, or stays with the motherboard.'
-
- Here are some things to try, as they have fixed it for some people:
-
- <itemize>
-
- <item> Change the bus speed, or just move the card to a different slot.
-
- <item> Change the `I/O recovery time' parameter in the BIOS
- chipset configuration.
-
- </itemize>
-
- <sect1>Problems with WD80*3 cards<label id="8013-probs">
- <p>
-
- <bf/Problem:/
- A WD80*3 is falsely detected. Removing the sound or
- MIDI card eliminates the `detected' message.
-
- <bf/Reason:/
- Some MIDI ports happen to produce the same checksum as a
- WD ethercard.
-
- <bf/Solution:/
- Update your ethercard driver: new versions include an
- additional sanity check. If it is the midi chip at 0x388
- that is getting detected as a WD living at 0x380, then
- you could also use:
- <verb>
- LILO: linux reserve=0x380,8
- </verb>
-
- <bf/Problem:/
- You get messages such as the following with your 80*3:
-
- <verb>
- eth0: bogus packet size, status = NNNN
- kmalloc called with impossibly large argument (65400)
- eth0: Couldn't allocate sk_buff of size 65400
- eth0: receiver overrun
- </verb>
-
- <bf/Reason:/
- There is a shared memory problem.
-
- <bf/Solution:/
- If the problem is sporadic, you have hardware problems.
- Typical problems that are easy to fix are board conflicts,
- having cache or `shadow ROM' enabled for that region, or
- running your bus faster than 8Mhz. There are also a
- surprising number of memory failures on ethernet cards,
- so run a diagnostic program if you have one for your
- ethercard.
-
- If the problem is continual, and you have have to reboot
- to fix the problem, record the boot-time probe message
- and mail it to becker@cesdis.gsfc.nasa.gov - Take
- particular note of the shared memory location.
-
- <bf/Problem:/
- WD80*3 will not get detected at boot.
-
- <bf/Reason:/
- Earlier versions of the Mitsumi CD-ROM (mcd) driver probe
- at 0x300 will succeed if just about <em/anything/ is that I/O location.
- This is bad news and needs to be a bit more robust.
- Once another driver registers that it `owns' an I/O
- location, other drivers (incl. the wd80x3) are `locked
- out' and can not probe that addr for a card.
-
- <bf/Solution:/
- Recompile a new kernel without any excess drivers that
- you aren't using, including the above mcd driver.
- Or try moving your ethercard to a new I/O addr. Valid
- I/O addr. for all the cards are listed in
- <ref id="probe" name="Probed Addresses">
- You can also point the mcd driver off in another direction
- by a boot-time parameter (via LILO) such as:
- <tscreen>
- mcd=0x200,12
- </tscreen>
-
- <bf/Problem:/
- Old wd8003 and/or jumper-settable wd8013 always get the IRQ wrong.
-
- <bf/Reason:/
- The old wd8003 cards and jumper-settable wd8013 clones don't
- have the EEPROM that the driver can read the IRQ setting from.
- If the driver can't read the IRQ, then it tries to auto-IRQ
- to find out what it is. And if auto-IRQ returns zero, then
- the driver just assigns IRQ 5 for an 8 bit card or IRQ 10 for
- a 16 bit card.
-
- <bf/Solution:/
- Avoid the auto-IRQ code, and tell the kernel what the IRQ
- that you have jumpered the card to is via a boot time argument.
- For example, if you are using IRQ 9, using the following
- should work.
-
- <tscreen>
- LILO: linux ether=9,0,eth0
- </tscreen>
-
- <sect1>Problems with 3Com cards<label id="3com-probs">
- <p>
- <bf/Problem:/
- The 3c503 picks IRQ N, but this is needed for some
- other device which needs IRQ N. (eg. CD ROM driver, modem, etc.)
- Can this be fixed without compiling this into the kernel?
-
- <bf/Solution:/
- The 3c503 driver probes for a free IRQ line in the order
- {5, 9/2, 3, 4}, and it should pick a line which isn't being
- used. Very old drivers used to pick the IRQ line
- at boot-time, and the current driver (0.99pl12 and newer) chooses when
- the card is open()/ifconfig'ed.
-
- Alternately, you can fix the IRQ at boot by passing
- parameters via LILO. The following selects IRQ9, base
- location 0x300, <ignored value>, and if_port #1 (the
- external transceiver).
-
- <tscreen>
- LILO: linux ether=9,0x300,0,1,eth0
- </tscreen>
-
- The following selects IRQ3, probes for the base location,
- <ignored value>, and the default if_port #0 (the internal
- transceiver)
-
- <tscreen>
- LILO: linux ether=3,0,0,0,eth0
- </tscreen>
-
- <bf/Problem:/
- 3c503: configured interrupt X invalid, will use autoIRQ.
-
- <bf/Reason:/
- The 3c503 card can only use one of IRQ{5, 2/9, 3, 4}
- (These are the only lines that are connected to the card.)
- If you pass in an IRQ value that is not in the above
- set, you will get the above message.
- Usually, specifying an interrupt value for the 3c503 is
- not necessary. The 3c503 will autoIRQ when it gets
- ifconfig'ed, and pick one of IRQ{5, 2/9, 3, 4}.
-
- <bf/Solution:/
- Use one of the valid IRQs listed above, or enable
- autoIRQ by not specifying the IRQ line at all.
-
- <bf/Problem:/
- The supplied 3c503 drivers don't use the AUI (thicknet) port.
- How does one choose it over the default thinnet port?
-
- <bf/Solution:/
- The 3c503 AUI port can be selected at boot-time with 0.99pl12
- and later. The selection is overloaded onto the low bit of
- the currently-unused dev->rmem_start variable, so a boot-time
- parameter of:
-
- <tscreen>
- LILO: linux ether=0,0,0,1,eth0
- </tscreen>
-
- should work. A boot line to force IRQ 5, port base 0x300,
- and use an external transceiver is:
-
- <tscreen>
- LILO: linux ether=5,0x300,0,1,eth0
- </tscreen>
-
- With kernels 1.3.42 and newer, you can specify the
- AUI port when loading as a module as well. Just append
- <tt/xcvr=1/ to the <tt/insmod/ command line along with
- your i/o and irq values.
-
- Also note that kernel revisions 1.00 to 1.03 had an
- interesting `feature'. They would switch to the AUI port
- when the internal transceiver failed. This is a problem,
- as it will <em/never/ switch back if for example you
- momentarily disconnect the cable. Kernel versions 1.04
- and newer only switch if the very first Tx attempt fails.
-
- <sect1>Problems with Hewlett Packard Cards<label id="hp-probs">
- <p>
-
- <bf/Problem:/
- HP Vectra using built in AMD LANCE chip gets IRQ and DMA wrong.
-
- <bf/Solution:/
- The HP Vectra uses a different implementation to the
- standard HP-J2405A. The `lance.c' driver used to
- <em/always/ use the value in the setup register of an HP Lance
- implementation. In the Vectra case it's reading an invalid
- 0xff value. Kernel versions newer than about 1.1.50
- now handle the Vectra in an appropriate fashion.
-
- <bf/Problem:/
- HP Card is not detected at boot, even though kernel was
- compiled with `HP PCLAN support'.
-
- <bf/Solution:/
- You probably have a HP PCLAN+ -- note the `plus'. Support
- for the PCLAN+ was added to mid/late versions of 1.1.
- Recompile a (possibly newer) kernel with support for the
- HP PCLAN+ and you should be in business.
-
-
- <sect1>FAQs Not Specific to Any Card.
- <p>
-
- <sect2>Ethercard is Not Detected at Boot.
- <p>
-
- The usual reason for this is that people are using a kernel
- that does not have support for their particular card built
- in. If you are using a pre-compiled kernel that is part of
- a distribution set, then check the documentation to see which
- kernel you installed, and if it was built with support
- for your particular card. If it wasn't, then your
- options are to try and get one that has support
- for your card, or build your own.
-
- It is usually wise to build your own kernel with only
- the drivers you need, as this cuts down on the kernel
- size (saving your precious RAM for applications!) and
- reduces the number of device probes that can upset
- sensitive hardware. Building a kernel is not as complicated
- as it sounds. You just have to answer yes or no to
- a bunch of questions about what drivers you want, and
- it does the rest.
-
- The next main cause is having another device using part
- of the i/o space that your card needs. Most cards are
- 16 or 32 bytes wide in i/o space. If your card is set
- at 0x300 and 32 bytes wide, then the driver will ask
- for 0x300-0x31f. If any other device driver has registered
- even one port anywhere in that range, the probe will not
- take place at that address and the driver will silently
- continue to the next of the probed addresses. So, after
- booting, do a <tt>cat /proc/ioports</tt> and verify that the
- full iospace that the card will require is vacant.
-
- Another problem is having your card jumpered to an i/o
- address that isn't probed by default. There is a list
- <ref id="probe" name="probed addresses"> for each card
- in this document. Even if the i/o setting of your card is
- not in the list of porbed addresses, you can supply
- it at boot with the <tt/ether=/ command as described in
- <ref id="lilo" name="Passing Ethernet Arguments...">
-
-
- <sect2><tt/ifconfig/ reports the wrong i/o address for the card.
- <p>
-
- No it doesn't. You are just interpreting it incorrectly.
- This is <em/not/ a bug, and the numbers reported are correct. It just
- happens that some 8390 based cards (wd80x3, smc-ultra, etc) have the
- actual 8390 chip living at an offset from the first assigned i/o port.
- Try <tt>cd /usr/src/linux/drivers/net;grep NIC_OFFSET *.c|more</tt>
- to see what is going on. This is the value stored in
- <tt/dev->base_addr/, and is what <tt/ifconfig/ reports. If you
- want to see the full range of ports that your card uses, then try
- <tt>cat /proc/ioports</tt> which will give the numbers you expect.
-
- <sect2>Shared Memory ISA cards in PCI Machine
- <p>
-
- This will usually show up as reads of lots of <tt/0xffff/ values.
- No shared memory cards of any type will work in a PCI machine
- unless you have the PCI ROM BIOS/CMOS SETUP configuration set
- properly. You have to set it to allow shared memory access
- from the ISA bus for the memory region that your card is trying
- to use. If you can't figure out which settings are applicable
- then ask your supplier or local computer guru.
-
- <sect2>Asynchronous Transfer Mode (ATM) Support
- <p>
-
- Werner Almesberger has been playing around with ATM support
- for linux.
- He has been working with the Efficient Networks ENI155p
- board (<url url="http://www.efficient.com/"
- name="Efficient Networks">)
- and the Zeitnet ZN1221 board
- (<url url="http://www.zeitnet.com/" name="Zeitnet">).
-
- Werner says that the driver for the ENI155p is rather
- stable, while the driver for the ZN1221 is presently
- unfinished.
-
- Check the latest/updated status at the following URL:
-
- <url url="http://lrcwww.epfl.ch/linux-atm/"
- name="Linux ATM Support">
-
- <sect2>FDDI Support
- <p>
- Is there FDDI support for Linux?
-
- Donald writes: `No, there is no Linux driver for any FDDI boards.
- I come from a place with supercomputers, so an external
- observer might think
- FDDI would be high on my list. But FDDI never delivered end-to-end
- throughput that would justify its cost, and it seems to be a nearly
- abandoned technology now that 100base{X,Anynet} seems imminent.
- (And yes, I know you can now get FDDI boards for <$1K. That
- seems to be a last-ditch effort to get some return on the
- development investment. Where is the next generation of FDDI
- going to come from?)'
-
- <sect2>Ethernet Cards for Linux on Alpha/AXP PCI Boards
- <p>
-
- At present only the depca, de4x5 and all the 8390 drivers
- (wd, smc-ultra, ne, 3c503, e2100, ac3200, hp, hp-plus) have
- been made `architecture independent' so as to work on the
- DEC Alpha CPU based systems.
-
- Note that the changes that are required aren't that complicated.
- You only need to do the following:
-
- -multiply all <tt/jiffies/ related values by HZ/100 to account
- for the different HZ value that the Alpha uses.
- (i.e <tt/timeout=2;/ becomes <tt>timeout=2*HZ/100;</tt>)
-
- -replace any i/o memory (640k to 1MB) pointer dereferences with
- the appropriate readb() writeb() readl() writel() calls, as
- shown in this example.
-
- <code>
- - int *mem_base = (int *)dev->mem_start;
- - mem_base[0] = 0xba5eba5e;
- + unsigned long mem_base = dev->mem_start;
- + writel(0xba5eba5e, mem_base);
- </code>
-
- -replace all memcpy() calls that have i/o memory as source or
- target destinations with the appropriate one of
- <tt/memcpy_fromio()/ or <tt/memcpy_toio()/.
-
- <sect2>Linking 10BaseT without a Hub
- <p>
-
- Can I link 10BaseT (RJ45) based systems together without a hub?
-
- You can link 2 machines easily, but no more than that, without
- extra devices/gizmos. See <ref id="utp" name="Twisted Pair">
- -- it explains
- how to do it. And no, you can't hack together a hub just by
- crossing a few wires and stuff. It's pretty much impossible
- to do the collision signal right without duplicating a hub.
-
- <sect2>SIOCSIFxxx: No such device
- <p>
-
- I get a bunch of `SIOCSIFxxx: No such device' messages at
- boot, followed by a `SIOCADDRT: Network is unreachable'
- What is wrong?
-
- Your ethernet device was not detected at boot, and when
- <tt/ifconfig/ and <tt/route/ are run, they have no device
- to work with. Use <tt>dmesg | more</tt> to review the
- boot messages and see if there are any messages about
- detecting an ethernet card.
-
- <sect2>SIOCSFFLAGS: Try again
- <p>
-
- I get `SIOCSFFLAGS: Try again' when I run `ifconfig' -- Huh?
-
- Some other device has taken the IRQ that your ethercard
- is trying to use, and so the ethercard can't use the IRQ.
- You don't necessairly need to reboot to resolve this, as
- some devices only grab the IRQs when they need them and
- then release them when they are done. Examples are some
- sound cards, serial ports, floppy disk driver, etc. You
- can type <tt>cat /proc/interrupts</tt> to see which interrupts
- are presently <em/in use/. Most of the
- Linux ethercard drivers only grab the IRQ when they are
- opened for use via `ifconfig'. If you can get the other
- device to `let go' of the required IRQ line, then you
- should be able to `Try again' with ifconfig.
-
- <sect2>Link UNSPEC and HW-addr of 00:00:00:00:00:00
- <p>
-
- When I run ifconfig with no arguments, it reports that
- LINK is UNSPEC (instead of 10Mbs Ethernet) and it
- also says that my hardware address is all zeros.
-
- This is because people are running a newer version of
- the `ifconfig' program than their kernel version. This
- new version of ifconfig is not able to report these properties
- when used in conjunction with an older kernel. You can either
- upgrade your kernel, `downgrade' ifconfig, or simply ignore
- it. The kernel knows your hardware address, so it really
- doesn't matter if ifconfig can't read it.
-
- <sect2>Huge Number of RX and TX Errors
- <p>
-
- When I run ifconfig with no arguments, it reports that I
- have a huge error count in both rec'd and transmitted
- packets. It all seems to work ok -- What is wrong?
-
- Look again. It says <tt/RX packets/ <em/big number/ <bf/PAUSE/
- <tt/errors 0/ <bf/PAUSE/ <tt/dropped 0/ <bf/PAUSE/ <tt/overrun 0/.
- And the same for the <tt/TX/ column.
- Hence the big numbers you are seeing are the total number of
- packets that your machine has rec'd and transmitted.
- If you still find it confusing, try typing
- <tt>cat /proc/net/dev</tt> instead.
-
- <sect2>Entries in <tt>/dev/</tt> for Ethercards
- <p>
-
- I have /dev/eth0 as a link to /dev/xxx. Is this right?
-
- Contrary to what you have heard, the files in /dev/* are not used.
- You can delete any <tt>/dev/wd0, /dev/ne0</tt> and similar entries.
-
- <sect2>Linux and ``trailers''
- <p>
-
- Should I disable trailers when I `ifconfig' my ethercard?
-
- You can't disable trailers, and you shouldn't want
- to. `Trailers' are a hack to avoid data copying in the
- networking layers. The idea was to use a trivial
- fixed-size header of size `H', put the variable-size header
- info at the end of the packet, and allocate all
- packets `H' bytes before the start of a page. While it was a
- good idea, it turned out to not work well in practice.
- If someone suggests the use of `-trailers', note that it
- is the equivalent of sacrificial goats blood. It won't do
- anything to solve the problem, but if problem fixes itself then
- someone can claim deep magical knowledge.
-
-
- <sect2>Access to the raw Ethernet Device
- <p>
-
- How do I get access to the raw ethernet device in linux,
- without going through TCP/IP and friends?
-
- <code>
- int s=socket(AF_INET,SOCK_PACKET,htons(ETH_P_ALL));
- </code>
-
- This gives you a socket receiving every protocol type.
- Do <tt/recvfrom()/ calls to it and it will fill the sockaddr
- with device type in sa_family and the device name in the
- sa_data array. I don't know who originally invented
- SOCK_PACKET for Linux (its been in for ages) but its superb stuff.
- You can use it to send stuff raw too via <tt/sendto()/ calls.
- You have to have root access to do either of course.
-
- <sect>Performance Tips<label id="perf">
- <p>
-
- Here are some tips that you can use if you are suffering
- from low ethernet throughput, or to gain a bit more
- speed on those ftp transfers.
-
- The <tt/ttcp.c/ program is a good test for measuring
- raw throughput speed. Another common trick is to do
- a <tt>ftp> get large_file /dev/null</tt> where
- <tt/large_file/ is > 1MB and residing in the buffer
- cache on the Tx'ing machine. (Do the `get' at least
- twice, as the first time will be priming the buffer
- cache on the Tx'ing machine.) You want the file in
- the buffer cache because you are not interested in
- combining the file access speed from the disk into
- your measurement. Which is also why you send the
- incoming data to <tt>/dev/null</tt> instead of onto
- the disk.
-
- <sect1>General Concepts
- <p>
-
- Even an 8 bit card is able to receive back-to-back packets
- without any problems. The difficulty arises when the computer
- doesn't get the Rx'd packets off the card quick enough to
- make room for more incoming packets. If the computer does not
- quickly clear the card's memory of the packets already received,
- the card will have no place to put the new packet.
-
- In this case
- the card either drops the new packet, or writes over top of
- a previously received packet. Either one seriously interrupts
- the smooth flow of traffic by causing/requesting re-transmissions
- and can seriously degrade performance by up to a factor of 5!
-
- Cards with more onboard memory are able to ``buffer'' more
- packets, and thus can handle larger bursts of
- back-to-back packets without dropping packets.
- This in turn means that the card does not require as low
- a latency from the the host computer with respect to pulling
- the packets out of the buffer to avoid dropping packets.
-
- Most 8 bit cards have an 8kB buffer, and most 16 bit cards have
- a 16kB buffer. Most Linux drivers will reserve 3kB of that
- buffer (for two Tx ping-pong buffers), leaving only 5kB of
- receive space for an 8 bit card. This is room enough for
- only three full sized (1500 bytes) ethernet packets.
-
- <sect1>ISA Bus Speed
- <p>
- As mentioned above, if the packets are removed from the card
- fast enough, then a drop/overrun condition won't occur even
- when the amount of Rx packet buffer memory is small. The
- factor that sets the rate at which packets are removed from
- the card to the computer's memory is the speed of the data path
- that joins the two -- that being the ISA bus speed. (If the
- CPU is a dog-slow 386sx-16, then this will also play a role.)
-
- The recommended ISA bus clock is about 8MHz, but many
- motherboards and peripheral devices can run at higher
- frequencies. The clock frequency for the ISA bus can usually
- be set in the CMOS setup, by selecting a divisor of the
- mainboard/CPU clock frequency.
-
- For example, here are some receive speeds as measured by
- the TTCP program on a 40MHz 486, with an old 8 bit WD8003EP
- card, for different ISA bus speeds.
-
- <code>
- ISA Bus Speed (MHz) Rx TTCP (kB/s)
- ------------------- --------------
- 6.7 740
- 13.4 970
- 20.0 1030
- 26.7 1075
- </code>
-
- You would be hard pressed to do better than 1075kB/s with
- <em/any/ 10Mb/s ethernet card, using TCP/IP. However, don't expect
- every system to work at fast ISA bus speeds. Most systems will
- not function properly at speeds above 13MHz. (Also, most
- PCI systems have the ISA bus speed fixed at 8MHz, so that
- the end user does not have the option of increasing it.)
-
- In addition to faster transfer speeds, one will usually also
- benefit from a reduction in CPU usage due to the shorter
- duration memory and i/o cycles. (Note that hard disks and
- video cards located on the ISA bus will also usually experience
- a performance increase from an increased ISA bus speed.)
-
- <sect1>Setting the TCP Rx Window
- <p>
-
- Once again, cards with small amounts of onboard RAM and
- relatively slow data paths between the card and the computer's
- memory run into trouble. The default TCP Rx
- window setting is 32kB, which means that a fast computer on
- the same subnet as you can dump 32k of data on you without
- stopping to see if you received any of it okay.
-
- Recent versions of the <tt/route/ command have the ability
- to set the size of this window on the fly. Usually it is only
- for the local net that this window must be reduced, as computers
- that are behind a couple of routers or gateways are `buffered'
- enough to not pose a problem. An example usage would be:
-
- <code>
- route add <whatever> ... window <win_size>
- </code>
-
- where <tt/win_size/ is the size of the window you wish to
- use (in bytes). An 8 bit 3c503 card on an ISA bus operating
- at a speed of 10MHz or less would work well with a window
- size of about 4kB. Too large a window will cause overruns
- and dropped packets, and a drastic reduction in ethernet
- throughput. You can check the operating status by doing
- a <tt>cat /proc/net/dev</tt> which will display any
- dropped or overrun conditions that occurred.
-
-
- <sect1>Increasing NFS performance
- <p>
- Some people have found that using 8 bit
- cards in NFS clients causes poorer than expected performance,
- when using 8kB (native Sun) NFS packet size.
-
- The possible reason for this could be due to the difference
- in on board buffer size between the 8 bit and the 16 bit cards.
- The maximum ethernet packet size is about 1500 bytes. Now that
- 8kB NFS packet will arrive as about 6 back to back maximum size
- ethernet packets. Both the 8 and 16 bit cards have no problem
- Rx'ing back to back packets. The problem arises when the machine
- doesn't remove the packets from the cards buffer in time, and the
- buffer overflows. The fact that 8 bit cards take an extra ISA
- bus cycle per transfer doesn't help either. What you <em/can/ do
- if you have an 8 bit card is either set the NFS transfer
- size to 4kB, or try increasing the ISA bus speed in order to
- get the card's buffer cleared out faster.
-
- <sect>Vendor/Manufacturer/Model Specific Information<label id="card-intro">
- <p>
-
- <sect1>3Com<label id="3com">
- <p>
-
- If you are not sure what your card is, but you think it is a
- 3Com card, you can probably figure it out from the assembly
- number. 3Com has a document `Identifying 3Com Adapters By
- Assembly Number' (ref 24500002) that would most likely clear
- things up. See
- <ref id="3com-tech" name="Technical Information from 3Com">
- for info on how to get documents from 3Com.
-
- Also note that 3Com has a FTP site with various goodies:
- <tt/ftp.3Com.com/ that you may want to check out.
-
- For those of you browsing this document by a WWW browser, you
- can try 3Com's WWW site
-
- <sect2>3c501<label id="3c501">
- <p>
-
- Status -- <em/Semi-Supported/
-
- Too brain-damaged to use. Available surplus from many
- places. Avoid it like the plague. Again, do not
- purchase this card, even as a joke. It's performance
- is horrible, and it breaks in many ways.
-
- Cameron L. Spitzer of 3Com said:
- ``I'm speaking only for myself here, of course, but I
- believe 3Com advises against installing a 3C501 in a
- new system, mostly for the same reasons Donald has
- discussed. You probably won't be happy with the
- 3C501 in your Linux box. The data sheet is marked
- `(obsolete)' on 3Com's Developers' Order Form, and
- the board is not part of 3Com's program for sending
- free Technical Reference Manuals to people who need
- them. The decade-old things are nearly
- indestructible, but that's about all they've got
- going for them any more.''
-
- For those not yet convinced, the 3c501 can only do one
- thing at a time -- while you are removing one packet
- from the single-packet buffer it cannot receive
- another packet, nor can it receive a packet while
- loading a transmit packet. This was fine for a
- network between two 8088-based computers where
- processing each packet and replying took 10's of
- msecs, but modern networks send back-to-back
- packets for almost every transaction.
-
- AutoIRQ works, DMA isn't used, the autoprobe only
- looks at <tt/0x280/ and <tt/0x300/, and the debug level is set
- with the third boot-time argument.
-
- Once again, the use of a 3c501 is <em/strongly discouraged/!
- Even more so with a IP multicast kernel, as you will
- grind to a halt while listening to <em/all/ multicast
- packets. See the comments at the top of the source code
- for more details.
-
- <sect2>3c503, 3c503/16<label id="3c503">
- <p>
-
- Status -- <em/Supported/
-
- If you have a 3c503/16 you may be interested to know
- that as of 1.3.37 the driver has the facility to use
- the full 16kB RAM on your card. Previous versions treated
- the 16bit cards as 8bit cards, and only used half of
- the available RAM. This update also detects the newer
- 3Com prefix found on newly manufactured cards mentioned
- below.
-
- Recently made 3c503/16 cards have a new
- base hardware address because 3Com ran out of
- numbers (they made too many cards!) The cards used
- to start with 02 60 8C and the newer ones use
- 00 20 AF. Up to 1.3.37, the driver will only check
- for the old address, and skip over the newer cards.
- You can upgrade to a kernel newer than 1.3.37, or
- change the numbers in 3c503.c for older kernels.
-
- These shared-memory ethercards also have a
- programmed I/O mode that doesn't use the 8390
- facilities (their engineers found too many bugs!)
- It should be about the same speed as the same bus
- width WD80x3, but it is actually a bit slower.
- The 3c503 does not have ``EEPROM setup'',
- so a diagnostic/setup program
- isn't needed before running the card with Linux. The
- shared memory address of the 3c503 is set using jumpers
- that are shared with the boot PROM address. This is
- confusing to people familiar with other ISA cards,
- where you always leave the jumper set to ``disable''
- unless you have a boot PROM.
-
- The Linux 3c503 driver can also work with the 3c503
- in programmed-I/O mode, but this is slower and less
- reliable than shared memory mode. Also, programmed-I/O
- mode is not as well tested when updating the drivers.
- You still shouldn't use the programmed-I/O mode though,
- unless you need it for MS-DOS compatibility.
-
- The 3c503's IRQ line is set in software, with no hints
- from an EEPROM. Unlike the MS-DOS drivers, the
- Linux driver has capability to autoIRQ: it uses the
- first available IRQ line in {5,2/9,3,4}, selected each
- time the card is ifconfig'ed. (Older driver versions
- selected the IRQ at boot time.) The ioctl() call
- in `ifconfig' will return EAGAIN if no IRQ line is
- available at that time.
-
- Some common problems that people have with the 503
- are discussed in <ref id="3com-probs" name="Problems with...">.
-
- If you intend on using this driver as a loadable module
- you should probably see
- <ref id="modules" name="Using the Ethernet Drivers as Modules">
- and also
- <ref id="mod8390" name="8390 Based Cards as Modules"> for
- module specific information.
-
-
-
- <sect2>3c505<label id="3c505">
- <p>
-
- Status -- <em/Semi-Supported/
-
- This is a driver that was written by Craig Southeren
- <tt/geoffw@extro.ucc.su.oz.au/. These cards also
- use the i82586 chip.
- There are not that many of these cards about.
- It is included in the standard kernel, but it is classed as
- an alpha driver. See <ref id="alfa" name="Alpha Drivers">
- for important information on using alpha-test ethernet drivers
- with Linux.
-
- There is also the file
- <tt>/usr/src/linux/drivers/net/README.3c505</tt>
- that you should read if you are going to use one of these cards.
- It contains various options that you can enable/disable.
- Technical information is available in
- <ref id="i82586" name="Programming the Intel chips">.
-
- <sect2>3c507<label id="3c507">
- <p>
- Status -- <em/Semi-Supported/
-
- This card uses one of the Intel chips, and the
- development of the driver is closely related to
- the development of the Intel Ether Express driver.
- The driver is included in the standard kernel
- release, but as an alpha driver.
-
- See <ref id="alfa" name="Alpha Drivers"> for important
- information on using alpha-test ethernet drivers
- with Linux. Technical information is available in
- <ref id="i82586" name="Programming the Intel chips">.
-
- <sect2>3c509 / 3c509B<label id="3c509">
- <p>
-
- Status -- <em/Supported/
-
- Note: Donald has an updated driver for these cards
- that is not presently in the default kernel. It
- fixes harmless <tt/irq N for unknown device/
- messages at boot, has better handling for
- the 3c509B Plug and Pray cards, and recovers from
- certain adapter failure status values.
-
- It's fairly inexpensive and has
- excellent performance for a non-bus-master design.
- The drawbacks are that the original 3c509
- requires very low interrupt latency. The 3c509B
- shouldn't suffer from the same problem, due to
- having a larger buffer. (See below.)
-
- Note that the ISA card detection uses a different method
- than most cards. Basically, you ask the cards to respond
- by sending data to an ID_PORT (port <tt/0x100/). Note that
- if you have some other strange ISA card using an I/O range
- that includes the ID_PORT of the 3c509, it will probably
- not get detected. Note that you can change the ID_PORT to
- <tt/0x110/ or <tt/0x120/ or... in <tt/3c509.c/ if you have
- a conflicting ISA card, and the 3c509 will still be happy.
- Also note that this detection method means that
- a particular card will <em/always/ get detected first
- in a multiple ISA 3c509 configuration.
- The card with the lowest hardware ethernet address
- will <em/always/ end up being <tt/eth0/. This shouldn't matter
- to anyone, except for those people who want to assign
- a 6 byte hardware address to a particular interface.
- If you have multiple 3c509 cards, it is best to append
- <tt/ether=0,0,ethN/ commands without the i/o port specified
- (i.e. use i/o=zero) and allow the probe to sort out which
- card is first, otherwise it may not detect all your cards.
-
- The original 3c509 has a smaller packet buffer
- (4kB total, 2kB Rx, 2kB Tx), causing the driver to
- occasionally drop a packet if interrupts are masked for
- too long. To minimize this problem, you can try unmasking
- interrupts during IDE disk transfers (see <tt/hdparm(8)/) and/or
- increasing your ISA bus speed so IDE transfers finish sooner.
-
- (Note that the driver could
- be completely rewritten to use predictive interrupts,
- but performance re-writes of working drivers are low
- priority unless there is some particular incentive or
- need.)
-
- Cameron Spitzer writes:
- ``Beware that if you put a '509 in EISA addressing mode
- by mistake and save that in the EEPROM, you'll have
- to use an EISA machine or the infamous Test Via to
- get it back to normal, and it will conflict at IO
- location 0 which may hang your ISA machine.
- I believe this problem is corrected in the 3C509B
- version of the board.''
-
- The newer model 3c509B has 8kB on board, and the buffer
- can be split 4/4, 5/3 or 6/2 for Rx/Tx. This setting
- can also be stored on the EEPROM. This should alleviate the
- above problem with the original 3c509. At this point in
- time, the Linux driver is not aware of this, and treats
- the 3c509B as an older 3c509.
-
- 3c509B users should use the supplied DOS
- utility to disable the <em/plug and play/ support, <em/and/
- to set the output media to what they require.
- Cameron adds:
- ``The 3C509B has 3Com's relocatable I/O port scheme,
- and Microsoft[tm] Plug-and-play ("PnP"). You can't use them
- both at the same time. Some (broken, IMHO) BIOSes begin a PnP
- sequence by writing to the PnP address (0x279 ?), which causes
- PnP adapters like 3C509B to enter the PnP state, but then they
- (these funny BIOSes) never come back to finish the job.
- The 3C509Bs hang there in the middle of the PnP ID Sequence, where
- they have no idea you didn't mean it and you're going to use the 3Com
- ID sequence after all. 3C5X9CFG /PNPRST clears this hang.
- Disable PnP if your drivers (eg., Linux) don't use it.
-
- It was a marketing decision to turn PnP on as a factory default setting.
- If it caused you a hassle, or not, please take the time to say so when
- you mail in your warranty card. The more info they have, the better
- decisions they can make. Also, check with your motherboard supplier
- to see if you need a BIOS upgrade.''
-
- With regards to the media detection features, Cameron said:
- ``Autoselect is a feature of the commercial *drivers* for 3C509(B).
- AFAIK nobody ever claimed the Linux driver attempts it.
- When drivers/net/3c509.c recognizes my 3C509B at boot time, it says:
- <tt/eth0: 3c509 at 0x300 tag 1, 10baseT port, .../
- revealing that the card is configured for 10BASE-T. It finds that out
- by reading the little EEPROM, which IMHO is the Right Way To Do It.''
-
-
- <sect2>3c523<label id="3c523">
- <p>
-
- Status -- <em/Not Supported/
-
- This MCA bus card uses the i82586, and now that people are
- actually running Linux on MCA machines, someone may wish
- to try and recycle parts of the 3c507 driver into a
- driver for this card.
-
- <sect2>3c527<label id="3c527">
- <p>
-
- Status -- <em/Not Supported/
-
- Yes, another MCA card. No, not too much interest in it.
- Better chances with the 3c523 or the 3c529.
-
- <sect2>3c529<label id="3c529">
- <p>
-
- Status -- <em/Not Supported/
-
- This card actually uses the same chipset as the 3c509.
- Donald actually put hooks into the 3c509 driver to check
- for MCA cards after probing for EISA cards, and before
- probing for ISA cards. But it hasn't evolved much further
- than that. Donald writes:
-
- ``I don't have access to a MCA machine (nor do I fully understand
- the probing code) so I never wrote the <tt/mca_adaptor_select_mode()/
- or <tt/mca_adaptor_id()/ routines. If you can find a way to get the
- adaptor I/O address that assigned at boot time, you can just
- hard-wire that in place of the commented-out probe. Be sure to
- keep the code that reads the IRQ, if_port, and ethernet address.''
-
- <sect2>3c562
- <p>
-
- Status -- <em/Supported/
-
- This PCMCIA card is the combination of a 3c589B ethernet card
- with a modem. The modem appears as a standard modem to the
- end user. The only difficulty is getting the two separate
- linux drivers to share one interrupt. There are a couple of new
- registers and some hardware interrupt sharing support.
-
- Thanks again to Cameron for getting a sample unit and documentation
- sent off to David Hinds. Look for support in David's next
- PCMCIA package release.
-
-
- <sect2>3c579<label id="3c579">
- <p>
-
- Status -- <em/Supported/
-
- The EISA version of the 509. The current EISA version
- uses the same 16 bit wide chip rather than a 32 bit
- interface, so the performance increase isn't stunning.
- The EISA probe code was added to 3c509.c for 0.99pl14.
- We would be interested in hearing progress reports
- from any 3c579 users. (Read the above 3c509
- section for info on the driver.)
-
- Cameron Spitzer writes:
- ``The 3C579 (Etherlink III EISA) should be configured
- as an EISA card. The IO Base Address (window 0
- register 6 bits 4:0) should be 1f, which selects EISA
- addressing mode. Logic outside the ASIC decodes the
- IO address s000, where s is the slot number. I don't
- think it was documented real well. Except for its IO
- Base Address, the '579 should behave EXACTLY like
- the'509 (EL3 ISA), and if it doesn't, I want to hear
- about it (at my work address).''
-
-
- <sect2>3c589 / 3c589B<label id="3c589">
- <p>
-
- Status -- <em/Semi-Supported/
-
- Many people have been using this PCMCIA card for quite some time
- now. Note that support for it is not (at present) included
- in the default kernel source tree. You will also need
- a supported PCMCIA controller chipset. There are drivers
- available on Donald's ftp site:
-
- <verb>
- cesdis.gsfc.nasa.gov:/pub/linux/pcmcia/README.3c589
- cesdis.gsfc.nasa.gov:/pub/linux/pcmcia/3c589.c
- cesdis.gsfc.nasa.gov:/pub/linux/pcmcia/dbether.c
- </verb>
-
- Or for those that are <em/net-surfing/ you can try:
-
- <url url="http://cesdis.gsfc.nasa.gov/linux/pcmcia.html"
- name="Don's PCMCIA Stuff">
-
- You will still need a PCMCIA socket enabler as well.
-
- See <ref id="pcmcia" name="PCMCIA Support"> for more
- info on PCMCIA chipsets, socket enablers, etc.
-
- The "B" in the name means the same here as it does for
- the 3c509 case.
-
- <sect2>3c590 / 3c595<label id="vortex">
- <p>
-
- Status -- <em/Supported/
-
- These ``Vortex'' cards are for PCI bus machines, with the '590
- being 10Mbps and the '595 being 3Com's 100Mbs offering.
- Also note that you can run the '595 as a '590 (i.e. in a 10Mbps mode).
- The driver will eventually appear in the 1.3.x kernel, but you
- can get the driver now from the following URL:
-
- <url url="http://cesdis.gsfc.nasa.gov/linux/drivers/vortex.html"
- name="Vortex">
-
- 3Com has been offering an evaluation deal where you get 2 '595
- cards for a total price of $250. Check with your local
- 3Com distributor to see if this is still available.
-
- A thanks to Cameron Spitzer and Terry Murphy of 3Com for
- sending cards and documentation to Donald so he could write
- the driver.
-
- <sect2>3c597
- <p>
-
- Status -- <em/Supported/
-
- This is the recently released EISA version of the 3c59x
- series of cards. The 3c597 (aka Demon) should work with
- the vortex driver discussed above.
-
- <sect1>Accton<label id="accton">
- <p>
-
- <sect2>Accton MPX
- <p>
-
- Status -- <em/Supported/
-
- Don't let the name fool you. This is still supposed to be a
- NE2000 compatible card. The MPX is supposed to stand for
- MultiPacket Accelerator, which, according to Accton, increases
- throughput substantially. But if you are already sending
- back-to-back packets, how can you get any faster...
-
- <sect2>Accton EN1203, EN 1207, EtherDuo-PCI
- <p>
-
- Status -- <em/Supported/
-
- This is another implementation of the DEC 21040 PCI chip.
-
- See <ref id="dec-21040" name="DEC 21040">
- for more information on these cards, and the present driver
- situation.
-
-
- <sect2>Accton EN2212 PCMCIA Card
- <p>
-
- Status -- <em/Semi-Supported/
-
- David Hinds has been working on a driver for this card, and
- you are best to check the latest release of his PCMCIA
- package to see what the present status is.
-
- <sect1>Allied Telesyn/Telesis<label id="allied-telesis">
- <p>
-
- <sect2>AT1500<label id="at-1500">
- <p>
-
- Status --<em/Supported/
-
- These are a series of low-cost ethercards using the 79C960 version
- of the AMD LANCE. These are bus-master cards, and hence one of
- the faster ISA bus ethercards available.
-
- DMA selection and chip numbering information can be found in
- <ref id="lance" name="AMD LANCE">.
-
- More technical information on AMD LANCE based Ethernet cards
- can be found in <ref id="amd-notes" name="Notes on AMD...">.
-
- <sect2>AT1700<label id="at1700">
- <p>
-
- Status -- <em/Supported/
-
- The Allied Telesis AT1700 series ethercards are based
- on the Fujitsu MB86965. This chip uses a programmed
- I/O interface, and a pair of fixed-size transmit
- buffers. This allows small groups of packets to
- be sent back-to-back, with a short pause while
- switching buffers.
-
- A unique feature is the ability to drive 150ohm STP
- (Shielded Twisted Pair) cable commonly installed for
- Token Ring, in addition to 10baseT 100ohm UTP
- (unshielded twisted pair).
-
- The Fujitsu chip used on the AT1700 has a design flaw:
- it can only be fully reset by doing a power cycle of the machine.
- Pressing the reset button doesn't reset the bus interface. This
- wouldn't be so bad, except that it can only be reliably detected
- when it has been freshly reset. The solution/work-around is to
- power-cycle the machine if the kernel has a problem detecting
- the AT1700.
-
- Some production runs of the AT1700 had another problem:
- they are permanently wired to DMA channel 5. This is
- undocumented, there are no jumpers to disable the "feature",
- and no driver dares use the DMA capability because of
- compatibility problems. No device driver will be
- written using DMA if installing a second card into
- the machine breaks both, and the only way to disable
- the DMA is with a knife.
-
- The at1700 driver is included in the standard
- kernel source tree.
-
- <sect2>AT2450<label id="at2450">
- <p>
-
- Status -- <em/Supported/
-
- This is the PCI version of the AT1500, and it doesn't suffer
- from the problems that the Boca 79c970 PCI card does.
- Allied Telsyn was still `beta testing' the card in
- early/mid 1995, so it may not have spread to various
- retailers yet (but it doesn't hurt to ask.)
-
- DMA selection and chip numbering information can be found in
- <ref id="lance" name="AMD LANCE">.
-
- More technical information on AMD LANCE based Ethernet cards
- can be found in <ref id="amd-notes" name="Notes on AMD...">.
-
- <sect1>AMD / Advanced Micro Devices<label id="amd">
- <p>
-
- <sect2>AMD LANCE (7990, 79C960, PCnet-ISA)<label id="lance">
- <p>
-
- Status -- <em/Supported/
-
- There really is no AMD ethernet card. You are probably reading this
- because the only markings you could find on your card said AMD
- and the above number. The 7990 is the original `LANCE' chip,
- but most stuff (including this document) refer to all these
- similar chips as `LANCE' chips. (...incorrectly, I might add.)
-
- These above numbers refer to chips from AMD
- that are the heart of many ethernet cards.
- For example, the Allied Telesis AT1500 (see
- <ref id="at-1500" name="AT1500">) the NE1500/2100 (see
- <ref id="ne1500" name="NE1500">) and the Boca-VLB/PCI cards (see
- <ref id="boca-pci" name="Boca-VLB/PCI">)
-
- The 79C960 (a.k.a. PCnet-ISA) contains enhancements and bug fixes
- over the original 7990 LANCE design.
-
- One common problem people have is the `busmaster arbitration
- failure' message. This is printed out when the LANCE driver
- can't get access to the bus after a reasonable amount of time
- has elapsed (50us). This usually indicates that the motherboard
- implementation of bus-mastering DMA is broken, or some other device
- is hogging the bus, or there is a DMA channel conflict. If your BIOS
- setup has the `GAT option' (for Guaranteed Access Time) then try
- toggling/altering that setting to see if it helps.
-
- Chances are that the existing LANCE driver will work
- with all AMD LANCE based cards. (except perhaps some of the
- original 7990 designs with shared memory.)
- This driver should also work with NE1500 and NE2100 clones.
-
- For the ISA bus master mode all structures used
- directly by the LANCE, the initialization block,
- Rx and Tx rings, and data buffers, must be accessible
- from the ISA bus, i.e. in the lower 16M of real memory.
- If more than 16MB of memory is installed, low-memory `bounce-buffers'
- are used when needed.
-
- The DMA channel can be set with the low bits
- of the otherwise-unused dev->mem_start value (a.k.a. PARAM_1).
- (see <ref id="ether" name="PARAM_1">)
- If unset it is probed for by enabling each free DMA channel
- in turn and checking if initialization succeeds.
-
- The HP-J2405A board is an exception: with this board it's easy
- to read the EEPROM-set values for the IRQ, and DMA.
-
- See <ref id="amd-notes" name="Notes on AMD...">
- for more info on these chips.
-
- <sect2>AMD 79C961 (PCnet-ISA+)
- <p>
-
- Status -- <em/Supported/
-
- This is the PCnet-ISA+ -- an enhanced version of the 79C960.
- It has support for jumper-less configuration and Plug and
- Play. See the info in the above section.
-
- <sect2>AMD 79C965 (PCnet-32)<label id="pcnet-32">
- <p>
-
- Status -- <em/Supported/
-
- This is the PCnet-32 -- a 32 bit bus-master version of the
- original LANCE chip for VL-bus and local bus systems.
- Minor cleanups were added to the original lance driver
- around v1.1.50 to support these 32 bit versions of the LANCE
- chip. The main problem was that the
- current versions of the '965 and '970 chips have a minor bug.
- They clear the Rx buffer length field in the Rx ring when they
- are explicitly documented not to. Again, see the above info.
-
- <sect2>AMD 79C970 (PCnet-PCI)<label id="pcnet-pci">
- <p>
-
- Status -- <em/Supported/
-
- This is the PCnet-PCI -- similar to the PCnet-32, but designed
- for PCI bus based systems. Again, see the above info.
- Donald has modified
- the LANCE driver to use the PCI BIOS structure
- that was introduced by Drew Eckhardt for the PCI-NCR SCSI
- driver. This means that you need to build a kernel with
- PCI BIOS support enabled.
-
- Note that the Boca implementation of the 79C970 fails on
- fast Pentium machines. This is a hardware problem, as it
- affects DOS users as well. See the Boca section for more
- details.
-
- <sect2>AMD 79C974 (PCnet-SCSI)
- <p>
-
- Status -- <em/Supported/
-
- This is the PCnet-SCSI -- which is basically treated like
- a '970 from an Ethernet point of view. A minor '974 specific
- fix was added to the 1.1.8x kernels, so get a 1.1.90 or newer
- kernel. Also see the above info. Don't ask if the
- SCSI half of the chip is supported -- this is the
- <em/Ethernet-Howto/, not the SCSI-Howto.
-
- <sect1>Ansel Communications<label id="ansel">
- <p>
-
- <sect2>AC3200 EISA
- <p>
-
- Status -- <em/Semi-Supported/
-
- This driver is included in the present kernel as an
- alpha test driver. It is based on the common NS8390
- chip used in the ne2000 and wd80x3 cards.
- Please see <ref id="alfa" name="Alpha Drivers"> in
- this document for important information regarding
- alpha drivers.
- If you use it, let Donald know how things work out,
- as not too many people have this card and feedback
- has been low, even though the driver has been in the
- kernel since v1.1.25.
-
- If you intend on using this driver as a loadable module
- you should probably see
- <ref id="modules" name="Using the Ethernet Drivers as Modules">
- and also
- <ref id="mod8390" name="8390 Based Cards as Modules"> for
- module specific information.
-
- <sect1>Apricot
- <p>
-
- <sect2>Apricot Xen-II On Board Ethernet
- <p>
-
- Status -- <em/Supported/
-
- This on board ethernet uses an i82596 bus-master chip.
- It can only be at i/o address <tt/0x300/. The author of this
- driver is Mark Evans. By looking at the driver source,
- it appears that the IRQ is hardwired to 10.
-
- Earlier versions of the driver had a tendency to think
- that anything living at <tt/0x300/ was an apricot NIC.
- Since then the hardware address is checked to avoid these
- false detections.
-
- <sect1>Arcnet<label id="arcnet">
- <p>
-
- Status -- <em/Supported/
-
- With the very low cost and better performance of ethernet,
- chances are that most places will be giving away their Arcnet
- hardware for free, resulting in a lot of home systems with Arcnet.
-
- An advantage of Arcnet is that all of the cards have identical
- interfaces, so one driver will work for everyone. It also has
- built in error handling so that it supposedly never loses a packet.
- (Great for UDP traffic!)
-
- Avery Pennarun's arcnet driver has been in the
- default kernel sources since 1.1.80. The arcnet driver
- uses `arc0' as its name instead of the usual `eth0' for
- ethernet devices.
- Bug reports and success stories can be mailed to:
-
- <tt>apenwarr@foxnet.net</tt>
-
- There are information files contained in the standard kernel for
- setting jumpers and general hints.
-
- Supposedly the driver also works with the 100Mbs ARCnet cards
- as well!
-
- <sect1>AT&T
- <p>
-
- Note that AT&T's StarLAN is an orphaned technology, like
- SynOptics LattisNet, and can't be used in a standard 10Base-T
- environment, without a hub that `speaks' both.
-
- <sect2>AT&T T7231 (LanPACER+)
- <p>
-
- Status -- <em/Not Supported/
-
- These StarLAN cards use an interface similar to the i82586
- chip. At one point, Matthijs Melchior
- (<tt/matthijs.n.melchior@att.com/) was playing with the 3c507
- driver, and almost had something useable working. Haven't
- heard much since that.
-
- <sect1>AT-Lan-Tec / RealTek
- <p>
-
- <sect2>AT-Lan-Tec / RealTek Pocket adaptor<label id="aep-100">
- <p>
-
- Status -- <em/Supported/
-
- This is a generic, low-cost OEM pocket adaptor being sold by
- AT-Lan-Tec, and (likely) a number of other suppliers. A
- driver for it is included in the standard kernel.
- Note that there is substantial information contained in the
- driver source file `atp.c'.
- BTW, the adaptor (AEP-100L) has both 10baseT and BNC connections!
- You can reach AT-Lan-Tec at 1-301-948-7070. Ask for the model
- that works with Linux, or ask for tech support.
-
- In the Netherlands a compatible adaptor is sold under the name SHI-TEC
- PE-NET/CT, and sells for about $125. The vendor was Megasellers.
- They state that they do not sell to private persons, but
- this doesn't appear to be strictly adhered to.
- They are: Megasellers, Vianen, The Netherlands. They always
- advertise in Dutch computer magazines. Note that the
- newer model EPP-NET/CT appears to be significantly different
- than the PE-NET/CT, and will not work with the present driver.
- Hopefully someone will come up with the programming information
- and this will be fixed up.
-
- In Germany, a similar
- adaptor comes as a no-brand-name product. Prolan 890b, no
- brand on the casing, only a roman II. Resellers can get a price
- of about $130, including a small wall transformer for the power.
-
- The adaptor is `normal size' for the product class, about 57mm wide,
- 22mm high tapering to 15mm high at the DB25 connector, and 105mm long
- (120mm including the BNC socket). It's switchable between the RJ45
- and BNC jacks with a small slide switch positioned between the two:
- a very intuitive design.
-
- Donald performed some power draw measurements, and determined
- that the average current draw was only about 100mA @ 5V.
- This power draw is low enough
- that you could buy or build a cable to take the 5V directly from the
- keyboard/mouse port available on many laptops. (Bonus points here
- for using a standardized power connector instead of a
- proprietary one.)
-
- Note that the device name that you pass to <tt/ifconfig/
- is <em/not/ <tt/eth0/ but <tt/atp0/ for this device.
-
-
- <sect1>Boca Research<label id="boca">
- <p>
-
- Yes, they make more than just multi-port serial cards. :-)
-
- <sect2>Boca BEN (PCI, VLB)<label id="boca-pci">
- <p>
-
- Status -- <em/Supported/
-
- These cards are based on AMD's PCnet chips, used in the AT1500 and
- the like. You can pick up a combo (10BaseT and 10Base2) PCI
- card for under $70 at the moment.
-
- Perspective buyers should be warned that many users have had
- endless problems with these cards. Owners of fast Pentium
- systems have been especially hit. Note that this is not a driver
- problem, as it hits DOS/Win/NT users as well.
- Boca's technical support number is (407) 241-8088, and you
- can also reach them at <tt/75300.2672@compuserve.com/.
-
- Donald did a comparitive test with the above Boca PCI card and
- a similar Allied Telsyn PCnet/PCI implementation, which showed
- that the problem lies in Boca's implementation of the PCnet/PCI
- chip. These test results can be accessed on Don's www server.
-
- <url url="http://cesdis.gsfc.nasa.gov/linux/" name="Linux at CESDIS">
-
- Also, Dave Platt has compared the recommended implementation given
- on the AMD data sheet with the Boca implementation, and has
- determined that Boca has left out a substantial number of
- important filtering capacitors. At the risk of being verbose,
- here is a quote from Dave, which will allow you to assess
- if the problem has been addressed yet, given a card for
- visual inspection.
-
- ``I just reviewed Appendix B in the 79c970 data sheet. It
- recommends a _minimum_ of 8 high-frequency bypassing caps
- (.1 uF multilayer ceramic) around the chip, to keep ground
- and power bounce from causing unreliable operation.
- Looking at the card I have here, I see a total of 5 such
- caps on the entire card - only a couple of them are close
- enough to the chip to do a decent job of high-frequency
- bypassing.
-
- If you hold the card with chips facing up, and the PCI pins
- pointed towards you, the lower-left corner of the '970 has
- the positioning dimple. The upper-left corner of the chip
- is the `analog corner', where the analog power and ground
- pins are. Appendix B calls these `the most cricical pins
- in the layout of a PCnet-PCI card'. There are 4 analog
- power pins, and 2 analog ground pins... all of them are
- supposed to be connected, and properly bypassed.
-
- On the left side of the chip, the uppermost pin is AVSS1
- (analog ground 1). On the top edge, the fourth pin from
- the left is AVDD3 (analog power 3). The Appendix
- specifically recommends having a .1 uF bypass cap tied
- directly to these two pins (<em/not/ going through the common
- ground plane). On the card I have, there is no such cap -
- the nearest bypass cap is about half-an-inch away over by
- the crystal, and is tied to the ground plane.
-
- The Appendix also specifically recommends `low-frequency
- bulk capacitors' (by which I assume that they mean multi-uF
- tantalum or aluminum electrolytics) as well as
- high-frequency bypass caps. I see only two bulk capacitors
- (one 10 uF in the AVSS2/AVDD2 filter circuit, and one 4.7
- uF up above the chip which also appears to be part of a
- filter circuit). The Appendix recommends `at least one
- low-frequency bulk (e.g. 22 uF) bypass capactor...
- connected directly to the power and ground planes.' There
- is no capacitor on the board which matches this
- description.
-
- It appears that Boca ignored _several_ of AMD's
- recommendations, regarding the number, size, placement, and
- wiring of the power supply bypass capacitors.''
-
- (Thanks Dave.) Boca is offering a `warranty repair' for
- affected owners, which involves adding one of the missing
- capacitors, but it appears that this fix doesn't work 100
- percent for most people, although it helps some.
-
- If you are <em/still/ thinking of buying one of these cards, then
- at least try and get a 7 day unconditional return policy,
- so that if it doesn't work properly in your system, you
- can return it.
-
- More general information on the AMD chips can be found in
- <ref id="lance" name="AMD LANCE">.
-
- More technical information on AMD LANCE based Ethernet cards
- can be found in <ref id="amd-notes" name="Notes on AMD...">.
-
- <sect1>Cabletron<label id="ctron">
- <p>
-
- Donald writes:
- `Yes, another one of these companies that won't release its
- programming information. They waited for months before actually
- confirming that all their information was proprietary, deliberately
- wasting my time. Avoid their cards like the plague if you can.
- Also note that some people have phoned Cabletron, and have been
- told things like `a D. Becker is working on a driver
- for linux' -- making it sound like I work for them. This is
- NOT the case.'
-
- If you feel like asking them why they don't want to release their
- low level programming info so that people can use their cards, write
- to support@ctron.com.
- Tell them that you are using Linux, and are disappointed that they
- don't support open systems. And no, the usual driver development
- kit they supply is useless. It is just a DOS object file that
- you are supposed to link against. Which you aren't allowed to
- even reverse engineer.
-
-
- <sect2>E10**, E10**-x, E20**, E20**-x<label id="e10xx">
- <p>
-
- Status -- <em/Semi-Supported/
-
- These are NEx000 almost-clones that are reported to
- work with the standard NEx000 drivers, thanks to a
- ctron-specific check during the probe. If there are
- any problems, they are unlikely to be fixed, as the
- programming information is unavailable.
-
- <sect2>E2100<label id="e2100">
- <p>
-
- Status -- <em/Semi-Supported/
-
- Again, there is not much one can do when the
- programming information is proprietary.
- The E2100 is a poor design. Whenever it maps its
- shared memory in during a packet transfer, it
- maps it into the <em/whole 128K region!/ That means you
- <bf/can't/ safely use another interrupt-driven shared
- memory device in that region, including another E2100.
- It will work most of the time, but every once in
- a while it will bite you. (Yes, this problem can
- be avoided by turning off interrupts while
- transferring packets, but that will almost certainly
- lose clock ticks.) Also, if you mis-program the board,
- or halt the machine at just the wrong moment, even
- the reset button won't bring it back. You will <em/have/
- to turn it off and <em/leave/ it off for about 30 seconds.
-
- Media selection is automatic, but you can override this
- with the low bits of the dev->mem_end parameter.
- See <ref id="ether" name="PARAM_2">. Module users
- can specify an <tt/xcvr=N/ value on the <tt/insmod/
- command line to do the same.
-
- Also, don't confuse the E2100 for a NE2100 clone.
- The E2100 is a shared memory NatSemi DP8390 design,
- roughly similar to a brain-damaged WD8013, whereas
- the NE2100 (and NE1500) use a bus-mastering AMD
- LANCE design.
-
- There is an E2100 driver included in the standard kernel.
- However, seeing as programming info isn't available,
- don't expect bug-fixes. Don't use one
- unless you are already stuck with the card.
-
- If you intend on using this driver as a loadable module
- you should probably see
- <ref id="modules" name="Using the Ethernet Drivers as Modules">
- and also
- <ref id="mod8390" name="8390 Based Cards as Modules"> for
- module specific information.
-
- <sect1>Cogent
- <p>
-
- Here is where and how to reach them:
-
-
- <verb>
- Cogent Data Technologies, Inc.
- 175 West Street, P.O. Box 926
- Friday Harbour, WA 98250, USA.
-
- Cogent Sales
- 15375 S.E. 30th Place, Suite 310
- Bellevue, WA 98007, USA.
-
- Technical Support:
- Phone (360) 378-2929 between 8am and 5pm PST
- Fax (360) 378-2882
- Compuserve GO COGENT
- Bulletin Board Service (360) 378-5405
- Internet: support@cogentdata.com
- </verb>
-
- <sect2>Cogent eMASTER+, EM100, EM400, EM960, EM964
- <p>
-
- Status -- <em/Supported/
-
- These are yet another DEC 21040 implementation that should
- work fine with the standard 21040 driver.
-
- The EM400 and the EM964 are four port cards using a
- DEC 21050 bridge and 4 21040 chips.
-
- See <ref id="dec-21040" name="DEC 21040">
- for more information on these cards, and the present driver
- situation.
-
- <sect1>D-Link<label id="d-link">
- <p>
-
- Some people have had difficulty in finding vendors that
- carry D-link stuff. This should help.
-
- <verb>
- (714) 455-1688 in the US
- (081) 203-9900 in the UK
- (416) 828-0260 in Canada
- (02) 916-1600 in Taiwan
- </verb>
-
- <sect2>DE-100, DE-200, DE-220-T<label id="de-100">
- <p>
-
- Status -- <em/Supported/
-
- The manual says that it is 100 &percnt compatible with the
- NE2000. This is not true. You should call them and
- tell them you are using their card with Linux, and they
- should correct their documentation. Some pre-0.99pl12
- driver versions may have trouble recognizing the DE2**
- series as 16 bit cards, and these cards are the most
- widely reported as having the spurious transfer address
- mismatch errors. Note that there are cards from
- Digital (DEC) that are also named DE100 and DE200,
- but the similarity stops there.
-
- <sect2>DE-520<label id="de-520">
- <p>
-
- Status -- <em/Supported/
-
- This is a PCI card using the PCI version of AMD's LANCE chip.
- DMA selection and chip numbering information can be found in
- <ref id="lance" name="AMD LANCE">.
-
- More technical information on AMD LANCE based Ethernet cards
- can be found in <ref id="amd-notes" name="Notes on AMD...">.
-
- <sect2>DE-530<label id="de-530">
- <p>
-
- Status -- <em/Supported/
-
- This is a generic DEC 21040 PCI chip implementation,
- and works with the generic 21040 driver.
-
- See <ref id="dec-21040" name="DEC 21040">
- for more information on these cards, and the present driver
- situation.
-
- <sect2>DE-600<label id="de-600">
- <p>
-
- Status -- <em/Supported/
-
- Laptop users and other folk who might want a quick
- way to put their computer onto the ethernet may want
- to use this. The driver is included with the default
- kernel source tree.
- Bjorn Ekwall <tt/bj0rn@blox.se/ wrote the driver.
- Expect about 180kb/s transfer speed from this via the
- parallel port. You should read the README.DLINK
- file in the kernel source tree.
-
- Note that the device name that you pass to <tt/ifconfig/
- is <em/now/ <tt/eth0/ and not the previously
- used <tt/dl0/.
-
- If your parallel port is <em/not/ at the standard <tt/0x378/
- then you will have to recompile. Bjorn writes:
- ``Since the DE-620 driver tries to sqeeze the last microsecond
- from the loops, I made the irq and port address constants instead
- of variables. This makes for a usable speed, but it also means
- that you can't change these assignements from e.g. lilo;
- you _have_ to recompile...'' Also note that some laptops
- implement the on-board parallel port at <tt/0x3bc/ which
- is where the parallel ports on monochrome cards were/are.
-
- <sect2>DE-620<label id="de-620">
- <p>
-
- Status -- <em/Supported/
-
- Same as the DE-600, only with two output formats.
- Bjorn has written a driver for this model,
- for kernel versions 1.1 and above. See the above information
- on the DE-600.
-
- <sect2>DE-650<label id="de-650">
- <p>
-
- Status -- <em/Semi-Supported/
-
- Some people have been using this PCMCIA card for
- some time now with their notebooks. It is a basic
- 8390 design, much like a NE2000. The LinkSys PCMCIA
- card and the IC-Card Ethernet (available from
- Midwest Micro) are supposedly DE-650 clones as well.
- Note that at present, this driver is
- <em/not/ part of the standard kernel, and so you will
- have to do some patching.
-
- See <ref id="pcmcia" name="PCMCIA Support"> in this document,
- and if you can, have a look at:
-
- <url url="http://cesdis.gsfc.nasa.gov/linux/pcmcia.html"
- name="Don's PCMCIA Stuff">
-
- <sect1>DFI<label id="dfi">
- <p>
-
- <sect2>DFINET-300 and DFINET-400<label id="dfi-300">
- <p>
-
- Status -- <em/Supported/
-
- These cards are now detected (as of 0.99pl15) thanks to
- Eberhard Moenkeberg <tt/emoenke@gwdg.de/ who noted that
- they use `DFI' in the first 3 bytes of the prom, instead
- of using <tt/0x57/ in bytes 14 and 15, which is what all the
- NE1000 and NE2000 cards use. (The 300 is an 8 bit
- pseudo NE1000 clone, and the 400 is a pseudo NE2000 clone.)
-
-
- <sect1>Digital / DEC<label id="dec">
- <p>
-
- <sect2>DEPCA, DE100/1, DE200/1/2, DE210, DE422<label id="dec-200">
- <p>
-
- Status -- <em/Supported/
-
- As of linux v1.0, there is a driver included as standard
- for these cards. It was written by David C. Davies.
- There is documentation included in the source file
- `depca.c', which includes info on how to use more than
- one of these cards in a machine. Note that the DE422 is
- an EISA card. These cards are all based on the AMD LANCE chip.
- See <ref id="lance" name="AMD LANCE"> for more info.
- A maximum of two of the ISA cards can be used, because they
- can only be set for <tt/0x300/ and <tt/0x200/ base I/O address.
- If you are intending to do this, please read the notes in
- the driver source file <tt/depca.c/ in the standard kernel
- source tree.
-
- This driver will also work on Alpha CPU based machines, and
- there are various ioctl()s that the user can play with.
-
- <sect2>Digital EtherWorks 3 (DE203, DE204, DE205)<label id="dec-ewrk3">
- <p>
-
- Status -- <em/Supported/
-
- Included into kernels v1.1.62 and above is this driver,
- also by David C. Davies of DEC. These cards use a proprietary
- chip from DEC, as opposed to the LANCE chip used in the
- earlier cards like the DE200. These cards support both shared
- memory or programmed I/O, although you take about a 50&percnt
- performance hit if you use PIO mode. The shared memory size can
- be set to 2kB, 32kB or 64kB, but only 2 and 32 have been tested
- with this driver. David says that the performance is virtually
- identical between the 2kB and 32kB mode. There is more information
- (including using the driver as a loadable module) at the top
- of the driver file <tt/ewrk3.c/ and also in <tt/README.ewrk3/.
- Both of these files come with the standard kernel distribution.
-
- The standard driver has a number
- of interesting ioctl() calls that can be used to get or clear
- packet statistics, read/write the EEPROM, change the
- hardware address, and the like. Hackers can see the source
- code for more info on that one.
-
- David has also written a configuration utility for this
- card (along the lines of the DOS program <tt/NICSETUP.EXE/)
- along with other tools. These can be found on
- <tt/sunsite.unc.edu/ in the directory
- <tt>/pub/Linux/system/Network/management</tt> -- look for the
- file <tt/ewrk3tools-X.XX.tar.gz/.
-
- The next release of this driver (v0.40) will have Alpha CPU
- support like depca.c does and is available from David now
- if you require it.
-
- <sect2>DE425 (EISA), DE434, DE435, DE500<label id="dec-eisa">
- <p>
-
- Status -- <em/Supported/
-
- These cards are based on the 21040 chip mentioned below.
- Included into kernels v1.1.86 and above is this driver,
- also by David C. Davies of DEC. It sure is nice to have
- support from someone on the inside ;-)
- The DE500 uses the newer 21140 chip to provide 10/100Mbs
- ethernet connections.
- Have a read of the 21040 section below for extra info.
-
- Note that as of 1.1.91, David has added a compile time option that
- will allow non-DEC cards to work with
- this driver. Have a look at <tt/README.de4x5/ for details.
-
- All the Digital cards will autoprobe for their media (except,
- temporarily, the DE500 due to a patent issue).
-
- This driver is also ALPHA CPU ready and supports being loaded
- as a module. Users can access the driver internals through
- ioctl() calls - see the 'ewrk3' tools and the de4x5.c sources
- for information about how to do this.
-
- <sect2>DEC 21040, 21041, 21140, Tulip<label id="dec-21040">
- <p>
-
- Status -- <em/Supported/
-
- The DEC 21040 is a bus-mastering single chip ethernet solution
- from Digital, similar to AMD's PCnet chip. The 21040 is
- specifically designed for the PCI bus architecture.
- SMC's new EtherPower PCI card uses this chip.
-
- You have a choice of <em/two/ drivers for cards based on this
- chip. There is the DE425 driver discussed above, and the
- generic 21040 driver that Donald has written.
-
- The updated 21041 chip is also found in place of the 21040
- on newly produced SMC EtherPower cards.
- The 21140 is for supporting 100Base-? and
- works with the Linux drivers for the 21040 chip.
- To use David's <tt/de4x5/ driver with non-DEC cards, have a
- look at <tt/README.de4x5/ for details.
-
- Donald has used SMC EtherPower-10/100 cards to develop
- the `tulip' driver. Note that the driver that is
- in the standard kernel tree at the moment is not the most
- up to date version. If you intend on using this driver,
- you should get the newest version from Donald's ftp/WWW
- site.
-
- <url url="http://cesdis.gsfc.nasa.gov/linux/drivers/tulip.html"
- name="Tulip Driver">
-
- The above URL also contains a (non-exhaustive) list of
- various cards/vendors that use the 21040 chip.
-
- Also note that the tulip driver is still considered an <em/alpha/
- driver (see <ref id="alfa" name="Alpha Drivers">) at the
- moment, and should be treated as such. To use it, you
- will have to edit <tt>arch/i386/config.in</tt> and
- uncomment the line for <tt/CONFIG_DEC_ELCP/ support.
-
- <sect1>Farallon
- <p>
- Farallon sells EtherWave adaptors and transceivers. This device
- allows multiple 10baseT devices to be daisy-chained.
-
- <sect2>Farallon Etherwave
- <p>
-
- Status -- <em/Supported/
-
- This is reported to be a 3c509 clone that includes the
- EtherWave transceiver. People have used these successfully
- with Linux and the present 3c509 driver. They are too expensive
- for general use, but are a great option for special cases. Hublet
- prices start at $125, and Etherwave
- adds $75-$100 to the price of the board -- worth
- it if you have pulled one wire too few, but not if you are two
- network drops short.
-
- <sect1>Hewlett Packard<label id="hp">
- <p>
-
- The 272** cards use programmed I/O, similar to the NE*000 boards,
- but the data transfer port can be `turned off' when you aren't
- accessing it, avoiding problems with autoprobing drivers.
-
- Thanks to Glenn Talbott for helping clean up the confusion in this
- section regarding the version numbers of the HP hardware.
-
- <sect2>27245A<label id="hp-27245a">
- <p>
-
- Status -- <em/Supported/
-
- 8 Bit 8390 based 10BaseT, not recommended for all the
- 8 bit reasons. It was re-designed a couple years
- ago to be highly integrated which caused some
- changes in initialization timing which only
- affected testing programs, not LAN drivers. (The
- new card is not `ready' as soon after switching
- into and out of loopback mode.)
-
- If you intend on using this driver as a loadable module
- you should probably see
- <ref id="modules" name="Using the Ethernet Drivers as Modules">
- and also
- <ref id="mod8390" name="8390 Based Cards as Modules"> for
- module specific information.
-
- <sect2>HP PC Lan+ (27247, 27252A)
- <p>
-
- Status -- <em/Supported/
-
- The HP PC Lan+ is different to the standard HP PC Lan
- card. This driver was added to the list of drivers in the standard
- kernel during the v1.1.x development cycle. It can be
- operated in either a PIO mode like a ne2000, or a shared
- memory mode like a wd8013.
-
- The 47B is a 16 Bit 8390 based 10BaseT w/AUI, and
- the 52A is a 16 Bit 8390 based ThinLAN w/AUI.
- These cards have 32K onboard RAM for Tx/Rx packet buffering
- instead of the usual 16KB, and they both offer LAN
- connector autosense.
-
- If you intend on using this driver as a loadable module
- you should probably see
- <ref id="modules" name="Using the Ethernet Drivers as Modules">
- and also
- <ref id="mod8390" name="8390 Based Cards as Modules"> for
- module specific information.
-
- <sect2>HP-J2405A
- <p>
-
- Status -- <em/Supported/
-
- These are lower priced, and slightly faster than the
- 27247/27252A, but are missing some features, such
- as AUI, ThinLAN connectivity, and boot PROM socket.
- This is a fairly generic LANCE design, but a minor
- design decision makes it incompatible with a generic
- `NE2100' driver. Special support for it (including
- reading the DMA channel from the board) is included
- thanks to information provided by HP's Glenn
- Talbott.
-
- More technical information on LANCE based cards can be found in
- <ref id="amd-notes" name="Notes on AMD...">
-
- <sect2>HP-Vectra On Board Ethernet
- <p>
-
- Status -- <em/Supported/
-
- The HP-Vectra has an AMD PCnet chip on the motherboard.
- Earlier kernel versions would detect it as the HP-J2405A
- but that would fail, as the Vectra doesn't report the
- IRQ and DMA channel like the J2405A.
- Get a kernel newer than v1.1.53 to avoid this
- problem.
-
- DMA selection and chip numbering information can be found in
- <ref id="lance" name="AMD LANCE">.
-
- More technical information on LANCE based cards can be found in
- <ref id="amd-notes" name="Notes on AMD...">
-
- <sect2>HP 10/100 VG Any Lan Cards (27248B, J2573, J2577, J2585)
- <p>
-
- Status -- <em/Supported/
-
- As of early 1.3.x kernels, this driver was made available
- by Jaroslav Kysela, (perex@pf.jcu.cz). Due to the newness of
- the driver and the relatively small number of VG cards in
- use, feedback on this driver has been low.
-
- Donald has also written a driver for these cards. Unlike the
- above, it is not presently in the standard kernel source tree.
- Check out the following URL for more information on Donald's
- 100VG work.
-
- <url url="http://cesdis.gsfc.nasa.gov/linux/drivers/100vg.html"
- name="Donald's 100VG Page">
-
-
- <sect1>IBM / International Business Machines<label id="ibm">
- <p>
-
- <sect2>IBM Thinkpad 300<label id="thinkpad-300">
- <p>
-
- Status -- <em/Supported/
-
- This is compatible with the Intel based Zenith Z-note.
- See <ref id="z-note" name="Z-note"> for more info.
-
- Supposedly this site has a comprehensive database of
- useful stuff for newer versions of the Thinkpad. I haven't
- checked it out myself yet.
-
- <url url="http://peipa.essex.ac.uk/html/linux-thinkpad.html"
- Name="Thinkpad-info">
-
- For those without a WWW browser handy, try
- <tt>peipa.essex.ac.uk:/pub/tp750/</tt>
-
- <sect2>IBM Credit Card Adaptor for Ethernet
- <p>
-
- Status -- <em/Semi-Supported/
-
- People have been using this PCMCIA card with Linux as well.
- Similar points apply, those being that you need a supported
- PCMCIA chipset on your notebook, and that you will have to
- patch the PCMCIA support into the standard kernel.
-
- See <ref id="pcmcia" name="PCMCIA Support"> in this document,
- and if you can, have a look at:
-
- <url url="http://cesdis.gsfc.nasa.gov/linux/pcmcia.html"
- name="Don's PCMCIA Stuff">
-
-
- <sect2>IBM Token Ring
- <p>
-
- Status -- <em/Semi-Supported/
-
- To support token ring
- requires more than only writing a device driver, it also requires
- writing the source routing routines for token ring. It is the
- source routing that would be the most time comsuming to write.
-
- Peter De Schrijver has been spending some time on Token Ring
- lately. and has worked with IBM ISA and
- MCA token ring cards.
-
- The present token ring code has been included into the first
- of the 1.3.x series kernels.
-
- Peter says that it was originally tested on an MCA 16/4 Megabit Token
- Ring board, but it should work with other Tropic based boards.
-
- <sect1>ICL Ethernet Cards
- <p>
-
- <sect2>ICL EtherTeam 16i/32
- <p>
- Status -- <em/Supported/
-
- Mika Kuoppala (miku@pupu.elt.icl.fi) wrote this driver, and
- it was included into early 1.3.4x kernels. It uses the
- Fujitsu MB86965 chip that is also used on the at1700 cards.
-
- <sect1>Intel Ethernet Cards<label id="intel">
- <p>
-
- <sect2>Ether Express
- <p>
-
- Status -- <em/Semi-Supported/
-
- This card uses the intel i82586. (Surprise, huh?)
- The driver is in the standard release of the
- kernel, as an alpha driver. See
- <ref id="alfa" name="Alpha Drivers"> for important
- information on using alpha-test ethernet drivers
- with Linux.
-
- The reason is that the driver works well with slow machines,
- but the i82586 occasionally hangs from the packet buffer
- contention that a fast machine can cause.
- One reported hack/fix is to change all of the outw()
- calls to outw_p(). Also, the driver is missing promiscuous
- and multicast modes. (See <ref id="promisc" name="Multicast and...">)
-
- There is also the standard way of using the chip (read slower)
- that is described in the chip manual, and used in
- other i82586 drivers, but this would require a re-write
- of the entire driver.
-
- There is some technical information available on
- the i82586 in <ref id="i82586" name="Programming the Intel Chips">
- and also in the source code for the driver `eexpress.c'. Don't
- be afraid to read it. ;-)
-
- <sect2>Ether Express PRO/10
- <p>
-
- Status -- <em/Supported/
-
- Bao Chau Ha has written a driver for these cards that has been
- included into early 1.3.x kernels. It may also work with some of
- the Compaq built-in ethernet systems that are based on the
- i82595 chip.
-
- <sect2>Ether Express PRO/100
- <p>
-
- Status -- <em/Not Supported/
-
- These PCI and EISA cards use a different chip that the PRO/10
- cards do. Bao is currently trying to get a datasheet out
- of Intel without having to sign a NDA. Good Luck!
-
- <sect1>LinkSys
- <p>
-
- <sect2>LinkSys Pocket Ethernet Adapter Plus (PEAEPP)
- <p>
-
- Status -- <em/Supported/
-
- This is supposedly a DE-620 clone, and is reported to
- work well with that driver. See
- <ref id="de-620" name="DE-620"> for more information.
-
- <sect2>LinkSys PCMCIA Adaptor
- <p>
-
- Status -- <em/Supported/
-
- This is supposed to be a re-badged DE-650. See
- <ref id="de-650" name="DE-650"> for more information.
-
- <sect1>Microdyne
- <p>
-
- <sect2>Microdyne Exos 205T
- <p>
-
- Status -- <em/Semi-Supported/
-
- Another i82586 based card. Dirk Niggemann
- <tt/dabn100@hermes.cam.ac.uk/
- has written a driver that he classes as ``pre-alpha''
- that he would like people to test. Mail him for more details.
-
- <sect1>Mylex
- <p>
-
- Mylex can be reached at the following numbers, in case anyone
- wants to ask them anything.
-
- <verb>
- MYLEX CORPORATION, Fremont
- Sales: 800-77-MYLEX, (510) 796-6100
- FAX: (510) 745-8016.
- </verb>
-
- <sect2>Mylex LNP101
- <p>
-
- Status -- <em/Supported/
-
- This is a PCI card that is based on DEC's 21040 chip.
- It is selectable between 10BaseT, 10Base2 and 10Base5 output.
- The LNP101 card has been verified to work with the generic
- 21040 driver.
-
- See the section on the 21040 chip
- (<ref id="dec-21040" name="DEC 21040">)
- for more information.
-
- <sect2>Mylex LNP104
- <p>
-
- Status -- <em/Not Supported/
-
- The LNP104 uses the DEC 21050 chip to deliver <em/four/
- independent 10BaseT ports. It may work with 21040 drivers,
- but nobody has tried yet.
-
- <sect2>Mylex M390B EISA
- <p>
-
- Status -- <em/Not Supported/
-
- Russ writes that "...it's a fairly vanilla
- 8390-based adapter. Only really tricky thing is that, like the
- Interlan es3210, you MUST do only 32-bit transfers to/from the board.
- Look at the Crynwr packet driver and try making the
- changes yourself...''
-
- <sect1>Novell Ethernet, NExxxx and associated clones.<label id="novell">
- <p>
-
- The prefix `NE' came from Novell Ethernet. Novell followed the
- cheapest NatSemi databook design and sold the manufacturing rights
- (spun off?) Eagle, just to get reasonably-priced ethercards into
- the market. (The now ubiquitous NE2000 card.)
-
- <sect2>NE1000, NE2000<label id="ne2k">
- <p>
-
- Status -- <em/Supported/
-
- NOTE: If you are using a kernel that is older than
- v1.2.9, it is <em>strongly</em> recommended that you
- upgrade to a newer version. There was an important
- bugfix made to the ne driver in 1.2.7, and another
- important bugfix made to the upper layers (dev.c) in
- 1.2.9. Both of these bugs can cause a ne2000 card
- to hang your computer.
-
- The ne2000 is now a generic name for a bare-bones design around
- the NatSemi 8390 chip. They use programmed I/O rather than
- shared memory, leading to easier installation but
- slightly lower performance and a few problems. Again,
- the savings of using an 8 bit NE1000 over the NE2000
- are only warranted if you expect light use. Some
- recently introduced NE2000 clones use the National
- Semiconductor `AT/LANTic' 83905 chip, which offers
- a shared memory mode similar to the 8013 and EEPROM
- or software configuration. Some problems can arise
- with poor NE2000 clones. See
- <ref id="ne2k-probs" name="Problems with...">, and
- <ref id="ne2k-clones" name="Poor NE2000 Clones">
- In general it is not a good idea to put a NE2000
- clone at I/O address <tt/0x300/ because nearly
- <em/every/ device driver probes there at boot. Some
- poor NE2000 clones don't take kindy to being prodded
- in the wrong areas, and will respond by locking your
- machine.
-
- Donald has written a NE2000 diagnostic program, but it
- is still presently in alpha test. (ne2k)
- See <ref id="diag" name="Diagnostic Programs"> for more
- information.
-
- If you intend on using this driver as a loadable module
- you should probably see
- <ref id="modules" name="Using the Ethernet Drivers as Modules">
- and also
- <ref id="mod8390" name="8390 Based Cards as Modules"> for
- module specific information.
-
- <sect2>NE1500, NE2100<label id="ne1500">
- <p>
-
- Status -- <em/Supported/
-
- These cards use the original 7990 LANCE chip from AMD and
- are supported using the Linux lance driver. Newer NE2100
- clones use the updated PCnet/ISA chip from AMD.
-
- Some earlier versions of the lance driver had problems
- with getting the IRQ line via autoIRQ from the original
- Novell/Eagle 7990 cards. Hopefully this is now fixed.
- If not, then specify the IRQ via LILO, and let us know
- that it still has problems.
-
- DMA selection and chip numbering information can be found in
- <ref id="lance" name="AMD LANCE">.
-
- More technical information on LANCE based cards can be found in
- <ref id="amd-notes" name="Notes on AMD...">
-
- <sect2>NE3200<label id="ne3200">
- <p>
-
- Status -- <em/Not Supported/
-
- This card uses a lowly 8MHz 80186, and hence you are better
- off using a cheap NE2000 clone. Even if a driver was available,
- the NE2000 card would most likely be faster.
-
- <sect1>Pure Data
- <p>
-
- <sect2>PDUC8028, PDI8023
- <p>
-
- Status -- <em/Supported/
-
- The PureData PDUC8028 and PDI8023 series of cards are reported
- to work, thanks to special probe code contributed by Mike
- Jagdis <tt/jaggy@purplet.demon.co.uk/. The support is integrated
- with the WD driver.
-
- <sect1>Racal-Interlan
- <p>
-
- <sect2>NI5210
- <p>
-
- Status -- <em/Semi-Supported/
-
- Michael Hipp has written a driver for this card. It is included
- in the standard kernel as an `alpha' driver. Michael would like
- to hear feedback from users that have this card. See
- <ref id="alfa" name="Alpha Drivers"> for important
- information on using alpha-test ethernet drivers
- with Linux.
-
- Michael says that ``the internal sysbus seems to be slow.
- So we often lose packets because of overruns while receiving
- from a fast remote host.''
-
- This card also uses one of the Intel chips. See
- <ref id="i82586" name="Programming the Intel Chips">
- for more technical information.
-
-
- <sect2>NI6510 (not EB)<label id="ni65xx">
- <p>
-
- Status -- <em/Semi-Supported/
-
- There is also a driver for the LANCE based NI6510, and it
- is also written by Michael Hipp. Again, it is also an
- `alpha' driver. For some reason, this card is not compatible
- with the generic LANCE driver. See
- <ref id="alfa" name="Alpha Drivers"> for important
- information on using alpha-test ethernet drivers
- with Linux.
-
- <sect2>EtherBlaster (aka NI6510EB)
- <p>
- Status -- <em/Supported/
-
- As of kernel 1.3.23, the generic LANCE driver had a check
- added to it for the <tt/0x52, 0x44/ NI6510EB specific signature.
- Others have reported that this signature is not the same
- for all NI6510EB cards however, which will cause the lance
- driver to not detect your card. If this happens to you, you
- can change the probe (at about line 322 in lance.c) to printk()
- out what the values are for your card and then use them instead
- of the <tt/0x52, 0x44/ defaults.
-
- The cards should probably be run in `high-performance' mode
- and not in the NI6510 compatible mode when using the lance driver.
-
- <sect1>Sager
- <p>
-
- <sect2>Sager NP943
- <p>
-
- Status -- <em/Semi-Supported/
-
- This is just a 3c501 clone, with a different S.A. PROM
- prefix. I assume it is equally as brain dead as the
- original 3c501 as well. Kernels 1.1.53 and up check
- for the NP943 i.d. and then just treat it as a 3c501
- after that. See <ref id="3c501" name="3Com 3c501">
- for all the reasons as to why you really don't want
- to use one of these cards.
-
- <sect1>Schneider & Koch
- <p>
-
- <sect2>SK G16
- <p>
-
- Status -- <em/Supported/
-
- This driver was included into the v1.1 kernels, and it was
- written by PJD Weichmann and SWS Bern. It appears that the
- SK G16 is similar to the NI6510, in that it is based on
- the first edition LANCE chip (the 7990). Once again, it
- appears as though this card won't work with the generic
- LANCE driver.
-
- <sect1>SEEQ
- <p>
-
- <sect2>SEEQ 8005
- <p>
-
- Status -- <em/Supported/
-
- This driver was included into early 1.3.x kernels, and
- was written by Hamish Coleman. There is little information
- about the card included in the driver, and hence little
- information to be put here. If you have a question, you
- are probably best off e-mailing hamish@zot.apana.org.au
-
- <sect1>SMC (Standard Microsystems Corp.)
- <p>
-
- Please see <ref id="smc" name="Western Digital"> for
- information on SMC cards.
-
- <sect1>Thomas Conrad
- <p>
-
- <sect2>Thomas Conrad TC-5048
- <p>
-
- This is yet another PCI card that is based on DEC's 21040 chip.
-
- See the section on the 21040 chip
- (<ref id="dec-21040" name="DEC 21040">)
- for more information.
-
-
- <sect1>Western Digital / SMC <label id="smc">
- <p>
-
- The ethernet part of Western Digital has been bought out by SMC.
- One common mistake people make is that the relatively new SMC Elite Ultra
- is the same as the older SMC Elite16 models -- this is <bf/not/ the case.
-
- Here is how to contact SMC (not that you should need to.)
- <quote>
- SMC / Standard Microsystems Corp., 80 Arkay Drive, Hauppage, New York,
- 11788, USA.
- </quote>
-
- Technical Support via phone:
- <verb>
- 800-992-4762 (USA)
- 800-433-5345 (Canada)
- 516-435-6250 (Other Countries)
- </verb>
-
- Literature requests:
- <verb>
- 800-SMC-4-YOU (USA)
- 800-833-4-SMC (Canada)
- 516-435-6255 (Other Countries)
- </verb>
-
- Technical Support via E-mail:
- <verb>
- techsupt@ccmail.west.smc.com
- </verb>
-
- FTP Site:
- <verb>
- ftp.smc.com
- </verb>
-
- <sect2>WD8003, SMC Elite
- <p>
- Status -- <em/Supported/
-
- These are the 8-bit versions of the card. The
- 8 bit 8003 is slightly less expensive, but only
- worth the savings for light use. Note that some
- of the non-EEPROM cards (clones with jumpers, or
- old <em/old/ old wd8003 cards) have no way of reporting
- the IRQ line used. In this case, auto-irq is used, and if
- that fails, the driver silently assings IRQ 5.
- Information regarding what the jumpers on old non-EEPROM
- wd8003 cards do can be found in conjunction with the
- SMC setup/driver disks stored on
- <tt/dorm.rutgers.edu/ in the directory
- <tt>/pub/novell/nic_drvs/</tt>. Note that some of the
- newer SMC `SuperDisk' programs will fail to detect
- the old EEPROM-less cards. The file <tt/SMCDSK46.EXE/
- seems to be a good all-round choice. Also the jumper
- settings for old cards are in an ascii text file in the
- aforementioned archive. The latest (greatest?) version
- can be obtained from <tt/ftp.smc.com/.
-
- As these are basically the
- same as their 16 bit counterparts (WD8013 / SMC Elite16),
- you should see the next section for more information.
-
-
- <sect2>WD8013, SMC Elite16<label id="8013">
- <p>
-
- Status -- <em/Supported/
-
- Over the
- years the design has added more registers and an
- EEPROM. Clones usually go by the `8013' name, and
- usually use a non-EEPROM (jumpered) design.
- Late model SMC cards will have two main PLCC chips
- on board; the SMC 83c690 and the SMC 83c694.
- The shared memory design makes the cards 10-20 &percnt faster,
- than PIO cards, especially with larger packets.
- More importantly, from the
- driver's point of view, it avoids a few bugs in the
- programmed-I/O mode of the 8390, allows safe
- multi-threaded access to the packet buffer, and
- it doesn't have a programmed-I/O data register that
- hangs your machine during warm-boot probes.
-
- Non-EEPROM cards that can't just read the selected
- IRQ will attempt auto-irq, and if that fails, they will
- silently assign IRQ 10. (8 bit versions will assign IRQ 5)
-
- Cards with a non standard amount of memory on board can
- have the memory size specified at boot (or at `insmod'
- time if using modules). The standard memory size is
- 8kB for an 8bit card and 16kB for a 16bit card.
- For example, the older WD8003EBT cards could be jumpered
- for 32kB memory. To make full use of that RAM, you would
- use something like (for i/o=0x280 and IRQ 9):
- <code>
- LILO: linux ether=9,0x280,0xd0000,0xd8000,eth0
- </code>
-
- Also see <ref id="8013-probs" name="8013 problems">
- for some of the more common problems that people have.
-
- If you intend on using this driver as a loadable module
- you should probably see
- <ref id="modules" name="Using the Ethernet Drivers as Modules">
- and also
- <ref id="mod8390" name="8390 Based Cards as Modules"> for
- module specific information.
-
- <sect2>SMC Elite Ultra<label id="ultra">
- <p>
-
- Status -- <em/Supported/
-
- This ethercard is based on a new chip from SMC, with
- a few new features. While it has a mode that is
- similar to the older SMC ethercards, it's not entirely
- compatible with the old WD80*3 drivers. However, in
- this mode it shares most of its code with the other
- 8390 drivers, while operating slightly faster than a
- WD8013 clone.
-
- Since part of the Ultra <em/looks like/
- an 8013, the Ultra probe is supposed to find an
- Ultra before the wd8013 probe has a chance to
- mistakenly identify it.
-
- Donald mentioned that it is possible to write a separate
- driver for the Ultra's `Altego' mode which allows
- chaining transmits at the cost of inefficient use of receive
- buffers, but that will probably not happen.
-
- Bus-Master SCSI host adaptor users take note: In the
- manual that ships with Interactive UNIX, it mentions
- that a bug in the SMC Ultra will cause data corruption
- with SCSI disks being run from an aha-154X host adaptor.
- This will probably bite aha-154X compatible cards, such
- as the BusLogic boards, and the AMI-FastDisk SCSI host
- adaptors as well.
-
- SMC has acknowledged the problem occurs with
- Interactive, and older Windows NT drivers. It is
- a hardware conflict with early revisions of the card
- that can be worked around in the driver design. The current
- Ultra driver protects against this by only enabling the
- shared memory during data transfers with the card. Make sure
- your kernel version is at least 1.1.84, or that the driver
- version reported at boot is at least <tt/smc-ultra.c:v1.12/
- otherwise you are vulnerable.
-
- If you intend on using this driver as a loadable module
- you should probably see
- <ref id="modules" name="Using the Ethernet Drivers as Modules">
- and also
- <ref id="mod8390" name="8390 Based Cards as Modules"> for
- module specific information.
-
-
- <sect2>SMC 8416 (EtherEZ)
- <p>
-
- Status -- <em/Supported/
-
- This card uses SMC's 83c795 chip and supports the Plug 'n Play
- specification. It also has an <em/SMC Ultra/ compatible mode,
- which allows it to be used with the Linux Ultra driver.
- In this compatibility mode, it uses shared memory
- instead of programmed i/o. Be sure to set your card for
- this compatibility mode. See the above information for
- notes on the Ultra driver.
-
- Note that the EtherEZ specific checks were added to the
- SMC Ultra driver in 1.1.84, and hence earlier kernel versions
- will not detect or handle these cards correctly.
-
-
- <sect2>SMC 8432 PCI (EtherPower)<label id="smc-pci">
- <p>
-
- Status -- <em/Supported/
-
- These cards are
- a basic DEC 21040 implementation, i.e. one big chip
- and a couple of transceivers. Donald has used one
- of these cards for his development of the generic
- 21040 driver (aka <tt/tulip.c/). Thanks to Duke Kamstra,
- once again, for supplying a card to do development on.
-
- Some of the newer revisons of this card use the newer
- DEC 21041 chip, which may cause problems with
- older versions of the tulip driver. Make sure you are
- using the latest driver release.
-
- See <ref id="dec-21040" name="DEC 21040"> for more
- details on using one of these cards, and the current
- status of the driver.
-
- <sect2>SMC 3008
- <p>
-
- Status -- <em/Not Supported/
-
- These 8 bit cards are based on the Fujitsu MB86950, which is an
- ancient version of the MB86965 used in the Linux at1700
- driver. Russ says that you could probably hack up a driver
- by looking at the at1700.c code and his DOS packet driver
- for the Tiara card (tiara.asm)
-
- <sect2>SMC 3016
- <p>
-
- Status -- <em/Not Supported/
-
- These are 16bit i/o mapped 8390 cards, much similar to a generic
- NE2000 card. If you can get the specifications from SMC, then
- porting the NE2000 driver would probably be quite easy.
-
- <sect2>SMC 9000
- <p>
-
- Status -- <em/Not Supported/
-
- These cards are VLB cards based on the 91c92 chip. They are
- fairly expensive, and hence the demand for a driver is pretty
- low at the moment.
-
- <sect1>Xircom<label id="xircom">
- <p>
-
- Another group that won't release documentation. No cards
- supported. Don't look for any support in the future unless
- they release their programming information. And this is
- highly unlikely, as they <em/forbid/ you from even reverse-
- engineering their drivers. If you are already stuck with one,
- see if you can trade it off on some DOS (l)user.
-
- And if you just want to verify that this is the case, you can
- reach Xircom at 1-800-874-7875, 1-800-438-4526 or +1-818-878-7600.
- They used to advertise that their products "work with all
- network operating systems", but have since stopped. Wonder
- why...
-
- <sect2>PE1, PE2, PE3-10B*
- <p>
-
- Status -- <em/Not Supported/
-
- Not to get your hopes up, but if you have one of these parallel
- port adaptors, you may be able to use it in the DOS emulator
- with the Xircom-supplied DOS drivers. You will have to allow
- DOSEMU access to your parallel port, and will probably have
- to play with SIG (DOSEMU's Silly Interrupt Generator).
-
- <sect1>Zenith<label id="zenith">
- <p>
-
- <sect2>Z-Note<label id="z-note">
- <p>
-
- Status -- <em/Supported/
-
- The built-in Z-Note network adaptor is based on the Intel
- i82593 using <em/two/ DMA channels. There is an (alpha?) driver
- available in the present kernel version. As with all notebook
- and pocket adaptors, it is under the `Pocket and portable
- adaptors' section when running <tt/make config/.
- See <ref id="i82586" name="Programming the Intel chips">
- for more technical information.
- Also note that the IBM ThinkPad 300 is compatible with the Z-Note.
-
- <sect1>Znyx<label id="zynx">
- <p>
-
- <sect2>Znyx ZX342 (DEC 21040 based)
- <p>
-
- Status -- <em/Supported/
-
- You have a choice of <em/two/ drivers for cards based on this
- chip. There is the DE425 driver written by David, and the
- generic 21040 driver that Donald has written.
-
- Note that as of 1.1.91, David has added a compile time option that
- may allow non-DEC cards (such as the Znyx cards) to work with
- this driver. Have a look at <tt/README.de4x5/ for details.
-
- See <ref id="dec-21040" name="DEC 21040">
- for more information on these cards, and the present driver
- situation.
-
- <sect1>Drivers for Non-Ethernet Devices
- <p>
-
- There are a few other drivers that are in the linux source,
- that present an <em/ethernet-like/ device to network
- programs, while not really being ethernet. These are briefly
- listed here for completeness.
-
- <tt/dummy.c/ - The purpose of this driver is to provide a device
- to point a route through, but not to actually transmit packets.
-
- <tt/eql.c/ - Load Equalizer, enslaves multiple devices (usually
- modems) and balances the Tx load across them while presenting
- a single device to the network programs.
-
- <tt/ibmtr.c/ - IBM Token Ring, which is not really ethernet.
- Broken-Ring requires source routing and other uglies.
-
- <tt/loopback.c/ - Loopback device, for which all packets
- from you machine and destined for your own machine go.
- It essentially just moves the packet off the Tx queue and
- onto the Rx queue.
-
- <tt/pi2.c/ - Ottawa Amateur Radio Club PI and PI2 interface.
-
- <tt/plip.c/ - Parallel Line Internet Protocol, allows two
- computers to send packets to each other over two joined
- parallel ports in a point-to-point fashion.
-
- <tt/ppp.c/ - Point-to-Point Protocol (RFC1331), for the
- Transmission of Multi-protocol Datagrams over a
- Point-to-Point Link (again usually modems).
-
- <tt/slip.c/ - Serial Line Internet Protocol, allows two
- computers to send packets to each other over two joined
- serial ports (usually via modems) in a point-to-point fashion.
-
- <tt/tunnel.c/ - Provides an IP tunnel through which you can
- tunnel network traffic transparently across subnets
-
- <tt/wavelan.c/ - An Ethernet-like radio transceiver
- controlled by the Intel 82586 coprocessor which is used on
- other ethercards such as the Intel EtherExpress.
-
- <sect>Cables, Coax, Twisted Pair<label id="cable">
- <p>
- If you are starting a network from scratch, it's considerably less
- expensive to use thin ethernet, RG58 co-ax cable with BNC connectors,
- than old-fashioned thick ethernet, RG-5 cable with N connectors, or
- 10baseT, twisted pair telco-style cables with RJ-45 eight wire `phone'
- connectors. See <ref id="cable-intro" name="Type of cable..."> for
- an introductory look at cables.
-
- Also note that the FAQ from <em/comp.dcom.lans.ethernet/ has a lot
- of useful information on cables and such. Look in
- <tt/dorm.rutgers.edu/ for the file
- <tt>/pub/novell/info_and_docs/Ethernet.FAQ</tt>
-
- <sect1>Thin Ethernet (thinnet)<label id="bnc">
- <p>
-
- Thin ethernet is the `ether of choice'. The cable is inexpensive. If
- you are making your own cables solid-core RG58A is $0.27/m. and
- stranded RG58AU is $0.45/m. Twist-on BNC
- connectors are < $2 ea.,
- and other misc. pieces are similarly inexpensive. It is essential
- that you properly terminate each end of the cable with 50 ohm
- terminators, so budget $2 ea. for a pair. It's also vital that
- your cable have no `stubs' -- the `T' connectors must be attached
- directly to the ethercards. The only drawback is that if you have
- a big loop of machines connected together, and some bonehead breaks
- the loop by taking one cable off the side of his tee, the whole
- network goes down because it sees an infinite impedance (open
- circuit) instead of the required 50 ohm termination. Note that
- you can remove the tee piece from the card itself without killing
- the whole subnet, as long as you don't remove the cables from the
- tee itself. Of course this will disturb the machine that you
- pull the actual tee off of. 8-) And if you are doing a small
- network of two machines, you <em/still/ need the tees and the 50 ohm
- terminators -- you <em/can't/ just cable them together!
-
-
- <sect1>Twisted Pair<label id="utp">
- <p>
-
- Twisted pair networks require active hubs,
- which start around $200,
- and the raw cable cost can actually be higher than thinnet. They are
- usually sold using the claim that you can use your existing telephone
- wiring, but it's a rare installation where that turns out to be the
- case. The claim that you can upgrade to higher speeds is also
- suspect, as most proposed schemes use higher-grade
- (read $$) cable and
- more sophisticated termination ($$$)
- than you would likely install on
- speculation. New gizmos are floating around which allow you to
- daisy-chain machines together, and the like. For example,
- Farallon sells EtherWave adaptors and transceivers. This device
- allows multiple 10baseT devices to be daisy-chained. They also
- sell a 3c509 clone that includes the EtherWave transceiver.
- The drawback is that it's more expensive and less reliable than a
- cheap ($100-$150) mini-hub and another ethercard.
- You probably should either go for the hub approach or switch over
- to 10base2 thinnet.
-
- On the other hand, hubs are rapidly dropping in price, all 100Mb/sec
- ethernet proposals use twisted pair, and most new business
- installations use twisted pair. (This is probably to avoid the
- problem with idiots messing with the BNC's as described above.)
-
- Also, Russ Nelson adds that `New installations should use Category 5
- wiring. Anything else is a waste of your installer's time, as
- 100Base-whatever is going to require Cat 5.'
-
- If you are only connecting two machines, it is possible to avoid
- using a hub, by swapping the Rx and Tx pairs (1-2 and 3-6).
-
- If you hold the RJ-45 connector facing you (as if you were
- going to plug it into your mouth) with the lock tab on the top,
- then the pins are numbered 1 to 8 from left to right. The pin
- usage is as follows:
-
- <verb>
- Pin Number Assignment
- ---------- ----------
- 1 Output Data (+)
- 2 Output Data (-)
- 3 Input Data (+)
- 4 Reserved for Telephone use
- 5 Reserved for Telephone use
- 6 Input Data (-)
- 7 Reserved for Telephone use
- 8 Reserved for Telephone use
- </verb>
-
- Some cards, like the wd8013 can sense reversed polarity, and
- will adjust accordingly. Also note that 3 and 6 <bf/must/ be
- a twisted pair. If you make 3-4 a twisted pair, and 5-6 the
- other twisted pair, your cable may work for lengths less than
- a metre, but will <em/fail miserably/ for longer lengths.
-
- Note that before 10BaseT was ratified as a standard, there
- existed other network formats using RJ-45
- connectors, and the same wiring scheme as above. Examples
- are SynOptics's LattisNet, and AT&T's StarLAN.
- In some cases, (as with early 3C503 cards) you could set jumpers
- to get the card to talk to hubs of different types, but in most cases
- cards designed for these older types of networks will not work with
- standard 10BaseT networks/hubs. (Note that if the cards also have
- an AUI port, then there is no reason as to why you can't use that,
- combined with an AUI to 10BaseT transceiver.)
-
- <sect1>Thick Ethernet
- <p>
- Thick ethernet is mostly obsolete, and is usually used only to remain
- compatible with an existing implementation. You can stretch the rules
- and connect short spans of thick and thin ethernet together with a
- passive $3 N-to-BNC connector, and that's often the best
- solution to expanding an existing thicknet. A correct (but expensive)
- solution is to use a repeater in this case.
- </sect>
-
- <sect>Software Configuration and Card Diagnostics<label id="utils">
- <p>
-
- In most cases, if the configuration is done by software,
- and stored in an EEPROM, you will usually have to boot
- DOS, and use the supplied DOS program to set the cards
- IRQ, I/O, mem_addr and whatnot. Besides, hopefully it is
- something you will only be setting once. For those that
- don't have the DOS utility available, note that a fair
- number of NIC setup/driver disks (e.g. 3Com, SMC/WD and
- Allied Telesis NIC's) are available from <tt/dorm.rutgers.edu/
- in the directory <tt>/pub/novell/nic_drvs/</tt>
- However, there are some cards for which Linux versions of
- the config utils exist, and they are listed here.
-
- Also, Donald has written a few small card diagnostic
- programs that run under Linux. Most of these are a result
- of debugging tools that he has created while writing the
- various drivers. Don't expect
- fancy menu-driven interfaces. You will have to read the
- source code to use most of these. Even if your particular
- card doesn't have a corresponding diagnostic, you can
- still get lots of information just by typing
- <tt>cat /proc/net/dev</tt> -- assuming that your card
- was at least detected at boot.
-
- In either case, you will have to run most of these programs
- as root (to allow I/O to the ports) and you probably want
- to shut down the ethercard before doing so by typing
- <tt/ifconfig eth0 down/ (Note: replace <tt/eth0/ with
- <tt/atp0/ or whatever when appropriate.)
-
- <sect1>Configuration Programs for Ethernet Cards<label id="config">
- <p>
-
- For people with wd80x3 cards, there is the program <tt/wdsetup/
- which can be found in <tt/wdsetup-0.6a.tar.gz/ on Linux ftp sites.
- I am not sure if it is being actively maintained or not, as it has
- not been updated for quite a while. If it works fine for you
- then great, if not, use the DOS version that you should have got
- with your card. If you don't have the DOS version, you will be
- glad to know that the SMC setup/driver disks are available
- at the <tt/dorm.rutgers.edu/ site mentioned above.
- Of course, you <em/have/ to have an EEPROM card to use this utility.
- Old, <em/old/ wd8003 cards, and some wd8013 clones use jumpers
- to set up the card instead.
-
- The Digital EtherWorks 3 card can be configured in a similar
- fashion to the DOS program <tt/NICSETUP.EXE/. David C. Davies
- wrote this and other tools for the EtherWorks 3 in conjunction
- with the driver. Look on <tt/sunsite.unc.edu/ in the directory
- <tt>/pub/linux/system/Network/management</tt> for the file
- that is named <tt/ewrk3tools-X.XX.tar.gz/.
-
- Some Nat Semi DP83905 implementations (such as the AT/LANTIC
- and the NE2000+) are software configurable. (Note that this
- card can also emulate a wd8013!) You can get the file
- <tt>/pub/linux/setup/atlantic.c</tt> from Donald's ftp
- server, <tt/cesdis.gsfc.nasa.gov/ to configure this card.
- Be careful when configuring NE2000+ cards, as you can give
- them bad setting values which will require you to open the
- case and switch a jumper to force it back to sane settings.
-
- The 3Com Etherlink III family of cards (i.e. 3c5x9) can
- be configured by using another config utility from Donald.
- You can get the file <tt>/pub/linux/setup/3c5x9setup.c</tt>
- from Donald's ftp server, <tt/cesdis.gsfc.nasa.gov/ to
- configure these cards. (Note that the DOS 3c5x9B config
- utility may have more options pertaining to the new ``B''
- series of the Etherlink III family.)
-
-
-
- <sect1>Diagnostic Programs for Ethernet Cards<label id="diag">
- <p>
-
- Any of the diagnostic programs that Donald has written can
- be obtained from this URL.
-
- <url url="http://cesdis.gsfc.nasa.gov/pub/linux/diag/diagnostic.html"
- name="Ethercard Diagnostics">
-
- Allied Telesis AT1700 -- look for the file
- <tt>/pub/linux/diag/at1700.c</tt> on <tt/cesdis.gsfc.nasa.gov/.
-
- Cabletron E21XX -- look for the file
- <tt>/pub/linux/diag/e21.c</tt> on <tt/cesdis.gsfc.nasa.gov/.
-
- HP PCLAN+ -- look for the file
- <tt>/pub/linux/diag/hp+.c</tt> on <tt/cesdis.gsfc.nasa.gov/.
-
- Intel EtherExpress -- look for the file
- <tt>/pub/linux/diag/eexpress.c</tt> on <tt/cesdis.gsfc.nasa.gov/.
-
- NE2000 cards -- look for the file
- <tt>/pub/linux/diag/ne2k.c</tt> on <tt/cesdis.gsfc.nasa.gov/.
-
- RealTek (ATP) Pocket adaptor -- look for the file
- <tt>/pub/linux/diag/atp-diag.c</tt> on <tt/cesdis.gsfc.nasa.gov/.
-
- All Other Cards -- try typing <tt>cat /proc/net/dev</tt> and
- see what useful info the kernel has on the card in question.
-
- <sect>Technical Information<label id="tech-intro">
- <p>
-
- For those who want to play with the present drivers, or try to make
- up their own driver for a card that is presently unsupported, this
- information should be useful. If you do not fall into this category,
- then perhaps you will want to skip this section.
-
- <sect1>Probed Addresses<label id="probe">
- <p>
-
- While trying to determine what ethernet card is there, the following
- addresses are autoprobed, assuming the type and specs of the card
- have not been set in the kernel. The file names below are
- in /usr/src/linux/drivers/net/
-
- <code>
- 3c501.c 0x280, 0x300
- 3c503.c: 0x300, 0x310, 0x330, 0x350, 0x250, 0x280, 0x2a0, 0x2e0
- 3c505.c: 0x300, 0x280, 0x310
- 3c507.c: 0x300, 0x320, 0x340, 0x280
- 3c509.c: Special ID Port probe
- apricot.c 0x300
- at1700.c: 0x300, 0x280, 0x380, 0x320, 0x340, 0x260, 0x2a0, 0x240
- atp.c: 0x378, 0x278, 0x3bc
- depca.c 0x300, 0x200
- de600.c: 0x378
- de620.c: 0x378
- eexpress.c: 0x300, 0x270, 0x320, 0x340
- hp.c: 0x300, 0x320, 0x340, 0x280, 0x2C0, 0x200, 0x240
- hp-plus.c 0x200, 0x240, 0x280, 0x2C0, 0x300, 0x320, 0x340
- lance.c: 0x300, 0x320, 0x340, 0x360
- ne.c: 0x300, 0x280, 0x320, 0x340, 0x360
- ni52.c 0x300, 0x280, 0x360, 0x320, 0x340
- ni65.c 0x300, 0x320, 0x340, 0x360
- smc-ultra.c: 0x200, 0x220, 0x240, 0x280, 0x300, 0x340, 0x380
- wd.c: 0x300, 0x280, 0x380, 0x240
- </code>
-
- There are some NE2000 clone ethercards out there that are waiting black
- holes for autoprobe drivers. While many NE2000 clones are
- safe until they are enabled, some can't be reset to a safe mode.
- These dangerous ethercards will hang any I/O access to their
- `dataports'. The typical dangerous locations are:
- <code>
- Ethercard jumpered base Dangerous locations (base + 0x10 - 0x1f)
- 0x300 * 0x310-0x317
- 0x320 0x330-0x337
- 0x340 0x350-0x357
- 0x360 0x370-0x377
- </code>
-
- * The 0x300 location is the traditional place to put an ethercard, but
- it's also a popular place to put other devices (often SCSI
- controllers). The 0x320 location is often the next one chosen, but
- that's bad for for the AHA1542 driver probe. The 0x360 location is
- bad, because it conflicts with the parallel port at 0x378.
- If you have two IDE controllers, or two floppy controlers, then
- <tt/0x360/ is also a bad choice, as a NE2000 card will clobber
- them as well.
-
- Note that kernels > 1.1.7X keep a log of who uses
- which i/o ports, and will not let a driver use i/o ports registered
- by an earlier driver. This may result in probes silently failing.
- You can view who is using what i/o ports by typing
- <tt>cat /proc/ioports</tt> if you have the proc filesystem enabled.
-
- To avoid these lurking ethercards, here are the things you can do:
-
- <itemize>
-
- <item> Probe for the device's BIOS in memory space. This is easy
- and always safe, but it only works for cards that always have
- BIOSes, like primary SCSI controllers.
-
- <item> Avoid probing any of the above locations until you think
- you've located your device. The NE2000 clones have a reset range
- from <base>+0x18 to <base>+0x1f that
- will read as 0xff, so probe
- there first if possible. It's also safe to probe in the 8390
- space at <base>+0x00 - <base>+0x0f, but that area
- will return quasi-random values
-
- <item> If you must probe in the dangerous range, for instance if your
- target device has only a few port locations, first check that
- there isn't an NE2000 there. You can see how to do this by
- looking at the probe code in /usr/src/linux/net/inet/ne.c
-
- <item> Use the `reserve' boot time argument to protect volatile
- areas from being probed. See the information on using boot
- time arguments with LILO in
- <ref id="reserve" name="The reserve command">
-
- </itemize>
-
- <sect1>Writing a Driver<label id="skel">
- <p>
-
-
- The only thing that one needs to use an ethernet card with Linux
- is the appropriate driver. For this, it is essential that the
- manufacturer will release the technical programming information to
- the general public without you (or anyone) having to sign your life
- away. A good guide for the likelihood of getting documentation
- (or, if you aren't writing code, the likelihood that someone
- else will write that driver you really, really need) is the
- availability of the Crynwr (nee Clarkson) packet driver. Russ
- Nelson runs this operation, and has been very helpful in supporting
- the development of drivers for Linux. <em/Net-surfers/ can try this
- URL to look up Russ' software.
-
- <url url="http://www.crynwr.com/crynwr/home.html"
- name="Russ Nelson's Packet Drivers">
-
- Given the documentation, you can write a driver for
- your card and use it for Linux (at least in theory).
- Keep in mind that some old hardware that was designed for XT type
- machines will not function very well in a multitasking
- environment such as Linux. Use of these will lead to major
- problems if your network sees a reasonable amount of traffic.
-
- Most cards come with drivers for MS-DOS interfaces such as
- NDIS and ODI, but these are useless for Linux. Many people
- have suggested directly linking them in or automatic
- translation, but this is nearly impossible. The MS-DOS
- drivers expect to be in 16 bit mode and hook into `software
- interrupts', both incompatible with the Linux kernel. This
- incompatibility is actually a feature, as some Linux drivers
- are considerably better than their MS-DOS counterparts. The
- `8390' series drivers, for instance, use ping-pong transmit
- buffers, which are only now being introduced in the MS-DOS world.
-
- (Ping-pong Tx buffers means using at least 2 max-size
- packet buffers for Tx packets. One is loaded while the card
- is transmitting the other. The second is then sent as soon
- as the first finished, and so on. In this way, most cards
- are able to continuously send back-to-back packets onto
- the wire.)
-
- OK. So you have decided that you want to write a driver for the
- Foobar Ethernet card, as you have the programming information,
- and it hasn't been done yet. (...these are the two main
- requirements ;-) You should start with the skeleton
- network driver that is provided
- with the Linux kernel source tree. It can be found in the file
- /usr/src/linux/drivers/net/skeleton.c in all recent kernels.
-
-
- <sect1>Driver interface to the kernel
- <p>
-
- Here are some notes on the functions that you would have to
- write if creating a new driver. Reading this in conjunction
- with the above skeleton driver may help clear things up.
-
-
- <sect2>Probe
- <p>
-
- Called at boot to check for existence of card. Best if it
- can check un-obtrsively by reading from memory, etc. Can
- also read from i/o ports. Initial writing to i/o ports in a probe
- is <em/not good/ as it may kill another device.
- Some device initialization is usually done here (allocating
- i/o space, IRQs,filling in the dev->??? fields etc.)
- You need to know what io ports/mem the card can be
- configured to, how to enable shared memory (if used)
- and how to select/enable interrupt generation, etc.
-
- <sect2>Interrupt handler
- <p>
-
- Called by the kernel when the card posts an interrupt.
- This has the job of determining why the card posted
- an interrupt, and acting accordingly. Usual interrupt
- conditions are data to be rec'd, transmit completed,
- error conditions being reported. You need to know
- any relevant interrupt status bits so that you can
- act accordingly.
-
- <sect2>Transmit function
- <p>
-
- Linked to dev->hard_start_xmit() and is called by the
- kernel when there is some data that the kernel wants
- to put out over the device. This puts the data onto
- the card and triggers the transmit. You need to
- know how to bundle the data and how to get it onto the
- card (shared memory copy, PIO transfer, DMA?) and in
- the right place on the card. Then you need to know
- how to tell the card to send the data down the wire, and
- (possibly) post an interrupt when done.
- When the hardware can't accept additional packets it should set
- the dev->tbusy flag. When additional room is available, usually
- during a transmit-complete interrupt, dev->tbusy should be cleared
- and the higher levels informed with <tt/mark_bh(INET_BH)/.
-
- <sect2>Receive function
- <p>
-
- Called by the kernel interrupt handler when the card reports
- that there is data on the card. It pulls the data off
- the card, packages it into a sk_buff and lets the
- kernel know the data is there for it by doing a
- netif_rx(sk_buff). You need to know how to enable
- interrupt generation upon Rx of data, how to check any
- relevant Rx status bits, and how to get that data off the
- card (again sh mem, PIO, DMA, etc.)
-
- <sect2>Open function
- <p>
-
- linked to dev->open and called by the networking layers
- when somebody does <tt/ifconfig eth0 up/ - this
- puts the device on line and enables it for Rx/Tx of
- data. Any special initialization incantations that were
- not done in the probe sequence (enabling IRQ generation, etc.)
- would go in here.
-
- <sect2>Close function (optional)
- <p>
-
- This puts the card in a sane state when someone
- does <tt/ifconfig eth0 down/.
- It should free the IRQs and DMA channels if the hardware permits,
- and turn off anything that will save power (like the transceiver).
-
- <sect2>Miscellaneous functions
- <p>
-
- Things like a reset function, so that if things go south,
- the driver can try resetting the card as a last ditch effort.
- Usually done when a Tx times out or similar. Also a function
- to read the statistics registers of the card if so equipped.
-
- <sect1>Interrupts and Linux
- <p>
-
- There are two kinds of interrupt handlers in Linux:
- fast ones and slow ones. You decide what kind you are installing by
- the flags you pass to irqaction(). The fast ones, such as the serial
- interrupt handler, run with _all_ interrupts disabled. The normal
- interrupt handlers, such as the one for ethercard drivers, runs with
- other interrupts enabled.
-
- There is a two-level interrupt structure. The `fast' part handles the
- device register, removes the packets, and perhaps sets a flag. After
- it is done, and interrupts are re-enabled, the slow part is run if the
- flag is set.
-
- The flag between the two parts is set by:
-
- <tscreen>
- mark_bh(INET_BH);
- </tscreen>
-
- Usually this flag is set within dev_rint() during a received-packet
- interrupt, and set directly by the device driver during a
- transmit-complete interrupt.
-
- You might wonder why all interrupt handlers cannot run in
- `normal mode' with other interrupts enabled. Ross Biro uses this
- scenario to illustrate the problem:
-
- <itemize>
-
- <item> You get a serial interrupt, and start processing it.
- The serial interrupt is now masked.
-
- <item> You get a network interrupt, and you start transferring
- a maximum-sized 1500 byte packet from the card.
-
- <item> Another character comes in, but this time the interrupts
- are masked!
-
- </itemize>
-
- The `fast' interrupt structure solves this problem by allowing
- bounded-time interrupt handlers to run without the risk of leaving
- their interrupt lines masked by another interrupt request.
-
- There is an additional distinction between fast and slow interrupt
- handlers -- the arguments passed to the handler. A `slow' handler is
- defined as
-
- <code>
-
- static void
- handle_interrupt(int reg_ptr)
- {
- int irq = -(((struct pt_regs *)reg_ptr)->orig_eax+2);
- struct device *dev = irq2dev_map[irq];
- ...
-
- </code>
-
- While a fast handler gets the interrupt number directly
-
- <code>
-
- static void
- handle_fast_interrupt(int irq)
- {
- ...
-
- </code>
-
- A final aspect of network performance is latency. The only board
- that really addresses this is the 3c509, which allows a predictive
- interrupt to be posted. It provides an interrupt response timer so
- that the driver can fine-tune how early an interrupt is generated.
-
- <sect1>Programming the Intel chips (i82586 and i82593)<label id="i82586">
- <p>
-
- These chips are used on a number of cards, namely the 3c507 ('86),
- the Intel EtherExpress 16 ('86), Microdyne's exos205t ('86),
- the Z-Note ('93), and the Racal-Interlan ni5210 ('86).
-
- Russ Nelson writes:
- `Most boards based on the 82586 can reuse quite a bit of their code.
- More, in fact, than the 8390-based adapters. There are only three
- differences between them:
-
- <itemize>
-
- <item> The code to get the Ethernet address,
- <item> The code to trigger CA on the 82586, and
- <item> The code to reset the 82586.
-
- </itemize>
-
- The Intel EtherExpress 16 is an exception, as it I/O maps the 82586.
- Yes, I/O maps it. Fairly clunky, but it works.
-
- Garrett Wollman did an AT&T driver for BSD that uses the BSD
- copyright. The latest version I have (Sep '92) only uses a single
- transmit buffer. You can and should do better than this if you've
- got the memory. The AT&T and 3c507 adapters do; the ni5210 doesn't.
-
- The people at Intel gave me a very big clue on how you queue up
- multiple transmit packets. You set up a list of
- NOP-> XMIT-> NOP-> XMIT-> NOP-> XMIT-> beginning)
- blocks, then you set the
- `next' pointer of all the NOP blocks to themselves. Now you start
- the command unit on this chain. It continually processes the first
- NOP block. To transmit a packet, you stuff it into the next transmit
- block, then point the NOP to it. To transmit the next packet, you
- stuff the next transmit block and point the previous NOP to <em/it/. In
- this way, you don't have to wait for the previous transmit to finish,
- you can queue up multiple packets without any ambiguity as to whether
- it got accepted, and you can avoid the command unit start-up delay.'
-
- <sect1>Technical information from 3Com<label id="3com-tech">
- <p>
-
- If you are interested in working on drivers for 3Com cards,
- you can get technical documentation from 3Com. Cameron has
- been kind enough to tell us how to go about it below:
-
- 3Com's Ethernet Adapters are documented for driver writers
- in our `Technical References' (TRs). These manuals describe
- the programmer interfaces to the boards but they don't talk
- about the diagnostics, installation programs, etc that end
- users can see.
-
- The Network Adapter Division marketing department has the
- TRs to give away. To keep this program efficient, we
- centralized it in a thing called `CardFacts.' CardFacts is
- an automated phone system. You call it with a touch-tone
- phone and it faxes you stuff. To get a TR, call CardFacts
- at 408-727-7021. Ask it for Developer's Order Form,
- document number 9070. Have your fax number ready when you
- call. Fill out the order form and fax it to 408-764-5004.
- Manuals are shipped by Federal Express 2nd Day Service.
-
- After you get a manual, if you still can't figure out how to
- program the board, try our `CardBoard' BBS at
- 1-800-876-3266, and if you can't do that, write
- Andy_Chan@3Mail.3com.com and ask him for alternatives. If
- you have a real stumper that nobody has figured out yet, the
- fellow who needs to know about it is
- Steve_Lebus@3Mail.3com.com.
-
- There are people here who think we are too free with the
- manuals, and they are looking for evidence that the system
- is too expensive, or takes too much time and effort. That's
- why it's important to try to use CardFacts <em/before/ you
- start calling and mailing the people I named here.
-
- There are even people who think we should be like Diamond
- and Xircom, requiring tight `partnership' with driver
- writers to prevent poorly performing drivers from getting
- written. So far, 3Com customers have been really good about
- this, and there's no problem with the level of requests
- we've been getting. We need your continued cooperation and
- restraint to keep it that way.
-
- <verb>
- Cameron Spitzer, 408-764-6339
- 3Com NAD
- Santa Clara
- work: camerons@nad.3com.com
- home: cls@truffula.sj.ca.us
- </verb>
-
-
- <sect1>Notes on AMD PCnet / LANCE Based cards<label id="amd-notes">
- <p>
-
- The AMD LANCE (Local Area Network Controller for Ethernet)
- was the original offering, and has since been replaced by
- the `PCnet-ISA' chip, otherwise known as the 79C960.
- A relatively new chip from AMD, the 79C960, is the heart of many
- new cards being released at present. Note that the name `LANCE'
- has stuck, and some people will refer to the new chip by the old
- name. Dave Roberts of the Network Products Division of AMD was kind
- enough to contribute the following information regarding this chip:
-
- `As for the architecture itself, AMD developed it originally
- and reduced it to a single chip -- the PCnet(tm)-ISA -- over a year
- ago. It's been selling like hotcakes ever since.
-
- Functionally, it is equivalent to a NE1500. The register set
- is identical to the old LANCE with the 1500/2100 architecture
- additions. Older 1500/2100 drivers will work on the PCnet-ISA.
- The NE1500 and NE2100 architecture is basically the same.
- Initially Novell called it the 2100, but then tried to distinguish
- between coax and 10BASE-T cards. Anything that was 10BASE-T only was
- to be numbered in the 1500 range. That's the only difference.
-
- Many companies offer PCnet-ISA based products, including HP,
- Racal-Datacom, Allied Telesis, Boca Research, Kingston Technology, etc.
- The cards are basically the same except that some manufacturers
- have added `jumperless' features that allow the card to
- be configured in software. Most have not. AMD offers a standard
- design package for a card that uses the PCnet-ISA and many
- manufacturers use our design without change.
- What this means is that anybody who wants to write drivers for
- most PCnet-ISA based cards can just get the data-sheet from AMD. Call
- our literature distribution center at (800)222-9323 and ask for the
- Am79C960, PCnet-ISA data sheet. It's free.
-
- A quick way to understand whether the card is a `stock' card
- is to just look at it. If it's stock, it should just have one large
- chip on it, a crystal, a small IEEE address PROM, possibly a socket
- for a boot ROM, and a connector (1, 2, or 3, depending on the media
- options offered). Note that if it's a coax card, it will have some
- transceiver stuff built onto it as well, but that should be near the
- connector and away from the PCnet-ISA.'
-
- There is also some info regarding the LANCE chip in the file
- lance.c which is included in the standard kernel.
-
- A note to would-be card hackers is that different LANCE
- implementations do `restart' in different ways. Some pick up
- where they left off in the ring, and others start right from
- the beginning of the ring, as if just initialised. This is
- a concern when setting the multicast list.
-
- <sect1>Multicast and Promiscuous Mode<label id="promisc">
- <p>
-
- Another one of the things Donald has worked on is
- implementing multicast and promiscuous mode hooks.
- All of the <em/released/ (i.e. <bf/not/ ALPHA) ISA drivers
- now support promiscuous mode.
-
- Donald writes:
- `At first I was planning to do it while implementing either
- the /dev/* or DDI interface, but that's not really the
- correct way to do it. We should only enable multicast or
- promiscuous modes when something wants to look at the
- packets, and shut it down when that application is
- finished, neither of which is strongly related to when the
- hardware is opened or released.
-
- I'll start by discussing promiscuous mode, which is
- conceptually easy to implement. For most hardware you
- only have to set a register bit, and from then on you get
- every packet on the wire. Well, it's almost that easy;
- for some hardware you have to shut the board (potentially
- dropping a few packet), reconfigure it, and then re-enable
- the ethercard. This is grungy and risky, but the
- alternative seems to be to have every application register
- before you open the ethercard at boot-time.
-
- OK, so that's easy, so I'll move on something that's not
- quite so obvious: Multicast. It can be done two ways:
-
- <enum>
-
- <item> Use promiscuous mode, and a packet filter like the
- Berkeley packet filter (BPF). The BPF is a pattern matching
- stack language, where you write a program that picks out the
- addresses you are interested in. Its advantage is that it's
- very general and programmable. Its disadvantage is that there
- is no general way for the kernel to avoid turning on promiscuous
- mode and running every packet on the wire through every registered
- packet filter. See <ref id="bpf" name="The Berkeley Packet Filter">
- for more info.
-
- <item> Using the built-in multicast filter that most etherchips have.
-
- </enum>
-
- I guess I should list what a few ethercards/chips provide:
-
- <verb>
-
- Chip/card Promiscuous Multicast filter
- ----------------------------------------
- Seeq8001/3c501 Yes Binary filter (1)
- 3Com/3c509 Yes Binary filter (1)
- 8390 Yes Autodin II six bit hash (2) (3)
- LANCE Yes Autodin II six bit hash (2) (3)
- i82586 Yes Hidden Autodin II six bit hash (2) (4)
-
- </verb>
-
- <enum>
-
- <item> These cards claim to have a filter, but it's a simple
- yes/no `accept all multicast packets', or `accept no
- multicast packets'.
-
- <item> AUTODIN II is the standard ethernet CRC (checksum)
- polynomial. In this scheme multicast addresses are hashed
- and looked up in a hash table. If the corresponding bit
- is enabled, this packet is accepted. Ethernet packets are
- laid out so that the hardware to do this is trivial -- you
- just latch six (usually) bits from the CRC circuit (needed
- anyway for error checking) after the first six octets (the
- destination address), and use them as an index into the
- hash table (six bits -- a 64-bit table).
-
- <item> These chips use the six bit hash, and must have the
- table computed and loaded by the host. This means the
- kernel must include the CRC code.
-
- <item> The 82586 uses the six bit hash internally, but it
- computes the hash table itself from a list of multicast
- addresses to accept.
-
- </enum>
-
- Note that none of these chips do perfect filtering, and we
- still need a middle-level module to do the final
- filtering. Also note that in every case we must keep a
- complete list of accepted multicast addresses to recompute
- the hash table when it changes.
-
- My first pass at device-level support is detailed in the
- outline driver <tt/skeleton.c/
-
- It looks like the following:
-
- <code>
- #ifdef HAVE_MULTICAST
- static void set_multicast_list(struct device *dev, int num_addrs,
- void *addrs);
- #endif
- .
- .
-
- ethercard_open() {
- ...
- #ifdef HAVE_MULTICAST
- dev->set_multicast_list = &ero;set_multicast_list;
- #endif
- ...
-
- #ifdef HAVE_MULTICAST
- /* Set or clear the multicast filter for this adaptor.
- num_addrs -- -1 Promiscuous mode, receive all packets
- num_addrs -- 0 Normal mode, clear multicast list
- num_addrs > 0 Multicast mode, receive normal and
- MC packets, and do best-effort filtering.
- */
- static void
- set_multicast_list(struct device *dev, int num_addrs, void *addrs)
- {
- ...
-
- </code>
-
- Any comments, criticism, etc. are welcome.'
-
- <sect1>The Berkeley Packet Filter (BPF)<label id="bpf">
- <p>
-
- The general idea of the developers is
- that the BPF functionality should not be provided
- by the kernel, but should be in a (hopefully little-used)
- compatibility library.
-
- For those not in the know: BPF (the Berkeley Packet Filter)
- is an mechanism for specifying to the kernel networking layers
- what packets you are interested in. It's implemented as a
- specialized stack language interpreter built into a low level
- of the networking code. An application passes a program
- written in this language to the kernel, and the kernel runs the
- program on each incoming packet. If the kernel has multiple
- BPF applications, each program is run on each packet.
-
- The problem is that it's difficult to deduce what kind of
- packets the application is really interested in from the packet
- filter program, so the general solution is to always run the
- filter. Imagine a program that registers a BPF program to
- pick up a low data-rate stream sent to a multicast address.
- Most ethernet cards have a hardware multicast address filter
- implemented as a 64 entry hash table that ignores most unwanted
- multicast packets, so the capability exists to make this a very
- inexpensive operation. But with the BFP the kernel must switch
- the interface to promiscuous mode, receive _all_ packets, and
- run them through this filter. This is work, BTW, that's very
- difficult to account back to the process requesting the packets.
-
- <sect>Networking with a Laptop/Notebook Computer<label id="notebook">
- <p>
-
- There are currently only a few ways to put your laptop on a network.
- You can use the SLIP code (and run at serial line speeds);
- you can buy one of the few laptops that come with a NE2000-compatible
- ethercard; you can get a notebook with a supported
- PCMCIA slot built-in; you can get a laptop with a
- docking station and plug in an ISA ethercard; or you can use a
- parallel port Ethernet adapter such as the D-Link DE-600.
-
- <sect1>Using SLIP
- <p>
-
- This is the cheapest solution, but by far the most difficult. Also,
- you will not get very high transmission rates. Since SLIP is not
- really related to ethernet cards, it will not be discussed further
- here. See the NET-2 Howto.
-
- <sect1>Built in NE2000
- <p>
-
- This solution severely limits your laptop choices and is fairly
- expensive. Be sure to read the specifications carefully, as you
- may find that you will have to buy an additional non-standard
- transceiver to actually put the machine on a network. A good
- idea might be to boot the notebook with a kernel that has
- ne2000 support, and make sure it gets detected and works
- before you lay down your cash.
-
-
- <sect1>PCMCIA Support<label id="pcmcia">
- <p>
-
- As this area of Linux development is fairly young, I'd suggest
- that you join the LAPTOPS mailing channel. See
- <ref id="mailing-lists" name="Mailing lists...">
- which describes how to join a mailing list channel.
-
- Try and
- determine exactly what hardware you have (ie. card manufacturer,
- PCMCIA chip controller manufacturer) and then ask on the LAPTOPS
- channel. Regardless, don't expect things to be all that simple.
- Expect to have to fiddle around a bit, and patch kernels, etc.
- Maybe someday you will be able to type `make config' 8-)
-
- At present, the two PCMCIA chipsets that are supported are
- the Databook TCIC/2 and the intel i82365.
-
- There is a number of programs on tsx-11.mit.edu in
- /pub/linux/packages/laptops/ that you may find useful. These
- range from PCMCIA Ethercard drivers to programs that communicate
- with the PCMCIA controller chip. Note that these drivers are
- usually tied to a specific PCMCIA chip (ie. the intel 82365
- or the TCIC/2)
-
- For NE2000 compatible cards, some people have had success
- with just configuring the card under DOS, and then booting
- linux from the DOS command prompt via <tt/loadlin/.
-
- For those that are <em/net-surfing/ you can try:
-
- <url url="http://cesdis.gsfc.nasa.gov/linux/pcmcia.html"
- name="Don's PCMCIA Stuff">
-
- Anyway, the PCMCIA driver problem isn't specific to the Linux world.
- It's been a real disaster in the MS-DOS world. In that world
- people expect the hardware to work if they just follow the manual.
- They might not expect it to interoperate with any other hardware
- or software, or operate optimally, but they do expect that the
- software shipped with the product will function. Many PCMCIA
- adaptors don't even pass this test.
-
- Things are looking up for Linux users that want PCMCIA support, as
- substantial progress is being made. Pioneering this effort is
- David Hinds. His latest PCMCIA support package can be obtained
- from <tt/cb-iris.stanford.edu/ in the directory
- <tt>/pub/pcmcia/</tt>. Look for a file like
- <tt/pcmcia-cs-X.Y.Z.tgz/ where X.Y.Z will be the latest version
- number. This is most likely uploaded to <tt/tsx-11.mit.edu/ as
- well.
-
- Note that Donald's PCMCIA enabler works as a user-level
- process, and David Hinds' is a kernel-level solution.
- You may be best served by David's package as it is
- much more widely used.
-
- <sect1>ISA Ethercard in the Docking Station.
- <p>
-
- Docking stations for laptops typically cost about $250
- and provide two full-size ISA slots, two serial and one
- parallel port. Most docking stations are powered off of the
- laptop's batteries, and a few allow adding extra batteries in the
- docking station if you use short ISA cards. You can add an inexpensive
- ethercard and enjoy full-speed ethernet performance.
-
- <sect1>Pocket / parallel port adaptors.
- <p>
-
- The `pocket' ethernet adaptors may also fit your need.
- Until recently they actually costed more than a docking station and
- cheap ethercard, and most tie you down with a wall-brick power supply.
- At present, you can choose from the D-Link, or the RealTek adaptor.
- Most other companies, especially Xircom,
- (see <ref id="xircom" name="Xircom">)
- treat the programming
- information as a trade secret, so support will likely be slow in
- coming. (if ever!)
-
- Note that the transfer speed will not be all that great
- (perhaps 100kB/s tops?) due to the limitations of the
- parallel port interface.
-
- See <ref id="de-600" name="DE-600 / DE-620"> and
- <ref id="aep-100" name="RealTek"> for supported pocket adaptors.
-
- You can sometimes avoid the wall-brick with the adaptors by buying
- or making a cable that draws power from the laptop's keyboard
- port. (See <ref id="aep-100" name="keyboard power">)
-
- <sect>Miscellaneous.<label id="misc">
- <p>
-
- Any other associated stuff that didn't fit in anywhere else gets
- dumped here. It may not be relevant, and it may not be of general
- interest but it is here anyway.
-
- <sect1>Passing Ethernet Arguments to the Kernel<label id="lilo">
- <p>
-
- Here are two generic kernel commands that can be passed to
- the kernel at boot time. This can be done with LILO, loadlin,
- or any other booting utility that accepts optional arguments.
-
- For example, if the command was `blah' and it expected 3 arguments
- (say 123, 456, and 789) then, with LILO, you would use:
-
- <tt>LILO: linux blah=123,456,789</tt>
-
- <em/Note:/ PCI cards have their i/o and IRQ assigned by the BIOS
- at boot. This means that any boot time arguments for a PCI
- card's IRQ or i/o ports are usually ignored.
-
- For more information on (and a complete list of) boot time
- arguments, please see the
- <url url="http://sunsite.unc.edu/mdw/HOWTO/BootPrompt-HOWTO.html"
- name="BootPrompt-HOWTO">
-
- <sect2>The <tt/ether/ command<label id="ether">
- <p>
-
- In its most generic form, it looks something like this:
-
- <tscreen>
- ether=IRQ,BASE_ADDR,PARAM_1,PARAM_2,NAME
- </tscreen>
-
- All arguments are optional. The first non-numeric argument
- is taken as the NAME.
-
- <bf/IRQ:/
- Obvious. An IRQ value of `0' (usually the default) means to autoIRQ.
- It's a historical accident that the IRQ setting is first rather than
- the base_addr -- this will be fixed whenever something else changes.
-
- <bf/BASE_ADDR:/
- Also obvious. A value of `0' (usually the default) means to
- probe a card-type-specific address list for an ethercard.
-
- <bf/PARAM_1:/
- It was orginally used as an override value for the memory start
- for a shared-memory ethercard, like the WD80*3.
- Some drivers use the low four bits of this value to set the debug
- message level. 0 -- default, 1-7 -- level 1..7, (7 is maximum
- verbosity) 8 -- level 0 (no messages). Also, the LANCE driver
- uses the low four bits of this value to select the DMA channel.
- Otherwise it uses auto-DMA.
-
- <bf/PARAM_2:/
- The 3c503 driver uses this to select between the internal and external
- transceivers. 0 -- default/internal, 1 -- AUI external.
- The Cabletron E21XX card also uses the low 4 bits of PARAM_2 to
- select the output media. Otherwise it detects automatically.
-
- <bf/NAME:/
- Selects the network device the values refer to. The standard kernel
- uses the names `eth0', `eth1', `eth2' and `eth3' for bus-attached
- ethercards, and `atp0' for the parallel port `pocket' ethernet
- adaptor. The arcnet driver uses `arc0' as its name.
- The default setting is for a single ethercard to be probed for as
- `eth0'. Multiple cards can only be enabled by explicitly setting up
- their base address using these LILO parameters.
- The 1.0 kernel has LANCE-based ethercards as a special case. LILO
- arguments are ignored, and LANCE cards are always assigned
- `eth<n>' names starting at `eth0'. Additional non-LANCE ethercards
- must be explicitly assigned to `eth<n+1>', and the usual `eth0'
- probe disabled with something like `ether=0,-1,eth0'.
- ( Yes, this is bug. )
-
- <sect2> The <tt/reserve/ command<label id="reserve">
- <p>
-
- This next lilo command is used just like `ether=' above, ie. it is
- appended to the name of the boot select specified in lilo.conf
-
- <tscreen>
- reserve=IO-base,extent{,IO-base,extent...}
- </tscreen>
-
- In some machines it may be necessary to prevent device drivers from
- checking for devices (auto-probing) in a specific region. This may be
- because of poorly designed hardware that causes the boot to <em/freeze/
- (such as some ethercards), hardware that is mistakenly identified,
- hardware whose state is changed by an earlier probe, or merely
- hardware you don't want the kernel to initialize.
-
- The <tt/reserve/ boot-time argument addresses this problem by specifying
- an I/O port region that shouldn't be probed. That region is reserved
- in the kernel's port registration table as if a device has already
- been found in that region. Note that this mechanism shouldn't be
- necessary on most machines. Only when there is a problem or special
- case would it be necessary to use this.
-
- The I/O ports in the specified region are protected against
- device probes. This was put in to be used when some driver was
- hanging on a NE2000, or misidentifying some other device
- as its own. A correct device driver shouldn't probe a reserved
- region, unless another boot argument explicitly specifies that
- it do so. This implies that <tt/reserve/ will most often be used
- with some other boot argument. Hence if you specify a <tt/reserve/
- region to protect a specific device, you must generally specify
- an explicit probe for that device. Most drivers ignore the port
- registration table if they are given an explicit address.
-
- For example, the boot line
-
- <tscreen>
- LILO: linux reserve=0x300,32 ether=0,0x300,eth0
- </tscreen>
-
- keeps all device drivers except the ethercard drivers from
- probing 0x300-0x31f.
-
- As usual with boot-time specifiers there is an 11 parameter limit,
- thus you can only specify 5 reserved regions per <tt/reserve/ keyword.
- Multiple <tt/reserve/ specifiers will work if you have an unusually
- complicated request.
-
- <sect1>Using the Ethernet Drivers as Modules<label id="modules">
- <p>
-
- At present, all the modules are put in the subdirectory
- <tt/modules/ in your Linux kernel source tree (usually in
- the form of symbolic links). To actually generate the modules,
- you have to type <tt/make modules/ after you have finished building
- the kernel proper. Earlier kernels built them automatically,
- which wasn't fair to those compiling on 4MB 386sx-16 machines.
-
- Most modules accept parameters like <tt/io=0x340/ and
- <tt/irq=12/ on the <tt/insmod/ command line. It
- is <em/STRONGLY ADVISED/ that you supply these parameters
- to avoid probing for the card. Unlike PCI and EISA devices,
- there is no real safe way to do auto-probing for ISA devices,
- and so it should be avoided when using drivers as modules.
-
- A list of all the parameters that each module accepts can be
- found in the file:
-
- <tt>/usr/src/linux/Documentation/networking/net-modules.txt</tt>
-
- It is recommended that you read that to find out what options
- you can use for your particular card.
-
- Once you have figured out the arguments/options you are going
- to use, you can insert the module by typing as root:
- <code>
- insmod mod_name.o [io=val1[,val2,...]] [irq=val7[,val8,...]]
- </code>
- The comma separated value lists are used for modules that
- have the capability to handle multiple devices from a single
- module, such as all the 8390 drivers, and the PLIP driver.
-
- See the <tt/insmod(8)/ manual page for information on passing
- arguments to the module as it is being loaded.
- The command <tt/lsmod/ will show you what modules are
- loaded, and <tt/rmmod/ will remove them.
-
- Once a module is inserted, then you can use it just like normal,
- and give <tt/ifconfig/ commands. If you set up your networking at
- boot, then make sure your <tt>/etc/rc*</tt> files run the
- <tt/insmod/ command(s) before getting to the <tt/ifconfig/ command.
-
- Also note that a <em/busy/ module can't be removed. That means
- that you will have to <tt/ifconfig eth0 down/ (shut down the
- ethernet card) before you can remove the module(s).
-
- <sect2>8390 Based Cards as Modules<label id="mod8390">
- <p>
-
- The present list of 8390 based drivers is: 3c503, ac3200, e2100,
- hp, hp-plus, ne, smc-ultra and wd. These cards were not
- supported as modules for kernel versions prior to 1.3.42.
- (This does not include some
- of the separately distributed PCMCIA drivers (e.g. de-650)
- that are also 8390 based, that have had module support for quite
- some time now.)
-
- If you have an 8390 based card, you may have to insert
- <em/two/ modules, 8390.o and then the module for your card.
- If 8390 support has been built into your kernel, then you
- will not need to insert the 8390 module. (8390 support is
- built in whenever an 8390 based card is selected to be built
- into the kernel.) Doing a <tt>cat /proc/ksyms | grep 8390</tt>
- will tell you if 8390 support is in your kernel.
-
- For an 8390 based card, you will have to remove the card module
- before removing the 8390 module, as the 8390 module is used by
- the card module, and thus marked as <em/busy/.
-
- <label id="multmod8390">
-
- The 8390 series of network drivers now support multiple
- card systems without reloading the same module multiple
- times (memory efficient!) This is done by specifying
- multiple comma separated values, such as:
-
- <code>
- insmod 3c503.o io=0x280,0x300,0x330,0x350 xcvr=0,1,0,1
- </code>
-
- The above would have the one module controlling four
- 3c503 cards, with card 2 and 4 using external
- transcievers.
-
- It is *STRONGLY RECOMMENDED* that you supply "io="
- instead of autoprobing. If an "io=" argument is not
- supplied, then the ISA 8390 drivers will complain about
- autoprobing being not recommended, and begrudgingly
- autoprobe for a *SINGLE CARD ONLY* -- if you want to use
- multiple cards you *have* to supply an
- "io=0xNNN,0xQQQ,..." argument.
-
- The ne module is an exception to the above. A NE2000 is
- essentially an 8390 chip, some bus glue and some RAM.
- Because of this, the ne probe is more invasive than the
- rest, and so at boot we make sure the ne probe is done
- last of all the 8390 cards (so that it won't trip over
- other 8390 based cards) With modules we can't ensure
- that all other non-ne 8390 cards have already been
- found. Because of this, the ne module <em/REQUIRES/ an
- <tt/io=0xNNN/ argument passed in via insmod. It
- will <em/refuse/ to autoprobe.
-
- It is also worth noting that auto-IRQ probably isn't as
- reliable during the flurry of interrupt activity on a
- running machine. Cards such as the ne2000 that can't get
- the IRQ setting from an EEPROM or configuration register
- are probably best supplied with an <tt/irq=M/ argument as
- well. The file
-
- <tt>/usr/src/linux/Documentation/networking/net-modules.txt</tt>
-
- also lists how the interrupt settings are determined for the
- various cards if an <tt/irq=N/ value is not given.
-
- <sect1>Mailing Lists and the Linux Newsgroups<label id="mailing-lists">
- <p>
-
- If you have questions about your ethernet card, please READ this
- document first. You may also want to join the NET channel of the
- Linux mailing lists by sending mail to
- <tt/majordomo@vger.rutgers.edu/ to get help with what lists
- are available, and how to join them.
-
- Furthermore keep in mind that the NET channel is for development
- discussions only. General questions on how to configure your system
- should be directed to comp.os.linux.setup unless you are actively
- involved in the development of part of the networking for Linux.
- We ask that you <em/please/ respect this general guideline for content.
-
- Also, the news groups
- <em/comp.sys.ibm.pc.hardware.networking/ and
- <em/comp.dcom.lans.ethernet/ should be used for questions that
- are not Linux specific.
-
- <sect1>Related Documentation<label id="other_docs">
- <p>
-
- Much of this info came from saved postings from the comp.os.linux
- groups, which shows that it is a valuable resource of information.
- Other useful information came from a bunch of small files by Donald
- himself. Of course, if you are setting up an Ethernet card,
- then you will want to read the NET-2 Howto so that you can actually
- configure the software you will use. Also, if you fancy yourself as
- a bit of a hacker, you can always scrounge some additional info
- from the driver source files as well. There is usually a paragraph
- or two in there describing any important points before any actual
- code starts..
-
- For those looking for information that is not specific in any way
- to Linux (i.e. what is 10BaseT, what is AUI, what does a hub do, etc.)
- I strongly recommend the <bf/Ethernet-FAQ/ that is
- posted regularly to the newsgroup <em/comp.dcom.lans.ethernet/.
- You can grab it from the following URL:
-
- <url url="ftp://dorm.rutgers.edu/pub/novell/info_and_docs/Ethernet.FAQ"
- name="Ethernet FAQ">
-
- You can also have a look at the `Ethernet-HomePage' so to speak,
- which is at the following URL:
-
- <url url="http://wwwhost.ots.utexas.edu/ethernet/ethernet-home.html"
- name="Ethernet-HomePage">
-
- <sect1>Contributors<label id="contrib">
- <p>
-
- Other people who have contributed (directly or indirectly)
- to the Ethernet-Howto are, in alphabetical order:
-
- <verb>
- Ross Biro <bir7@leland.stanford.edu>
- Alan Cox <iialan@www.linux.org.uk>
- David C. Davies <davies@wanton.enet.dec.com>
- Bjorn Ekwall <bj0rn@blox.se>
- David Hinds <dhinds@allegro.stanford.edu>
- Michael Hipp <mhipp@student.uni-tuebingen.de>
- Mike Jagdis <jaggy@purplet.demon.co.uk>
- Duke Kamstra <kamstra@ccmail.west.smc.com>
- Russell Nelson <nelson@crynwr.com>
- Cameron Spitzer <camerons@NAD.3Com.com>
- Dave Roberts <david.roberts@amd.com>
- Glenn Talbott <gt@hprnd.rose.hp.com>
- </verb>
-
-
- Many thanks to the above people, and all the other unmentioned
- testers out there.
-
- <sect1>Closing
- <p>
-
- If you have found any glaring typos, or outdated info in this
- document, please let one of us know. It's getting big, and it
- is easy to overlook stuff.
-
- Thanks,
-
- Paul Gortmaker, <tt/Paul.Gortmaker@anu.edu.au/
-
- Donald J. Becker, <tt/becker@cesdis.gsfc.nasa.gov/
-
-
- </article>
-