menuconfig UIO
	tristate "Userspace I/O drivers"
	depends on MMU
	help
	  Enable this to allow the userspace driver core code to be
	  built.  This code allows userspace programs easy access to
	  kernel interrupts and memory locations, allowing some drivers
	  to be written in userspace.  Note that a small kernel driver
	  is also required for interrupt handling to work properly.

	  If you don't know what to do here, say N.

if UIO

config UIO_CIF
	tristate "generic Hilscher CIF Card driver"
	depends on PCI
	help
	  Driver for Hilscher CIF DeviceNet and Profibus cards.  This
  	  driver requires a userspace component called cif that handles
	  all of the heavy lifting and can be found at:
	        <http://www.osadl.org/projects/downloads/UIO/user/>

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

config UIO_PDRV_GENIRQ
	tristate "Userspace I/O platform driver with generic IRQ handling"
	help
	  Platform driver for Userspace I/O devices, including generic
	  interrupt handling code. Shared interrupts are not supported.

	  This kernel driver requires that the matching userspace driver
	  handles interrupts in a special way. Userspace is responsible
	  for acknowledging the hardware device if needed, and re-enabling
	  interrupts in the interrupt controller using the write() syscall.

	  If you don't know what to do here, say N.

config UIO_DMEM_GENIRQ
	tristate "Userspace platform driver with generic irq and dynamic memory"
	depends on HAS_DMA
	help
	  Platform driver for Userspace I/O devices, including generic
	  interrupt handling code. Shared interrupts are not supported.

	  Memory regions can be specified with the same platform device
	  resources as the UIO_PDRV drivers, but dynamic regions can also
	  be specified.
	  The number and size of these regions is static,
	  but the memory allocation is not performed until
	  the associated device file is opened. The
	  memory is freed once the uio device is closed.

	  If you don't know what to do here, say N.

config UIO_AEC
	tristate "AEC video timestamp device"
	depends on PCI
	help

	  UIO driver for the Adrienne Electronics Corporation PCI time
	  code device.

	  This device differs from other UIO devices since it uses I/O
	  ports instead of memory mapped I/O. In order to make it
	  possible for UIO to work with this device a utility, uioport,
	  can be used to read and write the ports:

	    git clone git://ifup.org/philips/uioport.git

	  If you compile this as a module, it will be called uio_aec.

config UIO_SERCOS3
	tristate "Automata Sercos III PCI card driver"
	depends on PCI
	help
	  Userspace I/O interface for the Sercos III PCI card from
	  Automata GmbH. The userspace part of this driver will be
	  available for download from the Automata GmbH web site.

	  Automata GmbH:        http://www.automataweb.com
	  Sercos III interface: http://www.sercos.com

	  If you compile this as a module, it will be called uio_sercos3.

config UIO_PCI_GENERIC
	tristate "Generic driver for PCI 2.3 and PCI Express cards"
	depends on PCI
	help
	  Generic driver that you can bind, dynamically, to any
	  PCI 2.3 compliant and PCI Express card. It is useful,
	  primarily, for virtualization scenarios.
	  If you compile this as a module, it will be called uio_pci_generic.

config UIO_NETX
	tristate "Hilscher NetX Card driver"
	depends on PCI
	help
	  Driver for Hilscher NetX based fieldbus cards (cifX, comX).
	  This driver requires a userspace component that comes with the card
	  or is available from Hilscher (http://www.hilscher.com).

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

config UIO_FSL_ELBC_GPCM
	tristate "eLBC/GPCM driver"
	depends on FSL_LBC
	help
	  Generic driver for accessing a peripheral connected to an eLBC port
	  that is running in GPCM mode. GPCM is an interface for simple lower
	  performance memories and memory-mapped devices. For devices using
	  FCM or UPM eLBC modes, other device-specific drivers are available.

config UIO_FSL_ELBC_GPCM_NETX5152
	bool "eLBC/GPCM netX 51/52 support"
	depends on UIO_FSL_ELBC_GPCM
	help
	  This will add support for netX 51/52 devices connected via eLBC/GPCM.
	  In particular, it implements interrupt handling. This can be used
	  together with the userspace netX stack from Hilscher.

	  Information about this hardware can be found at:
	  http://www.hilscher.com/netx

config UIO_PRUSS
	tristate "Texas Instruments PRUSS driver"
	select GENERIC_ALLOCATOR
	depends on HAS_IOMEM && HAS_DMA
	help
	  PRUSS driver for OMAPL138/DA850/AM18XX devices
	  PRUSS driver requires user space components, examples and user space
	  driver is available from below SVN repo - you may use anonymous login

	  https://gforge.ti.com/gf/project/pru_sw/

	  More info on API is available at below wiki

	  http://processors.wiki.ti.com/index.php/PRU_Linux_Application_Loader

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

config UIO_MF624
	tristate "Humusoft MF624 DAQ PCI card driver"
	depends on PCI
	help
	  Userspace I/O interface for the Humusoft MF624 PCI card.
	  A sample userspace application using this driver is available
	  (among other MF624 related information and software components)
	  for download in a git repository:

	    git clone git://rtime.felk.cvut.cz/mf6xx.git

	  If you compile this as a module, it will be called uio_mf624.

config UIO_HV_GENERIC
	tristate "Generic driver for Hyper-V VMBus"
	depends on HYPERV
	help
	  Generic driver that you can bind, dynamically, to any
	  Hyper-V VMBus device. It is useful to provide direct access
	  to network and storage devices from userspace.

	  If you compile this as a module, it will be called uio_hv_generic.
endif
