This file describes the floppy driver.

FAQ list:
=========

 A FAQ list may be found in the fdutils package (see below), and also
at http://fdutils.linux.lu/FAQ.html


LILO configuration options (Thinkpad users, read this)
======================================================

 The floppy driver is configured using the 'floppy=' option in
lilo. This option can be typed at the boot prompt, or entered in the
lilo configuration file.
 Example: If your kernel is called linux-2.2.13, type the following line
at the lilo boot prompt (if you have a thinkpad):
 linux-2.2.13 floppy=thinkpad
You may also enter the following line in /etc/lilo.conf, in the description
of linux-2.2.13:
 append = "floppy=thinkpad"

 Several floppy related options may be given, example:
 linux-2.2.13 floppy=daring floppy=two_fdc
 append = "floppy=daring floppy=two_fdc"

 If you give options both in the lilo config file and on the boot
prompt, the option strings of both places are concatenated, the boot
prompt options coming last. That's why there are also options to
restore the default behavior.

 If you use the floppy driver as a module, use the following syntax:
 insmod floppy <options>

Example:
 insmod floppy daring two_fdc

 Some versions of insmod are buggy in one way or another. If you have
any problems (options not being passed correctly, segfaults during
insmod), first check whether there is a more recent version.

 The floppy related options include:

 floppy=asus_pci
	Sets the bit mask to allow only units 0 and 1. (default)

 floppy=daring
	Tells the floppy driver that you have a well behaved floppy controller.
	This allows more efficient and smoother operation, but may fail on
	certain controllers. This may speed up certain operations.

 floppy=0,daring
	Tells the floppy driver that your floppy controller should be used
	with caution.

 floppy=one_fdc
	Tells the floppy driver that you have only one floppy controller.
	(default)

 floppy=two_fdc
 floppy=<address>,two_fdc
	Tells the floppy driver that you have two floppy controllers.
	The second floppy controller is assumed to be at <address>.
	This option is not needed if the second controller is at address
	0x370, and if you use the 'cmos' option.

 floppy=thinkpad
	Tells the floppy driver that you have a Thinkpad. Thinkpads use an
	inverted convention for the disk change line.

 floppy=0,thinkpad
	Tells the floppy driver that you don't have a Thinkpad.

 floppy=omnibook
 floppy=nodma
	Tells the floppy driver not to use Dma for data transfers.
	This is needed on HP Omnibooks, which don't have a workable
	DMA channel for the floppy driver. This option is also useful
	if you frequently get "Unable to allocate DMA memory" messages.
	Indeed, dma memory needs to be continuous in physical memory,
	and is thus harder to find, whereas non-dma buffers may be
	allocated in virtual memory. However, I advise against this if
	you have an FDC without a FIFO (8272A or 82072). 82072A and
	later are OK. You also need at least a 486 to use nodma.
	If you use nodma mode, I suggest you also set the FIFO
	threshold to 10 or lower, in order to limit the number of data
	transfer interrupts.

	If you have a FIFO-able FDC, the floppy driver automatically
	falls back on non DMA mode if no DMA-able memory can be found.
	If you want to avoid this, explicitly ask for 'yesdma'.

 floppy=yesdma
	Tells the floppy driver that a workable DMA channel is available.
	(default)

 floppy=nofifo
	Disables the FIFO entirely. This is needed if you get "Bus
	master arbitration error" messages from your Ethernet card (or
	from other devices) while accessing the floppy.

 floppy=fifo
	Enables the FIFO. (default)

 floppy=<threshold>,fifo_depth
	Sets the FIFO threshold. This is mostly relevant in DMA
	mode. If this is higher, the floppy driver tolerates more
	interrupt latency, but it triggers more interrupts (i.e. it
	imposes more load on the rest of the system). If this is
	lower, the interrupt latency should be lower too (faster
	processor). The benefit of a lower threshold is less
	interrupts.
	To tune the fifo threshold, switch on over/underrun messages
	using 'floppycontrol --messages'. Then access a floppy
	disk. If you get a huge amount of "Over/Underrun - retrying"
	messages, then the fifo threshold is too low. Try with a
	higher value, until you only get an occasional Over/Underrun.
	It is a good idea to compile the floppy driver as a module
	when doing this tuning. Indeed, it allows to try different
	fifo values without rebooting the machine for each test. Note
	that you need to do 'floppycontrol --messages' every time you
	re-insert the module.
	Usually, tuning the fifo threshold should not be needed, as
	the default (0xa) is reasonable.

 floppy=<drive>,<type>,cmos
	Sets the CMOS type of <drive> to <type>. This is mandatory if
	you have more than two floppy drives (only two can be
	described in the physical CMOS), or if your BIOS uses
	non-standard CMOS types. The CMOS types are:
		0 - Use the value of the physical CMOS
		1 - 5 1/4 DD
		2 - 5 1/4 HD
		3 - 3 1/2 DD
		4 - 3 1/2 HD
		5 - 3 1/2 ED
		6 - 3 1/2 ED
	       16 - unknown or not installed
	(Note: there are two valid types for ED drives. This is because 5 was
	initially chosen to represent floppy *tapes*, and 6 for ED drives.
	AMI ignored this, and used 5 for ED drives. That's why the floppy
	driver handles both.)

 floppy=unexpected_interrupts
	Print a warning message when an unexpected interrupt is received.
	(default)

 floppy=no_unexpected_interrupts
 floppy=L40SX
	Don't print a message when an unexpected interrupt is received. This
	is needed on IBM L40SX laptops in certain video modes. (There seems
	to be an interaction between video and floppy. The unexpected
	interrupts affect only performance, and can be safely ignored.)

 floppy=broken_dcl
	Don't use the disk change line, but assume that the disk was
	changed whenever the device node is reopened. Needed on some
	boxes where the disk change line is broken or unsupported.
	This should be regarded as a stopgap measure, indeed it makes
	floppy operation less efficient due to unneeded cache
	flushings, and slightly more unreliable. Please verify your
	cable, connection and jumper settings if you have any DCL
	problems. However, some older drives, and also some laptops
	are known not to have a DCL.

 floppy=debug
	Print debugging messages.

 floppy=messages
	Print informational messages for some operations (disk change
	notifications, warnings about over and underruns, and about
	autodetection).

 floppy=silent_dcl_clear
	Uses a less noisy way to clear the disk change line (which
	doesn't involve seeks). Implied by 'daring' option.

 floppy=<nr>,irq
	Sets the floppy IRQ to <nr> instead of 6.

 floppy=<nr>,dma
	Sets the floppy DMA channel to <nr> instead of 2.

 floppy=slow
	Use PS/2 stepping rate:
	 " PS/2 floppies have much slower step rates than regular floppies.
	   It's been recommended that take about 1/4 of the default speed
	   in some more extreme cases."



Supporting utilities and additional documentation:
==================================================

 Additional parameters of the floppy driver can be configured at
runtime. Utilities which do this can be found in the fdutils package.
This package also contains a new version of mtools which allows to
access high capacity disks (up to 1992K on a high density 3 1/2 disk!).
It also contains additional documentation about the floppy driver.

The latest version can be found at fdutils homepage:
 http://fdutils.linux.lu

The fdutils-5.4 release can be found at:
 http://fdutils.linux.lu/fdutils-5.4.src.tar.gz
 http://www.tux.org/pub/knaff/fdutils/fdutils-5.4.src.tar.gz
 ftp://metalab.unc.edu/pub/Linux/utils/disk-management/fdutils-5.4.src.tar.gz

Reporting problems about the floppy driver
==========================================

 If you have a question or a bug report about the floppy driver, mail
me at Alain.Knaff@poboxes.com . If you post to Usenet, preferably use
comp.os.linux.hardware. As the volume in these groups is rather high,
be sure to include the word "floppy" (or "FLOPPY") in the subject
line.  If the reported problem happens when mounting floppy disks, be
sure to mention also the type of the filesystem in the subject line.

 Be sure to read the FAQ before mailing/posting any bug reports!

 Alain
