#
# SATA/PATA driver configuration
#

menuconfig ATA
	tristate "Serial ATA and Parallel ATA drivers"
	depends on HAS_IOMEM
	depends on BLOCK
	depends on !(M32R || M68K) || 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.

	  NOTE: ATA enables basic SCSI support; *however*,
	  'SCSI disk support', 'SCSI tape support', or
	  'SCSI CDROM support' may also be needed,
	  depending on your hardware configuration.

if ATA

config ATA_NONSTANDARD
       bool
       default n

config ATA_VERBOSE_ERROR
	bool "Verbose ATA error reporting"
	default y
	help
	  This option adds parsing of ATA command descriptions and error bits
	  in libata kernel output, making it easier to interpret.
	  This option will enlarge the kernel by approx. 6KB. Disable it only
	  if kernel size is more important than ease of debugging.

	  If unsure, say Y.

config ATA_ACPI
	bool "ATA ACPI Support"
	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_PMP
	bool "SATA Port Multiplier support"
	default y
	help
	  This option adds support for SATA Port Multipliers
	  (the SATA version of an ethernet hub, or SAS expander).

comment "Controllers with non-SFF native interface"

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_AHCI_PLATFORM
	tristate "Platform AHCI SATA support"
	help
	  This option enables support for Platform AHCI Serial ATA
	  controllers.

	  If unsure, say N.

config SATA_FSL
	tristate "Freescale 3.0Gbps SATA support"
	depends on FSL_SOC
	help
	  This option enables support for Freescale 3.0Gbps SATA controller.
	  It can be found on MPC837x and MPC8315.

	  If unsure, say N.

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

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 ATA_SFF
	bool "ATA SFF support"
	default y
	help
	  This option adds support for ATA controllers with SFF
	  compliant or similar programming interface.

	  SFF is the legacy IDE interface that has been around since
	  the dawn of time.  Almost all PATA controllers have an
	  SFF interface.  Many SATA controllers have an SFF interface
	  when configured into a legacy compatibility mode.

	  For users with exclusively modern controllers like AHCI,
	  Silicon Image 3124, or Marvell 6440, you may choose to
	  disable this unneeded SFF support.

	  If unsure, say Y.

if ATA_SFF

comment "SFF controllers with custom DMA interface"

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 PATA_MPC52xx
	tristate "Freescale MPC52xx SoC internal IDE"
	depends on PPC_MPC52xx && PPC_BESTCOMM
	select PPC_BESTCOMM_ATA
	help
	  This option enables support for integrated IDE controller
	  of the Freescale MPC52xx SoC.

	  If unsure, say N.

config PATA_OCTEON_CF
	tristate "OCTEON Boot Bus Compact Flash support"
	depends on CPU_CAVIUM_OCTEON
	help
	  This option enables a polled compact flash driver for use with
	  compact flash cards attached to the OCTEON boot bus.

	  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_SX4
	tristate "Promise SATA SX4 support (Experimental)"
	depends on PCI && EXPERIMENTAL
	help
	  This option enables support for Promise Serial ATA SX4.

	  If unsure, say N.

config ATA_BMDMA
	bool "ATA BMDMA support"
	default y
	help
	  This option adds support for SFF ATA controllers with BMDMA
	  capability.  BMDMA stands for bus-master DMA and is the
	  de facto DMA interface for SFF controllers.

	  If unsure, say Y.

if ATA_BMDMA

comment "SATA SFF controllers with BMDMA"

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_DWC
	tristate "DesignWare Cores SATA support"
	depends on 460EX
	help
	  This option enables support for the on-chip SATA controller of the
	  AppliedMicro processor 460EX.

	  If unsure, say N.

config SATA_MV
	tristate "Marvell SATA support"
	help
	  This option enables support for the Marvell Serial ATA family.
	  Currently supports 88SX[56]0[48][01] PCI(-X) chips,
	  as well as the newer [67]042 PCI-X/PCIe and SOC devices.

	  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 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_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_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_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 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.

comment "PATA SFF controllers with BMDMA"

config PATA_ALI
	tristate "ALi PATA support"
	depends on PCI
	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"
	depends on PCI
	help
	  This option enables support for ARTOP PATA controllers.

	  If unsure, say N.

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

	  If unsure, say N.

config PATA_ATP867X
	tristate "ARTOP/Acard ATP867X PATA support"
	depends on PCI
	help
	  This option enables support for ARTOP/Acard ATP867X PATA
	  controllers.

	  If unsure, say N.

config PATA_BF54X
	tristate "Blackfin 54x ATAPI support"
	depends on BF542 || BF548 || BF549
	help
	  This option enables support for the built-in ATAPI controller on
	  Blackfin 54x family chips.

	  If unsure, say N.

config PATA_CMD64X
	tristate "CMD64x PATA support"
	depends on PCI
	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"
	depends on PCI
	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_CS5536
	tristate "CS5536 PATA support"
	depends on PCI && X86 && !X86_64
	help
	  This option enables support for the AMD CS5536
	  companion chip used with the Geode LX 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 PATA_HPT366
	tristate "HPT 366/368 PATA support"
	depends on PCI
	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"
	depends on PCI
	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"
	depends on PCI
	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"
	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_HPT3X3_DMA
	bool "HPT 343/363 DMA support"
	depends on PATA_HPT3X3
	help
	  This option enables DMA support for the HPT343/363
	  controllers. Enable with care as there are still some
	  problems with DMA on this chipset.

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_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_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_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_MACIO
	tristate "Apple PowerMac/PowerBook internal 'MacIO' IDE"
	depends on PPC_PMAC
	help
	  Most IDE capable PowerMacs have IDE busses driven by a variant
          of this controller which is part of the Apple chipset used on
          most PowerMac models. Some models have multiple busses using
          different chipsets, though generally, MacIO is one of them.

config PATA_MARVELL
	tristate "Marvell PATA support via legacy mode"
	depends on PCI
	help
	  This option enables limited support for the Marvell 88SE61xx ATA
	  controllers. If you wish to use only the SATA ports then select
	  the AHCI driver alone. If you wish to the use the PATA port or
	  both SATA and PATA include this driver.

	  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_NINJA32
	tristate "Ninja32/Delkin Cardbus ATA support"
	depends on PCI
	help
	  This option enables support for the Ninja32, Delkin and
	  possibly other brands of Cardbus ATA adapter

	  If unsure, say N.

config PATA_NS87415
	tristate "Nat Semi NS87415 PATA support"
	depends on PCI
	help
	  This option enables support for the National Semiconductor
	  NS87415 PCI-IDE controller.

	  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_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_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_PDC_OLD
	tristate "Older Promise PATA controller support"
	depends on PCI
	help
	  This option enables support for the Promise 20246, 20262, 20263,
	  20265 and 20267 adapters.

	  If unsure, say N.

config PATA_RADISYS
	tristate "RADISYS 82600 PATA support (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_RDC
	tristate "RDC PATA support"
	depends on PCI
	help
	  This option enables basic support for the later RDC PATA controllers
	  controllers via the new ATA layer. For the RDC 1010, you need to
	  enable the IT821X driver instead.

	  If unsure, say N.

config PATA_SC1200
	tristate "SC1200 PATA support"
	depends on PCI
	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_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.

config PATA_SCH
	tristate "Intel SCH PATA support"
	depends on PCI
	help
	  This option enables support for Intel SCH PATA on the Intel
	  SCH (US15W, US15L, UL11L) series host controllers.

	  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_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"
	depends on PCI
	help
	  This option enables support for SiS PATA controllers

	  If unsure, say N.

config PATA_TOSHIBA
	tristate "Toshiba Piccolo support (Experimental)"
	depends on PCI && EXPERIMENTAL
	help
	  Support for the Toshiba Piccolo controllers. Currently only the
	  primary channel is supported by this driver.

	  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_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.

endif # ATA_BMDMA

comment "PIO-only SFF controllers"

config PATA_AT32
	tristate "Atmel AVR32 PATA support (Experimental)"
	depends on AVR32 && PLATFORM_AT32AP && EXPERIMENTAL
	help
	  This option enables support for the IDE devices on the
	  Atmel AT32AP platform.

	  If unsure, say N.

config PATA_AT91
	tristate "PATA support for AT91SAM9260"
	depends on ARM && ARCH_AT91
	help
	  This option enables support for IDE devices on the Atmel AT91SAM9260 SoC.

	  If unsure, say N.

config PATA_CMD640_PCI
	tristate "CMD640 PCI PATA support (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_ISAPNP
	tristate "ISA Plug and Play PATA support"
	depends on 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_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_MPIIX
	tristate "Intel PATA MPIIX support"
	depends on PCI
	help
	  This option enables support for MPIIX PATA support.

	  If unsure, say N.

config PATA_NS87410
	tristate "Nat Semi NS87410 PATA support"
	depends on PCI
	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_PALMLD
	tristate "Palm LifeDrive PATA support"
	depends on MACH_PALMLD
	help
	  This option enables support for Palm LifeDrive's internal ATA
	  port via the new ATA layer.

	  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 HAVE_PATA_PLATFORM
	bool
	help
	  This is an internal configuration node for any machine that
	  uses pata-platform driver to enable the relevant driver in the
	  configuration structure without having to submit endless patches
	  to update the PATA_PLATFORM entry.

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

	  If unsure, say N.

config PATA_OF_PLATFORM
	tristate "OpenFirmware platform device PATA support"
	depends on PATA_PLATFORM && PPC_OF
	help
	  This option enables support for generic directly connected ATA
	  devices commonly found on embedded systems with OpenFirmware
	  bindings.

	  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_RB532
	tristate "RouterBoard 532 PATA CompactFlash support"
	depends on MIKROTIK_RB532
	help
	  This option enables support for the RouterBoard 532
	  PATA CompactFlash controller.

	  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_SAMSUNG_CF
	tristate "Samsung SoC PATA support"
	depends on SAMSUNG_DEV_IDE
	help
	  This option enables basic support for Samsung's S3C/S5P board
	  PATA controllers via the new ATA layer

	  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.

comment "Generic fallback / legacy drivers"

config PATA_ACPI
	tristate "ACPI firmware driver for PATA"
	depends on ATA_ACPI && ATA_BMDMA
	help
	  This option enables an ACPI method driver which drives
	  motherboard PATA controller interfaces through the ACPI
	  firmware in the BIOS. This driver can sometimes handle
	  otherwise unsupported hardware.

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

	  If unsure, say N.

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

	  If unsure, say N.

endif # ATA_SFF
endif # ATA
