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

if BLOCK

menu "ATA/ATAPI/MFM/RLL support"

config IDE
	tristate "ATA/ATAPI/MFM/RLL support"
	---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 multi-mode by default"
	help
	  If you get this 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".

	  Note that older versions of LILO (LInux LOader) cannot properly deal
	  with IDE/ATAPI CD-ROMs, so install LILO 16 or higher, available from
	  <http://lilo.go.dyndns.org/>.

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

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"
	default y
	help
	  If unsure, say Y.

config BLK_DEV_CMD640
	bool "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
	bool "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.

config BLK_DEV_IDEPCI
	bool "PCI IDE chipset support" if PCI
	default BLK_DEV_IDEDMA_PMAC if PPC_PMAC && BLK_DEV_IDEDMA_PMAC
	help
	  Say Y here for PCI systems which use IDE drive(s).
	  This option helps the IDE driver to automatically detect and
	  configure all PCI-based IDE interfaces in your system.

config IDEPCI_SHARE_IRQ
	bool "Sharing PCI IDE interrupts support"
	depends on PCI && BLK_DEV_IDEPCI
	help
	  Some ATA/IDE chipsets have hardware support which allows for
	  sharing a single IRQ with other cards. To enable support for
	  this in the ATA/IDE driver, say Y here.

	  It is safe to say Y to this question, in most cases.
	  If unsure, say N.

config BLK_DEV_OFFBOARD
	bool "Boot off-board chipsets first support"
	depends on PCI && BLK_DEV_IDEPCI
	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.

	  If in doubt, say N.

config BLK_DEV_GENERIC
	tristate "Generic PCI IDE Chipset Support"
	depends on 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 PCI && BLK_DEV_IDEPCI && EXPERIMENTAL
	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 PCI && BLK_DEV_IDEPCI && X86
	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 "Generic PCI bus-master DMA support"
	depends on PCI && BLK_DEV_IDEPCI
	---help---
	  If your PCI system uses IDE drive(s) (as opposed to SCSI, say) and
	  is capable of bus-master DMA operation (most Pentium PCI systems),
	  you will want to say Y here to reduce CPU overhead. You can then use
	  the "hdparm" utility to enable DMA for drives for which it was not
	  enabled automatically. By default, DMA is not enabled automatically
	  for these drives, but you can change that by saying Y to the
	  following question "Use DMA by default when available". You can get
	  the latest version of the hdparm utility from
	  <ftp://ibiblio.org/pub/Linux/system/hardware/>.

	  Read the comments at the beginning of <file:drivers/ide/ide-dma.c>
	  and the file <file:Documentation/ide.txt> for more information.

	  It is safe to say Y to this question.

if BLK_DEV_IDEDMA_PCI

config BLK_DEV_IDEDMA_FORCED
	bool "Force enable legacy 2.0.X HOSTS to use DMA"
	help
	  This is an old piece of lost code from Linux 2.0 Kernels.

	  Generally say N here.

config IDEDMA_ONLYDISK
	bool "Enable DMA only for disks "
	help
	  This is used if you know your ATAPI Devices are going to fail DMA
	  Transfers.

	  Generally say N here.

config BLK_DEV_AEC62XX
	tristate "AEC62XX chipset support"
	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"
	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"
	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
	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"
	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"
	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"
	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
	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"
	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
	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"
	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"
	---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"
	help
	  Basic support for the JMicron ATA controllers. For full support
	  use the libata drivers.

config BLK_DEV_SC1200
	tristate "National SCx200 chipset support"
	help
	  This driver adds support for the built in IDE on the National
	  SCx200 series of embedded x86 "Geode" systems

config BLK_DEV_PIIX
	tristate "Intel PIIXn chipsets support"
	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"
	help
	 This driver adds support for the ITE 8213 IDE controller.

config BLK_DEV_IT821X
	tristate "IT821X IDE support"
	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"
	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"
	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"

config BLK_DEV_SVWKS
	tristate "ServerWorks OSB4/CSB5/CSB6 chipsets support"
	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 IDEPCI_SHARE_IRQ
	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"
	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
	---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)
	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"
	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"
	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"
	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"
	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
	help
	  This driver provides support for the built-in IDE controller on
	  Toshiba Cell Reference Board.
	  If unsure, say Y.

endif

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

config BLK_DEV_IDE_PMAC_ATA100FIRST
	bool "Probe internal 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 built-in 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
	def_bool ARM && (ARCH_A5K || ARCH_CLPS7500 || ARCH_RPC || ARCH_SHARK)

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 BLK_DEV_GAYLE
	bool "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 builtin 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
	  builtin IDE interface of some Amiga models. Using such an IDE
	  doubler, you can connect up to four instead of two IDE devices on
	  the Amiga's builtin 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
	bool "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
	bool "Falcon IDE interface support"
	depends on ATARI
	help
	  This is the IDE driver for the builtin 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 builtin IDE
	  interface.

config BLK_DEV_MAC_IDE
	bool "Macintosh Quadra/Powerbook IDE interface support"
	depends on MAC
	help
	  This is the IDE driver for the builtin 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
	  builtin IDE interface.

config BLK_DEV_Q40IDE
	bool "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
	bool "MPC8xx IDE support"
	depends on 8xx && IDE=y && BLK_DEV_IDE=y
	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
config IDE_CHIPSETS
	bool "Other IDE chipset support"
	depends on ISA
	---help---
	  Say Y here if you want to include enhanced support for various IDE
	  interface chipsets used on motherboards and add-on cards. You can
	  then pick your particular IDE chip from among the following options.
	  This enhanced support may be necessary for Linux to be able to
	  access the 3rd/4th drives in some systems. It may also enable
	  setting of higher speed I/O rates to improve system performance with
	  these chipsets. Most of these also require special kernel boot
	  parameters to actually turn on the support at runtime; you can find
	  a list of these in the file <file:Documentation/ide.txt>.

	  People with SCSI-only systems can say N here.

if IDE_CHIPSETS

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 IDEDMA_IVB
	bool "IGNORE word93 Validation BITS"
	depends on BLK_DEV_IDEDMA_PCI || BLK_DEV_IDEDMA_PMAC || BLK_DEV_IDEDMA_ICS
	---help---
	  There are unclear terms in ATA-4 and ATA-5 standards how certain
	  hardware (an 80c ribbon) should be detected. Different interpretations
	  of the standards have been released in hardware. This causes problems:
	  for example, a host with Ultra Mode 4 (or higher) will not run
	  in that mode with an 80c ribbon.

	  If you are experiencing compatibility or performance problems, you
	  MAY try to answer Y here. However, it does not necessarily solve
	  any of your problems, it could even cause more of them.

	  It is normally safe to answer Y; however, the default is N.

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

endmenu

endif
