#
# PCI Hotplug support
#

menu "PCI Hotplug Support"

config HOTPLUG_PCI
	tristate "Support for PCI Hotplug (EXPERIMENTAL)"
	depends on PCI && EXPERIMENTAL && 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

