Intro
=====

This file describes some issues involved when using the "ftape"
floppy tape device driver that comes with the Linux kernel.

ftape has a home page at

http://ftape.dot-heine.de/

which contains further information about ftape. Please cross check
this WWW address against the address given (if any) in the MAINTAINERS
file located in the top level directory of the Linux kernel source
tree.

NOTE: This is an unmaintained set of drivers, and it is not guaranteed to work.
If you are interested in taking over maintenance, contact Claus-Justus Heine
<ch@dot-heine.de>, the former maintainer.

Contents
========

A minus 1: Ftape documentation

A. Changes
   1. Goal
   2. I/O Block Size
   3. Write Access when not at EOD (End Of Data) or BOT (Begin Of Tape)
   4. Formatting
   5. Interchanging cartridges with other operating systems

B. Debugging Output
   1. Introduction
   2. Tuning the debugging output

C. Boot and load time configuration
   1. Setting boot time parameters
   2. Module load time parameters
   3. Ftape boot- and load time options
   4. Example kernel parameter setting
   5. Example module parameter setting

D. Support and contacts

*******************************************************************************

A minus 1. Ftape documentation
==============================

Unluckily, the ftape-HOWTO is out of date. This really needs to be
changed. Up to date documentation as well as recent development
versions of ftape and useful links to related topics can be found at
the ftape home page at

http://ftape.dot-heine.de/

*******************************************************************************

A. Changes
==========

1. Goal
   ~~~~
   The goal of all that incompatibilities was to give ftape an interface
   that resembles the interface provided by SCSI tape drives as close
   as possible. Thus any Unix backup program that is known to work
   with SCSI tape drives should also work.

   The concept of a fixed block size for read/write transfers is
   rather unrelated to this SCSI tape compatibility at the file system
   interface level. It developed out of a feature of zftape, a
   block wise user transparent on-the-fly compression. That compression
   support will not be dropped in future releases for compatibility
   reasons with previous releases of zftape.

2. I/O Block Size
   ~~~~~~~~~~~~~~
   The block size defaults to 10k which is the default block size of
   GNU tar.

   The block size can be tuned either during kernel configuration or
   at runtime with the MTIOCTOP ioctl using the MTSETBLK operation
   (i.e. do "mt -f /dev/qft0" setblk #BLKSZ). A block size of 0
   switches to variable block size mode i.e. "mt setblk 0" switches
   off the block size restriction. However, this disables zftape's
   built in on-the-fly compression which doesn't work with variable
   block size mode.

   The BLKSZ parameter must be given as a byte count and must be a
   multiple of 32k or 0, i.e. use "mt setblk 32768" to switch to a
   block size of 32k.

   The typical symptom of a block size mismatch is an "invalid
   argument" error message.

3. Write Access when not at EOD (End Of Data) or BOT (Begin Of Tape)
   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   zftape (the file system interface of ftape-3.x) denies write access
   to the tape cartridge when it isn't positioned either at BOT or
   EOD.

4. Formatting
   ~~~~~~~~~~
   ftape DOES support formatting of floppy tape cartridges. You need the
   `ftformat' program that is shipped with the modules version of ftape.
   Please get the latest version of ftape from

   ftp://sunsite.unc.edu/pub/Linux/kernel/tapes

   or from the ftape home page at

   http://ftape.dot-heine.de/

   `ftformat' is contained in the `./contrib/' subdirectory of that
   separate ftape package.

5. Interchanging cartridges with other operating systems
   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

   The internal emulation of Unix tape device file marks has changed
   completely. ftape now uses the volume table segment as specified
   by the QIC-40/80/3010/3020/113 standards to emulate file marks. As
   a consequence there is limited support to interchange cartridges
   with other operating systems.

   To be more precise: ftape will detect volumes written by other OS's
   programs and other OS's programs will detect volumes written by
   ftape.

   However, it isn't possible to extract the data dumped to the tape
   by some MSDOS program with ftape. This exceeds the scope of a
   kernel device driver. If you need such functionality, then go ahead
   and write a user space utility that is able to do that. ftape already
   provides all kernel level support necessary to do that.

*******************************************************************************

B. Debugging Output
   ================

1. Introduction
   ~~~~~~~~~~~~
   The ftape driver can be very noisy in that is can print lots of
   debugging messages to the kernel log files and the system console.
   While this is useful for debugging it might be annoying during
   normal use and enlarges the size of the driver by several kilobytes.

   To reduce the size of the driver you can trim the maximal amount of
   debugging information available during kernel configuration. Please
   refer to the kernel configuration script and its on-line help
   functionality.

   The amount of debugging output maps to the "tracing" boot time
   option and the "ft_tracing" modules option as follows:

   0              bugs
   1              + errors (with call-stack dump)
   2              + warnings
   3              + information
   4              + more information
   5              + program flow
   6              + fdc/dma info
   7              + data flow
   8              + everything else

2. Tuning the debugging output
   ~~~~~~~~~~~~~~~~~~~~~~~~~~~
   To reduce the amount of debugging output printed to the system
   console you can

   i)  trim the debugging output at run-time with

       mt -f /dev/nqft0 setdensity #DBGLVL

       where "#DBGLVL" is a number between 0 and 9

   ii) trim the debugging output at module load time with

       modprobe ftape ft_tracing=#DBGLVL

       Of course, this applies only if you have configured ftape to be
       compiled as a module.

   iii) trim the debugging output during system boot time. Add the
       following to the kernel command line:

       ftape=#DBGLVL,tracing

       Please refer also to the next section if you don't know how to
       set boot time parameters.

*******************************************************************************

C. Boot and load time configuration
   ================================

1. Setting boot time parameters
   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
   Assuming that you use lilo, the LI)nux LO)ader, boot time kernel
   parameters can be set by adding a line

   append some_kernel_boot_time_parameter

   to `/etc/lilo.conf' or at real boot time by typing in the options
   at the prompt provided by LILO. I can't give you advice on how to
   specify those parameters with other loaders as I don't use them.

   For ftape, each "some_kernel_boot_time_parameter" looks like
   "ftape=value,option". As an example, the debugging output can be
   increased with

   ftape=4,tracing

   NOTE: the value precedes the option name.

2. Module load time parameters
   ~~~~~~~~~~~~~~~~~~~~~~~~~~~
   Module parameters can be specified either directly when invoking
   the program 'modprobe' at the shell prompt:

   modprobe ftape ft_tracing=4

   or by editing the file `/etc/modprobe.conf' in which case they take
   effect each time when the module is loaded with `modprobe' (please
   refer to the respective manual pages). Thus, you should add a line

   options ftape ft_tracing=4

   to `/etc/modprobe.conf` if you intend to increase the debugging
   output of the driver.


3. Ftape boot- and load time options
   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

   i.   Controlling the amount of debugging output
        DBGLVL has to be replaced by a number between 0 and 8.

        module                 |  kernel command line
        -----------------------|----------------------
        ft_tracing=DBGLVL      |  ftape=DBGLVL,tracing

   ii.  Hardware setup
	BASE is the base address of your floppy disk controller,
        IRQ and DMA give its interrupt and DMA channel, respectively.
        BOOL is an integer, "0" means "no"; any other value means
	"yes". You don't need to specify anything if connecting your tape
        drive to the standard floppy disk controller. All of these
	values have reasonable defaults. The defaults can be modified
	during kernel configuration, i.e. while running "make config",
	"make menuconfig" or "make xconfig" in the top level directory
	of the Linux kernel source tree. Please refer also to the on
	line documentation provided during that kernel configuration
	process.

	ft_probe_fc10 is set to a non-zero value if you wish for ftape to
	probe for a Colorado FC-10 or FC-20 controller.

	ft_mach2 is set to a non-zero value if you wish for ftape to probe
	for a Mountain MACH-2 controller.

        module                 |  kernel command line
        -----------------------|----------------------
        ft_fdc_base=BASE       |  ftape=BASE,ioport
        ft_fdc_irq=IRQ         |  ftape=IRQ,irq
        ft_fdc_dma=DMA         |  ftape=DMA,dma
        ft_probe_fc10=BOOL     |  ftape=BOOL,fc10
        ft_mach2=BOOL          |  ftape=BOOL,mach2
        ft_fdc_threshold=THR   |  ftape=THR,threshold
        ft_fdc_rate_limit=RATE |  ftape=RATE,datarate

4. Example kernel parameter setting
   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
   To configure ftape to probe for a Colorado FC-10/FC-20 controller
   and to increase the amount of debugging output a little bit, add
   the following line to `/etc/lilo.conf':

   append ftape=1,fc10 ftape=4,tracing

5. Example module parameter setting
   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   To do the same, but with ftape compiled as a loadable kernel
   module, add the following line to `/etc/modprobe.conf':

   options ftape ft_probe_fc10=1 ft_tracing=4

*******************************************************************************

D. Support and contacts
   ====================

   Ftape is distributed under the GNU General Public License. There is
   absolutely no warranty for this software. However, you can reach
   the current maintainer of the ftape package under the email address
   given in the MAINTAINERS file which is located in the top level
   directory of the Linux kernel source tree. There you'll find also
   the relevant mailing list to use as a discussion forum and the web
   page to query for the most recent documentation, related work and
   development versions of ftape.

   Changelog:
   ==========

~1996:		Original Document

10-24-2004:	General cleanup and updating, noting additional module options.
		James Nelson <james4765@gmail.com>
