
	Information regarding the Enhanced IDE drive in Linux 2.6

==============================================================================

   
   The hdparm utility can be used to control various IDE features on a
   running system. It is packaged separately.  Please Look for it on popular
   linux FTP sites.
   


***  IMPORTANT NOTICES:  BUGGY IDE CHIPSETS CAN CORRUPT DATA!!
***  =================
***  PCI versions of the CMD640 and RZ1000 interfaces are now detected
***  automatically at startup when PCI BIOS support is configured.
***
***  Linux disables the "prefetch" ("readahead") mode of the RZ1000
***  to prevent data corruption possible due to hardware design flaws.
***
***  For the CMD640, linux disables "IRQ unmasking" (hdparm -u1) on any
***  drive for which the "prefetch" mode of the CMD640 is turned on.
***  If "prefetch" is disabled (hdparm -p8), then "IRQ unmasking" can be
***  used again.
***
***  For the CMD640, linux disables "32bit I/O" (hdparm -c1) on any drive
***  for which the "prefetch" mode of the CMD640 is turned off.
***  If "prefetch" is enabled (hdparm -p9), then "32bit I/O" can be
***  used again.
***
***  The CMD640 is also used on some Vesa Local Bus (VLB) cards, and is *NOT*
***  automatically detected by Linux.  For safe, reliable operation with such
***  interfaces, one *MUST* use the "cmd640.probe_vlb" kernel option.
***
***  Use of the "serialize" option is no longer necessary.

================================================================================
Common pitfalls:

- 40-conductor IDE cables are capable of transferring data in DMA modes up to
  udma2, but no faster.

- If possible devices should be attached to separate channels if they are
  available. Typically the disk on the first and CD-ROM on the second.

- If you mix devices on the same cable, please consider using similar devices
  in respect of the data transfer mode they support.

- Even better try to stick to the same vendor and device type on the same
  cable.

================================================================================

This is the multiple IDE interface driver, as evolved from hd.c.  

It supports up to 9 IDE interfaces per default, on one or more IRQs (usually
14 & 15).  There can be up to two drives per interface, as per the ATA-6 spec.

Primary:    ide0, port 0x1f0; major=3;  hda is minor=0; hdb is minor=64
Secondary:  ide1, port 0x170; major=22; hdc is minor=0; hdd is minor=64
Tertiary:   ide2, port 0x1e8; major=33; hde is minor=0; hdf is minor=64
Quaternary: ide3, port 0x168; major=34; hdg is minor=0; hdh is minor=64
fifth..     ide4, usually PCI, probed
sixth..     ide5, usually PCI, probed

To access devices on interfaces > ide0, device entries please make sure that
device files for them are present in /dev.  If not, please create such
entries, by using /dev/MAKEDEV.

This driver automatically probes for most IDE interfaces (including all PCI
ones), for the drives/geometries attached to those interfaces, and for the IRQ
lines being used by the interfaces (normally 14, 15 for ide0/ide1).

For special cases, interfaces may be specified using kernel "command line"
options.  For example,

	ide3=0x168,0x36e,10	/* ioports 0x168-0x16f,0x36e, irq 10 */

Normally the irq number need not be specified, as ide.c will probe for it:

	ide3=0x168,0x36e	/* ioports 0x168-0x16f,0x36e */

The standard port, and irq values are these:

	ide0=0x1f0,0x3f6,14
	ide1=0x170,0x376,15
	ide2=0x1e8,0x3ee,11
	ide3=0x168,0x36e,10

Note that the first parameter reserves 8 contiguous ioports, whereas the
second value denotes a single ioport. If in doubt, do a 'cat /proc/ioports'.

In all probability the device uses these ports and IRQs if it is attached
to the appropriate ide channel.  Pass the parameter for the correct ide
channel to the kernel, as explained above.

Any number of interfaces may share a single IRQ if necessary, at a slight
performance penalty, whether on separate cards or a single VLB card.
The IDE driver automatically detects and handles this.  However, this may
or may not be harmful to your hardware.. two or more cards driving the same IRQ
can potentially burn each other's bus driver, though in practice this
seldom occurs.  Be careful, and if in doubt, don't do it!

Drives are normally found by auto-probing and/or examining the CMOS/BIOS data.
For really weird situations, the apparent (fdisk) geometry can also be specified
on the kernel "command line" using LILO.  The format of such lines is:

	hdx=cyls,heads,sects,wpcom,irq
or	hdx=cdrom

where hdx can be any of hda through hdh, Three values are required
(cyls,heads,sects).  For example:

	hdc=1050,32,64  hdd=cdrom

either {hda,hdb} or {hdc,hdd}.  The results of successful auto-probing may
override the physical geometry/irq specified, though the "original" geometry
may be retained as the "logical" geometry for partitioning purposes (fdisk).

If the auto-probing during boot time confuses a drive (ie. the drive works
with hd.c but not with ide.c), then an command line option may be specified
for each drive for which you'd like the drive to skip the hardware
probe/identification sequence.  For example:

	hdb=noprobe
or
	hdc=768,16,32
	hdc=noprobe

Note that when only one IDE device is attached to an interface, it should be
jumpered as "single" or "master", *not* "slave".  Many folks have had
"trouble" with cdroms because of this requirement, so the driver now probes
for both units, though success is more likely when the drive is jumpered
correctly.

Courtesy of Scott Snyder and others, the driver supports ATAPI cdrom drives
such as the NEC-260 and the new MITSUMI triple/quad speed drives.
Such drives will be identified at boot time, just like a hard disk.

If for some reason your cdrom drive is *not* found at boot time, you can force
the probe to look harder by supplying a kernel command line parameter
via LILO, such as:

	hdc=cdrom	/* hdc = "master" on second interface */
or
	hdd=cdrom	/* hdd = "slave" on second interface */

For example, a GW2000 system might have a hard drive on the primary
interface (/dev/hda) and an IDE cdrom drive on the secondary interface
(/dev/hdc).  To mount a CD in the cdrom drive, one would use something like:

	ln -sf /dev/hdc /dev/cdrom
	mkdir /mnt/cdrom
	mount /dev/cdrom /mnt/cdrom -t iso9660 -o ro

If, after doing all of the above, mount doesn't work and you see
errors from the driver (with dmesg) complaining about `status=0xff',
this means that the hardware is not responding to the driver's attempts
to read it.  One of the following is probably the problem:

  - Your hardware is broken.

  - You are using the wrong address for the device, or you have the
    drive jumpered wrong.  Review the configuration instructions above.

  - Your IDE controller requires some nonstandard initialization sequence
    before it will work properly.  If this is the case, there will often
    be a separate MS-DOS driver just for the controller.  IDE interfaces
    on sound cards usually fall into this category.  Such configurations
    can often be made to work by first booting MS-DOS, loading the
    appropriate drivers, and then warm-booting linux (without powering
    off).  This can be automated using loadlin in the MS-DOS autoexec.

If you always get timeout errors, interrupts from the drive are probably
not making it to the host.  Check how you have the hardware jumpered
and make sure it matches what the driver expects (see the configuration
instructions above).  If you have a PCI system, also check the BIOS
setup; I've had one report of a system which was shipped with IRQ 15
disabled by the BIOS.

The kernel is able to execute binaries directly off of the cdrom,
provided it is mounted with the default block size of 1024 (as above).

Please pass on any feedback on any of this stuff to the maintainer,
whose address can be found in linux/MAINTAINERS.

Note that if BOTH hd.c and ide.c are configured into the kernel,
hd.c will normally be allowed to control the primary IDE interface.
This is useful for older hardware that may be incompatible with ide.c,
and still allows newer hardware to run on the 2nd/3rd/4th IDE ports
under control of ide.c.   To have ide.c also "take over" the primary
IDE port in this situation, use the "command line" parameter:  ide0=0x1f0

The IDE driver is modularized.  The high level disk/CD-ROM/tape/floppy
drivers can always be compiled as loadable modules, the chipset drivers
can only be compiled into the kernel, and the core code (ide.c) can be
compiled as a loadable module provided no chipset support is needed.

When using ide.c as a module in combination with kmod, add:

	alias block-major-3 ide-probe

to /etc/modprobe.conf.

When ide.c is used as a module, you can pass command line parameters to the
driver using the "options=" keyword to insmod, while replacing any ',' with
';'.  For example:

	insmod ide.o options="ide0=serialize ide1=serialize ide2=0x1e8;0x3ee;11"


================================================================================

Summary of ide driver parameters for kernel command line
--------------------------------------------------------

 "hdx="  is recognized for all "x" from "a" to "h", such as "hdc".
 
 "idex=" is recognized for all "x" from "0" to "3", such as "ide1".

 "hdx=noprobe"		: drive may be present, but do not probe for it
 
 "hdx=none"		: drive is NOT present, ignore cmos and do not probe
 
 "hdx=nowerr"		: ignore the WRERR_STAT bit on this drive
 
 "hdx=cdrom"		: drive is present, and is a cdrom drive
 
 "hdx=cyl,head,sect"	: disk drive is present, with specified geometry

 "hdx=remap"		: remap access of sector 0 to sector 1 (for EZDrive)

 "hdx=remap63"		: remap the drive: add 63 to all sector numbers
			  (for DM OnTrack)

 "idex=noautotune"	: driver will NOT attempt to tune interface speed

 "hdx=autotune"		: driver will attempt to tune interface speed
			  to the fastest PIO mode supported,
			  if possible for this drive only.
			  Not fully supported by all chipset types,
			  and quite likely to cause trouble with
			  older/odd IDE drives.

 "hdx=nodma"		: disallow DMA

 "hdx=scsi"		: the return of the ide-scsi flag, this is useful for
 			  allowing ide-floppy, ide-tape, and ide-cdrom|writers
 			  to use ide-scsi emulation on a device specific option.

 "idebus=xx"		: inform IDE driver of VESA/PCI bus speed in MHz,
			  where "xx" is between 20 and 66 inclusive,
			  used when tuning chipset PIO modes.
			  For PCI bus, 25 is correct for a P75 system,
			  30 is correct for P90,P120,P180 systems,
			  and 33 is used for P100,P133,P166 systems.
			  If in doubt, use idebus=33 for PCI.
			  As for VLB, it is safest to not specify it.
			  Bigger values are safer than smaller ones.

 "idex=noprobe"		: do not attempt to access/use this interface
 
 "idex=base"		: probe for an interface at the addr specified,
			  where "base" is usually 0x1f0 or 0x170
			  and "ctl" is assumed to be "base"+0x206
			  
 "idex=base,ctl"	: specify both base and ctl

 "idex=base,ctl,irq"	: specify base, ctl, and irq number

 "idex=serialize"	: do not overlap operations on idex. Please note
			  that you will have to specify this option for
			  both the respective primary and secondary channel
			  to take effect.

 "idex=four"		: four drives on idex and ide(x^1) share same ports
			
 "idex=reset"		: reset interface after probe

 "idex=ata66"		: informs the interface that it has an 80c cable
			  for chipsets that are ATA-66 capable, but the
			  ability to bit test for detection is currently
			  unknown.

 "ide=reverse"		: formerly called to pci sub-system, but now local.

The following are valid ONLY on ide0, which usually corresponds
to the first ATA interface found on the particular host, and the defaults for
the base,ctl ports must not be altered.

 "ide=doubler"		: probe/support IDE doublers on Amiga

There may be more options than shown -- use the source, Luke!

Everything else is rejected with a "BAD OPTION" message.

For legacy IDE VLB host drivers (ali14xx/dtc2278/ht6560b/qd65xx/umc8672)
you need to explicitly enable probing by using "probe" kernel parameter,
i.e. to enable probing for ALI M14xx chipsets (ali14xx host driver) use:

* "ali14xx.probe" boot option when ali14xx driver is built-in the kernel

* "probe" module parameter when ali14xx driver is compiled as module
  ("modprobe ali14xx probe")

Also for legacy CMD640 host driver (cmd640) you need to use "probe_vlb"
kernel paremeter to enable probing for VLB version of the chipset (PCI ones
are detected automatically).

================================================================================

IDE ATAPI streaming tape driver
-------------------------------

This driver is a part of the Linux ide driver and works in co-operation
with linux/drivers/block/ide.c.

The driver, in co-operation with ide.c, basically traverses the
request-list for the block device interface. The character device
interface, on the other hand, creates new requests, adds them
to the request-list of the block device, and waits for their completion.

Pipelined operation mode is now supported on both reads and writes.

The block device major and minor numbers are determined from the
tape's relative position in the ide interfaces, as explained in ide.c.

The character device interface consists of the following devices:

 ht0		major 37, minor 0	first  IDE tape, rewind on close.
 ht1		major 37, minor 1	second IDE tape, rewind on close.
 ...
 nht0		major 37, minor 128	first  IDE tape, no rewind on close.
 nht1		major 37, minor 129	second IDE tape, no rewind on close.
 ...

Run /dev/MAKEDEV to create the above entries.

The general magnetic tape commands compatible interface, as defined by
include/linux/mtio.h, is accessible through the character device.

General ide driver configuration options, such as the interrupt-unmask
flag, can be configured by issuing an ioctl to the block device interface,
as any other ide device.

Our own ide-tape ioctl's can be issued to either the block device or
the character device interface.

Maximal throughput with minimal bus load will usually be achieved in the
following scenario:

	1.	ide-tape is operating in the pipelined operation mode.
	2.	No buffering is performed by the user backup program.



================================================================================

Some Terminology
----------------
IDE = Integrated Drive Electronics, meaning that each drive has a built-in
controller, which is why an "IDE interface card" is not a "controller card".

ATA = AT (the old IBM 286 computer) Attachment Interface, a draft American
National Standard for connecting hard drives to PCs.  This is the official
name for "IDE".

The latest standards define some enhancements, known as the ATA-6 spec,
which grew out of vendor-specific "Enhanced IDE" (EIDE) implementations.

ATAPI = ATA Packet Interface, a new protocol for controlling the drives,
similar to SCSI protocols, created at the same time as the ATA2 standard.
ATAPI is currently used for controlling CDROM, TAPE and FLOPPY (ZIP or
LS120/240) devices, removable R/W cartridges, and for high capacity hard disk
drives.

mlord@pobox.com
--

Wed Apr 17 22:52:44 CEST 2002 edited by Marcin Dalecki, the current
maintainer.

Wed Aug 20 22:31:29 CEST 2003 updated ide boot options to current ide.c
comments at 2.6.0-test4 time. Maciej Soltysiak <solt@dns.toxicfilms.tv>
