Hey, Emacs, we're -*-Text-*- mode!

===== Release notes for ftape-3.04d 25/11/97 =====
- The correct pre-processor statement for "else if" is "#elif" not
  "elsif".
- Need to call zft_reset_position() when overwriting cartridges
  previously written with ftape-2.x, sftape, or ancient
  (pre-ftape-3.x) versions of zftape.

===== Release notes for ftape-3.04c 16/11/97 =====
- fdc_probe() was calling DUMPREGS with a result length of "1" which
  was just fine. Undo previous change.

===== Release notes for ftape-3.04b 14/11/97 =====

- patches/2.x.x/floppy.c.diff was somewhat broken, releasing i/o
  regions it never had allocated.
- fdc_probe() was calling DUMPREGS with a result length of "1" instead
  of "10"
- Writing deleted data marks if the first segents on track zero are
  should work now.
- ftformat should now be able to handle those cases where the tape
  drive sets the read only status bit (QIC-40/80 cartridges with
  QIC-3010/3020 tape drives) because the header segment is damaged.
- the MTIOCFTCMD ioctl may now be issued by the superuser ONLY.

===== Release notes for ftape-3.04a 12/11/97 =====
- Fix an "infinite loop can't be killed by signal" bug in
  ftape_get_drive_status(). Only relevant when trying to access
  buggy/misconfigured hardware
- Try to compensate a bug in the HP Colorado T3000's firmware: it
  doesn't set the write protect bit for QIC80/QIC40 cartridges.

===== Release notes for ftape-3.04 06/11/97 =====
- If positioning with fast seeking fails fall back to a slow seek
  before giving up.
- (nearly) no retries on "no data errors" when verifying after
  formatting. Improved tuning of the bad sector map after formatting.
- the directory layout has changed again to allow for easier kernel
  integration
- Module parameter "ftape_tracing" now is called "ft_tracing" because
  the "ftape_tracing" variable has the version checksum attached to it.
- `/proc/ftape' interface for 2.0.* kernels. `/proc/ftape' no longer
  is a directory but a file that contains all the information formerly
  provided in separate files under the `/proc/ftape/' directory.
- Most of the configuration options have been prefixed by "CONFIG_FT_"
  in preparation of the kernel inclusion. The Makefiles under
  "./ftape/" should be directly usable by the kernel.
- The MODVERSIONS stuff is now auto-detected.
- Broke backslashed multi line options in MCONFIG into separate lines
  using GNU-make's "+=" feature.
- The html and dvi version of the manual is now installed under
  '/usr/doc/ftape` with 'make install`
- New SMP define in MCONFIG. ftape works with SMP if this is defined.
- attempt to cope with "excessive overrun errors" by gradually
  increasing FDC FIFO threshold. But this doesn't seem to have too
  much an effect.
- New load time configuration parameter "ft_fdc_rate_limit". If you
  encounter too many overrun errors with a 2Mb controller then you
  might want to set this to 1000.
- overrun errors on the last sector in a segment sometimes result in
  a zero DMA residue. Dunno why, but compensate for it.
- there were still fdc_read() timeout errors. I think I have fixed it
  now, please FIXME.
- Sometimes ftape_write() failed to re-start the tape drive when a
  segment without a good sector was reached ("wait for empty segment
  failed"). This is fixed. Especially important for > QIC-3010.
- sftape (aka ftape-2.x) has vanished. I didn't work on it for
  ages. It is probably still possible to use the old code with
  ftape-3.04, if one really needs it (BUT RECOMPILE IT)
- zftape no longer alters the contents of already existing volume
  table entries, which makes it possible to fill in missing fields,
  like time stamps using some user space program.
- ./contrib/vtblc/ contains such a program.
- new perl script ./contrib/scripts/listtape that list the contents of a
  floppy tape cartridge parsing the output of "mt volinfo" + "mt fsf"
- the MTWEOF implementation has changed a little bit (after I had a
  look at amanda). Calling MTWEOF while the tape is still held open
  after writing something to the tape now will terminate the current
  volume, and start a new one at the current position.
- the volume table maintained by zftape now is a doubly linked list
  that grows dynamically as needed.

  formatting floppy tape cartridges
  ---------------------------------
  * there is a new user space formatting program that does most of the
    dirty work in user space (auto-detect, computing the sector
    coordinates, adjusting time stamps and statistics). It has a
    simple command line interface.
  * ftape-format.o has vanished, it has been folded into the low level
    ftape.o module, and the ioctl interface into zftape.o. Most of the
    complicated stuff has been moved to user space, so there was no
    need for a separate module anymore.
  * there is a new ioctl MTIOCFTCMD that sends a bare QIC-117 command
    to the tape drive.
  * there is a new mmap() feature to map the dma buffers into user
    space to be used by the user level formatting program.
  * Formatting of yet unformatted or totally degaussed cartridges
    should be possible now. FIXME.

===== Release notes for ftape-3.03b, <forgot the exact date> ====

ftape-3.03b was released as a beta release only. Its main new feature
was support of the DITTO-2GB drive. This was made possible by reverse
engineering done by <fill in his name> after Iomega failed to support
ftape. Although they had promised to do so (this makes me feel a bit
sad and uncomfortable about Iomega).

===== Release notes for ftape-3.03a, 22/05/97 ====

- Finally fixed auto-un-loading of modules for kernels > 2.1.18
- Add an "uninstall" target to the Makefile
- removed the kdtime hack
- texi2www didn't properly set the back-reference from a footnote back
  to the regular text.

  zftape specific
  ---------------
  * hide the old compression map volume. Taper doesn't accept the
    presence of non-Taper volumes and Taper-written volume on the same
    tape.
  * EOD (End Of Data) handling was still broken: the expected behavior
    is to return a zero byte count at the first attempt to read past
    EOD, return a zero byte count at the second attempt to read past
    EOD and THEN return -EIO.
  
  ftape-format specific
  ---------------------
  * Detection of QIC-40 cartridges in select_tape_format() was broken
    and made it impossible to format QIC-3010/3020 cartridges.
  * There are strange "TR-1 Extra" cartridges out there which weren't
    detected properly because the don't strictly conform to the
    QIC-80, Rev. N, spec.

===== Release notes for ftape-3.03, 30/04/97 =====

- Removed kernel integration code from the package. I plan to provide
  a package that can be integrated into the stock kernel separately
  (hopefully soon).
  As a result, a simple `make' command now will build everything.
- ALL compile time configuration options have been moved to the file
  `MCONFIG'.
- Quite a few `low level' changes to allow formatting of cartridges.
- formatting is implemented as a separate module `ftape-format.o'. The
  modified `mt' program contains sample code that shows how to use it.
- The VFS interface has been moved from the `ftape.o' module to the
  high level modules `zftape.o' resp. `sftape.o'. `ftape.o' contains
  the hardware support only.
- A bit of /proc support for kernels > 2.1.28
- Moved documentation to Doc subdir. INSTALL now contains some real
  installation notes.
- `install' target in Makefile.

zftape specific:
----------------

- zftape works for large cartridges now ( > 2^31 bytes)
- MTIOCVOLINFO and MTIOCGETSIZE now return the size in KILOBYTES,
  NO LONGER in bytes.

- permissions for write access to a cartridge have changed:
  * zftape now also takes the file access mode into account
  * zftape no longer allows writing in the middle of the recorded
    media. The tape has to be positioned at BOT or EOD for write
    access.

- MTBSF has changed. It used to position at the beginning of the
  previous file when called with count 1. This was different from the
  expected behavior for other Un*x tape drivers (i.e. SCSI). MTBSF
  with count 1 should merely position at the beginning of the current
  volume. Fixed. As a result, `tar --verify' now produces the desired
  result: it verifies the last written volume, not the pre-last
  written volume.

- The compression map has vanished --> no need for `mt erase' any
  more. Fast seeking in a compressed volume is still be possible, but
  takes slightly longer. As a side effect, you may experience an
  additional volume showing up in front of all others for old
  cartridges. This is the tape volume that holds the compression map.

- The compression support for zftape has been moved to a separate
  module `zft-compressor'. DON'T forget to load it before trying to
  read back compressed volumes. The stock `zftape.o' module probes for
  the module `zft-compressor' using the kerneld message channel; you
  have to install `zft-compressor.o' in a place where modprobe can
  find it if you want to use this.

- New experimental feature that tries to get the broken down GMT time
  from user space via a kernel daemon message channel. You need to
  compile and start the `kdtime' daemon contained in the contrib
  directory to use it. Needed (?) for time stamps in the header
  segments and the volume table.

- variable block size mode via MTSETBLK 0

- keep modules locked in memory after the block size has been changed

sftape specific:
----------------

- end of tape handling should be fixed, i.e. multi volume archives
  written with `afio' can be read back now.


===== Release notes for ftape-3.02a, 09/01/97 =====

No big news:
- call zft_init() resp. sft_init() when compiling the entire stuff
  into the kernel image.
- fix bug in ftape-setup.c when NO_TRACE_AT_ALL was defined.
- fix bug in sftape-eof.c/zftape-eof.c for old kernels (1.2.*)
- add support for new module interface for recent kernels

===== Release notes for ftape-3.02, 16/12/96 =====
- Fixed the `FDC unlock command failed' bug in fdc-io.c. When the FIFO
  was already locked when ftape was loaded, ftape failed to unlock it.
- Fixed compilation of `contrib/gnumt'. It now finds `mtio.h' even if
  ftape is NOT included into the kernel source tree.
- fc-10.c: include <asm/io.h> for inb() and outb().
- ftape/sftape/zftape: all global variable now have either a `ftape_',
  a `ft_', `sft_', `zft_' or `qic_' prefix to prevent name clashes
  with other parts of the kernel when including ftape into the kernel
  source tree.
- Kerneld support has changed. `ftape' now searches for a module
  `ftape-frontend' when none of the frontend (`sftape' or `zftape') is
  loaded. Please refer to the `Installation/Loading ftape' section of
  the TeXinfo manual.
- Add load resp. boot-time configuration of ftape. There are now
  variables ft_fdc_base, ft_fdc_dma and ft_fdc_irq corresponding to
  the former FDC_BASE etc. compile time definitions. One can also use
  the kernel command line parameters to configure the driver if it is
  compiled into the kernel. Also, the FC-10/FC-20 support is load-time
  configurable now as well as the MACH-II hack (ft_probe_fc10,
  resp. ft_mach2). Please refer to the section `Installation/Configure
  ftape' of the TeXinfo manual.
- I removed the MODVERSIONS option from `Makefile.module'. Let me alone
  with ftape and MODVERSIONS unless you include the ftape sources into
  the kernel source tree.
- new vendors in `vendors.h':
  * HP Colorado T3000 
  * ComByte DoublePlay (including a bug fix for their broken
    formatting software, thanks to whraven@njackn.com)
  * Iomega DITTO 2GIG. NOTE: this drive cannot work with ftape because
    the logical data layout of the cartridges used by this drive does
    NOT conform to the QIC standards, it is a special Iomega specific
    format. I've sent mail to Iomega but didn't receive an answer
    yet. If you want this drive to be supported by ftape, ask Iomega
    to give me information about it.
- zftape:
  * re-introduced the MTIOC_ZFTAPE_GETBLKSZ ioctl for compatibility
    with zftape 1.06a and earlier. Please don't use it when writing
    new software, use the MTIOCVOLINFO ioctl instead.
  * Major overhaul of the code that updates the header segments. Never
    change the tape label unless erasing the tape. Thus we almost
    never need to write the header segments, unless we would modify
    the bad sector map which isn't done yet. Updating of volume table
    and compression map more secure now although it takes a bit
    longer.
  * Fixed bug when aborting a write operation with a signal: zftape
    now finishes the current volume (i.e. writes an eof marker) at the
    current position. It didn't before which led to somehow *strange*
    behavior in this cases.
  * Keep module locked in memory when using it with  the non-rewinding
    devices and the tape is not logical at BOT. Needed for kerneld
    support.
- sftape:
  * Keep module locked in memory when using it with  the non-rewinding
    devices and the tape is not logical at BOT. Needed for kerneld
    support.

===== Release notes for ftape-3.01, 14/11/96 =====

- Fixed silly bugs in ftape-3.00:
  * MAKEDEV.ftape: major device number must be 27, not 23 
  * sftape/sftape-read.c: sftape_read_header_segments() called 
    itself recursively instead of calling ftape_read_header_segment()
  * zftape/qic-vtbl.h: conversion of ftape's file marks to zftape's
    internal volume table was broken.
  * patches/2.x.x/linux-2.0.21.dif: my RCS (resp. CVS) system replaced
    the `$Revison:' etc. macros in the `ftape.h' concerning part of the
    patch :-( Fixed.
  * info/ftape.info: Fixed misspellings (`cp' <-> `cp -r' etc.)
  * when ftape/sftape or ftape/zftape was compiled into the kernel the
    variable ftape_status was declared twice. Fixed.
  * removed reference to undeclared variable kernel_version when not
    compiling as module
  * fixed a bug introduced by the use of bit-fields for some flags
    (i.e. write_protected, no_cartridge, formatted)
  * flag `header_read' is now reset correctly to zero when tape is
    removed.
- fixed a bug in sftape/sftape-eof.c that was already in the original
  ftape code. MTFSF/BSF was not handled correctly when positioned
  right before the file mark (think of tar)
- Changed TRACE macros (following a suggestion of Marcin Dalecki) to use
  the predefined __FUNCTION__ macro of GCC. Spares about 4k of code.
- added new vendor id for Iomega DITTO 2GIG
- fixed a bug already present in zftape-1.06 when aborting a write
  with a signal: we now finish the current volume at that
  position. Header segments remain NOT up to date until an explicit call
  to MTREW or MTOFFL is done.  

===== Release notes for ftape-3.00, 14/10/96 =====

- Merged ftape with zftape. There are three modules now:
  ftape for the hardware support, sftape for the implementation of the
  original ftape eof mark stuff and zftape that implements zftape's way
  of handling things (compression, volume table, tape blocks of
  constant length)
- Documentation in TeXinfo format in the `info' subdirectory.
- New ioctls for zftape. See zftape/zftape.h
- Dummy formatting ioctl for ftape. See ftape.h
- Kernel patch files for the 2.*.* series to include ftape-3.00 in the
  kernel source tree. These includes a kernel compatible Config.in
  script and fairly large online information for the kernel configure
  script.
- Support for compiling with Linux-1.2.13. 
- Modified GNU mt from their cpio package that can handle the new
  ioctls.
- ftape/sftape/zftape is kerneld save now!

Notes on sftape:
- sftape implements the eof handling code of the original ftape. If
  you like to stick with the original ftape stuff, you have to use
  this module, not zftape.
- sftape is kerneld save, unlike the original ftape.
- we keep the entire header segment now in memory, so no need to read
  it before updating the header segments. Additional memory
  consumption: 256 bytes. 

Notes for zftape:
- zftape has support for tapes with format code 6 now, which use a
  slightly different volume table format compared with other floppy
  tapes.
- new ioctls for zftape. Have a look at zftape/zftape.h
- The internal volume table representation has changed for zftape. Old
  cartridges are converted automatically.
- zftape no longer uses compression map segments, which have vanished
  from the QIC specs, but creates volume table entry that reserves
  enough space for the compression map. 
- zftape is kerneld save now.
- we keep the entire header segment now in memory, so no need to read
  it before updating the header segments. Additional memory
  consumption: 256 bytes. 

Notes for contrib/gnumt:
- modified mt from the GNU cpio package that supports all the new
  ioctls of zftape.
Notes for contrib/swapout:
- This contains the swapout.c program that was written by Kai
  Harrekilde-Pederson. I simply added a Makefile.

===== Release notes for ftape-2.10, 14/10/96 =====

The ftape maintainer has changed. 
Kai Harrekilde-Petersen <khp@dolphinics.no>
has resigned from maintaining ftape, and I,
Claus-Justus Heine <claus@momo.math.rwth-aachen.de>,
have taken over.

- Added support for tapes with `format code 6', i.e. QIC-3020 tapes
  with more than 2^16 segments.
- merged changes made by Bas Laarhoven with ftape-2.09. Refer
  to his release notes below. I've included them into this
  file unchanged for your reference.
- disabled call stack back trace for now. This new feature
  introduced by the interim release 2.0.x still seems to
  be buggy.
- Tried to minimize differences between the ftape version
  to be included into the kernel source tree and the standalone
  module version.
- Reintroduced support for Linux-1.2.13. Please refer to the
  Install-guide. 

===== Release notes for ftape-2.09, 16/06/96 =====

There aren't any really big news in this release, mostly just that I
(the maintainer) have changed my email address (due to a new job).  My
new address is <khp@dolphinics.no>

- The CLK_48MHZ and FDC_82078SL options has gone (all 2Mbps cards seem
  to use a 48MHz oscillator anyway and I haven't heard of an 'SL
  chip out there).
- The S82078B has been `downgraded' to i82077AA compability.
- TESTING option revived.  Right now, it'll enable the (seriously broken)
  2Mbps code.  If you enable it, you'll experience a tape drive that's
  *really* out to lunch!
- Some (bold) changes in the init code.  Please notify me if they
  break things for you.

===== Release notes for ftape-2.08, 14/03/96 =====

If you correct a problem with ftape, please send your patch to
khp@dolphinics.no too.

- Updated to reflect that NR_MEM_LISTS is gone in 1.3.74
- Teac 700 added to list of known drives.
- The registered device name is now "ft" rather than "ftape".

===== Release notes for ftape-2.07a, 14/03/96 =====

Bugfixes by Marcin Dalecki <dalecki@namu03.gwdg.de>:
- In the last release it just compiled against 1.3.70;
  now the params to request_irq() and free_irq are() are fixed, so it also 
  works in 1.3.73 :-)
- Support for modules is now correct for newer kernels.

===== Release notes for ftape-2.07, 04/03/96 =====


- ftape updated to compile against 1.3.70.
- Iomega 700 and Wangtek 3200 recognised.


===== Release notes for ftape-2.06b, 13/02/96 =====

Another simple bugfix version.

- Jumbo 700 recognised.
- Typo in vendors.h fixed.


===== Release notes for ftape-2.06a, 10/02/96 =====

This release is a simple bugfix version.

- Linux/SMP: ftape *should* work.
- FC-10/20: Only accepts IRQs 3-7, or 9.  If IRQ 9, properly tell the card
  to use IRQ 2.  Thanks to Greg Crider (gcrider@iclnet.org) for finding and
  locating this bug and testing the patch.
- Insight drive recognised correctly again.
- Motor-on wakeup version of the Iomega 250 drive added


===== Release notes for ftape-2.06, 28/01/96 =====

Special thanks go to Neal Friedman and Steven Sorbom for their
help in producing and testing this release.

I have continued to clean up the code, with an eye towards inclusion
of ftape in Linus' official kernel (In fact, as I type this, I am
running on a kernel with ftape support statically linked).  I have
test-compiled ftape against my 1.2.13 tree without problems.
Hopefully, everything should be OK for the v1.2.x people.

WARNING! Alan Cox has mailed me that ftape does *NOT* work with
Linux/SMP.  If you try to run ftape under Linux/SMP, it will cause a
kernel deadlock (which is worse than a panic).

- QIC-3020/TR-3: 1Mbps support works.  Neal is capable of reading and
  writing data to a tape.  ftape will automatically detect the type of
  tape (e.g. TR-3 vs QIC-80) and move the fdc in and out of
  "perpendicular mode" as necessary.
- 2Mbps support is disabled by default, since it is not fully
  debugged.  If you are adventurous, remove -DFDC_82078SL in the
  Makefile and see what happens :-)
- fdc detection: silly bugs removed (Only 2Mbps fdcs were affected)
  and added detection of the National Semiconductors PC8744 fdc chip
  (used in the PC873xx "super-IO" chips).
- Removed warning about incompatible types when compiling with Linux
  1.2.x.
- README.PCI updated with info about the DELL Dimension XPS P90.
- Connor TST3200R added to detected drives.
- `swapout' utility added to distribution.  It will dirty 5Meg of
  memory, trying to swap out other programs.  Just say `make swapout'
  to build it.  ftape will do this automatically Real Soon Now (ie:
  when I have found out which kernel memory alloc function to call).


===== Release notes for ftape-2.05, 08/01/96 =====

- For v1.2.x Kernels, you must apply the patch linux-1.2/ksyms.patch to
  the kernel and rebuild it (it adds the __get_dma_pages symbol to
  ksyms.c).
- Included new asm-i386/io.h file from v1.3.x kernel series, to enable
  gcc v.2.7.[12] to compile v1.2.x kernels (linux-1.2/io.h).
- Module versions: If you wish to compile ftape as a versioned module,
  you must first compile your kernel with CONFIG_MODVERSIONS=y.
  Otherwise, you will get complaints that <linux/modversions.h> does not
  exist (if that happens, a `touch modversions.h' will help you out).
- CLK_48MHZ: new define in the Makefile (default: non-zero).  If you have
  a tape controller card that uses the i82078(-1) chip, but cannot get
  it to work with ftape, try set it to 0 (and please report this).
- QIC-3010/3020: Complete support is still missing, but will hopefully
  come soon.  Steven Sorbom has kindly provided me with hints about
  this.  Writing of QIC-3020 tapes definitely does NOT work (do not try
  it! - the drive will not be in "perpendicular mode" and this will ruin
  the formatting info on the tape).
- ftape_num_buffers is out of fashion: use NR_BUFFERS instead (and
  recompile if you want to change it :-).


===== Release notes for ftape-2.04, 01/01/96 =====

This version by Kai Harrekilde-Petersen <khp@dolphinics.no>

- ALERT! Support for Kernels earlier then v1.1.85 is about to go away.
  I intend to clean up some of the code (getting rid of an annoyingly
  large numbers of #ifdef mostly), which means that support for
  pre-1.1.85 kernels must go as well.
- NR_FTAPE_BUFFERS is gone; You can instead select the number of dma
  buffers by saying `insmod ftape.o ftape_num_buffer=<n>' instead.
- Configure script gone.  ftape will now automagically determine your
  kernel version by /usr/include/linux/version.h instead.
- CONFIG_MODVERSIONS now work.  All combinations of versioned /
  unversioned kernel and ftape module works (at least with my 1.3.52
  kernel).
- If you have problems with inserting ftape into an old (1.2.x)
  kernel (e.g. insmod says "1.2.8 does not match 1.2.8), recompile
  your modules utilities with your new compiler.
- Reveal TB1400 drive added to vendors.h
- Support for the i82078-1 (2Mbps) chip is coming along.  The
  biggest problem is that I don't have such a card, which makes
  testing / debugging somewhat problematic.  The second biggest
  problem is that I do not have the QIC-3010/3020 standards either.
  Status right now is that the chip is detected, and it should be
  possible to put it into 2Mbps mode.  However, I do not know what
  "extras" are needed to complete the support.  Although putting the
  i82078 into 1Mbps mode ought to work out of the box, it doesn't
  (right now, ftape complains about id am errors).


===== Release notes for ftape-2.04beta5, 29/12/95 =====

Bas offline linux-tape
----------------------
For reasons only known to the majordomo mail list processor, Bas was
kicked off the linux-tape list sometime during the summer.  Being
overworked at his for-pay job, he didn't notice it much.  Instead I
(Kai, khp@dolphinics.no) has worked on ftape to produce the 2.04(beta)
version.

zftape
------
Note that there exists a much improved version of ftape, written by
Claus-Justus Heine <claus@willi.math.rwth-aachen.de> which is named
zftape, which conforms to the QIC-80 specs on how to mark backups, and
is capable of doing automatic compression.  However, zftape makes
substantial changes to ftape, and I (Kai) have therefore declined to
integrate zftape into ftape.  Hopefully, this will happen soon.

CONFIG_QIC117 removed from the kernel
-------------------------------------
The biggest change of all is that ftape now will allocate its dma
buffers when it is inserted.  The means that the CONFIG_QIC117 option
has disappeared from the Linux kernel as of v1.3.34.  If you have an
earlier kernel, simply answer 'no' to the question will do the trick
(if you get complains about __get_free_pages() missing, contact the
linux-tape mailing list).

Note that ftape-2.04beta will work equally well on kernels with and
without `ftape support'.  The only catch is, that you will waste
around 96-128Kb of precious DMA'able memory on a box that has ftape
support compiled in.

Now for the real changes:

- FC-20 can now use DMA channels 1, 2, and 3. Thanks to Daniel
  Cohen, catman@wpi.edu.
- ftape no longer requires a (gigantic) 96Kb buffer to be statically
  allocated by the kernel.
- Added new Iomega drive (8882) to vendors.h
- -fno-strength-reduce added to Makefile, since GCC is broken.
- i82078-1 (2Mbps) FDC support started.


===== Release notes for ftape-2.03b, 27/05/95 =====

- Prevented verify_area to return error if called with zero length.
- Fixed a bug in flush_buffers that caused too much padding to be
  written when a final segment had bad sectors.
- Increased maximum fast-seek overshoot value from 5 to 10 segments.
- Breaking loop after 5 retries when positioning fails.
- Fixed wrong calculation of tape length for QIC-3010 and QIC-3020
  tapes (densities were swapped).
- Fixed wrong calculation of overshoot on seek_forward: Wrong sign
  of error.
- Suppress (false) error message due to new tape loaded.
- Added two new CMS drives (11c3 and 11c5) to vendors.h.


===== Release notes for ftape-2.03a, 09/05/95 =====

- Fixed display of old error (even if already cleared) in ftape_open.
- Improved tape length detection, ioctls would fail for 425 ft tapes.
  Until the tape length is calculated with data from the header
  segment, we'll use worst-case values.
- Clear eof_mark after rewinding ioctls.
- Fixed wrong version message (2.03 had 2.02g id).
- Fixed bug that caused the fdc to be reset very frequently.
  This shouldn't affect normal operation but the timing of the
  report routines has changed again and that may cause problems.
  We'll just have to find out....
- Implemented correct write precompensation setting for QIC-3010/3020.
- Cleaned up fdc_interrupt_wait routine. Hope it still works :-)
- Finally removed (already disabled) special eof mark handling for
  gnu tar.
- Changed order of get_dma_residue and disable_dma in fdc-isr.c
  because the current order would fail on at least one system.
  We're back to the original order again, hope (and expect) this
  doesn't break any other system.


===== Release notes for ftape-2.03, 07/05/95 =====

(Changes refer to the first ftape-2.02 release)

Support for wide and extended length tapes
------------------------------------------
The Conner TSM 420 and 850 drives are reported to be working.
I haven't received any reports about other brands; the TSM 420
and 850 seem to be the most widely used wide drives.
Extended length tapes (425 ft) with normal QIC-80 drives
are operating too (At least I've had no reports stating otherwise).
_Not_ yet completely supported (although they may work) are
QIC-3020 drives and 2 Mbps floppy disk controllers won't work at
the highest speed.
If someone is kind enough to send me one of these, I'll include
support for it too ;-)

Easier configuration
--------------------
Problems due to wrong settings in the Makefile are prevented
by using a configuration script that sets the necessary (kernel
version dependent) compile time options.
This kernel version is now determined from the sources found
at /usr/src/linux, or if not found, the old way using
/proc/version.
Versioned modules will be used automatically when supported
by- and configured in- the kernel.
Note that the current modules code (1.1.87) is still broken
and _needs_ the fix included in the insmod directory.
Please don't send me any more Oops reports caused by insmod :-(

Reduced module size
-------------------
The standard module size is much reduced and some compile time
options can even reduce it further. (I don't recommend this
for normal use but it can be handy for rescue diskettes)

Option:           Approx. module size:

<standard>             150 Kb
NO_TRACE               125 Kb
NO_TRACE_AT_ALL         67 Kb


Much improved driver interruption
---------------------------------
Most possible loops have been broken and signal detection
has been improved.
In most cases the driver can be aborted by ^C (SIGINT) and
SIGKILL (kill -9) will generate be a sure kill.
(Note that aborting a tape operation may damage the last
data written to tape)

Improved error recovery
-----------------------
Ftape now returns an error (ENODATA) to the application if
a segment proves to be unrecoverable and then skips the
bad segment.
This causes most applications to continue to work (tar
and afio) loosing only a small amount (up to 29 Kb) of data.
Retried read operations will now be done slightly off-track
to improve the chance of success. Serious head off-track
errors will be detected.

FC-10 and FC-20 controllers
---------------------------
Ftape now supports both the old CMS FC-10 and the newer FC-20
controllers.
Because the operation of these cards is still undocumented,
thus far they will only work with the default settings (See
Makefile). Any feed-back on how to use them with other settings
will be welcome !
Compilation will fail if one changes the settings to illegal
values.

Kernels and compilers
---------------------
Ftape is currently being developed using the 2.5.8 compiler.
The older 2.4.5 probably works too (Set option in Makefile!).
I have no experience with any later compilers nor Elf support.
Any information on this is welcome.
The latest kernel I have tested ftape with is 1.2.6.

Compression
-----------
An impressive collection of changes for ftape including
on-the-fly compression is still lying on my desk.
If 2.03 proves to be reliable I might start integrating these
but as usual, I'm short in time :-(

Formatting
----------
There is still no way to format tapes under Linux. As far as
I know all attempts to write such a program have died now.
Since formatted tapes are rather common now, I think all we
need is a utility that writes a worst case pattern and verifies
that with the drive put in verify mode, reducing margins.
Any takers ?

Furthermore
-----------
Cleaned up messages.
Prepared to support multiple tape drives on one fdc.
Thanks to all the people who sent bug reports and helped me
improve the driver. Without trying to be complete I'll mention
Gary Anderson (without his accurate reports and unreliable
hardware there wouldn't be a 2.03), Stefan Kneifel (FC-20),
Robert Broughton (FC-20, you were almost there ;-), Bjorn
Ekwall (for the versioned modules and buggy insmod ;-), Peter
Fox, Christopher Oliver, Ralph Whittaker and not the least
Linus Torvalds (for Linux and keeping me busy because of
changes to the kernel ;-)
Thanks to anyone I forgot, for the bug reports, the ftape
bashing and the mental support...


That's it for now. Have Fun,

Bas.


===== Release notes for ftape-2.02g, 06/05/95 =====

- Added extra test to break read-id loop with signal.
- Changed rewind code to handle negative overshoot for drives
  that take very long to start or stop.
- Let use of get/set i/o-regions depend on kernel version.
- Changed code to use a more general test for conditional
  compilations depending on kernel version.
- Improved micro-step functionality to go off-track only
  while reading (id & data).
- Added failure on tape-not-referenced bit in ftape_command.
- Added FOREVER option to read-wait routine.
- Changed read-id to use shorter timeout causing smaller
  rewinds on timeout.
- Made kernel-interface functions static.


===== Release notes for ftape-2.02f, 03/05/95 =====

- Added support for dual tape drives on my system, extended Configure
  script to detect host 'dodo'.
- Log media defect in history if ecc failed and no data was returned.
- Fixed Configure script that was failing for kernel versions with
  double digit version or revision numbers.


===== Release notes for ftape-2.02e, 01/05/95 =====

- Fixed reposition loop at logical eot (failing read_id).
- Fixed 34 segment offset when rewinding.
- Added fast seek capability for more than 255 segments.
- Fixed wrong busy result from ftape_command causing reverse
  seek to fail.
- Added breakout from infinite rewind loop (if something fails).


===== Release notes for ftape-2.02d, 30/04/95 =====

- Improved abortion on signals: Interrupt will make a graceful
  exit, Kill will be less nice and should be used if everything
  else fails.
- Included check for tape-head off track.
- Implemented exit from tape-start loop.
- Added kernel io-port registration.
- Implemented skip of failing segment (ENODATA) on ecc failure.
  This allows afio and tar to continue when the tape is damaged.
- Made distinction between drive names with different codes.


===== Release notes for ftape-2.02c, 22/04/95 =====

- Fixed too tight command queueing after tape stop/pause command
  issued from within interrupt service routine (Showed as timeout
  on Acknowledge errors during retries on some systems)
- Tried to fix timeouts when using 425 ft tape because the extended
  length doesn't seem to be detected by the hardware.
  We now use the format code from the header segment so adjust the
  timing after reading the header segment.
- Fixed some messages stating 'unexpected something...' being not
  unexpected anymore.
- Started preparations for merge of dynamic buffer allocation and
  compression code.
- Changed some debug messages to include relevant segment information
  at level 4.
- Included early bail-out when drive offline, preventing a lot of
  false messages.
- Moved ftape_parameter_xxx() offsets into function instead of in calls.
- Removed 'weird, drive busy but no data' error when caused by
  an error during a read-id.
- Improved 'timeout on acknowledge' diagnostics.
- Moved MODULE option into Configure.
- Reduced code size when no tracing at all was set (Claus Heine).
- No longer log error code 0 (no error) as an error.


===== Release notes for ftape-2.02b, 09/04/95 =====

- Relaxed timing for status operation and displaying
  abnormal results. Hopefully this shows what's going
  wrong with the Conner TSM850R drives.
- Created script for configuration, using version number
  of kernel source if available, otherwise /proc/version.
- Fixed conditionals in kernel-interface.c.
- Removed unavoidable TRACE output.


===== Release notes for ftape-2.02a, 01/04/95 =====

- Implemented `new-style' (versioned) modules support for new
  kernels.
- Reduced size of module by moving static data to bss.
- Now using version number of kernel source instead of running
  kernel for kernel versions >= 1.1.82
- Added feedback on drive speeds to vendor information.
- Included fixed insmod sources to distribution (Let's hope
  the modules distribution get fixed soon :-/).

Note that I haven't yet implemented any of the code extension I
received. I hope to find some time to do this soon.


===== Release notes for ftape-2.02, 15/01/95 =====


- Fixed failing repositioning when overshoot was incremented.
- Fixed rate selection: Because of a deficiency in the QIC-117
  specification one cannot distinguish between a not implemented
  and a failing command. Therefor we now try to find out if the
  drive does support this command before usage.
- Fixed error retry using wrong offset in fdc-isr.
- Improved retry code to retry only once on a single no-data
  error in a segment.
- Validate sector number extracted from eof mark because an
  invalid file mark (due to ???) could cause kernel panic.
- Split ftape-io.c into ftape-io.c and ftape-ctl.c files.
- Corrected too high media error count after writing to
  a bad tape.
- Added #include <asm/segment.h> again because old kernel versions
  need it.
- Fixed fdc not being disabled when open failed because no tape
  drive was found.
- Fixed problem with soft error in sector 32 (shift operator with
  shiftcount 32 is not defined).


===== Release notes for ftape-2.01, 08/01/95 =====


- Removed TESTING setting from distributed Makefile.
- Fixed `mt asf' failure: Rewind was deferred to close which
  overruled the fsf ioctl.
- Prevented non-interruptible commands being interrupted.
- Added missing timeout.pause setting.
- Maximum tape speed read from drive type information table.
  If the information is not in the table (0) the drive will
  determine the speed itself and put a message in the logfile.
  This information should then be added to the table in the
  vendors.h file (and reported to me).
- Added call to ftape_init_drive after soft reset for those
  (antique) drives that don't do an implicit seek_load_point
  after a reset or power up.
- Don't try to set data rate if reset failed.
- Prevent update of seek variables when starting from the
  beginning or the end of the tape.
- Fixed wrong adjustment of overshoot in seek_forward().
- Added sync to Makefile (again).
- Added code to diagnose timer problems (calibr.c).
- Replaced time differences by timediff calls.
- Removed reference to do_floppy from object for recent kernels.
- Fixed wrong display of 'failing dma controller' message.
- Removed various no longer used #include statements.
- Added max. tape speed value to vendor-struct.
- Changed ftape-command to check pre-conditions and wait
  if needed.
- Further updated qic117.h to rev G.
- Combined command name table and restrictions table to one.
  Extended this table with some new fields.
- Increased timeout on Ack timer value and included code to
  report out of spec behaviour.
- Increased rewind timeout margin to calculated + 20%.
- Improved data rate selection so it won't fail on some
  older (pre standard) drives.
- Changed initialisation code so drive will be rewound if the
  driver is reloaded and the tape is not at bot.
- Moved some of the flush operations from close to the ioctls.
- Added exit code value to failing verify area message.
- Loop until tape halted in smart-stop.
- Fast seek handled specially if located at bot or eot.
- Being more conservative on overshoot value.


===== Release notes for ftape-2.00, 31/12/94 =====

  The Install-guide is completely rewritten and now also includes
some information on how to use the driver. If you're either new
to ftape or new to Unix tape devices make sure to read it !

  If you own a pci system and experience problems with the
ftape driver make sure to read the README.PCI file. It contains
some hints on how to fix your hardware.

  For anybody who hasn't noticed: The version number of the
driver has been incremented (The latest released version has
been version 1.14d).
  This has been done for two major reasons:

  o  A new (better) error recovery scheme is implemented.
  o  Support for new drive types has been added.

  All these improvements/changes will probably include a couple
of new (and old?) bugs. If you encounter any problems that you think
I'm not yet aware of, feel free to send a report to <bas@vimec.nl>.
  I recommend keeping a version of ftape-1.14d available, just
in case ;-)

  This version should work with all kernel versions from 1.0.9 up
to 1.1.72 (and probably earlier and later versions too).


Major new features:

- Better handling of tapes with defects: When a sector repeatedly
  (SOFT_RETRIES in ftape.h) cannot be written to or read from it is
  marked as an hard error and gets skipped.
  The error correction code can handle up to three of these hard
  errors provided there are no other errors in that segment (32 Kb).
  
- Allows writing to tapes with defects (although the risk of loosing
  data increases !)
  Look for the media-defects entry printed with the statistics when
  the tape is closed. A non-zero value here shows a bad tape.
  [the actual count is wrong (too high), this is a known bug].

- Use of backup header segment if first one is failing.

- Support for extended length tapes with QIC-80: both 425 and 1100 ft.
  0.25 inch tapes are now recognized and handled.

- Support for new QIC-80 drives with 8 mm `wide' tapes (e.g. Conner
  TSM 420).

- Support for new QIC-3010 and QIC-3020 drives (experimental) with
  both 0.25 inch and 8 mm tapes.

Some minor features were added, a couple of small bugs were fixed and
probably some new ones introduced ;-).

[lseek() didn't make it into this version]

Have fun,

Bas.
----
 LocalWords:  ftape MCONFIG mt VFS zftape resp sftape proc subdir MTIOCVOLINFO
 LocalWords:  MTIOCGETSIZE BOT EOD MTBSF zft kerneld modprobe kdtime contrib TR
 LocalWords:  MTSETBLK afio uninstall texi www EIO QIC init sft eof aka dma GB
 LocalWords:  SIGKILL MTIOCFTCMD mmap Iomega FDC fdc io gnumt mtio fc asm inb
 LocalWords:  outb ft qic frontend TeXinfo irq mach MODVERSIONS CONFIG html dvi
 LocalWords:  usr doc SMP Mb Dunno FIXME vtblc perl listtape volinfo fsf MTWEOF
 LocalWords:  amanda degaussed ComByte DoublePlay whraven njackn com MTIOC vtbl
 LocalWords:  GETBLKSZ MAKEDEV zftape's linux dif CVS Revison cp MTREW MTOFFL
 LocalWords:  MTFSF BSF Marcin Dalecki GCC Config cpio swapout Kai Harrekilde
 LocalWords:  Pederson khp dolphinics Justus claus momo rwth aachen Laarhoven
