
menu "I2O device support"

config I2O
	tristate "I2O 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.

config I2O_EXT_ADAPTEC
	bool "Enable Adaptec extensions"
	depends on I2O
	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 I2O
	---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.

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"
	depends on I2O
	---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 I2O
	---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 I2O && 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"
	depends on I2O
	---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.

endmenu

