The Linux-ARCnet driver is divided into three types of modules: the generic ARCnet layer (arcnet), the encapsulation drivers (rfc1201, rfc1051, arc-ethercap, and arc-rawmode), and the hardware drivers (com90xx, com90io, arcrimi, com20020, com20020pci, and com20020_cs).
The trickiest part is making the hardware drivers work, since the other parts are just software and should always be compatible with each other. So, let's start by loading the generic ARCnet code and the RFC1201 standard encapsulation type:
insmod arcnet insmod rfc1201
The following sections explain each type of hardware driver in more detail.
Almost all older, and a large portion of newer ARCnet cards use a chip compatible with the older SMSC COM9026 ARCnet chip. In fact, up until version 2.60, these cards were the only ones supported by the Linux ARCnet driver.
You might not be surprised to find out, then, that this driver is the most mature and well tested of the bunch. To load it, simply type:
And the driver should automatically detect all your COM90xx-compatible ARCnet cards, assigning them to network devices named arc0, arc1, and so on. If you only have one card, it'll be called arc0.
In case the driver somehow fails to autodetect your cards, you can force some settings manually. This should never be necessary unless your hardware is broken or you have an address or IRQ conflict! But if it happens and forcing the settings fixes it, please e-mail me so I can try to improve things. Something like this will override all the module settings:
insmod com90xx io=0x300 irq=9 shmem=0xd0000
Note that even if the driver loads after this, it still might not work if the card doesn't really have those settings.
Some COM90xx cards are built without memory-mapped buffers, in order to save memory space. You access the memory through a couple of I/O ports instead. For this, we provide the com90io driver.
Unfortunately, I haven't had time to update the com90io driver to work with the new generic ARCnet layer, so it doesn't work in ARCnet 3.80 or above. This wouldn't be very hard to do, but I haven't done it. Anyone who wants to volunteer for this should feel welcome.
RIM I cards are generally pretty old and do the opposite of com90io cards: they map everything in memory, and nothing on I/O ports. Apparently RIM I cards are most commonly found on Amiga systems and other computers with no concept of I/O ports (they just put all their devices at memory locations instead).
I don't know if the RIM I driver ever worked - no one ever sent me feedback about it - but, like com90io, it hasn't been updated to work with the 3.80 and higher ARCnet drivers. Anyone who has such a card and wants to work on it, please feel free.
The COM20020 is a newer, generally better chip that was intended to replace the COM90xx chips in new board designs. It has some new features and it's not completely compatible with the older ARCnet chips, so we need a separate driver for it. David Woodhouse wrote the initial com20020 driver for ARCnet 2.61, and I (Avery) haven't changed it too much from that version, although I've rearranged parts of the code.
Unfortunately, the COM20020 chip does a few things badly and it is much harder to detect an ISA COM20020 card than an ISA COM90xx card; because of this, we don't even try to auto-probe them - you have to provide all information manually. Note that COM20020 cards don't use shared memory, so the shmem= parameter has gone away.
insmod com20020base insmod com20020 io=0x300 irq=9
We can autoprobe PCI and PCMCIA COM20020 cards; see the following sections for the special driver modules we use for those.
If you have one or more PCI COM20020 cards, such as the Contemporary Controls PCI20, you can use the com20020pci driver to autodetect them. Type:
insmod com20020base insmod com20020pci
modprobe will load the com20020base module automatically when you ask for com20020pci, and insmod will not.
Starting with ARCnet 3.90, we also directly support the PCM20 PCMCIA card from Contemporary Controls. This is harder to get working, since PCMCIA supports hot-swapping of cards and other neat features that you can't do with ISA and PCI cards under Linux.
To make this work, we need to obtain the latest Linux PCMCIA software (I used version 3.1.4), patch it and recompile it so that it supports the new com20020_cs driver, and then restart PCMCIA services on the laptop so that the new settings will take effect.
This is not for the faint of heart! If you don't know what to do to fix things when you misconfigure your PCMCIA tools, you might want to just wait until this driver gets integrated with the official Linux PCMCIA distribution. It'll take a few months, though.
Here's what you do:
Get the pcmcia-cs-3.1.4 package from http://pcmcia.sourceforge.org/
Unpack it into /usr/src/pcmcia-cs-3.1.4 and cd to that directory.
Patch the code for ARCnet support: patch -p1 </usr/src/arcnet/pcmcia-patch
If there were patch warnings: stop right now and e-mail me about it.
Otherwise, type "make config" and then "make install" to build and install the new pcmcia-cs programs. Answer the prompts appropriately, filling in the location of the Linux kernel sources you used when building the Linux ARCnet driver in Compiling and installing the driver modules.
Restart the PCMCIA "cardmgr" in the appropriate way for your system. On Debian GNU/Linux, I use /etc/init.d/pcmcia stop followed by /etc/init.d/pcmcia start
After following these steps, you should be able to simply insert the Contemporary Controls PCM20 card into a PCMCIA slot, and the arc0 device will be created. When you eject the card, the arc0 device should go away.