| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 |  | 
|  | 2 | Information regarding the Enhanced IDE drive in Linux 2.6 | 
|  | 3 |  | 
|  | 4 | ============================================================================== | 
|  | 5 |  | 
|  | 6 |  | 
|  | 7 | The hdparm utility can be used to control various IDE features on a | 
|  | 8 | running system. It is packaged separately.  Please Look for it on popular | 
|  | 9 | linux FTP sites. | 
|  | 10 |  | 
|  | 11 |  | 
|  | 12 |  | 
|  | 13 | ***  IMPORTANT NOTICES:  BUGGY IDE CHIPSETS CAN CORRUPT DATA!! | 
|  | 14 | ***  ================= | 
|  | 15 | ***  PCI versions of the CMD640 and RZ1000 interfaces are now detected | 
|  | 16 | ***  automatically at startup when PCI BIOS support is configured. | 
|  | 17 | *** | 
|  | 18 | ***  Linux disables the "prefetch" ("readahead") mode of the RZ1000 | 
|  | 19 | ***  to prevent data corruption possible due to hardware design flaws. | 
|  | 20 | *** | 
|  | 21 | ***  For the CMD640, linux disables "IRQ unmasking" (hdparm -u1) on any | 
|  | 22 | ***  drive for which the "prefetch" mode of the CMD640 is turned on. | 
|  | 23 | ***  If "prefetch" is disabled (hdparm -p8), then "IRQ unmasking" can be | 
|  | 24 | ***  used again. | 
|  | 25 | *** | 
|  | 26 | ***  For the CMD640, linux disables "32bit I/O" (hdparm -c1) on any drive | 
|  | 27 | ***  for which the "prefetch" mode of the CMD640 is turned off. | 
|  | 28 | ***  If "prefetch" is enabled (hdparm -p9), then "32bit I/O" can be | 
|  | 29 | ***  used again. | 
|  | 30 | *** | 
|  | 31 | ***  The CMD640 is also used on some Vesa Local Bus (VLB) cards, and is *NOT* | 
|  | 32 | ***  automatically detected by Linux.  For safe, reliable operation with such | 
|  | 33 | ***  interfaces, one *MUST* use the "ide0=cmd640_vlb" kernel option. | 
|  | 34 | *** | 
|  | 35 | ***  Use of the "serialize" option is no longer necessary. | 
|  | 36 |  | 
|  | 37 | ================================================================================ | 
|  | 38 | Common pitfalls: | 
|  | 39 |  | 
|  | 40 | - 40-conductor IDE cables are capable of transferring data in DMA modes up to | 
|  | 41 | udma2, but no faster. | 
|  | 42 |  | 
|  | 43 | - If possible devices should be attached to separate channels if they are | 
|  | 44 | available. Typically the disk on the first and CD-ROM on the second. | 
|  | 45 |  | 
|  | 46 | - If you mix devices on the same cable, please consider using similar devices | 
|  | 47 | in respect of the data transfer mode they support. | 
|  | 48 |  | 
|  | 49 | - Even better try to stick to the same vendor and device type on the same | 
|  | 50 | cable. | 
|  | 51 |  | 
|  | 52 | ================================================================================ | 
|  | 53 |  | 
|  | 54 | This is the multiple IDE interface driver, as evolved from hd.c. | 
|  | 55 |  | 
|  | 56 | It supports up to 9 IDE interfaces per default, on one or more IRQs (usually | 
|  | 57 | 14 & 15).  There can be up to two drives per interface, as per the ATA-6 spec. | 
|  | 58 |  | 
|  | 59 | Primary:    ide0, port 0x1f0; major=3;  hda is minor=0; hdb is minor=64 | 
|  | 60 | Secondary:  ide1, port 0x170; major=22; hdc is minor=0; hdd is minor=64 | 
|  | 61 | Tertiary:   ide2, port 0x1e8; major=33; hde is minor=0; hdf is minor=64 | 
|  | 62 | Quaternary: ide3, port 0x168; major=34; hdg is minor=0; hdh is minor=64 | 
|  | 63 | fifth..     ide4, usually PCI, probed | 
|  | 64 | sixth..     ide5, usually PCI, probed | 
|  | 65 |  | 
|  | 66 | To access devices on interfaces > ide0, device entries please make sure that | 
|  | 67 | device files for them are present in /dev.  If not, please create such | 
|  | 68 | entries, by using /dev/MAKEDEV. | 
|  | 69 |  | 
|  | 70 | This driver automatically probes for most IDE interfaces (including all PCI | 
|  | 71 | ones), for the drives/geometries attached to those interfaces, and for the IRQ | 
|  | 72 | lines being used by the interfaces (normally 14, 15 for ide0/ide1). | 
|  | 73 |  | 
|  | 74 | For special cases, interfaces may be specified using kernel "command line" | 
|  | 75 | options.  For example, | 
|  | 76 |  | 
|  | 77 | ide3=0x168,0x36e,10	/* ioports 0x168-0x16f,0x36e, irq 10 */ | 
|  | 78 |  | 
|  | 79 | Normally the irq number need not be specified, as ide.c will probe for it: | 
|  | 80 |  | 
|  | 81 | ide3=0x168,0x36e	/* ioports 0x168-0x16f,0x36e */ | 
|  | 82 |  | 
|  | 83 | The standard port, and irq values are these: | 
|  | 84 |  | 
|  | 85 | ide0=0x1f0,0x3f6,14 | 
|  | 86 | ide1=0x170,0x376,15 | 
|  | 87 | ide2=0x1e8,0x3ee,11 | 
|  | 88 | ide3=0x168,0x36e,10 | 
|  | 89 |  | 
|  | 90 | Note that the first parameter reserves 8 contiguous ioports, whereas the | 
|  | 91 | second value denotes a single ioport. If in doubt, do a 'cat /proc/ioports'. | 
|  | 92 |  | 
|  | 93 | In all probability the device uses these ports and IRQs if it is attached | 
|  | 94 | to the appropriate ide channel.  Pass the parameter for the correct ide | 
|  | 95 | channel to the kernel, as explained above. | 
|  | 96 |  | 
|  | 97 | Any number of interfaces may share a single IRQ if necessary, at a slight | 
|  | 98 | performance penalty, whether on separate cards or a single VLB card. | 
|  | 99 | The IDE driver automatically detects and handles this.  However, this may | 
|  | 100 | or may not be harmful to your hardware.. two or more cards driving the same IRQ | 
|  | 101 | can potentially burn each other's bus driver, though in practice this | 
|  | 102 | seldom occurs.  Be careful, and if in doubt, don't do it! | 
|  | 103 |  | 
|  | 104 | Drives are normally found by auto-probing and/or examining the CMOS/BIOS data. | 
|  | 105 | For really weird situations, the apparent (fdisk) geometry can also be specified | 
|  | 106 | on the kernel "command line" using LILO.  The format of such lines is: | 
|  | 107 |  | 
|  | 108 | hdx=cyls,heads,sects,wpcom,irq | 
|  | 109 | or	hdx=cdrom | 
|  | 110 |  | 
|  | 111 | where hdx can be any of hda through hdh, Three values are required | 
|  | 112 | (cyls,heads,sects).  For example: | 
|  | 113 |  | 
|  | 114 | hdc=1050,32,64  hdd=cdrom | 
|  | 115 |  | 
|  | 116 | either {hda,hdb} or {hdc,hdd}.  The results of successful auto-probing may | 
|  | 117 | override the physical geometry/irq specified, though the "original" geometry | 
|  | 118 | may be retained as the "logical" geometry for partitioning purposes (fdisk). | 
|  | 119 |  | 
|  | 120 | If the auto-probing during boot time confuses a drive (ie. the drive works | 
|  | 121 | with hd.c but not with ide.c), then an command line option may be specified | 
|  | 122 | for each drive for which you'd like the drive to skip the hardware | 
|  | 123 | probe/identification sequence.  For example: | 
|  | 124 |  | 
|  | 125 | hdb=noprobe | 
|  | 126 | or | 
|  | 127 | hdc=768,16,32 | 
|  | 128 | hdc=noprobe | 
|  | 129 |  | 
|  | 130 | Note that when only one IDE device is attached to an interface, it should be | 
|  | 131 | jumpered as "single" or "master", *not* "slave".  Many folks have had | 
|  | 132 | "trouble" with cdroms because of this requirement, so the driver now probes | 
|  | 133 | for both units, though success is more likely when the drive is jumpered | 
|  | 134 | correctly. | 
|  | 135 |  | 
|  | 136 | Courtesy of Scott Snyder and others, the driver supports ATAPI cdrom drives | 
|  | 137 | such as the NEC-260 and the new MITSUMI triple/quad speed drives. | 
|  | 138 | Such drives will be identified at boot time, just like a hard disk. | 
|  | 139 |  | 
|  | 140 | If for some reason your cdrom drive is *not* found at boot time, you can force | 
|  | 141 | the probe to look harder by supplying a kernel command line parameter | 
|  | 142 | via LILO, such as: | 
|  | 143 |  | 
|  | 144 | hdc=cdrom	/* hdc = "master" on second interface */ | 
|  | 145 | or | 
|  | 146 | hdd=cdrom	/* hdd = "slave" on second interface */ | 
|  | 147 |  | 
|  | 148 | For example, a GW2000 system might have a hard drive on the primary | 
|  | 149 | interface (/dev/hda) and an IDE cdrom drive on the secondary interface | 
|  | 150 | (/dev/hdc).  To mount a CD in the cdrom drive, one would use something like: | 
|  | 151 |  | 
|  | 152 | ln -sf /dev/hdc /dev/cdrom | 
|  | 153 | mkdir /mnt/cdrom | 
|  | 154 | mount /dev/cdrom /mnt/cdrom -t iso9660 -o ro | 
|  | 155 |  | 
|  | 156 | If, after doing all of the above, mount doesn't work and you see | 
|  | 157 | errors from the driver (with dmesg) complaining about `status=0xff', | 
|  | 158 | this means that the hardware is not responding to the driver's attempts | 
|  | 159 | to read it.  One of the following is probably the problem: | 
|  | 160 |  | 
|  | 161 | - Your hardware is broken. | 
|  | 162 |  | 
|  | 163 | - You are using the wrong address for the device, or you have the | 
|  | 164 | drive jumpered wrong.  Review the configuration instructions above. | 
|  | 165 |  | 
|  | 166 | - Your IDE controller requires some nonstandard initialization sequence | 
|  | 167 | before it will work properly.  If this is the case, there will often | 
|  | 168 | be a separate MS-DOS driver just for the controller.  IDE interfaces | 
|  | 169 | on sound cards usually fall into this category.  Such configurations | 
|  | 170 | can often be made to work by first booting MS-DOS, loading the | 
|  | 171 | appropriate drivers, and then warm-booting linux (without powering | 
|  | 172 | off).  This can be automated using loadlin in the MS-DOS autoexec. | 
|  | 173 |  | 
|  | 174 | If you always get timeout errors, interrupts from the drive are probably | 
|  | 175 | not making it to the host.  Check how you have the hardware jumpered | 
|  | 176 | and make sure it matches what the driver expects (see the configuration | 
|  | 177 | instructions above).  If you have a PCI system, also check the BIOS | 
|  | 178 | setup; I've had one report of a system which was shipped with IRQ 15 | 
|  | 179 | disabled by the BIOS. | 
|  | 180 |  | 
|  | 181 | The kernel is able to execute binaries directly off of the cdrom, | 
|  | 182 | provided it is mounted with the default block size of 1024 (as above). | 
|  | 183 |  | 
|  | 184 | Please pass on any feedback on any of this stuff to the maintainer, | 
|  | 185 | whose address can be found in linux/MAINTAINERS. | 
|  | 186 |  | 
|  | 187 | Note that if BOTH hd.c and ide.c are configured into the kernel, | 
|  | 188 | hd.c will normally be allowed to control the primary IDE interface. | 
|  | 189 | This is useful for older hardware that may be incompatible with ide.c, | 
|  | 190 | and still allows newer hardware to run on the 2nd/3rd/4th IDE ports | 
|  | 191 | under control of ide.c.   To have ide.c also "take over" the primary | 
|  | 192 | IDE port in this situation, use the "command line" parameter:  ide0=0x1f0 | 
|  | 193 |  | 
|  | 194 | The IDE driver is modularized.  The high level disk/CD-ROM/tape/floppy | 
|  | 195 | drivers can always be compiled as loadable modules, the chipset drivers | 
|  | 196 | can only be compiled into the kernel, and the core code (ide.c) can be | 
|  | 197 | compiled as a loadable module provided no chipset support is needed. | 
|  | 198 |  | 
|  | 199 | When using ide.c as a module in combination with kmod, add: | 
|  | 200 |  | 
|  | 201 | alias block-major-3 ide-probe | 
|  | 202 |  | 
|  | 203 | to /etc/modprobe.conf. | 
|  | 204 |  | 
|  | 205 | When ide.c is used as a module, you can pass command line parameters to the | 
|  | 206 | driver using the "options=" keyword to insmod, while replacing any ',' with | 
|  | 207 | ';'.  For example: | 
|  | 208 |  | 
|  | 209 | insmod ide.o options="ide0=serialize ide1=serialize ide2=0x1e8;0x3ee;11" | 
|  | 210 |  | 
|  | 211 |  | 
|  | 212 | ================================================================================ | 
|  | 213 |  | 
|  | 214 | Summary of ide driver parameters for kernel command line | 
|  | 215 | -------------------------------------------------------- | 
|  | 216 |  | 
|  | 217 | "hdx="  is recognized for all "x" from "a" to "h", such as "hdc". | 
|  | 218 |  | 
|  | 219 | "idex=" is recognized for all "x" from "0" to "3", such as "ide1". | 
|  | 220 |  | 
|  | 221 | "hdx=noprobe"		: drive may be present, but do not probe for it | 
|  | 222 |  | 
|  | 223 | "hdx=none"		: drive is NOT present, ignore cmos and do not probe | 
|  | 224 |  | 
|  | 225 | "hdx=nowerr"		: ignore the WRERR_STAT bit on this drive | 
|  | 226 |  | 
|  | 227 | "hdx=cdrom"		: drive is present, and is a cdrom drive | 
|  | 228 |  | 
|  | 229 | "hdx=cyl,head,sect"	: disk drive is present, with specified geometry | 
|  | 230 |  | 
|  | 231 | "hdx=remap"		: remap access of sector 0 to sector 1 (for EZDrive) | 
|  | 232 |  | 
|  | 233 | "hdx=remap63"		: remap the drive: add 63 to all sector numbers | 
|  | 234 | (for DM OnTrack) | 
|  | 235 |  | 
|  | 236 | "hdx=autotune"		: driver will attempt to tune interface speed | 
|  | 237 | to the fastest PIO mode supported, | 
|  | 238 | if possible for this drive only. | 
|  | 239 | Not fully supported by all chipset types, | 
|  | 240 | and quite likely to cause trouble with | 
|  | 241 | older/odd IDE drives. | 
|  | 242 |  | 
|  | 243 | "hdx=swapdata"		: when the drive is a disk, byte swap all data | 
|  | 244 |  | 
|  | 245 | "hdx=bswap"		: same as above.......... | 
|  | 246 |  | 
|  | 247 | "hdx=scsi"		: the return of the ide-scsi flag, this is useful for | 
|  | 248 | allowing ide-floppy, ide-tape, and ide-cdrom|writers | 
|  | 249 | to use ide-scsi emulation on a device specific option. | 
|  | 250 |  | 
|  | 251 | "idebus=xx"		: inform IDE driver of VESA/PCI bus speed in MHz, | 
|  | 252 | where "xx" is between 20 and 66 inclusive, | 
|  | 253 | used when tuning chipset PIO modes. | 
|  | 254 | For PCI bus, 25 is correct for a P75 system, | 
|  | 255 | 30 is correct for P90,P120,P180 systems, | 
|  | 256 | and 33 is used for P100,P133,P166 systems. | 
|  | 257 | If in doubt, use idebus=33 for PCI. | 
|  | 258 | As for VLB, it is safest to not specify it. | 
|  | 259 | Bigger values are safer than smaller ones. | 
|  | 260 |  | 
|  | 261 | "idex=noprobe"		: do not attempt to access/use this interface | 
|  | 262 |  | 
|  | 263 | "idex=base"		: probe for an interface at the addr specified, | 
|  | 264 | where "base" is usually 0x1f0 or 0x170 | 
|  | 265 | and "ctl" is assumed to be "base"+0x206 | 
|  | 266 |  | 
|  | 267 | "idex=base,ctl"	: specify both base and ctl | 
|  | 268 |  | 
|  | 269 | "idex=base,ctl,irq"	: specify base, ctl, and irq number | 
|  | 270 |  | 
|  | 271 | "idex=autotune"	: driver will attempt to tune interface speed | 
|  | 272 | to the fastest PIO mode supported, | 
|  | 273 | for all drives on this interface. | 
|  | 274 | Not fully supported by all chipset types, | 
|  | 275 | and quite likely to cause trouble with | 
|  | 276 | older/odd IDE drives. | 
|  | 277 |  | 
|  | 278 | "idex=noautotune"	: driver will NOT attempt to tune interface speed | 
|  | 279 | This is the default for most chipsets, | 
|  | 280 | except the cmd640. | 
|  | 281 |  | 
|  | 282 | "idex=serialize"	: do not overlap operations on idex. Please note | 
|  | 283 | that you will have to specify this option for | 
|  | 284 | both the respecitve primary and secondary channel | 
|  | 285 | to take effect. | 
|  | 286 |  | 
|  | 287 | "idex=four"		: four drives on idex and ide(x^1) share same ports | 
|  | 288 |  | 
|  | 289 | "idex=reset"		: reset interface after probe | 
|  | 290 |  | 
|  | 291 | "idex=dma"		: automatically configure/use DMA if possible. | 
|  | 292 |  | 
|  | 293 | "idex=ata66"		: informs the interface that it has an 80c cable | 
|  | 294 | for chipsets that are ATA-66 capable, but the | 
|  | 295 | ability to bit test for detection is currently | 
|  | 296 | unknown. | 
|  | 297 |  | 
|  | 298 | "ide=reverse"		: formerly called to pci sub-system, but now local. | 
|  | 299 |  | 
|  | 300 | "ide=nodma"		: disable DMA globally for the IDE subsystem. | 
|  | 301 |  | 
|  | 302 | The following are valid ONLY on ide0, which usually corresponds | 
|  | 303 | to the first ATA interface found on the particular host, and the defaults for | 
|  | 304 | the base,ctl ports must not be altered. | 
|  | 305 |  | 
|  | 306 | "ide0=dtc2278"		: probe/support DTC2278 interface | 
|  | 307 | "ide0=ht6560b"		: probe/support HT6560B interface | 
|  | 308 | "ide0=cmd640_vlb"	: *REQUIRED* for VLB cards with the CMD640 chip | 
|  | 309 | (not for PCI -- automatically detected) | 
|  | 310 | "ide0=qd65xx"		: probe/support qd65xx interface | 
|  | 311 | "ide0=ali14xx"		: probe/support ali14xx chipsets (ALI M1439/M1443/M1445) | 
|  | 312 | "ide0=umc8672"		: probe/support umc8672 chipsets | 
|  | 313 |  | 
|  | 314 | "ide=doubler"		: probe/support IDE doublers on Amiga | 
|  | 315 |  | 
|  | 316 | There may be more options than shown -- use the source, Luke! | 
|  | 317 |  | 
|  | 318 | Everything else is rejected with a "BAD OPTION" message. | 
|  | 319 |  | 
|  | 320 | ================================================================================ | 
|  | 321 |  | 
|  | 322 | IDE ATAPI streaming tape driver | 
|  | 323 | ------------------------------- | 
|  | 324 |  | 
|  | 325 | This driver is a part of the Linux ide driver and works in co-operation | 
|  | 326 | with linux/drivers/block/ide.c. | 
|  | 327 |  | 
|  | 328 | The driver, in co-operation with ide.c, basically traverses the | 
|  | 329 | request-list for the block device interface. The character device | 
|  | 330 | interface, on the other hand, creates new requests, adds them | 
|  | 331 | to the request-list of the block device, and waits for their completion. | 
|  | 332 |  | 
|  | 333 | Pipelined operation mode is now supported on both reads and writes. | 
|  | 334 |  | 
|  | 335 | The block device major and minor numbers are determined from the | 
|  | 336 | tape's relative position in the ide interfaces, as explained in ide.c. | 
|  | 337 |  | 
|  | 338 | The character device interface consists of the following devices: | 
|  | 339 |  | 
|  | 340 | ht0		major 37, minor 0	first  IDE tape, rewind on close. | 
|  | 341 | ht1		major 37, minor 1	second IDE tape, rewind on close. | 
|  | 342 | ... | 
|  | 343 | nht0		major 37, minor 128	first  IDE tape, no rewind on close. | 
|  | 344 | nht1		major 37, minor 129	second IDE tape, no rewind on close. | 
|  | 345 | ... | 
|  | 346 |  | 
|  | 347 | Run /dev/MAKEDEV to create the above entries. | 
|  | 348 |  | 
|  | 349 | The general magnetic tape commands compatible interface, as defined by | 
|  | 350 | include/linux/mtio.h, is accessible through the character device. | 
|  | 351 |  | 
|  | 352 | General ide driver configuration options, such as the interrupt-unmask | 
|  | 353 | flag, can be configured by issuing an ioctl to the block device interface, | 
|  | 354 | as any other ide device. | 
|  | 355 |  | 
|  | 356 | Our own ide-tape ioctl's can be issued to either the block device or | 
|  | 357 | the character device interface. | 
|  | 358 |  | 
|  | 359 | Maximal throughput with minimal bus load will usually be achieved in the | 
|  | 360 | following scenario: | 
|  | 361 |  | 
|  | 362 | 1.	ide-tape is operating in the pipelined operation mode. | 
|  | 363 | 2.	No buffering is performed by the user backup program. | 
|  | 364 |  | 
|  | 365 |  | 
|  | 366 |  | 
|  | 367 | ================================================================================ | 
|  | 368 |  | 
|  | 369 | Some Terminology | 
|  | 370 | ---------------- | 
|  | 371 | IDE = Integrated Drive Electronics, meaning that each drive has a built-in | 
|  | 372 | controller, which is why an "IDE interface card" is not a "controller card". | 
|  | 373 |  | 
|  | 374 | ATA = AT (the old IBM 286 computer) Attachment Interface, a draft American | 
|  | 375 | National Standard for connecting hard drives to PCs.  This is the official | 
|  | 376 | name for "IDE". | 
|  | 377 |  | 
|  | 378 | The latest standards define some enhancements, known as the ATA-6 spec, | 
|  | 379 | which grew out of vendor-specific "Enhanced IDE" (EIDE) implementations. | 
|  | 380 |  | 
|  | 381 | ATAPI = ATA Packet Interface, a new protocol for controlling the drives, | 
|  | 382 | similar to SCSI protocols, created at the same time as the ATA2 standard. | 
|  | 383 | ATAPI is currently used for controlling CDROM, TAPE and FLOPPY (ZIP or | 
|  | 384 | LS120/240) devices, removable R/W cartridges, and for high capacity hard disk | 
|  | 385 | drives. | 
|  | 386 |  | 
|  | 387 | mlord@pobox.com | 
|  | 388 | -- | 
|  | 389 |  | 
|  | 390 | Wed Apr 17 22:52:44 CEST 2002 edited by Marcin Dalecki, the current | 
|  | 391 | maintainer. | 
|  | 392 |  | 
|  | 393 | Wed Aug 20 22:31:29 CEST 2003 updated ide boot uptions to current ide.c | 
|  | 394 | comments at 2.6.0-test4 time. Maciej Soltysiak <solt@dns.toxicfilms.tv> |