#
# RapidIO configuration
#

config HAVE_RAPIDIO
	bool

menuconfig RAPIDIO
	tristate "RapidIO support"
	depends on HAVE_RAPIDIO || PCI
	help
	  If you say Y here, the kernel will include drivers and
	  infrastructure code to support RapidIO interconnect devices.

source "drivers/rapidio/devices/Kconfig"

config RAPIDIO_DISC_TIMEOUT
	int "Discovery timeout duration (seconds)"
	depends on RAPIDIO
	default "30"
	---help---
	  Amount of time a discovery node waits for a host to complete
	  enumeration before giving up.

config RAPIDIO_ENABLE_RX_TX_PORTS
	bool "Enable RapidIO Input/Output Ports"
	depends on RAPIDIO
	---help---
	  The RapidIO specification describes a Output port transmit
	  enable and a Input port receive enable. The recommended state
	  for Input ports and Output ports should be disabled. When
	  this switch is set the RapidIO subsystem will enable all
	  ports for Input/Output direction to allow other traffic
	  than Maintenance transfers.

config RAPIDIO_DMA_ENGINE
	bool "DMA Engine support for RapidIO"
	depends on RAPIDIO
	select DMADEVICES
	select DMA_ENGINE
	help
	  Say Y here if you want to use DMA Engine frameork for RapidIO data
	  transfers to/from target RIO devices. RapidIO uses NREAD and
	  NWRITE (NWRITE_R, SWRITE) requests to transfer data between local
	  memory and memory on remote target device. You need a DMA controller
	  capable to perform data transfers to/from RapidIO.

	  If you are unsure about this, say Y here.

config RAPIDIO_DEBUG
	bool "RapidIO subsystem debug messages"
	depends on RAPIDIO
	help
	  Say Y here if you want the RapidIO subsystem to produce a bunch of
	  debug messages to the system log. Select this if you are having a
	  problem with the RapidIO subsystem and want to see more of what is
	  going on.

	  If you are unsure about this, say N here.

choice
	prompt "Enumeration method"
	depends on RAPIDIO
	default RAPIDIO_ENUM_BASIC
	help
	  There are different enumeration and discovery mechanisms offered
	  for RapidIO subsystem. You may select single built-in method or
	  or any number of methods to be built as modules.
	  Selecting a built-in method disables use of loadable methods.

	  If unsure, select Basic built-in.

config RAPIDIO_ENUM_BASIC
	tristate "Basic"
	help
	  This option includes basic RapidIO fabric enumeration and discovery
	  mechanism similar to one described in RapidIO specification Annex 1.

endchoice

config RAPIDIO_CHMAN
	tristate "RapidIO Channelized Messaging driver"
	depends on RAPIDIO
	help
	  This option includes RapidIO channelized messaging driver which
	  provides socket-like interface to allow sharing of single RapidIO
	  messaging mailbox between multiple user-space applications.
	  See "Documentation/rapidio/rio_cm.txt" for driver description.

config RAPIDIO_MPORT_CDEV
	tristate "RapidIO /dev mport device driver"
	depends on RAPIDIO
	help
	  This option includes generic RapidIO mport device driver which
	  allows to user space applications to perform RapidIO-specific
	  operations through selected RapidIO mport.

menu "RapidIO Switch drivers"
	depends on RAPIDIO

source "drivers/rapidio/switches/Kconfig"

endmenu
