#
# Hardware Random Number Generator (RNG) configuration
#

config HW_RANDOM
	tristate "Hardware Random Number Generator Core support"
	default m
	---help---
	  Hardware Random Number Generator Core infrastructure.

	  To compile this driver as a module, choose M here: the
	  module will be called rng-core.  This provides a device
	  that's usually called /dev/hw_random, and which exposes one
	  of possibly several hardware random number generators.

	  These hardware random number generators do not feed directly
	  into the kernel's random number generator.  That is usually
	  handled by the "rngd" daemon.  Documentation/hw_random.txt
	  has more information.

	  If unsure, say Y.

config HW_RANDOM_TIMERIOMEM
	tristate "Timer IOMEM HW Random Number Generator support"
	depends on HW_RANDOM && HAS_IOMEM
	---help---
	  This driver provides kernel-side support for a generic Random
	  Number Generator used by reading a 'dumb' iomem address that
	  is to be read no faster than, for example, once a second;
	  the default FPGA bitstream on the TS-7800 has such functionality.

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

	  If unsure, say Y.

config HW_RANDOM_INTEL
	tristate "Intel HW Random Number Generator support"
	depends on HW_RANDOM && (X86 || IA64) && PCI
	default HW_RANDOM
	---help---
	  This driver provides kernel-side support for the Random Number
	  Generator hardware found on Intel i8xx-based motherboards.

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

	  If unsure, say Y.

config HW_RANDOM_AMD
	tristate "AMD HW Random Number Generator support"
	depends on HW_RANDOM && (X86 || PPC_MAPLE) && PCI
	default HW_RANDOM
	---help---
	  This driver provides kernel-side support for the Random Number
	  Generator hardware found on AMD 76x-based motherboards.

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

	  If unsure, say Y.

config HW_RANDOM_ATMEL
	tristate "Atmel Random Number Generator support"
	depends on HW_RANDOM && HAVE_CLK
	default (HW_RANDOM && ARCH_AT91)
	---help---
	  This driver provides kernel-side support for the Random Number
	  Generator hardware found on Atmel AT91 devices.

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

	  If unsure, say Y.

config HW_RANDOM_BCM63XX
	tristate "Broadcom BCM63xx Random Number Generator support"
	depends on HW_RANDOM && BCM63XX
	default HW_RANDOM
	---help---
	  This driver provides kernel-side support for the Random Number
	  Generator hardware found on the Broadcom BCM63xx SoCs.

	  To compile this driver as a module, choose M here: the
	  module will be called bcm63xx-rng

	  If unusure, say Y.

config HW_RANDOM_BCM2835
	tristate "Broadcom BCM2835 Random Number Generator support"
	depends on HW_RANDOM && ARCH_BCM2835
	default HW_RANDOM
	---help---
	  This driver provides kernel-side support for the Random Number
	  Generator hardware found on the Broadcom BCM2835 SoCs.

	  To compile this driver as a module, choose M here: the
	  module will be called bcm2835-rng

	  If unsure, say Y.

config HW_RANDOM_GEODE
	tristate "AMD Geode HW Random Number Generator support"
	depends on HW_RANDOM && X86_32 && PCI
	default HW_RANDOM
	---help---
	  This driver provides kernel-side support for the Random Number
	  Generator hardware found on the AMD Geode LX.

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

	  If unsure, say Y.

config HW_RANDOM_N2RNG
	tristate "Niagara2 Random Number Generator support"
	depends on HW_RANDOM && SPARC64
	default HW_RANDOM
	---help---
	  This driver provides kernel-side support for the Random Number
	  Generator hardware found on Niagara2 cpus.

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

	  If unsure, say Y.

config HW_RANDOM_VIA
	tristate "VIA HW Random Number Generator support"
	depends on HW_RANDOM && X86
	default HW_RANDOM
	---help---
	  This driver provides kernel-side support for the Random Number
	  Generator hardware found on VIA based motherboards.

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

	  If unsure, say Y.

config HW_RANDOM_IXP4XX
	tristate "Intel IXP4xx NPU HW Pseudo-Random Number Generator support"
	depends on HW_RANDOM && ARCH_IXP4XX
	default HW_RANDOM
	---help---
	  This driver provides kernel-side support for the Pseudo-Random
	  Number Generator hardware found on the Intel IXP45x/46x NPU.

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

	  If unsure, say Y.

config HW_RANDOM_OMAP
	tristate "OMAP Random Number Generator support"
	depends on HW_RANDOM && (ARCH_OMAP16XX || ARCH_OMAP2)
	default HW_RANDOM
 	---help---
 	  This driver provides kernel-side support for the Random Number
	  Generator hardware found on OMAP16xx and OMAP24xx multimedia
	  processors.

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

 	  If unsure, say Y.

config HW_RANDOM_OCTEON
	tristate "Octeon Random Number Generator support"
	depends on HW_RANDOM && CPU_CAVIUM_OCTEON
	default HW_RANDOM
	---help---
	  This driver provides kernel-side support for the Random Number
	  Generator hardware found on Octeon processors.

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

	  If unsure, say Y.

config HW_RANDOM_PASEMI
	tristate "PA Semi HW Random Number Generator support"
	depends on HW_RANDOM && PPC_PASEMI
	default HW_RANDOM
	---help---
	  This driver provides kernel-side support for the Random Number
	  Generator hardware found on PA Semi PWRficient SoCs.

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

	  If unsure, say Y.

config HW_RANDOM_VIRTIO
	tristate "VirtIO Random Number Generator support"
	depends on HW_RANDOM && VIRTIO
	---help---
	  This driver provides kernel-side support for the virtual Random Number
	  Generator hardware.

	  To compile this driver as a module, choose M here: the
	  module will be called virtio-rng.  If unsure, say N.

config HW_RANDOM_TX4939
	tristate "TX4939 Random Number Generator support"
	depends on HW_RANDOM && SOC_TX4939
	default HW_RANDOM
	---help---
	  This driver provides kernel-side support for the Random Number
	  Generator hardware found on TX4939 SoC.

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

	  If unsure, say Y.

config HW_RANDOM_MXC_RNGA
	tristate "Freescale i.MX RNGA Random Number Generator"
	depends on HW_RANDOM && ARCH_HAS_RNGA
	---help---
	  This driver provides kernel-side support for the Random Number
	  Generator hardware found on Freescale i.MX processors.

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

	  If unsure, say Y.

config HW_RANDOM_NOMADIK
	tristate "ST-Ericsson Nomadik Random Number Generator support"
	depends on HW_RANDOM && ARCH_NOMADIK
	---help---
	  This driver provides kernel-side support for the Random Number
	  Generator hardware found on ST-Ericsson SoCs (8815 and 8500).

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

	  If unsure, say Y.

config HW_RANDOM_PICOXCELL
	tristate "Picochip picoXcell true random number generator support"
	depends on HW_RANDOM && ARCH_PICOXCELL && PICOXCELL_PC3X3
	---help---
	  This driver provides kernel-side support for the Random Number
	  Generator hardware found on Picochip PC3x3 and later devices.

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

	  If unsure, say Y.

config HW_RANDOM_PPC4XX
	tristate "PowerPC 4xx generic true random number generator support"
	depends on HW_RANDOM && PPC && 4xx
	---help---
	 This driver provides the kernel-side support for the TRNG hardware
	 found in the security function of some PowerPC 4xx SoCs.

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

	 If unsure, say N.

config UML_RANDOM
	depends on UML
	tristate "Hardware random number generator"
	help
	  This option enables UML's "hardware" random number generator.  It
	  attaches itself to the host's /dev/random, supplying as much entropy
	  as the host has, rather than the small amount the UML gets from its
	  own drivers.  It registers itself as a standard hardware random number
	  generator, major 10, minor 183, and the canonical device name is
	  /dev/hwrng.
	  The way to make use of this is to install the rng-tools package
	  (check your distro, or download from
	  http://sourceforge.net/projects/gkernel/).  rngd periodically reads
	  /dev/hwrng and injects the entropy into /dev/random.

config HW_RANDOM_PSERIES
	tristate "pSeries HW Random Number Generator support"
	depends on HW_RANDOM && PPC64 && IBMVIO
	default HW_RANDOM
	---help---
	  This driver provides kernel-side support for the Random Number
	  Generator hardware found on POWER7+ machines and above

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

	  If unsure, say Y.

config HW_RANDOM_EXYNOS
	tristate "EXYNOS HW random number generator support"
	depends on HW_RANDOM && HAS_IOMEM && HAVE_CLK
	---help---
	  This driver provides kernel-side support for the Random Number
	  Generator hardware found on EXYNOS SOCs.

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

	  If unsure, say Y.

config HW_RANDOM_TPM
	tristate "TPM HW Random Number Generator support"
	depends on HW_RANDOM && TCG_TPM
	default HW_RANDOM
	---help---
	  This driver provides kernel-side support for the Random Number
	  Generator in the Trusted Platform Module

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

	  If unsure, say Y.
