#
# IDE ATA ATAPI Block device driver configuration
#
# Andre Hedrick <andre@linux-ide.org>
#

menuconfig IDE
	tristate "ATA/ATAPI/MFM/RLL support"
	depends on BLOCK
	depends on HAS_IOMEM
	---help---
	  If you say Y here, your kernel will be able to manage low cost mass
	  storage units such as ATA/(E)IDE and ATAPI units. The most common
	  cases are IDE hard drives and ATAPI CD-ROM drives.

	  If your system is pure SCSI and doesn't use these interfaces, you
	  can say N here.

	  Integrated Disk Electronics (IDE aka ATA-1) is a connecting standard
	  for mass storage units such as hard disks. It was designed by
	  Western Digital and Compaq Computer in 1984. It was then named
	  ST506. Quite a number of disks use the IDE interface.

	  AT Attachment (ATA) is the superset of the IDE specifications.
	  ST506 was also called ATA-1.

	  Fast-IDE is ATA-2 (also named Fast ATA), Enhanced IDE (EIDE) is
	  ATA-3. It provides support for larger disks (up to 8.4GB by means of
	  the LBA standard), more disks (4 instead of 2) and for other mass
	  storage units such as tapes and cdrom. UDMA/33 (aka UltraDMA/33) is
	  ATA-4 and provides faster (and more CPU friendly) transfer modes
	  than previous PIO (Programmed processor Input/Output) from previous
	  ATA/IDE standards by means of fast DMA controllers.

	  ATA Packet Interface (ATAPI) is a protocol used by EIDE tape and
	  CD-ROM drives, similar in many respects to the SCSI protocol.

	  SMART IDE (Self Monitoring, Analysis and Reporting Technology) was
	  designed in order to prevent data corruption and disk crash by
	  detecting pre hardware failure conditions (heat, access time, and
	  the like...). Disks built since June 1995 may follow this standard.
	  The kernel itself doesn't manage this; however there are quite a
	  number of user programs such as smart that can query the status of
	  SMART parameters from disk drives.

	  To compile this driver as a module, choose M here: the
	  module will be called ide.

	  For further information, please read <file:Documentation/ide.txt>.

	  If unsure, say Y.

if IDE

config IDE_MAX_HWIFS
	int "Max IDE interfaces"
	depends on ALPHA || SUPERH || IA64 || EMBEDDED
	range 1 10
	default 4
	help
	  This is the maximum number of IDE hardware interfaces that will
	  be supported by the driver. Make sure it is at least as high as
	  the number of IDE interfaces in your system.

config BLK_DEV_IDE
	tristate "Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support"
	---help---
	  If you say Y here, you will use the full-featured IDE driver to
	  control up to ten ATA/IDE interfaces, each being able to serve a
	  "master" and a "slave" device, for a total of up to twenty ATA/IDE
	  disk/cdrom/tape/floppy drives.

	  Useful information about large (>540 MB) IDE disks, multiple
	  interfaces, what to do if ATA/IDE devices are not automatically
	  detected, sound card ATA/IDE ports, module support, and other
	  topics, is contained in <file:Documentation/ide.txt>. For detailed
	  information about hard drives, consult the Disk-HOWTO and the
	  Multi-Disk-HOWTO, available from
	  <http://www.tldp.org/docs.html#howto>.

	  To fine-tune ATA/IDE drive/interface parameters for improved
	  performance, look for the hdparm package at
	  <ftp://ibiblio.org/pub/Linux/system/hardware/>.

	  To compile this driver as a module, choose M here and read
	  <file:Documentation/ide.txt>. The module will be called ide-mod.
	  Do not compile this driver as a module if your root file system (the
	  one containing the directory /) is located on an IDE device.

	  If you have one or more IDE drives, say Y or M here. If your system
	  has no IDE drives, or if memory requirements are really tight, you
	  could say N here, and select the "Old hard disk driver" below
	  instead to save about 13 KB of memory in the kernel.

if BLK_DEV_IDE

comment "Please see Documentation/ide.txt for help/info on IDE drives"

config BLK_DEV_IDE_SATA
	bool "Support for SATA (deprecated; conflicts with libata SATA driver)"
	default n
	---help---
	  There are two drivers for Serial ATA controllers.

	  The main driver, "libata", uses the SCSI subsystem
	  and supports most modern SATA controllers. In order to use it
	  you may take a look at "Serial ATA (prod) and Parallel ATA
	  (experimental) drivers".

	  The IDE driver (which you are currently configuring) supports
	  a few first-generation SATA controllers.

	  In order to eliminate conflicts between the two subsystems,
	  this config option enables the IDE driver's SATA support.
	  Normally this is disabled, as it is preferred that libata
	  supports SATA controllers, and this (IDE) driver supports
	  PATA controllers.

	  If unsure, say N.

config BLK_DEV_HD_IDE
	bool "Use old disk-only driver on primary interface"
	depends on (X86 || SH_MPC1211)
	---help---
	  There are two drivers for MFM/RLL/IDE disks.  Most people use just
	  the new enhanced driver by itself.  This option however installs the
	  old hard disk driver to control the primary IDE/disk interface in
	  the system, leaving the new enhanced IDE driver to take care of only
	  the 2nd/3rd/4th IDE interfaces.  Doing this will prevent you from
	  having an IDE/ATAPI CD-ROM or tape drive connected to the primary
	  IDE interface.  Choosing this option may be useful for older systems
	  which have MFM/RLL/ESDI controller+drives at the primary port
	  address (0x1f0), along with IDE drives at the secondary/3rd/4th port
	  addresses.

	  Normally, just say N here; you will then use the new driver for all
	  4 interfaces.

config BLK_DEV_IDEDISK
	tristate "Include IDE/ATA-2 DISK support"
	---help---
	  This will include enhanced support for MFM/RLL/IDE hard disks.  If
	  you have a MFM/RLL/IDE disk, and there is no special reason to use
	  the old hard disk driver instead, say Y.  If you have an SCSI-only
	  system, you can say N here.

	  To compile this driver as a module, choose M here: the
	  module will be called ide-disk.
	  Do not compile this driver as a module if your root file system
	  (the one containing the directory /) is located on the IDE disk.

	  If unsure, say Y.

config IDEDISK_MULTI_MODE
	bool "Use multiple sector mode for Programmed Input/Output by default"
	help
	  This setting is irrelevant for most IDE disks, with direct memory
	  access, to which multiple sector mode does not apply. Multiple sector
	  mode is a feature of most modern IDE hard drives, permitting the
	  transfer of multiple sectors per Programmed Input/Output interrupt,
	  rather than the usual one sector per interrupt. When this feature is
	  enabled, it can reduce operating system overhead for disk Programmed
	  Input/Output. On some systems, it also can increase the data
	  throughput of Programmed Input/Output. Some drives, however, seemed
	  to run slower with multiple sector mode enabled. Some drives claimed
	  to support multiple sector mode, but lost data at some settings.
	  Under rare circumstances, such failures could result in massive
	  filesystem corruption.

	  If you get the following error, try to say Y here:

	  hda: set_multmode: status=0x51 { DriveReady SeekComplete Error }
	  hda: set_multmode: error=0x04 { DriveStatusError }

	  If in doubt, say N.

config BLK_DEV_IDECS
	tristate "PCMCIA IDE support"
	depends on PCMCIA
	help
	  Support for Compact Flash cards, outboard IDE disks, tape drives,
	  and CD-ROM drives connected through a PCMCIA card.

config BLK_DEV_DELKIN
	tristate "Cardbus IDE support (Delkin/ASKA/Workbit)"
	depends on CARDBUS && PCI
	help
	  Support for Delkin, ASKA, and Workbit Cardbus CompactFlash
	  Adapters.  This may also work for similar SD and XD adapters.

config BLK_DEV_IDECD
	tristate "Include IDE/ATAPI CDROM support"
	---help---
	  If you have a CD-ROM drive using the ATAPI protocol, say Y. ATAPI is
	  a newer protocol used by IDE CD-ROM and TAPE drives, similar to the
	  SCSI protocol. Most new CD-ROM drives use ATAPI, including the
	  NEC-260, Mitsumi FX400, Sony 55E, and just about all non-SCSI
	  double(2X) or better speed drives.

	  If you say Y here, the CD-ROM drive will be identified at boot time
	  along with other IDE devices, as "hdb" or "hdc", or something
	  similar (check the boot messages with dmesg). If this is your only
	  CD-ROM drive, you can say N to all other CD-ROM options, but be sure
	  to say Y or M to "ISO 9660 CD-ROM file system support".

	  To compile this driver as a module, choose M here: the
	  module will be called ide-cd.

config BLK_DEV_IDECD_VERBOSE_ERRORS
	bool "Verbose error logging for IDE/ATAPI CDROM driver" if EMBEDDED
	depends on BLK_DEV_IDECD
	default y
	help
	  Turn this on to have the driver print out the meanings of the
	  ATAPI error codes.  This will use up additional 8kB of kernel-space
	  memory, though.

config BLK_DEV_IDETAPE
	tristate "Include IDE/ATAPI TAPE support (EXPERIMENTAL)"
	depends on EXPERIMENTAL
	help
	  If you have an IDE tape drive using the ATAPI protocol, say Y.
	  ATAPI is a newer protocol used by IDE tape and CD-ROM drives,
	  similar to the SCSI protocol.  If you have an SCSI tape drive
	  however, you can say N here.

	  You should also say Y if you have an OnStream DI-30 tape drive; this
	  will not work with the SCSI protocol, until there is support for the
	  SC-30 and SC-50 versions.

	  If you say Y here, the tape drive will be identified at boot time
	  along with other IDE devices, as "hdb" or "hdc", or something
	  similar, and will be mapped to a character device such as "ht0"
	  (check the boot messages with dmesg).  Be sure to consult the
	  <file:drivers/ide/ide-tape.c> and <file:Documentation/ide.txt> files
	  for usage information.

	  To compile this driver as a module, choose M here: the
	  module will be called ide-tape.

config BLK_DEV_IDEFLOPPY
	tristate "Include IDE/ATAPI FLOPPY support"
	---help---
	  If you have an IDE floppy drive which uses the ATAPI protocol,
	  answer Y.  ATAPI is a newer protocol used by IDE CD-ROM/tape/floppy
	  drives, similar to the SCSI protocol.

	  The LS-120 and the IDE/ATAPI Iomega ZIP drive are also supported by
	  this driver. For information about jumper settings and the question
	  of when a ZIP drive uses a partition table, see
	  <http://www.win.tue.nl/~aeb/linux/zip/zip-1.html>.
	  (ATAPI PD-CD/CDR drives are not supported by this driver; support
	  for PD-CD/CDR drives is available if you answer Y to
	  "SCSI emulation support", below).

	  If you say Y here, the FLOPPY drive will be identified along with
	  other IDE devices, as "hdb" or "hdc", or something similar (check
	  the boot messages with dmesg).

	  To compile this driver as a module, choose M here: the
	  module will be called ide-floppy.

config BLK_DEV_IDESCSI
	tristate "SCSI emulation support"
	depends on SCSI
	---help---
	  WARNING: ide-scsi is no longer needed for cd writing applications!
	  The 2.6 kernel supports direct writing to ide-cd, which eliminates
	  the need for ide-scsi + the entire scsi stack just for writing a
	  cd. The new method is more efficient in every way.

	  This will provide SCSI host adapter emulation for IDE ATAPI devices,
	  and will allow you to use a SCSI device driver instead of a native
	  ATAPI driver.

	  This is useful if you have an ATAPI device for which no native
	  driver has been written (for example, an ATAPI PD-CD drive);
	  you can then use this emulation together with an appropriate SCSI
	  device driver. In order to do this, say Y here and to "SCSI support"
	  and "SCSI generic support", below. You must then provide the kernel
	  command line "hdx=ide-scsi" (try "man bootparam" or see the
	  documentation of your boot loader (lilo or loadlin) about how to
	  pass options to the kernel at boot time) for devices if you want the
	  native EIDE sub-drivers to skip over the native support, so that
	  this SCSI emulation can be used instead.

	  Note that this option does NOT allow you to attach SCSI devices to a
	  box that doesn't have a SCSI host adapter installed.

	  If both this SCSI emulation and native ATAPI support are compiled
	  into the kernel, the native support will be used.

config BLK_DEV_IDEACPI
	bool "IDE ACPI support"
	depends on ACPI
	---help---
	  Implement ACPI support for generic IDE devices. On modern
	  machines ACPI support is required to properly handle ACPI S3 states.

config IDE_TASK_IOCTL
	bool "IDE Taskfile Access"
	help
	  This is a direct raw access to the media.  It is a complex but
	  elegant solution to test and validate the domain of the hardware and
	  perform below the driver data recovery if needed.  This is the most
	  basic form of media-forensics.

	  If you are unsure, say N here.

config IDE_PROC_FS
	bool "legacy /proc/ide/ support"
	depends on IDE && PROC_FS
	default y
	help
	  This option enables support for the various files in
	  /proc/ide.  In Linux 2.6 this has been superseded by
	  files in sysfs but many legacy applications rely on this.

	  If unsure say Y.

comment "IDE chipset support/bugfixes"

config IDE_GENERIC
	tristate "generic/default IDE chipset support"
	help
	  If unsure, say N.

config BLK_DEV_PLATFORM
	tristate "Platform driver for IDE interfaces"
	help
	  This is the platform IDE driver, used mostly for Memory Mapped
	  IDE devices, like Compact Flashes running in True IDE mode.

	  If unsure, say N.

config BLK_DEV_CMD640
	tristate "CMD640 chipset bugfix/support"
	depends on X86
	---help---
	  The CMD-Technologies CMD640 IDE chip is used on many common 486 and
	  Pentium motherboards, usually in combination with a "Neptune" or
	  "SiS" chipset. Unfortunately, it has a number of rather nasty
	  design flaws that can cause severe data corruption under many common
	  conditions. Say Y here to include code which tries to automatically
	  detect and correct the problems under Linux. This option also
	  enables access to the secondary IDE ports in some CMD640 based
	  systems.

	  This driver will work automatically in PCI based systems (most new
	  systems have PCI slots). But if your system uses VESA local bus
	  (VLB) instead of PCI, you must also supply a kernel boot parameter
	  to enable the CMD640 bugfix/support: "ide0=cmd640_vlb". (Try "man
	  bootparam" or see the documentation of your boot loader about how to
	  pass options to the kernel.)

	  The CMD640 chip is also used on add-in cards by Acculogic, and on
	  the "CSA-6400E PCI to IDE controller" that some people have. For
	  details, read <file:Documentation/ide.txt>.

config BLK_DEV_CMD640_ENHANCED
	bool "CMD640 enhanced support"
	depends on BLK_DEV_CMD640
	help
	  This option includes support for setting/autotuning PIO modes and
	  prefetch on CMD640 IDE interfaces.  For details, read
	  <file:Documentation/ide.txt>. If you have a CMD640 IDE interface
	  and your BIOS does not already do this for you, then say Y here.
	  Otherwise say N.

config BLK_DEV_IDEPNP
	tristate "PNP EIDE support"
	depends on PNP
	help
	  If you have a PnP (Plug and Play) compatible EIDE card and
	  would like the kernel to automatically detect and activate
	  it, say Y here.

if PCI

comment "PCI IDE chipsets support"

config BLK_DEV_IDEPCI
	bool

config IDEPCI_PCIBUS_ORDER
	bool "Probe IDE PCI devices in the PCI bus order (DEPRECATED)"
	depends on BLK_DEV_IDE=y && BLK_DEV_IDEPCI
	default y
	help
	  Probe IDE PCI devices in the order in which they appear on the
	  PCI bus (i.e. 00:1f.1 PCI device before 02:01.0 PCI device)
	  instead of the order in which IDE PCI host drivers are loaded.

	  Please note that this method of assuring stable naming of
	  IDE devices is unreliable and use other means for achieving
	  it (i.e. udev).

	  If in doubt, say N.

# TODO: split it on per host driver config options (or module parameters)
config BLK_DEV_OFFBOARD
	bool "Boot off-board chipsets first support (DEPRECATED)"
	depends on BLK_DEV_IDEPCI && (BLK_DEV_AEC62XX || BLK_DEV_GENERIC || BLK_DEV_HPT34X || BLK_DEV_HPT366 || BLK_DEV_PDC202XX_NEW || BLK_DEV_PDC202XX_OLD || BLK_DEV_TC86C001)
	help
	  Normally, IDE controllers built into the motherboard (on-board
	  controllers) are assigned to ide0 and ide1 while those on add-in PCI
	  cards (off-board controllers) are relegated to ide2 and ide3.
	  Answering Y here will allow you to reverse the situation, with
	  off-board controllers on ide0/1 and on-board controllers on ide2/3.
	  This can improve the usability of some boot managers such as lilo
	  when booting from a drive on an off-board controller.

	  If you say Y here, and you actually want to reverse the device scan
	  order as explained above, you also need to issue the kernel command
	  line option "ide=reverse". (Try "man bootparam" or see the
	  documentation of your boot loader (lilo or loadlin) about how to
	  pass options to the kernel at boot time.)

	  Note that, if you do this, the order of the hd* devices will be
	  rearranged which may require modification of fstab and other files.

	  Please also note that this method of assuring stable naming of
	  IDE devices is unreliable and use other means for achieving it
	  (i.e. udev).

	  If in doubt, say N.

config BLK_DEV_GENERIC
	tristate "Generic PCI IDE Chipset Support"
	select BLK_DEV_IDEPCI
        help
          This option provides generic support for various PCI IDE Chipsets
          which otherwise might not be supported.

config BLK_DEV_OPTI621
	tristate "OPTi 82C621 chipset enhanced support (EXPERIMENTAL)"
	depends on EXPERIMENTAL
	select BLK_DEV_IDEPCI
	help
	  This is a driver for the OPTi 82C621 EIDE controller.
	  Please read the comments at the top of <file:drivers/ide/pci/opti621.c>.

config BLK_DEV_RZ1000
	tristate "RZ1000 chipset bugfix/support"
	depends on X86
	select BLK_DEV_IDEPCI
	help
	  The PC-Technologies RZ1000 IDE chip is used on many common 486 and
	  Pentium motherboards, usually along with the "Neptune" chipset.
	  Unfortunately, it has a rather nasty design flaw that can cause
	  severe data corruption under many conditions. Say Y here to include
	  code which automatically detects and corrects the problem under
	  Linux. This may slow disk throughput by a few percent, but at least
	  things will operate 100% reliably.

config BLK_DEV_IDEDMA_PCI
	bool
	select BLK_DEV_IDEPCI

config BLK_DEV_AEC62XX
	tristate "AEC62XX chipset support"
	select BLK_DEV_IDEDMA_PCI
	help
	  This driver adds explicit support for Acard AEC62xx (Artop ATP8xx)
	  IDE controllers. This allows the kernel to change PIO, DMA and UDMA
	  speeds and to configure the chip to optimum performance.

config BLK_DEV_ALI15X3
	tristate "ALI M15x3 chipset support"
	select BLK_DEV_IDEDMA_PCI
	help
	  This driver ensures (U)DMA support for ALI 1533, 1543 and 1543C
	  onboard chipsets.  It also tests for Simplex mode and enables
	  normal dual channel support.

	  If you say Y here, you also need to say Y to "Use DMA by default
	  when available", above.  Please read the comments at the top of
	  <file:drivers/ide/pci/alim15x3.c>.

	  If unsure, say N.

config WDC_ALI15X3
	bool "ALI M15x3 WDC support (DANGEROUS)"
	depends on BLK_DEV_ALI15X3
	---help---
	  This allows for UltraDMA support for WDC drives that ignore CRC
	  checking. You are a fool for enabling this option, but there have
	  been requests. DO NOT COMPLAIN IF YOUR DRIVE HAS FS CORRUPTION, IF
	  YOU ENABLE THIS! No one will listen, just laugh for ignoring this
	  SERIOUS WARNING.

	  Using this option can allow WDC drives to run at ATA-4/5 transfer
	  rates with only an ATA-2 support structure.

	  SAY N!

config BLK_DEV_AMD74XX
	tristate "AMD and nVidia IDE support"
	depends on !ARM
	select BLK_DEV_IDEDMA_PCI
	help
	  This driver adds explicit support for AMD-7xx and AMD-8111 chips
	  and also for the nVidia nForce chip.  This allows the kernel to
	  change PIO, DMA and UDMA speeds and to configure the chip to
	  optimum performance.

config BLK_DEV_ATIIXP
	tristate "ATI IXP chipset IDE support"
	depends on X86
	select BLK_DEV_IDEDMA_PCI
	help
	  This driver adds explicit support for ATI IXP chipset.
	  This allows the kernel to change PIO, DMA and UDMA speeds
	  and to configure the chip to optimum performance.

	  Say Y here if you have an ATI IXP chipset IDE controller.

config BLK_DEV_CMD64X
	tristate "CMD64{3|6|8|9} chipset support"
	select BLK_DEV_IDEDMA_PCI
	help
	  Say Y here if you have an IDE controller which uses any of these
	  chipsets: CMD643, CMD646, or CMD648.

config BLK_DEV_TRIFLEX
	tristate "Compaq Triflex IDE support"
	select BLK_DEV_IDEDMA_PCI
	help
	  Say Y here if you have a Compaq Triflex IDE controller, such
	  as those commonly found on Compaq Pentium-Pro systems

config BLK_DEV_CY82C693
	tristate "CY82C693 chipset support"
	select BLK_DEV_IDEDMA_PCI
	help
	  This driver adds detection and support for the CY82C693 chipset
	  used on Digital's PC-Alpha 164SX boards.

	  If you say Y here, you need to say Y to "Use DMA by default
	  when available" as well.

config BLK_DEV_CS5520
	tristate "Cyrix CS5510/20 MediaGX chipset support (VERY EXPERIMENTAL)"
	depends on EXPERIMENTAL
	select BLK_DEV_IDEDMA_PCI
	help
	  Include support for PIO tuning and virtual DMA on the Cyrix MediaGX
	  5510/5520 chipset. This will automatically be detected and
	  configured if found.

	  It is safe to say Y to this question.

config BLK_DEV_CS5530
	tristate "Cyrix/National Semiconductor CS5530 MediaGX chipset support"
	select BLK_DEV_IDEDMA_PCI
	help
	  Include support for UDMA on the Cyrix MediaGX 5530 chipset. This
	  will automatically be detected and configured if found.

	  It is safe to say Y to this question.

config BLK_DEV_CS5535
	tristate "AMD CS5535 chipset support"
	depends on X86 && !X86_64
	select BLK_DEV_IDEDMA_PCI
	help
	  Include support for UDMA on the NSC/AMD CS5535 companion chipset.
	  This will automatically be detected and configured if found.

	  It is safe to say Y to this question.

config BLK_DEV_HPT34X
	tristate "HPT34X chipset support"
	select BLK_DEV_IDEDMA_PCI
	help
	  This driver adds up to 4 more EIDE devices sharing a single
	  interrupt. The HPT343 chipset in its current form is a non-bootable
	  controller; the HPT345/HPT363 chipset is a bootable (needs BIOS FIX)
	  PCI UDMA controllers. This driver requires dynamic tuning of the
	  chipset during the ide-probe at boot time. It is reported to support
	  DVD II drives, by the manufacturer.

config HPT34X_AUTODMA
	bool "HPT34X AUTODMA support (EXPERIMENTAL)"
	depends on BLK_DEV_HPT34X && EXPERIMENTAL
	help
	  This is a dangerous thing to attempt currently! Please read the
	  comments at the top of <file:drivers/ide/pci/hpt34x.c>.  If you say Y
	  here, then say Y to "Use DMA by default when available" as well.

	  If unsure, say N.

config BLK_DEV_HPT366
	tristate "HPT36X/37X chipset support"
	select BLK_DEV_IDEDMA_PCI
	help
	  HPT366 is an Ultra DMA chipset for ATA-66.
	  HPT368 is an Ultra DMA chipset for ATA-66 RAID Based.
	  HPT370 is an Ultra DMA chipset for ATA-100.
	  HPT372 is an Ultra DMA chipset for ATA-100.
	  HPT374 is an Ultra DMA chipset for ATA-100.

	  This driver adds up to 4 more EIDE devices sharing a single
	  interrupt.

	  The HPT366 chipset in its current form is bootable. One solution
	  for this problem are special LILO commands for redirecting the
	  reference to device 0x80. The other solution is to say Y to "Boot
	  off-board chipsets first support" (CONFIG_BLK_DEV_OFFBOARD) unless
	  your mother board has the chipset natively mounted. Regardless one
	  should use the fore mentioned option and call at LILO or include
	  "ide=reverse" in LILO's append-line.

	  This driver requires dynamic tuning of the chipset during the
	  ide-probe at boot. It is reported to support DVD II drives, by the
	  manufacturer.

config BLK_DEV_JMICRON
	tristate "JMicron JMB36x support"
	select BLK_DEV_IDEDMA_PCI
	help
	  Basic support for the JMicron ATA controllers. For full support
	  use the libata drivers.

config BLK_DEV_SC1200
	tristate "National SCx200 chipset support"
	select BLK_DEV_IDEDMA_PCI
	help
	  This driver adds support for the on-board IDE controller on the
	  National SCx200 series of embedded x86 "Geode" systems.

config BLK_DEV_PIIX
	tristate "Intel PIIXn chipsets support"
	select BLK_DEV_IDEDMA_PCI
	help
	  This driver adds explicit support for Intel PIIX and ICH chips
	  and also for the Efar Victory66 (slc90e66) chip.  This allows
	  the kernel to change PIO, DMA and UDMA speeds and to configure
	  the chip to optimum performance.

config BLK_DEV_IT8213
	tristate "IT8213 IDE support"
	select BLK_DEV_IDEDMA_PCI
	help
	 This driver adds support for the ITE 8213 IDE controller.

config BLK_DEV_IT821X
	tristate "IT821X IDE support"
	select BLK_DEV_IDEDMA_PCI
	help
	  This driver adds support for the ITE 8211 IDE controller and the
	  IT 8212 IDE RAID controller in both RAID and pass-through mode.

config BLK_DEV_NS87415
	tristate "NS87415 chipset support"
	select BLK_DEV_IDEDMA_PCI
	help
	  This driver adds detection and support for the NS87415 chip
	  (used mainly on SPARC64 and PA-RISC machines).

	  Please read the comments at the top of <file:drivers/ide/pci/ns87415.c>.

config BLK_DEV_PDC202XX_OLD
	tristate "PROMISE PDC202{46|62|65|67} support"
	select BLK_DEV_IDEDMA_PCI
	help
	  Promise Ultra33 or PDC20246
	  Promise Ultra66 or PDC20262
	  Promise Ultra100 or PDC20265/PDC20267/PDC20268

	  This driver adds up to 4 more EIDE devices sharing a single
	  interrupt. This add-on card is a bootable PCI UDMA controller. Since
	  multiple cards can be installed and there are BIOS ROM problems that
	  happen if the BIOS revisions of all installed cards (three-max) do
	  not match, the driver attempts to do dynamic tuning of the chipset
	  at boot-time for max-speed.  Ultra33 BIOS 1.25 or newer is required
	  for more than one card. This card may require that you say Y to
	  "Special UDMA Feature".

	  If you say Y here, you need to say Y to "Use DMA by default when
	  available" as well.

	  Please read the comments at the top of
	  <file:drivers/ide/pci/pdc202xx_old.c>.

	  If unsure, say N.

config PDC202XX_BURST
	bool "Special UDMA Feature"
	depends on BLK_DEV_PDC202XX_OLD
	help
	  This option causes the pdc202xx driver to enable UDMA modes on the
	  PDC202xx even when the PDC202xx BIOS has not done so.

	  It was originally designed for the PDC20246/Ultra33, whose BIOS will
	  only setup UDMA on the first two PDC20246 cards.  It has also been
	  used successfully on a PDC20265/Ultra100, allowing use of UDMA modes
	  when the PDC20265 BIOS has been disabled (for faster boot up).

	  Please read the comments at the top of
	  <file:drivers/ide/pci/pdc202xx_old.c>.

	  If unsure, say N.

config BLK_DEV_PDC202XX_NEW
	tristate "PROMISE PDC202{68|69|70|71|75|76|77} support"
	select BLK_DEV_IDEDMA_PCI

config BLK_DEV_SVWKS
	tristate "ServerWorks OSB4/CSB5/CSB6 chipsets support"
	select BLK_DEV_IDEDMA_PCI
	help
	  This driver adds PIO/(U)DMA support for the ServerWorks OSB4/CSB5
	  chipsets.

config BLK_DEV_SGIIOC4
	tristate "Silicon Graphics IOC4 chipset ATA/ATAPI support"
	depends on (IA64_SGI_SN2 || IA64_GENERIC) && SGI_IOC4
	select BLK_DEV_IDEDMA_PCI
	help
	  This driver adds PIO & MultiMode DMA-2 support for the SGI IOC4
	  chipset, which has one channel and can support two devices.
	  Please say Y here if you have an Altix System from SGI.

config BLK_DEV_SIIMAGE
	tristate "Silicon Image chipset support"
	select BLK_DEV_IDEDMA_PCI
	help
	  This driver adds PIO/(U)DMA support for the SI CMD680 and SII
	  3112 (Serial ATA) chips.

config BLK_DEV_SIS5513
	tristate "SiS5513 chipset support"
	depends on X86
	select BLK_DEV_IDEDMA_PCI
	help
	  This driver ensures (U)DMA support for SIS5513 chipset family based
	  mainboards.

	  The following chipsets are supported:
	  ATA16:  SiS5511, SiS5513
	  ATA33:  SiS5591, SiS5597, SiS5598, SiS5600
	  ATA66:  SiS530, SiS540, SiS620, SiS630, SiS640
	  ATA100: SiS635, SiS645, SiS650, SiS730, SiS735, SiS740,
	  SiS745, SiS750

	  If you say Y here, you need to say Y to "Use DMA by default when
	  available" as well.

	  Please read the comments at the top of <file:drivers/ide/pci/sis5513.c>.

config BLK_DEV_SL82C105
	tristate "Winbond SL82c105 support"
	depends on (PPC || ARM)
	select BLK_DEV_IDEDMA_PCI
	help
	  If you have a Winbond SL82c105 IDE controller, say Y here to enable
	  special configuration for this chip. This is common on various CHRP
	  motherboards, but could be used elsewhere. If in doubt, say Y.

config BLK_DEV_SLC90E66
	tristate "SLC90E66 chipset support"
	select BLK_DEV_IDEDMA_PCI
	help
	  This driver ensures (U)DMA support for Victory66 SouthBridges for
	  SMsC with Intel NorthBridges.  This is an Ultra66 based chipset.
	  The nice thing about it is that you can mix Ultra/DMA/PIO devices
	  and it will handle timing cycles.  Since this is an improved
	  look-a-like to the PIIX4 it should be a nice addition.

	  If you say Y here, you need to say Y to "Use DMA by default when
	  available" as well.

	  Please read the comments at the top of
	  <file:drivers/ide/pci/slc90e66.c>.

config BLK_DEV_TRM290
	tristate "Tekram TRM290 chipset support"
	select BLK_DEV_IDEDMA_PCI
	help
	  This driver adds support for bus master DMA transfers
	  using the Tekram TRM290 PCI IDE chip. Volunteers are
	  needed for further tweaking and development.
	  Please read the comments at the top of <file:drivers/ide/pci/trm290.c>.

config BLK_DEV_VIA82CXXX
	tristate "VIA82CXXX chipset support"
	select BLK_DEV_IDEDMA_PCI
	help
	  This driver adds explicit support for VIA BusMastering IDE chips.
	  This allows the kernel to change PIO, DMA and UDMA speeds and to
	  configure the chip to optimum performance.

config BLK_DEV_TC86C001
	tristate "Toshiba TC86C001 support"
	select BLK_DEV_IDEDMA_PCI
	help
	This driver adds support for Toshiba TC86C001 GOKU-S chip.

config BLK_DEV_CELLEB
	tristate "Toshiba's Cell Reference Set IDE support"
	depends on PPC_CELLEB
	select BLK_DEV_IDEDMA_PCI
	help
	  This driver provides support for the on-board IDE controller on
	  Toshiba Cell Reference Board.
	  If unsure, say Y.

endif

config BLK_DEV_IDE_PMAC
	tristate "PowerMac on-board IDE support"
	depends on PPC_PMAC && IDE=y && BLK_DEV_IDE=y
	help
	  This driver provides support for the on-board IDE controller on
	  most of the recent Apple Power Macintoshes and PowerBooks.
	  If unsure, say Y.

config BLK_DEV_IDE_PMAC_ATA100FIRST
	bool "Probe on-board ATA/100 (Kauai) first"
	depends on BLK_DEV_IDE_PMAC
	help
	  This option will cause the ATA/100 controller found in UniNorth2
	  based machines (Windtunnel PowerMac, Aluminium PowerBooks, ...)
	  to be probed before the ATA/66 and ATA/33 controllers. Without
	  these, those machine used to have the hard disk on hdc and the
	  CD-ROM on hda. This option changes this to more natural hda for
	  hard disk and hdc for CD-ROM.

config BLK_DEV_IDEDMA_PMAC
	bool "PowerMac IDE DMA support"
	depends on BLK_DEV_IDE_PMAC
	select BLK_DEV_IDEDMA_PCI
	help
	  This option allows the driver for the on-board IDE controller on
	  Power Macintoshes and PowerBooks to use DMA (direct memory access)
	  to transfer data to and from memory.  Saying Y is safe and improves
	  performance.

config BLK_DEV_IDE_SWARM
	tristate "IDE for Sibyte evaluation boards"
	depends on SIBYTE_SB1xxx_SOC

config BLK_DEV_IDE_AU1XXX
       bool "IDE for AMD Alchemy Au1200"
       depends on SOC_AU1200
choice
       prompt "IDE Mode for AMD Alchemy Au1200"
       default CONFIG_BLK_DEV_IDE_AU1XXX_PIO_DBDMA
       depends on SOC_AU1200 && BLK_DEV_IDE_AU1XXX

config BLK_DEV_IDE_AU1XXX_PIO_DBDMA
       bool "PIO+DbDMA IDE for AMD Alchemy Au1200"

config BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA
       bool "MDMA2+DbDMA IDE for AMD Alchemy Au1200"
       depends on SOC_AU1200 && BLK_DEV_IDE_AU1XXX
endchoice

config BLK_DEV_IDE_AU1XXX_SEQTS_PER_RQ
       int "Maximum transfer size (KB) per request (up to 128)"
       default "128"
       depends on BLK_DEV_IDE_AU1XXX

config IDE_ARM
	tristate "ARM IDE support"
	depends on ARM && (ARCH_CLPS7500 || ARCH_RPC || ARCH_SHARK)
	default y

config BLK_DEV_IDE_ICSIDE
	tristate "ICS IDE interface support"
	depends on ARM && ARCH_ACORN
	help
	  On Acorn systems, say Y here if you wish to use the ICS IDE
	  interface card.  This is not required for ICS partition support.
	  If you are unsure, say N to this.

config BLK_DEV_IDEDMA_ICS
	bool "ICS DMA support"
	depends on BLK_DEV_IDE_ICSIDE
	help
	  Say Y here if you want to add DMA (Direct Memory Access) support to
	  the ICS IDE driver.

config BLK_DEV_IDE_RAPIDE
	tristate "RapIDE interface support"
	depends on ARM && ARCH_ACORN
	help
	  Say Y here if you want to support the Yellowstone RapIDE controller
	  manufactured for use with Acorn computers.

config BLK_DEV_IDE_BAST
	tristate "Simtec BAST / Thorcom VR1000 IDE support"
	depends on ARM && (ARCH_BAST || MACH_VR1000)
	help
	  Say Y here if you want to support the onboard IDE channels on the
	  Simtec BAST or the Thorcom VR1000

config ETRAX_IDE
	tristate "ETRAX IDE support"
	depends on CRIS && BROKEN
	select BLK_DEV_IDEDMA
	help
	  Enables the ETRAX IDE driver.

	  You can't use parallel ports or SCSI ports at the same time.

config ETRAX_IDE_DELAY
	int "Delay for drives to regain consciousness"
	depends on ETRAX_IDE && ETRAX_ARCH_V10
	default 15
	help
	  Number of seconds to wait for IDE drives to spin up after an IDE
	  reset.

choice
	prompt "IDE reset pin"
	depends on ETRAX_IDE && ETRAX_ARCH_V10
	default ETRAX_IDE_PB7_RESET

config ETRAX_IDE_PB7_RESET
	bool "Port_PB_Bit_7"
	help
	  IDE reset on pin 7 on port B

config ETRAX_IDE_G27_RESET
	bool "Port_G_Bit_27"
	help
	  IDE reset on pin 27 on port G

endchoice

config IDE_H8300
	tristate "H8300 IDE support"
	depends on H8300
	default y
	help
	  Enables the H8300 IDE driver.

config BLK_DEV_GAYLE
	tristate "Amiga Gayle IDE interface support"
	depends on AMIGA
	help
	  This is the IDE driver for the Amiga Gayle IDE interface. It supports
	  both the `A1200 style' and `A4000 style' of the Gayle IDE interface,
	  This includes on-board IDE interfaces on some Amiga models (A600,
	  A1200, A4000, and A4000T), and IDE interfaces on the Zorro expansion
	  bus (M-Tech E-Matrix 530 expansion card).
	  Say Y if you have an Amiga with a Gayle IDE interface and want to use
	  IDE devices (hard disks, CD-ROM drives, etc.) that are connected to
	  it.
	  Note that you also have to enable Zorro bus support if you want to
	  use Gayle IDE interfaces on the Zorro expansion bus.

config BLK_DEV_IDEDOUBLER
	bool "Amiga IDE Doubler support (EXPERIMENTAL)"
	depends on BLK_DEV_GAYLE && EXPERIMENTAL
	---help---
	  This driver provides support for the so-called `IDE doublers' (made
	  by various manufacturers, e.g. Eyetech) that can be connected to
	  the on-board IDE interface of some Amiga models. Using such an IDE
	  doubler, you can connect up to four instead of two IDE devices to
	  the Amiga's on-board IDE interface.

	  Note that the normal Amiga Gayle IDE driver may not work correctly
	  if you have an IDE doubler and don't enable this driver!

	  Say Y if you have an IDE doubler.  The driver is enabled at kernel
	  runtime using the "ide=doubler" kernel boot parameter.

config BLK_DEV_BUDDHA
	tristate "Buddha/Catweasel/X-Surf IDE interface support (EXPERIMENTAL)"
	depends on ZORRO && EXPERIMENTAL
	help
	  This is the IDE driver for the IDE interfaces on the Buddha, Catweasel
	  and X-Surf expansion boards.  It supports up to two interfaces on the
	  Buddha, three on the Catweasel and two on the X-Surf.

	  Say Y if you have a Buddha or Catweasel expansion board and want to
	  use IDE devices (hard disks, CD-ROM drives, etc.) that are connected
	  to one of its IDE interfaces.

config BLK_DEV_FALCON_IDE
	tristate "Falcon IDE interface support"
	depends on ATARI
	help
	  This is the IDE driver for the on-board IDE interface on the Atari
	  Falcon. Say Y if you have a Falcon and want to use IDE devices (hard
	  disks, CD-ROM drives, etc.) that are connected to the on-board IDE
	  interface.

config BLK_DEV_MAC_IDE
	tristate "Macintosh Quadra/Powerbook IDE interface support"
	depends on MAC
	help
	  This is the IDE driver for the on-board IDE interface on some m68k
	  Macintosh models. It supports both the `Quadra style' (used in
	  Quadra/ Centris 630 and Performa 588 models) and `Powerbook style'
	  (used in the Powerbook 150 and 190 models) IDE interface.

	  Say Y if you have such an Macintosh model and want to use IDE
	  devices (hard disks, CD-ROM drives, etc.) that are connected to the
	  on-board IDE interface.

config BLK_DEV_Q40IDE
	tristate "Q40/Q60 IDE interface support"
	depends on Q40
	help
	  Enable the on-board IDE controller in the Q40/Q60.  This should
	  normally be on; disable it only if you are running a custom hard
	  drive subsystem through an expansion card.

config BLK_DEV_MPC8xx_IDE
	tristate "MPC8xx IDE support"
	depends on 8xx && (LWMON || IVMS8 || IVML24 || TQM8xxL) && IDE=y && BLK_DEV_IDE=y && !PPC_MERGE
	help
	  This option provides support for IDE on Motorola MPC8xx Systems.
	  Please see 'Type of MPC8xx IDE interface' for details.

	  If unsure, say N.

choice
	prompt "Type of MPC8xx IDE interface"
	depends on BLK_DEV_MPC8xx_IDE
	default IDE_8xx_PCCARD

config IDE_8xx_PCCARD
	bool "8xx_PCCARD"
	---help---
	  Select how the IDE devices are connected to the MPC8xx system:

	  8xx_PCCARD uses the 8xx internal PCMCIA interface in combination
	  with a PC Card (e.g. ARGOSY portable Hard Disk Adapter),
	  ATA PC Card HDDs or ATA PC Flash Cards (example: TQM8xxL
	  systems)

	  8xx_DIRECT is used for directly connected IDE devices using the 8xx
	  internal PCMCIA interface (example: IVMS8 systems)

	  EXT_DIRECT is used for IDE devices directly connected to the 8xx
	  bus using some glue logic, but _not_ the 8xx internal
	  PCMCIA interface (example: IDIF860 systems)

config IDE_8xx_DIRECT
	bool "8xx_DIRECT"

config IDE_EXT_DIRECT
	bool "EXT_DIRECT"

endchoice

# no isa -> no vlb
if ISA

comment "Other IDE chipsets support"
comment "Note: most of these also require special kernel boot parameters"

config BLK_DEV_4DRIVES
	bool "Generic 4 drives/port support"
	help
	  Certain older chipsets, including the Tekram 690CD, use a single set
	  of I/O ports at 0x1f0 to control up to four drives, instead of the
	  customary two drives per port. Support for this can be enabled at
	  runtime using the "ide0=four" kernel boot parameter if you say Y
	  here.

config BLK_DEV_ALI14XX
	tristate "ALI M14xx support"
	help
	  This driver is enabled at runtime using the "ali14xx.probe" kernel
	  boot parameter.  It enables support for the secondary IDE interface
	  of the ALI M1439/1443/1445/1487/1489 chipsets, and permits faster
	  I/O speeds to be set as well.  See the files
	  <file:Documentation/ide.txt> and <file:drivers/ide/legacy/ali14xx.c>
	  for more info.

config BLK_DEV_DTC2278
	tristate "DTC-2278 support"
	help
	  This driver is enabled at runtime using the "dtc2278.probe" kernel
	  boot parameter. It enables support for the secondary IDE interface
	  of the DTC-2278 card, and permits faster I/O speeds to be set as
	  well. See the <file:Documentation/ide.txt> and
	  <file:drivers/ide/legacy/dtc2278.c> files for more info.

config BLK_DEV_HT6560B
	tristate "Holtek HT6560B support"
	help
	  This driver is enabled at runtime using the "ht6560b.probe" kernel
	  boot parameter. It enables support for the secondary IDE interface
	  of the Holtek card, and permits faster I/O speeds to be set as well.
	  See the <file:Documentation/ide.txt> and
	  <file:drivers/ide/legacy/ht6560b.c> files for more info.

config BLK_DEV_QD65XX
	tristate "QDI QD65xx support"
	help
	  This driver is enabled at runtime using the "qd65xx.probe" kernel
	  boot parameter.  It permits faster I/O speeds to be set.  See the
	  <file:Documentation/ide.txt> and <file:drivers/ide/legacy/qd65xx.c>
	  for more info.

config BLK_DEV_UMC8672
	tristate "UMC-8672 support"
	help
	  This driver is enabled at runtime using the "umc8672.probe" kernel
	  boot parameter. It enables support for the secondary IDE interface
	  of the UMC-8672, and permits faster I/O speeds to be set as well.
	  See the files <file:Documentation/ide.txt> and
	  <file:drivers/ide/legacy/umc8672.c> for more info.

endif

config BLK_DEV_IDEDMA
	def_bool BLK_DEV_IDEDMA_PCI || BLK_DEV_IDEDMA_PMAC || BLK_DEV_IDEDMA_ICS || BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA

config IDE_ARCH_OBSOLETE_INIT
	def_bool ALPHA || (ARM && !ARCH_L7200) || BLACKFIN || X86 || IA64 || M32R || MIPS || PARISC || PPC || (SUPERH64 && BLK_DEV_IDEPCI) || SPARC

endif

config BLK_DEV_HD_ONLY
	bool "Old hard disk (MFM/RLL/IDE) driver"
	depends on BLK_DEV_IDE=n
	help
	  There are two drivers for MFM/RLL/IDE hard disks. Most people use
	  the newer enhanced driver, but this old one is still around for two
	  reasons. Some older systems have strange timing problems and seem to
	  work only with the old driver (which itself does not work with some
	  newer systems). The other reason is that the old driver is smaller,
	  since it lacks the enhanced functionality of the new one. This makes
	  it a good choice for systems with very tight memory restrictions, or
	  for systems with only older MFM/RLL/ESDI drives. Choosing the old
	  driver can save 13 KB or so of kernel memory.

	  If you are unsure, then just choose the Enhanced IDE/MFM/RLL driver
	  instead of this one. For more detailed information, read the
	  Disk-HOWTO, available from
	  <http://www.tldp.org/docs.html#howto>.

config BLK_DEV_HD
	def_bool BLK_DEV_HD_IDE || BLK_DEV_HD_ONLY

endif # IDE
