menuconfig I2O
	tristate "I2O device support"
	depends on PCI
	---help---
	  The Intelligent Input/Output (I2O) architecture allows hardware
	  drivers to be split into two parts: an operating system specific
	  module called the OSM and an hardware specific module called the
	  HDM. The OSM can talk to a whole range of HDM's, and ideally the
	  HDM's are not OS dependent. This allows for the same HDM driver to
	  be used under different operating systems if the relevant OSM is in
	  place. In order for this to work, you need to have an I2O interface
	  adapter card in your computer. This card contains a special I/O
	  processor (IOP), thus allowing high speeds since the CPU does not
	  have to deal with I/O.

	  If you say Y here, you will get a choice of interface adapter
	  drivers and OSM's with the following questions.

	  To compile this support as a module, choose M here: the
	  modules will be called i2o_core.

	  If unsure, say N.

if I2O

config I2O_LCT_NOTIFY_ON_CHANGES
	bool "Enable LCT notification"
	default y
	---help---
	  Only say N here if you have a I2O controller from SUN. The SUN
	  firmware doesn't support LCT notification on changes. If this option
	  is enabled on such a controller the driver will hang up in a endless
	  loop. On all other controllers say Y.

	  If unsure, say Y.

config I2O_EXT_ADAPTEC
	bool "Enable Adaptec extensions"
	default y
	---help---
	  Say Y for support of raidutils for Adaptec I2O controllers. You also
	  have to say Y to "I2O Configuration support", "I2O SCSI OSM" below
	  and to "SCSI generic support" under "SCSI device configuration".

config I2O_EXT_ADAPTEC_DMA64
	bool "Enable 64-bit DMA"
	depends on I2O_EXT_ADAPTEC && ( 64BIT || HIGHMEM64G )
	default y
	---help---
	  Say Y for support of 64-bit DMA transfer mode on Adaptec I2O
	  controllers.
	  Note: You need at least firmware version 3709.

config I2O_CONFIG
	tristate "I2O Configuration support"
	depends on VIRT_TO_BUS
	---help---
	  Say Y for support of the configuration interface for the I2O adapters.
	  If you have a RAID controller from Adaptec and you want to use the
	  raidutils to manage your RAID array, you have to say Y here.

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

	  Note: If you want to use the new API you have to download the
	  i2o_config patch from http://i2o.shadowconnect.com/

config I2O_CONFIG_OLD_IOCTL
	bool "Enable ioctls (OBSOLETE)"
	depends on I2O_CONFIG
	default y
	---help---
	  Enables old ioctls.

config I2O_BUS
	tristate "I2O Bus Adapter OSM"
	---help---
	  Include support for the I2O Bus Adapter OSM. The Bus Adapter OSM
	  provides access to the busses on the I2O controller. The main purpose
	  is to rescan the bus to find new devices.

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

config I2O_BLOCK
	tristate "I2O Block OSM"
	depends on BLOCK
	---help---
	  Include support for the I2O Block OSM. The Block OSM presents disk
	  and other structured block devices to the operating system. If you
	  are using an RAID controller, you could access the array only by
	  the Block OSM driver. But it is possible to access the single disks
	  by the SCSI OSM driver, for example to monitor the disks.

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

config I2O_SCSI
	tristate "I2O SCSI OSM"
	depends on SCSI
	---help---
	  Allows direct SCSI access to SCSI devices on a SCSI or FibreChannel
	  I2O controller. You can use both the SCSI and Block OSM together if
	  you wish. To access a RAID array, you must use the Block OSM driver.
	  But you could use the SCSI OSM driver to monitor the single disks.

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

config I2O_PROC
	tristate "I2O /proc support"
	---help---
	  If you say Y here and to "/proc file system support", you will be
	  able to read I2O related information from the virtual directory
	  /proc/i2o.

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

endif # I2O
