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

How version numbers work:

   2 . 0  0  [ALPHA]
   |   |  |     |
   |   |  |     \-- Stability meter - ALPHA releases may not be stable.
   |   |  |
   |   |   \-- Buglevel - increased on bugfix releases.
   |   |
   |    \-- Subversion - increased on rewrites or new features.
   |
    \-- Major version 2 - second major "stable" release.


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

	
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.
