#
# SATA/PATA driver configuration
#

menuconfig ATA
	tristate "Serial ATA (prod) and Parallel ATA (experimental) drivers"
	depends on HAS_IOMEM
	depends on BLOCK
	depends on !(M32R || M68K) || BROKEN
	depends on !SUN4 || BROKEN
	select SCSI
	---help---
	  If you want to use a ATA hard disk, ATA tape drive, ATA CD-ROM or
	  any other ATA device under Linux, say Y and make sure that you know
	  the name of your ATA host adapter (the card inside your computer
	  that "speaks" the ATA protocol, also called ATA controller),
	  because you will be asked for it.

if ATA

config ATA_NONSTANDARD
       bool
       default n

config ATA_ACPI
	bool
	depends on ACPI && PCI
	default y
	help
	  This option adds support for ATA-related ACPI objects.
	  These ACPI objects add the ability to retrieve taskfiles
	  from the ACPI BIOS and write them to the disk controller.
	  These objects may be related to performance, security,
	  power management, or other areas.
	  You can disable this at kernel boot time by using the
	  option libata.noacpi=1

config SATA_AHCI
	tristate "AHCI SATA support"
	depends on PCI
	help
	  This option enables support for AHCI Serial ATA.

	  If unsure, say N.

config SATA_SVW
	tristate "ServerWorks Frodo / Apple K2 SATA support"
	depends on PCI
	help
	  This option enables support for Broadcom/Serverworks/Apple K2
	  SATA support.

	  If unsure, say N.

config ATA_PIIX
	tristate "Intel ESB, ICH, PIIX3, PIIX4 PATA/SATA support"
	depends on PCI
	help
	  This option enables support for ICH5/6/7/8 Serial ATA
	  and support for PATA on the Intel ESB/ICH/PIIX3/PIIX4 series
	  host controllers.

	  If unsure, say N.

config SATA_MV
	tristate "Marvell SATA support (HIGHLY EXPERIMENTAL)"
	depends on PCI && EXPERIMENTAL
	help
	  This option enables support for the Marvell Serial ATA family.
	  Currently supports 88SX[56]0[48][01] chips.

	  If unsure, say N.

config SATA_NV
	tristate "NVIDIA SATA support"
	depends on PCI
	help
	  This option enables support for NVIDIA Serial ATA.

	  If unsure, say N.

config PDC_ADMA
	tristate "Pacific Digital ADMA support"
	depends on PCI
	help
	  This option enables support for Pacific Digital ADMA controllers

	  If unsure, say N.

config SATA_QSTOR
	tristate "Pacific Digital SATA QStor support"
	depends on PCI
	help
	  This option enables support for Pacific Digital Serial ATA QStor.

	  If unsure, say N.

config SATA_PROMISE
	tristate "Promise SATA TX2/TX4 support"
	depends on PCI
	help
	  This option enables support for Promise Serial ATA TX2/TX4.

	  If unsure, say N.

config SATA_SX4
	tristate "Promise SATA SX4 support"
	depends on PCI && EXPERIMENTAL
	help
	  This option enables support for Promise Serial ATA SX4.

	  If unsure, say N.

config SATA_SIL
	tristate "Silicon Image SATA support"
	depends on PCI
	help
	  This option enables support for Silicon Image Serial ATA.

	  If unsure, say N.

config SATA_SIL24
	tristate "Silicon Image 3124/3132 SATA support"
	depends on PCI
	help
	  This option enables support for Silicon Image 3124/3132 Serial ATA.

	  If unsure, say N.

config SATA_SIS
	tristate "SiS 964/965/966/180 SATA support"
	depends on PCI
	select PATA_SIS
	help
	  This option enables support for SiS Serial ATA on
	  SiS 964/965/966/180 and Parallel ATA on SiS 180.
	  The PATA support for SiS 180 requires additionally to
	  enable the PATA_SIS driver in the config.
	  If unsure, say N.

config SATA_ULI
	tristate "ULi Electronics SATA support"
	depends on PCI
	help
	  This option enables support for ULi Electronics SATA.

	  If unsure, say N.

config SATA_VIA
	tristate "VIA SATA support"
	depends on PCI
	help
	  This option enables support for VIA Serial ATA.

	  If unsure, say N.

config SATA_VITESSE
	tristate "VITESSE VSC-7174 / INTEL 31244 SATA support"
	depends on PCI
	help
	  This option enables support for Vitesse VSC7174 and Intel 31244 Serial ATA.

	  If unsure, say N.

config SATA_INIC162X
	tristate "Initio 162x SATA support (HIGHLY EXPERIMENTAL)"
	depends on PCI && EXPERIMENTAL
	help
	  This option enables support for Initio 162x Serial ATA.

config PATA_ALI
	tristate "ALi PATA support (Experimental)"
	depends on PCI && EXPERIMENTAL
	help
	  This option enables support for the ALi ATA interfaces
	  found on the many ALi chipsets.

	  If unsure, say N.

config PATA_AMD
	tristate "AMD/NVidia PATA support"
	depends on PCI
	help
	  This option enables support for the AMD and NVidia PATA
	  interfaces found on the chipsets for Athlon/Athlon64.

	  If unsure, say N.

config PATA_ARTOP
	tristate "ARTOP 6210/6260 PATA support (Experimental)"
	depends on PCI && EXPERIMENTAL
	help
	  This option enables support for ARTOP PATA controllers.

	  If unsure, say N.

config PATA_ATIIXP
	tristate "ATI PATA support (Experimental)"
	depends on PCI && EXPERIMENTAL
	help
	  This option enables support for the ATI ATA interfaces
	  found on the many ATI chipsets.

	  If unsure, say N.

config PATA_CMD640_PCI
	tristate "CMD640 PCI PATA support (Very Experimental)"
	depends on PCI && EXPERIMENTAL
	help
	  This option enables support for the CMD640 PCI IDE
	  interface chip. Only the primary channel is currently
	  supported.

	  If unsure, say N.

config PATA_CMD64X
	tristate "CMD64x PATA support (Very Experimental)"
	depends on PCI&& EXPERIMENTAL
	help
	  This option enables support for the CMD64x series chips
	  except for the CMD640.

	  If unsure, say N.

config PATA_CS5520
	tristate "CS5510/5520 PATA support"
	depends on PCI
	help
	  This option enables support for the Cyrix 5510/5520
	  companion chip used with the MediaGX/Geode processor family.

	  If unsure, say N.

config PATA_CS5530
	tristate "CS5530 PATA support (Experimental)"
	depends on PCI && EXPERIMENTAL
	help
	  This option enables support for the Cyrix/NatSemi/AMD CS5530
	  companion chip used with the MediaGX/Geode processor family.

	  If unsure, say N.

config PATA_CS5535
	tristate "CS5535 PATA support (Experimental)"
	depends on PCI && X86 && !X86_64 && EXPERIMENTAL
	help
	  This option enables support for the NatSemi/AMD CS5535
	  companion chip used with the Geode processor family.

	  If unsure, say N.

config PATA_CYPRESS
	tristate "Cypress CY82C693 PATA support (Very Experimental)"
	depends on PCI && EXPERIMENTAL
	help
	  This option enables support for the Cypress/Contaq CY82C693
	  chipset found in some Alpha systems

	  If unsure, say N.

config PATA_EFAR
	tristate "EFAR SLC90E66 support"
	depends on PCI
	help
	  This option enables support for the EFAR SLC90E66
	  IDE controller found on some older machines.

	  If unsure, say N.

config ATA_GENERIC
	tristate "Generic ATA support"
	depends on PCI
	help
	  This option enables support for generic BIOS configured
	  ATA controllers via the new ATA layer

	  If unsure, say N.

config PATA_HPT366
	tristate "HPT 366/368 PATA support (Experimental)"
	depends on PCI && EXPERIMENTAL
	help
	  This option enables support for the HPT 366 and 368
	  PATA controllers via the new ATA layer.

	  If unsure, say N.

config PATA_HPT37X
	tristate "HPT 370/370A/371/372/374/302 PATA support (Experimental)"
	depends on PCI && EXPERIMENTAL
	help
	  This option enables support for the majority of the later HPT
	  PATA controllers via the new ATA layer.

	  If unsure, say N.

config PATA_HPT3X2N
	tristate "HPT 372N/302N PATA support (Very Experimental)"
	depends on PCI && EXPERIMENTAL
	help
	  This option enables support for the N variant HPT PATA
	  controllers via the new ATA layer

	  If unsure, say N.

config PATA_HPT3X3
	tristate "HPT 343/363 PATA support (Experimental)"
	depends on PCI
	help
	  This option enables support for the HPT 343/363
	  PATA controllers via the new ATA layer

	  If unsure, say N.

config PATA_ISAPNP
	tristate "ISA Plug and Play PATA support (Experimental)"
	depends on EXPERIMENTAL && ISAPNP
	help
	  This option enables support for ISA plug & play ATA
	  controllers such as those found on old soundcards.

	  If unsure, say N.

config PATA_IT821X
	tristate "IT8211/2 PATA support"
	depends on PCI
	help
	  This option enables support for the ITE 8211 and 8212
	  PATA controllers via the new ATA layer, including RAID
	  mode.

	  If unsure, say N.

config PATA_IT8213
	tristate "IT8213 PATA support (Experimental)"
	depends on PCI && EXPERIMENTAL
	help
	  This option enables support for the ITE 821 PATA
          controllers via the new ATA layer.

	  If unsure, say N.

config PATA_JMICRON
	tristate "JMicron PATA support"
	depends on PCI
	help
	  Enable support for the JMicron IDE controller, via the new
	  ATA layer.

	  If unsure, say N.

config PATA_LEGACY
	tristate "Legacy ISA PATA support (Experimental)"
	depends on ISA && EXPERIMENTAL
	help
	  This option enables support for ISA/VLB bus legacy PATA
	  ports and allows them to be accessed via the new ATA layer.

	  If unsure, say N.

config PATA_TRIFLEX
	tristate "Compaq Triflex PATA support"
	depends on PCI
	help
	  Enable support for the Compaq 'Triflex' IDE controller as found
	  on many Compaq Pentium-Pro systems, via the new ATA layer.

	  If unsure, say N.

config PATA_MARVELL
	tristate "Marvell PATA support via legacy mode"
	depends on PCI
	help
	  This option enables limited support for the Marvell 88SE6145 ATA
	  controller.

	  If unsure, say N.

config PATA_MPC52xx
	tristate "Freescale MPC52xx SoC internal IDE"
	depends on PPC_MPC52xx
	help
	  This option enables support for integrated IDE controller
	  of the Freescale MPC52xx SoC.

	  If unsure, say N.

config PATA_MPIIX
	tristate "Intel PATA MPIIX support"
	depends on PCI
	help
	  This option enables support for MPIIX PATA support.

	  If unsure, say N.

config PATA_OLDPIIX
	tristate "Intel PATA old PIIX support"
	depends on PCI
	help
	  This option enables support for early PIIX PATA support.

	  If unsure, say N.

config PATA_NETCELL
	tristate "NETCELL Revolution RAID support"
	depends on PCI
	help
	  This option enables support for the Netcell Revolution RAID
	  PATA controller.

	  If unsure, say N.

config PATA_NS87410
	tristate "Nat Semi NS87410 PATA support (Experimental)"
	depends on PCI && EXPERIMENTAL
	help
	  This option enables support for the National Semiconductor
	  NS87410 PCI-IDE controller.

	  If unsure, say N.

config PATA_OPTI
	tristate "OPTI621/6215 PATA support (Very Experimental)"
	depends on PCI && EXPERIMENTAL
	help
	  This option enables full PIO support for the early Opti ATA
	  controllers found on some old motherboards.

	  If unsure, say N.

config PATA_OPTIDMA
	tristate "OPTI FireStar PATA support (Very Experimental)"
	depends on PCI && EXPERIMENTAL
	help
	  This option enables DMA/PIO support for the later OPTi
	  controllers found on some old motherboards and in some
	  laptops.

	  If unsure, say N.

config PATA_PCMCIA
	tristate "PCMCIA PATA support"
	depends on PCMCIA
	help
	  This option enables support for PCMCIA ATA interfaces, including
	  compact flash card adapters via the new ATA layer.

	  If unsure, say N.

config PATA_PDC_OLD
	tristate "Older Promise PATA controller support (Experimental)"
	depends on PCI && EXPERIMENTAL
	help
	  This option enables support for the Promise 20246, 20262, 20263,
	  20265 and 20267 adapters.

	  If unsure, say N.

config PATA_QDI
	tristate "QDI VLB PATA support"
	depends on ISA
	help
	  Support for QDI 6500 and 6580 PATA controllers on VESA local bus.

config PATA_RADISYS
	tristate "RADISYS 82600 PATA support (Very Experimental)"
	depends on PCI && EXPERIMENTAL
	help
	  This option enables support for the RADISYS 82600
	  PATA controllers via the new ATA layer

	  If unsure, say N.

config PATA_RZ1000
	tristate "PC Tech RZ1000 PATA support"
	depends on PCI
	help
	  This option enables basic support for the PC Tech RZ1000/1
	  PATA controllers via the new ATA layer

	  If unsure, say N.

config PATA_SC1200
	tristate "SC1200 PATA support (Very Experimental)"
	depends on PCI && EXPERIMENTAL
	help
	  This option enables support for the NatSemi/AMD SC1200 SoC
	  companion chip used with the Geode processor family.

	  If unsure, say N.

config PATA_SERVERWORKS
	tristate "SERVERWORKS OSB4/CSB5/CSB6/HT1000 PATA support"
	depends on PCI
	help
	  This option enables support for the Serverworks OSB4/CSB5/CSB6 and
	  HT1000 PATA controllers, via the new ATA layer.

	  If unsure, say N.

config PATA_PDC2027X
	tristate "Promise PATA 2027x support"
	depends on PCI
	help
	  This option enables support for Promise PATA pdc20268 to pdc20277 host adapters.

	  If unsure, say N.

config PATA_SIL680
	tristate "CMD / Silicon Image 680 PATA support"
	depends on PCI
	help
	  This option enables support for CMD / Silicon Image 680 PATA.

	  If unsure, say N.

config PATA_SIS
	tristate "SiS PATA support (Experimental)"
	depends on PCI && EXPERIMENTAL
	help
	  This option enables support for SiS PATA controllers

	  If unsure, say N.

config PATA_VIA
	tristate "VIA PATA support"
	depends on PCI
	help
	  This option enables support for the VIA PATA interfaces
	  found on the many VIA chipsets.

	  If unsure, say N.

config PATA_WINBOND
	tristate "Winbond SL82C105 PATA support"
	depends on PCI
	help
	  This option enables support for SL82C105 PATA devices found in the
	  Netwinder and some other systems

	  If unsure, say N.

config PATA_WINBOND_VLB
	tristate "Winbond W83759A VLB PATA support (Experimental)"
	depends on ISA && EXPERIMENTAL
	help
	  Support for the Winbond W83759A controller on Vesa Local Bus
	  systems.

config PATA_PLATFORM
	tristate "Generic platform device PATA support"
	depends on EMBEDDED || ARCH_RPC
	help
	  This option enables support for generic directly connected ATA
	  devices commonly found on embedded systems.

	  If unsure, say N.

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

config PATA_IXP4XX_CF
	tristate "IXP4XX Compact Flash support"
	depends on ARCH_IXP4XX
	help
	  This option enables support for a Compact Flash connected on
	  the ixp4xx expansion bus. This driver had been written for
	  Loft/Avila boards in mind but can work with others.

	  If unsure, say N.

config PATA_SCC
	tristate "Toshiba's Cell Reference Set IDE support"
	depends on PCI && PPC_CELLEB
	help
	  This option enables support for the built-in IDE controller on
	  Toshiba Cell Reference Board.

	  If unsure, say N.

endif # ATA
