#
# PCI Hotplug support
#

menu "PCI Hotplug Support"

config HOTPLUG_PCI
	tristate "Support for PCI Hotplug (EXPERIMENTAL)"
	depends on PCI && EXPERIMENTAL
	select HOTPLUG
	---help---
	  Say Y here if you have a motherboard with a PCI Hotplug controller.
	  This allows you to add and remove PCI cards while the machine is
	  powered up and running.

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

	  When in doubt, say N.

config HOTPLUG_PCI_FAKE
	tristate "Fake PCI Hotplug driver"
	depends on HOTPLUG_PCI
	help
	  Say Y here if you want to use the fake PCI hotplug driver. It can
	  be used to simulate PCI hotplug events if even if your system is
	  not PCI hotplug capable.

	  This driver will "emulate" removing PCI devices from the system.
	  If the "power" file is written to with "0" then the specified PCI
	  device will be completely removed from the kernel.

	  WARNING, this does NOT turn off the power to the PCI device.
	  This is a "logical" removal, not a physical or electrical
	  removal.

	  Use this module at your own risk.  You have been warned!

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

	  When in doubt, say N.

config HOTPLUG_PCI_COMPAQ
	tristate "Compaq PCI Hotplug driver"
	depends on HOTPLUG_PCI && X86 && PCI_BIOS
	help
	  Say Y here if you have a motherboard with a Compaq PCI Hotplug
	  controller.

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

	  When in doubt, say N.

config HOTPLUG_PCI_COMPAQ_NVRAM
	bool "Save configuration into NVRAM on Compaq servers"
	depends on HOTPLUG_PCI_COMPAQ
	help
	  Say Y here if you have a Compaq server that has a PCI Hotplug
	  controller.  This will allow the PCI Hotplug driver to store the PCI
	  system configuration options in NVRAM.

	  When in doubt, say N.

config HOTPLUG_PCI_IBM
	tristate "IBM PCI Hotplug driver"
	depends on HOTPLUG_PCI && X86_IO_APIC && X86 && PCI_BIOS
	help
	  Say Y here if you have a motherboard with a IBM PCI Hotplug
	  controller.

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

	  When in doubt, say N.

config HOTPLUG_PCI_ACPI
	tristate "ACPI PCI Hotplug driver"
	depends on ACPI_DOCK && HOTPLUG_PCI
	help
	  Say Y here if you have a system that supports PCI Hotplug using
	  ACPI.

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

	  When in doubt, say N.

config HOTPLUG_PCI_ACPI_IBM
	tristate "ACPI PCI Hotplug driver IBM extensions"
	depends on HOTPLUG_PCI_ACPI
	help
	  Say Y here if you have an IBM system that supports PCI Hotplug using
	  ACPI.

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

	  When in doubt, say N.

config HOTPLUG_PCI_CPCI
	bool "CompactPCI Hotplug driver"
	depends on HOTPLUG_PCI
	help
	  Say Y here if you have a CompactPCI system card with CompactPCI
	  hotswap support per the PICMG 2.1 specification.

	  When in doubt, say N.

config HOTPLUG_PCI_CPCI_ZT5550
	tristate "Ziatech ZT5550 CompactPCI Hotplug driver"
	depends on HOTPLUG_PCI && HOTPLUG_PCI_CPCI && X86
	help
	  Say Y here if you have an Performance Technologies (formerly Intel,
          formerly just Ziatech) Ziatech ZT5550 CompactPCI system card.

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

	  When in doubt, say N.

config HOTPLUG_PCI_CPCI_GENERIC
	tristate "Generic port I/O CompactPCI Hotplug driver"
	depends on HOTPLUG_PCI && HOTPLUG_PCI_CPCI && X86
	help
	  Say Y here if you have a CompactPCI system card that exposes the #ENUM
	  hotswap signal as a bit in a system register that can be read through
	  standard port I/O.

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

	  When in doubt, say N.

config HOTPLUG_PCI_SHPC
	tristate "SHPC PCI Hotplug driver"
	depends on HOTPLUG_PCI
	help
	  Say Y here if you have a motherboard with a SHPC PCI Hotplug
	  controller.

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

	  When in doubt, say N.

config HOTPLUG_PCI_SHPC_POLL_EVENT_MODE
	bool "Use polling mechanism for hot-plug events (for testing purpose)"
	depends on HOTPLUG_PCI_SHPC
	help
	  Say Y here if you want to use the polling mechanism for hot-plug 
	  events for early platform testing.

	  When in doubt, say N.

config HOTPLUG_PCI_SHPC_PHPRM_LEGACY
	bool "For AMD SHPC only: Use $HRT for resource/configuration"
	depends on HOTPLUG_PCI_SHPC && !ACPI 
	help
	  Say Y here for AMD SHPC. You have to select this option if you are 
	  using this driver on platform with AMD SHPC.

config HOTPLUG_PCI_RPA
	tristate "RPA PCI Hotplug driver"
	depends on HOTPLUG_PCI && PPC_PSERIES && PPC64 && !HOTPLUG_PCI_FAKE
	help
	  Say Y here if you have a a RPA system that supports PCI Hotplug.

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

	  When in doubt, say N.

config HOTPLUG_PCI_RPA_DLPAR
	tristate "RPA Dynamic Logical Partitioning for I/O slots"
	depends on HOTPLUG_PCI_RPA
	help
	  Say Y here if your system supports Dynamic Logical Partitioning
	  for I/O slots.

	  To compile this driver as a module, choose M here: the
	  module will be called rpadlpar_io.
 
 	  When in doubt, say N.

config HOTPLUG_PCI_SGI
	tristate "SGI PCI Hotplug Support"
	depends on HOTPLUG_PCI && (IA64_SGI_SN2 || IA64_GENERIC)
	help
	  Say Y here if you want to use the SGI Altix Hotplug
	  Driver for PCI devices.

	  When in doubt, say N.

endmenu

