
Complete Change Log for the ARCnet drivers for Linux
----------------------------------------------------

How version numbers work:

   3 . 9  4  [BETA]
   |   |  |     |
   |   |  |      \-- Stability meter - non-ALPHA releases probably work.
   |   |  |
   |   |   \-- Buglevel - increased on bugfix releases.
   |   |
   |    \-- Subversion - increased on mini-rewrites or new features.
   |
    \-- Major version 2 - based on the second major "stable" release.

	** = major rewrites, new features, and possible danger!

v3.94 BETA (2000/07/05)
	  - Updated PCI device IDs for Contemporary Controls cards.  When
	    I added them last time, I was clearly insane.

v3.93 BETA (2000/03/09)
	  - Support for Contemporary Controls PCI and PCMCIA cards based on
	    the COM20022 chip (ie. with 10 MBit support).  Give the driver
	    an extra parameter of "clockm=2" to load the module for 10MBit.

	  - Added some stress test programs in the stresstest/ subdir.
	  
	  - Added the D_SKB_SIZE debug level, to just print one message per
	    sent/received SKB.
	    
v3.91/3.92 BETA
	  - Ported 3.90 to Linux 2.3.x kernels.  This wasn't permanently
	    merged, so the 3.93 changes aren't in 2.3.x yet.

v3.90 BETA (99/12/04)
	  - Wrote the HOWTO document, which now contains almost all the
	    information from the old arcnet.txt and arcnet-hardware.txt.
	    
	  - Added com20020pci and com20020_cs (PCMCIA) drivers, and included
	    a pcmcia-patch for the pcmcia-cs-3.1.4 package that lets you
	    easily use the Contemporary Controls PCM20.
	    
	  - Fixed other problems with com20020 card initialization that
	    should make it more reliable.
	    
	  - Removed the need for the .depend file, which caused all sorts
	    of problems for people.
	    
	  - Fixed a bug that caused arc-rawmode to receive packets in a
	    broken sort of way (with an extra four 'zero' bytes sometimes).
	    Funny how it worked before.

v3.81 BETA (99/09/01)
	  - RFC1201 can now transmit split packets again!  (Whew!)
	  
	  - Changed the way device structures are allocated.  Now com90xx
	    autoprobe is slightly less ugly, no longer needs the big static
	    array, and can (finally!) detect multiple cards without loading
	    the module more than once.
	    
	  - We now set the MTU on the arc0 device to the "lowest common
	    denominator" - the smallest MTU supported by all loaded encaps.
	    You can always increase it manually if desired, and of course
	    you can always _receive_ packets of any size.
	    
	  - Broadcasts have better default behaviour when multiple encaps
	    are loaded. (Quick summary: if no packets have been received, we
	    send using the first loaded encap driver; otherwise, we use the
	    most-recently-received encap type.)
	  
	  - Added the beginnings of an arcnet-howto document in the howto/
	    subdirectory.  Anybody want to help write it?
	    
	  - Added some sample programs that show how to use the new
	    'raw mode' support from userspace.
	    
** v3.80 ALPHA (99/08/15)
	  - Hugely redesigned the driver core.  Less typecasting and weird
	    pointer arithmetic, and we shouldn't have any race conditions
	    anymore (although the convoluted way we handled things before
	    probably eliminated the race conditions too).  We should now
	    be completely CPU arch-independent (which means people with
	    Alpha and PowerPC arcnet cards should try them out!)
	    
	  - You can use a COM20020-based PCMCIA card without editing source
	    code or recompiling now, but it's not obvious exactly how. 
	    That'll change later.
	    
	  - Less code duplication between the hardware-specific modules, so
	    they're much easier to read.  Also broke encapsulation drivers
	    into separate modules (rfc1201.c, rfc1051.c) and added a new
	    "raw" encapsulation.
	    
	  - Major known (and temporary) bugs: ethernet-encap has
	    disappeared, and com90io and arc-rimi don't compile anymore. 
	    RFC1201 can't transmit (but can receive) split packets, so the
	    MTU needs to be set lower for now.

v3.02 (98/06/07)
	  - Use register_netdevice() instead of register_netdev() to create
	    new devices for RFC1051 and Ethernet encapsulation in arcnet_open.
	    Likewise for unregistering them later. This avoids the deadlock 
	    encountered because the original routines call rtnl_lock() when
	    it's already locked. [dw]

v3.01 (98/04/17)
	  - Interrupt handler now also checks dev->[se]dev are non-NULL
	    to avoid crashes in interrupts during card init. [dw]

v3.00 (97/11/09)
	  - Minor cleanup of debugging messages. [mj]

v2.93 ALPHA (97/11/06)
	  - irq2dev mapping removed.
	  - Interrupt handler now checks whether dev->priv is non-null in order
	    to avoid crashes in interrupts which come during card init. [mj]

v2.92 ALPHA (97/09/02)
	  - Code cleanup [Martin Mares <mj@atrey.karlin.mff.cuni.cz>]
	  - Better probing for the COM90xx chipset, although only as
	    a temporary solution until we implement adding of all found
	    devices at once. [mj]

v2.91 ALPHA (97/08/19)
	  - Add counting of octets in/out.

v2.90 ALPHA (97/08/08)
	  - Add support for kernel command line parsing so that chipset
	    drivers are usable when compiled in.

v2.80 ALPHA (97/08/01)
	  - Split source into multiple files; generic arcnet support and
	    individual chipset drivers. <dwmw2>

v2.61 ALPHA (97/07/30)  by David Woodhouse <dwmw2@infradead.org>
	                            for Nortel (Northern Telecom).
          - Added support for IO-mapped modes and for SMC COM20020 chipset.
	  - Fixed (avoided) race condition in send_packet routines which was
            discovered when the buffer copy routines got slow (?).
          - Fixed support for device naming at load time.
	  - Added backplane, clock and timeout options for COM20020.
	  - Added support for promiscuous mode.
	  

** v2.60 ALPHA (RIM I remodelling, Linux 2.1 compatibility) (96/11/23)
	  - Added patch from Vojtech Pavlik <vojtech@atrey.karlin.mff.cuni.cz>
	    and Martin Mares <mj@k332.feld.cvut.cz> to make the driver work
	    with the new Linux 2.1.x memory management.  I modified their
	    patch quite a bit though; bugs are my fault.  More changes should
	    be made to get eliminate any remaining phys_to_virt calls.
	  - Quietly ignore protocol id's 0, 1, 8, and 243.  Thanks to Jake
	    Messinger <jake@ams.com> for reporting these codes and their
	    meanings.
	  - Smarter shmem probe for cards with 4k mirrors. (does it work?)
	  - Initial support for RIM I type cards which use no I/O ports at
	    all.  To use this option, you need to compile with RIM_I_MODE
	    enabled.  Thanks to Kolja Waschk <kawk@yo.com> for explaining
	    RIM I programming to me.  Now, does my RIM I code actually
	    work?
	  
v2.56 (tiny bugfix) (96/10/18)
	  - Turned arc0e/arc0s startup messages back on by default, as most
	    people will probably not notice the additional devices
	    otherwise.  This causes undue confusion.
	  - Fixed a tiny but noticeable bug in the packet debugging routines
	    (thanks Tomasz)

v2.55 (insignificant) (96/08/05)
	  - A couple more messages moved to D_EXTRA.
	  - SLOW_XMIT_COPY off by default.
	  - Some tiny changes.
	
v2.54 (very little) (96/07/05)
	  - Under some situations, Stage 5 autoprobe was a little bit too
	    picky about the TXACK flag.
	  - D_EXTRA removed from default debugging flags.  Hey, it's stable,
	    right?
	  - Removed redundant "unknown protocol ID" messages and made remaining
	    ones D_EXTRA.
	
v2.53 (bugfix) (96/06/06)
	  - arc0e and arc0s wouldn't initialize in newer kernels, which
	    don't like dev->open==NULL or dev->stop==NULL.
	
v2.52 (not much) (96/04/20)
	  - Replaced more decimal node ID's with hex, for consistency.
	  - Changed a couple of printk debug levels.

v2.51 (bugfix, Linux 1.3.71+ only) (96/02/29)
	  - Inserted a rather important missing "volatile" in autoprobe.
	  - arc0e and arc0s are now options in drivers/net/Config.in.

v2.50 (cleany-fixey) (96/02/24)
	  - Increased IRQ autoprobe delay.  Thanks to Andrew J. Kroll for
	    noticing the problem, which seems to only affect certain cards.
	  - Errors reserving ports and IRQ's now clean up after themselves.
	  - We now replace TESTvalue byte from unused shmem addresses.
	  - You can now use "irq=" as well as "irqnum=" to set the IRQ
	    during module autoprobe.  This doesn't seem to crash insmod
	    anymore. (?)
	  - You can now define the name of the ARCnet device more easily
	    when loading the module: insmod arcnet.o device=test1
	    A new option, CONFIG_ARCNET_ETHNAME, allows the kernel to
	    choose one of the standard eth?-style device names
	    automatically.  This currently only works as a module.
	  - printk's now try to make some use of the KERN_xxx priority level
	    macros (though they may not be perfect yet).
	  - Packet and skb dump loops are now separate functions.
	  - Removed D_INIT from default debug level, because I am (finally)
	    pretty confident that autoprobe shouldn't toast anyone's
	    computer.
	  - This version is no longer ALPHA.

v2.41 ALPHA (autoprobe cleanups) (96/02/10)
	  - Incorporated changes someone made to arcnet_setup in 1.3.60.
	  - Increased reset timeout to 3/10 of a second because some cards
	    are too slow.
	  - Removed a useless delay from autoprobe stage 4; I wonder
	    how that got there!  (oops)
	  - If FAST_IFCONFIG is defined, don't reset the card during
	    arcnet_open; rather, do it in arcnet_close but don't delay. 
	    This speeds up calls to ifconfig up/down.  (Thanks to Vojtech
	    for the idea to speed this up.)
	  - If FAST_PROBE is defined, don't bother to reset the card in
	    autoprobe Stage 5 when there is only one io port and one shmem
	    left in the list.  They "obviously" correspond to each other. 
	    Another good idea from Vojtech.

** v2.40 ALPHA (bugfixes, ftape conflict, autoprobe!!, FAQ file) (96/02/03)
	  - Checked the RECON flag last in the interrupt handler (when
	    enabled) so the flag will show up in "status" when reporting
	    other errors.  (I had a cabling problem that was hard to notice
	    until I saw the huge RECON count in /proc/net/dev.)
	  - Moved "IRQ for unknown device" message to D_DURING.
	  - "transmit timed out" and "not acknowledged" messages are now
	    D_EXTRA, because they very commonly happen when things are
	    working fine.  "transmit timed out" due to missed IRQ's is still
	    D_NORMAL, because it's probably a bug.
	  - "Transmit timed out" messages now include destination station id.
	  - The virtual arc0e and arc0s devices can now be disabled. 
	    Massive (but simple) code rearrangement to support this with
	    fewer ifdef's.
	  - SLOW_XMIT_COPY option so fast computers don't hog the bus.  It's
	    weird, but it works.
	  - Finally redesigned autoprobe after some discussion with Vojtech Pavlik
	    <Vojtech.Pavlik@st.mff.cuni.cz>.  It should be much safer and
	    more reliable now, I think.  We now probe several more io ports
	    and many more shmem addresses.
	  - Rearranged D_* debugging flags slightly.  Watch out!  There is now a new
	    flag, disabled by default, that will tell you the reason a
	    particular port or shmem is discarded from the list.

** v2.30 ALPHA (Linux 1.3 only, autoprobe!, docs) (96/01/10)
	- Abandoned support for Linux 1.2 to simplify coding and allow me
	  to take advantage of new features in 1.3.
	- Updated cabling/jumpers documentation with MUCH information that
	  people have recently (and in some cases, not so recently) sent
	  me.  I don't mind writing documentation, but the jumpers
	  database is REALLY starting to get dull.
	- Autoprobing works as a module now - but ONLY with my fix to
	  register_netdev and unregister_netdev.  It's also much faster,
	  and uses the "new-style" IRQ autoprobe routines.  Autoprobe is
	  still a horrible mess and will be cleaned up further as time
	  passes.

v2.22 (summary of changes since 2.00) (95/12/08)
	- Major cleanups, speedups, and better code-sharing.
	- Eliminated/changed many useless/meaningless/scary debug messages
	  (and, in most cases, the bugs that caused them).
	- Better IPX support.
	- lp->stats updated properly.
	- RECON checking now by default only bugs you if there are an
	  excessive number (ie. your cable is probably broken).
	- New RFC1051-compliant "arc0s" virtual device by Tomasz
	  Motylewski.
	- Excess debug messages can be compiled out for maximum
	  efficiency.


v2.22 (release, bugfixes, cleanups) (95/12/08)
	- IRQ is always printed as a decimal, instead of a hex number.
	- Replaced most remaining printk's with BUGMSG macros.
	- Moved variables for VERIFY_ACK from the Outgoing struct into
	  the lp struct; Outgoing is really for packet-splitting info
	  only.
	- Simplified INTMASK handling using a memory variable to keep a
	  "running total."
	- Tracked down more (maybe the last?) "missed IRQ" messages caused
	  by TX-done IRQ's occurring WHILE arcnet??_send_packet was in
	  progress.  These were pretty obscure and mostly harmless.
	- Made an actual non-ALPHA release of the thing.


v2.21 ALPHA (bugfixes, hopefully 1.2.x support again) (95/11/29)
	- "Unknown protocol ID" messages now also indicate the station
	  which sent the unrecognized packet, to aid in debugging network
	  confusion.  Also, if anyone knows why Novell servers send packets
	  with protocol ID 0xEC, be sure to tell me.  For now they're
	  ignored.
	- Rearranged ARC_P_* handling a bit, so it makes slightly more
	  sense.
	- We were clearing irq2dev_map too soon, and causing spurious
	  "irq %d for unknown device" messages.  Moved all the set/clear
	  irq2dev_map operations to more intelligent places.
	- 1.2.x kernels really didn't work with 2.20 ALPHA.  Maybe this
	  will fix it.


** v2.20 ALPHA (tx-locking, RECON, IPX, stats, bugfixes, bugs) (95/11/12)
	- Added a bit of protocol confusion to the arc0 code to allow
	  trxnet-compatible IPX support - and the use of all that new
	  Linux-IPX stuff (including lwared).  Just tell the ipx_interface
	  command that arc0 uses 802.3 (other protocols will probably also
	  work).
	- Fixed lp->stats to update tx_packets on all devices, not just
	  arc0.  Also, changed a lot of the error counting to make more
	  sense.
	- rx_packets on arc0 was being updated for each completely received
	  packet.  It now updates for each segment received, which makes
	  more sense.
	- Removed unneeded extra check of dev->start in arcnet_inthandler.
	- Included someone else's fixes from kernel 1.3.39.  Does it still
	  work with kernel 1.2?
	- Added a new define to disable PRINTING (not checking) of RECON
	  messages.
	- Separated the duplicated error checking code from the various
	  arcnet??_send_packet routines into a new function.
	- Cleaned up lock variables and ping-pong buffers a bit.  This
	  should mean more stability, fewer missing packets, and less ugly
	  debug messages.  Assuming it works.
	- Changed the format of debug messages to always include the actual
	  device name instead of just "arcnet:".  Used more macros to
	  shorten debugging code even more.
	- Finally squashed the "startup NULL pointer" bug.  irq2dev_map
	  wasn't being cleared to NULL when the driver was closed.
	- Improved RECON checking; if a certain number of RECON messages
	  are received within one minute, a warning message is printed
	  to the effect of "cabling problem."  One-log-message-per-recon
	  now defaults to OFF.


v2.12 ALPHA (1.3.x compatibility bugfixes) (95/10/27)
	- Tried to improve skb handling and init code to fix problems with
	  the latest 1.3.x kernels. (We no longer use ether_setup except in
	  arc0e since they keep coming up with new and improved
	  incompatibilities for us.)


v2.11 ALPHA (bugfixes) (95/10/25)
	- Removed superfluous sti() from arcnet_inthandler.
	- "Cleaned up" (?) handling of dev->interrupt for multiple devices. 
	  Place includes BEFORE configuration settings (solves some problems
	  with insmod and undefined symbols)
	- Removed race condition in arcnet_open that could cause packet
	  reception to be disabled until after the first TX.


** v2.10 ALPHA (RFC1051 support, cleanups, optimization) (95/09/10)
	- Integrated Tomasz Motylewski's new RFC1051 compliant "arc0s"
	  ([S]imple [S]tandard?) device.  This should make Linux-ARCnet
	  work with the NetBSD/AmiTCP implementation of this older RFC,
	  via the arc0s device.
	- Decided the current implementation of Multiprotocol ARCnet
	  involved way too much duplicated code, and tried to share things
	  a _bit_ more, at least.  This means, pretty much, that any
	  bugs in the arc0s module are now my fault :)
	- Added a new ARCNET_DEBUG_MAX define that sets the highest
	  debug message level to be included in the driver.  This can
	  reduce the size of the object file, and probably increases
	  efficiency a bit.  I get a 0.1 ms speedup in my "ping" times if
	  I disable all debug messages.  Oh, wow.
	- Fixed a long-standing annoyance with some of the power-up debug
	  messages.  ("IRQ for unknown device" was showing up too often.)

	
v2.00 (summary of changes since 1.02) (95/09/06)
	- ARCnet RECON messages are now detected and logged.  These occur
	  when a new computer is powered up on the network, or in a
	  constant stream when the network cable is broken.  Thanks to
	  Tomasz Motylewski for this.  You must have D_EXTRA enabled
	  if you want these messages sent to syslog, otherwise they will
	  only show up in the network statistics (/proc/net/dev).
	- The TX Acknowledge flag is now checked, and a log message is sent
	  if a completed transmit is not ACK'd.  (I have yet to have this
	  happen to me.)
	- Debug levels are now completely different.  See the README.
	- Many code cleanups, with several no-longer-necessary and some
	  completely useless options removed.
	- Multiprotocol support.  You can now use the "arc0e" device to
	  send "Ethernet-Encapsulation" packets, which are compatible with
	  Windows for Workgroups and LAN Manager, and possibly other
	  software.  See the README for more information.
	- Documentation updates and improvements.


v2.00 (release) (95/09/06)
        - Changed ARC_P_MS_TCPIP #define to ARC_P_ETHER.
        - Properly close down the arc0e device before unregistering it,
          by calling dev_close().  Previously, routes would be left
          through arc0e in the routing table that would generally cause
          (luckily, harmless) kernel NULL pointer dereferences when
          listing the routing table.
        - Many documentation changes.


v1.93 ALPHA (compatibility, device rename) (95/08/10)
        - Should work with both 1.2.x and 1.3.x now. (I hope)
        - Renamed arc0w ("Windows" protocol) to arc0e ("Ethernet-Encap")
          because the protocol used isn't necessarily limited to
          Microsoft.


v1.92 ALPHA (compatibility) (95/07/11)
        - Fixes to make things work with kernel 1.3.x.  Completely broke
          1.2.x support.  Oops?  1.2.x users keep using 1.91 ALPHA until I
          get out a version that supports both.


v1.91 ALPHA (bugfixes) (95/07/02)
        - Oops.  Exception packets hit us again!  I remembered to test
          them in ethernet-protocol mode, but due to the many various
          changes they broke in RFC1201 instead.  All fixed.
        - A long-standing bug with "exception" packets not setting
          protocol_id properly has been corrected.  This would have caused
          random problems talking to non-Linux servers.  I've also sent in
          a patch to fix this in the latest stable ARCnet (now 1.02).
        - ARC_P_IPX is an RFC1201 protocol too.  Thanks, Tomasz.
        - We're now "properly" (I think) handling the multiple 'tbusy' and
          'start' flags (one for each protocol device) better.
        - The driver should now start without a NULL-pointer dereference
          if you aren't connected to the network.
        

** v1.90 ALPHA (Multiprotocol support, cleanups, bugs) (95/06/18)
        - Removal of some outdated and messy config options (no one has
          ever complained about the defaults since they were introduced):
          DANGER_PROBE, EXTRA_DELAYS, IRQ_XMIT, CAREFUL_XMIT,
          STRICT_MEM_DETECT, LIMIT_MTU, USE_TIMER_HANDLER.  Also took out
          a few "#if 0" sections which are no longer useful.
        - Cleaned up debug levels - now instead of levels, there are
          individual flags.  Watch out when changing with ifconfig.
        - More cleanups and beautification.  Removed more dead code and
          made sure every function was commented.
        - Fixed the DETECT_RECONFIGS option so that it actually _won't_
          detect reconfigs.  Previously, the RECON irq would be disabled
          but the recon messages would still be logged on the next normal
          IRQ.
        - Initial support for "multiprotocol" ARCnet (this involved a LOT
          of reorganizing!).  Added an arc0w device, which allows us to
          talk to ethernet-over-ARCnet TCP/IP protocol.  To use it, ifconfig
          arc0 and arc0w (in that order).  For now, ethernet-protocol
          hosts should have routes through arc0w - eventually I hope to
          make things more automatic.
          

v1.11 ALPHA (bugfixes) (95/06/07)
        - Tomasz saves the day again with patches to fix operation if the
          new VERIFY_ACK option is disabled.
        - LOTS of little code cleanups/improvements by Tomasz.
        - Changed autoprobe, since the "never-changing command port"
          probe was causing problems for some people.  I also reset the
          card fewer times during the probe if DANGER_PROBE is defined,
          since DANGER_PROBE seems to be a more reliable method anyway.
        - It looks like the null-pointer problem was finally REALLY fixed
          by some change from Linux 1.2.8 to 1.2.9.  How handy!
          

** v1.10 ALPHA (RECON detection, TX Acknowledge) (95/04/15)
        - Fixed (?) some null-pointer dereference bugs
        - Added better network error detection (from Tomasz) - in
          particular, we now notice when our network isn't connected,
          also known as a "network reconfiguration."
        - We now increment lp->stats.tx_dropped in several more places,
          on a suggestion from Tomasz.
        - Minor cleanups/spelling fixes.
        - We now monitor the TXACK bit in the status register: we don't do
          anything with it yet, just notice when a transmitted packet isn't
          acknowledged.
        - Minor fix with sequence numbers (sometimes they were being sent in
          the wrong order due to Linux's packet queuing).


v1.02 (bugfix, new email address) (95/06/21)
        - A fix to make "exception" packets sent from Linux receivable
	  on other systems.  (The protocol_id byte was sometimes being set
	  incorrectly, and Linux wasn't checking it on receive so it
	  didn't show up)
	- Updated my email address.  Please use apenwarr@foxnet.net
	  from now on.
          

v1.01 (bugfixes) (95/03/24)
        - Fixed some IPX-related bugs. (Thanks to Tomasz Motylewski
                 <motyl@tichy.ch.uj.edu.pl> for the patches to make arcnet work
                 with dosemu!)
                 

v1.00 (release) (95/02/15)
        - Initial non-alpha release.  All changes from 0.42 were
          _extremely_ minor.
	

v0.42 (bug fixes)
	- Thanks to Michael Chastain <mec@shell.portal.com> for pointing out
          a small bug in the snarf_region macro (which is now
          request_region, by the way)
        - Fixed a small bug (I hope) that caused lockups at random times,
          but not very often.
        - Updated patch file for kernel 1.1.88.
        - Changed irq= to irqnum= for the module loader (modutils 1.1.87
	  didn't like it?!)
	- Rewrote much of the README file.


v0.41 (bug fixes, more bug fixes, and then I fixed a few bugs)
	- Changes to the README to reflect many suggestions, especially that
          people should always use arc0 in place of eth0 while reading all
          HOWTO's.
        - arcnet.c did not compile correctly with CAREFUL_XMIT disabled; I
          made a few last-minute changes to 0.40 before releasing and forgot
          to fix this.
        - Net-Tools and Linux Kernel patches removed; Linux 1.1.80 contains
          the ARCnet patches along with arcnet.c from ARCnet 0.32.  To
          upgrade to future versions of ARCnet, just copy over
          drivers/net/arcnet.c.
	- IPX support from Tomasz Motylewski <motylewski@trurl.ch.uj.edu.pl>.
        - Reduced number of apparently useless delays.  (define EXTRA_DELAYS
          at the top of arcnet.c if this causes problems)
        - You can now set the debug level without rebooting using ifconfig
          and the otherwise meaningless "metric" operator.  For example:
		ifconfig arc0 metric 13 down
		/etc/rc.d/rc.inet1
	  will set the debug level to 3 (13 minus 10) and reset the metric
          value to 1 just in case the network layer would get confused.  The
          #defines in arcnet.c list the various values for the debug
          constants.  D_EXTRA (debug level 3) is the default as distributed.
            NOTE: the metric value is only checked when the card is
                  initialized.  This is why you need to do an ifconfig down. 
                  /etc/rc.d/rc.inet1 is the Slackware (and possibly
                  standard) place to put the network initialization which is
                  necessary to bring the card back up with your routing, etc
                  intact.
	- Fixed a nasty bug which caused transmits to be retried
          indefinitely AND lose track of kernel memory.  Ouch!
        - IRQ_TX now marks "unsplit" transmits as complete as soon as
          they are begun, in order to speed up IRQ transmits some more.  I
          finally broke 200k/second!
        - Changed snarf_region to request_region for the new Linux kernel.
	- Loadable module support at last!  Geesh, I should have done this
          before.  What a timesaver!  To use it, apply the included kernel
          patch (back already!), compile the kernel WITHOUT ARCnet support,
          and then type "make modules".  You can then use the insmod command
          to insert linux/modules/arcnet.o.
        - Now using udelay() for delay loops (old version of JIFFER caused
	  lockups when compiling as a loadable module)
	- Improved IRQ autoprobe.  It should work better now, assuming it
          doesn't lock up after status5.  If it does, undefine DANGER_PROBE
          in arcnet.c and e-mail me.  No, I didn't fix the problem with
          NE2000's yet.  Don't ask :)
        - IRQ_TX now works properly and is the new default.


** v0.40 (IRQ-driven XMITs, ping-pong XMITs)
        - Added ping-pong transmit buffers for increased speed.  I should
          have done this long ago, but Joachim's information file finally
          convinced me.
        - Removed video card addresses from autoprobe.  Those were a little
          silly anyway :)
        - Reassembling packets is not aborted if ANY segment that has been
          received is retransmitted.  Before, only the most recently sent
          segment would be allowed.  I don't think anyone actually had
          problems like this, but it seemed more correct than the old way. 
          Thanks to Tomasz Motylewski <motylewski@trurl.ch.uj.edu.pl> for
          pointing this out.
	- Added IRQ-driven transmitter support, which should drastically
          reduce system load and speed up transmission.
          
          Info for this fix came from V.Shergin <vsher@sao.stavropol.su>,
          who sent some very nice ARCnet source code he had been working on,
          and Joachim Koenig <jojo@repas.de>, who sent both source code and
          information.
          
          I was handling the IRQ mask register incorrectly.
          
          This option is disabled by default due to some small problems.


v0.32 (bug fixes) - included in Linux kernel 1.1.80!
	- Fixed bug that caused lockups when CAREFUL_XMIT fails (ie. a
	  system on the network suddenly goes down or a cable is unplugged). 
          CAREFUL_XMIT, in a fit of carefulness, would retry forever or
          until the target system responded, which reduced system
	  performance to, well, zero.
        - Removed annoying (and scary) messages like "IRQ ignored" in the
          D_INIT debug level.  This was basically done by adding a new debug
          level, D_EXTRA, and moving them to that.  Note: these messages
          happened to everyone and were really nothing to worry about.
        - Made the timer handler (8 times a second) a configurable option,
          disabled by default.  It doesn't seem to be necessary any more.
          Do check the options near the top of arcnet.c.  You might like
	  them.
	- I forgot to include the promised patch to arcether.asm.  It's
	  here now.
	- Received sequence numbers are now handled "correctly" - assembly
          is aborted if the sequence numbers in the segments of a split
          packet are not all the same.  The RFC doesn't really explain what
          to do, but this seems to be the accepted standard.
	- The patch for Linux 1.1.56 has been removed.  Use a newer version
          of Linux.
        - The extreme death warning from 0.30 has been cancelled.  0.32
          fixes all dangerous bugs and puts us well on our way to BETA and
          inclusion in the kernel archive itself.  See the top of arcnet.c
          for existing to-do's.
	
	
v0.31 (bug fixes)
	- Oops!  We were doing sequence numbers incorrectly.  We should
	  be incrementing them on every new complete packet, NOT every
	  segment of a split packet.  ARCether and friends died silently
	  on every split packet we were sending.  I don't know how I missed
	  this...
	
	
** v0.30 (packet splitting, cleanups, reorganizations, bugfixes)
	- Packet splitting introduced.  This may still be buggy, since I
          had to rewrite a LOT of the code for this to work.  To disable
          packet splitting, manually set an MTU of 510, ie:
	  	ifconfig arc0 HOSTNAME mtu 510
	- The default MTU is now 1500, the same as an ethernet.  You can set
          it higher or lower as desired, up to Linux's maximum of 3800. 
          Anything bigger than 1500 seems to confuse DOS.  The driver itself
          should be able to handle 8k packets without trouble. (really big
          NFS blocks, for instance, seem to work)
	- Debug levels are a little shorter.  DEBUG_INIT, etc, are now
          D_INIT, etc, and there is a new macro to shorten the code a bit. 
          This shouldn't affect anyone but me, really.  Also made a macro
          to save typing while printing debug info :)
        - Packet dumps (D_TX and D_RX) now display the WHOLE packet being
	  sent, including whitespace.
	- Increased reset/transmit command delays, as J.S. van Oosten
	  <jvoosten@compiler.tdcnet.nl> was having troubles.
	- Included patch to ARCether's source code (for DOS).  Mail me if
	  you need the binary... I'll send this patch to the author of
	  arcether if a few people can verify that it works correctly. 
	  The original patch was by Stephen A. Wood <saw@cebaf.gov>, and I
	  modified it slightly (commented out a line instead of deleting).
	  BTW, get ARCether and other packet driver source code from:
	  	oak.oakland.edu:/pub/msdos/pktdrvr
	- More great card info from Juergen Seifert <seifert@htwm.de>, this
	  time for the CNet CN160-series boards, as well as some 8/16 bit
	  noname cards.
	- Linux 1.1.46 kernel patch removed.  Get a newer kernel, since they
          have LOTS of bug fixes, including changes to NFS.
        - Made a patch for Linux net-tools-1.1.56 to add direct Linux
          support.  This isn't included here; it was posted to the mailing
          list and should be included in the next release of net-tools.


v0.22 (bug fixes)
       	- The ARCnet patch wasn't actually changed, even though there were
          two versions (exactly the same) in 0.21.  Oops?
        - Files renamed, and this history moved out of arcnet.c into a
	  separate file.
	- Gee, I feel silly.  When 0.21 added all those extra probe
	  addresses, I forgot the last "0" in each one!  Fixed that...
	- Truckloads and oodles of thanks to Juergen Seifert
          <seifert@htwm.de> for his VERY complete information about
          PC130, PC500, and CN120 boards.  I'm starting to feel guilty
          because all I did was write the driver! :)
        - Added info about IPX and Appletalk packets to the driver.  We
          don't support them, just ignore them (I don't think Linux knows
          what to do with them).  I'll look into this deeper later.  Thanks
          to Juergen for this.
        - Messages about "unrecognized packet" are only shown for
          DEBUG_DURING and higher.  Juergen noticed that it was causing
	  annoyances with IPX.
	- patch to net/inet/arp.c changed to include a #ifdef for
          CONFIG_AVE_ARCNET.  If you care about this (it will leave out
          about five lines of code if you don't use arcnet support after
          installing this patch, which is silly in itself) you might want to
          reapply the patch as listed in README.  Otherwise don't bother.
	- DEBUG_TX and DEBUG_RX output improved slightly thanks to Lutz
                Donnerhacke <lutz@as-node.jena.thur.de>
        - We have a mailing list at last!  Read README for details on how to
          subscribe.


v0.21 (bug fixes)
       	- "addr[0]=D1h (not D1h)" bug fixed.  I feel silly!
       	- ARP faking - for ARCETHER and various stupid TCP/IP DOS programs
          that insist on sending the address '00h' as the source in ARP
          packets... if we get one of those, we change it to the proper
          value.
       	- Patch for net/inet/arp.c removed from the ARCnet patch, since it
          was just incorporated into Linux 1.1.56.
       	- Probing more addresses because they're actually supported by some
          PUREDATA cards.  Thanks to Mark Rejhon <mdrejhon@magi.com> for
          sending in this info.
	- Decreased timing delay.  We check ARCnet status for "stuckness" 8
          times a second now.
        - tsx-11.mit.edu is now a secondary distribution site for the
	  drivers.
        

** v0.20 (ping-pong receive buffers, bug fixes)
       	- Added ping-pong receive buffers in order to (hopefully) reduce
          network packet loss.  Seems to work!
      	- DIDN'T add ping-pong _transmit_ buffers, because that would
          probably INCREASE packet loss!
       	- Increased time for "Waiting for reset..." to hopefully fix some
          troubles with 16-bit cards on fast computers.
       	- Changed some variable names to make more sense.
       	- Found the problem that reduced transfer speeds: it was the
          debugging code that filled I/O buffers with 0x42 to make them
          cleaner for packet dumps.  This is now only enabled for
          DEBUG_DURING and higher.  70k/sec ftp again!
        - Various IRQ handler, transmitter, etc improvements to try to
          reduce ARCnet locks.  Succeeded somewhat, but not completely.
        - Reduced total time needed to reset the card.  Hopefully this won't
          break anything... (it works for me!)
	- Added a timer (2 times a second) which should recover us if we
          miss a receive IRQ.


v0.15 (bug fixes)
       	- Update jumpers.txt for more cards (thanks everyone!)
       	- Change order of autoprobe so "suggested" values are first
       	- Fixed freeze-up bug?! - nope, guess not.
        	
        	
v0.14 (bug fixes)
       	- Include jumpers.txt, a description of ARCnet jumper and IRQ
          settings. (only lists PC100 for now)
       	- Autoprobe now scans all possible (I think) I/O and Memory
          addresses for the PC100 card, and hopefully all others.
        - Thanks to John Paul Morrison <jmorriso@bogomips.ee.ubc.ca> for the
          patches to use arc0 instead of eth0, and for noticing that I
          forgot to patch the config.in file...


v0.13 (bug fixes)
      	- Autoprobe should now detect IRQ's better. (I hope!)
        - If you *disabled* shared-memory autoprobe by giving values with
          lilo or by changing Space.c, we'd cause a null-pointer assignment
          and, needless to say, the driver wouldn't work.
        - Okay, resetting the card lots again because at least it worked
          that way... we started having bigger problems, because if
          something broke the card wouldn't reset...(sigh)
          ...of course, the best solution is still to fix the weird
          packet-dropping stuff.  Maybe ping-pong buffers...


v0.12 (bug fixes)
      	- Added this change history.
       	- Now an actual release, with instructions and everything :) Also
          includes a patch now, because the changes to other files in the
          kernel were getting a little hard to explain.
       	- Fixed a bug with exception packets that caused 224-byte pings (and
          so, some other size of generic packets) to be blocked.
     
        
v0.11 (bug fixes, ARCether-compatible, slowdown)
       	- Silly bug fixed which caused ClientData header to be an extra byte
          long (I can't BELIEVE I was that close to arcether and didn't
          notice). By the way, are structs SUPPOSED to round their sizes to
          the nearest 16 bits?
	- The driver now correctly reports its hardware type as
          ARPHRD_ARCNET, instead of ARPHRD_ETHER (we needed to patch
          net/inet/arp.c for this, though)
	- I think I reduced the number of card resets.  Maybe.
	- Something I did dropped FTP speed to 50k/s.  Hmm...
	
	
** v0.10 (bug fixes, major rewrite)
	- MANY changes towards arcether-for-DOS compatibility, but we still
          haven't quite made it (sigh).
	- My close examination of arcether.c made me notice the need for
          "exception" packets - turns out this is the primary reason for
          most of the lost/corrupted packets.
	- NFS now works (relatively) if you set your block size to about 400
          or so (although 200 seems a little more reliable)
	- First public announcement...


v0.02 (MANY bug fixes)
	- It seems we were only noticing received packets when we sent one. 
          Or was it the other way around?  In any case, that slowed our
          thruput by a LOT - now we're up to about 70k/sec FTP or so.
	- Far too much else to remember, let alone describe.

	  
v0.01 (initial release)
	- Only e-mailed to one person, who (probably luckily for him)
          couldn't figure out how to install it.
