
	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
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 "u", such as "hdc".

 "idex=" is recognized for all "x" from "0" to "9", 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=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

 "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=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.

 "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).

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

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>
