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

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

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>
