#
# Hardware Random Number Generator (RNG) configuration
#

menuconfig 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/hwrng, 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.

if HW_RANDOM

config HW_RANDOM_TIMERIOMEM
	tristate "Timer IOMEM HW Random Number Generator support"
	depends on 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 (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 (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 ARCH_AT91 && HAVE_CLK && OF
	default HW_RANDOM
	---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 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 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_IPROC_RNG200
	tristate "Broadcom iProc RNG200 support"
	depends on ARCH_BCM_IPROC
	default HW_RANDOM
	---help---
	  This driver provides kernel-side support for the RNG200
	  hardware found on the Broadcom iProc SoCs.

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

	  If unsure, say Y.

config HW_RANDOM_GEODE
	tristate "AMD Geode HW Random Number Generator support"
	depends on 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 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 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 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 ARCH_OMAP16XX || ARCH_OMAP2PLUS
	default HW_RANDOM
 	---help---
 	  This driver provides kernel-side support for the Random Number
	  Generator hardware found on OMAP16xx, OMAP2/3/4/5 and AM33xx/AM43xx
	  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_OMAP3_ROM
	tristate "OMAP3 ROM Random Number Generator support"
	depends on ARCH_OMAP3
	default HW_RANDOM
	---help---
	  This driver provides kernel-side support for the Random Number
	  Generator hardware found on OMAP34xx processors.

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

	  If unsure, say Y.

config HW_RANDOM_OCTEON
	tristate "Octeon Random Number Generator support"
	depends on CAVIUM_OCTEON_SOC
	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 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 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 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 ARCH_HAS_RNGA
	default HW_RANDOM
	---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 ARCH_NOMADIK
	default HW_RANDOM
	---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_PPC4XX
	tristate "PowerPC 4xx generic true random number generator support"
	depends on PPC && 4xx
	default HW_RANDOM
	---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 HW_RANDOM_PSERIES
	tristate "pSeries HW Random Number Generator support"
	depends on 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_POWERNV
	tristate "PowerNV Random Number Generator support"
	depends on PPC_POWERNV
	default HW_RANDOM
	---help---
	  This is the driver for Random Number Generator hardware found
	  in POWER7+ and above machines for PowerNV platform.

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

	  If unsure, say Y.

config HW_RANDOM_EXYNOS
	tristate "EXYNOS HW random number generator support"
	depends on ARCH_EXYNOS
	default HW_RANDOM
	---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 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.

config HW_RANDOM_MSM
	tristate "Qualcomm SoCs Random Number Generator support"
	depends on HW_RANDOM && ARCH_QCOM
	default HW_RANDOM
	---help---
	  This driver provides kernel-side support for the Random Number
	  Generator hardware found on Qualcomm SoCs.

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

	  If unsure, say Y.

config HW_RANDOM_ST
	tristate "ST Microelectronics HW Random Number Generator support"
	depends on HW_RANDOM && ARCH_STI
	---help---
	  This driver provides kernel-side support for the Random Number
	  Generator hardware found on STi series of SoCs.

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

config HW_RANDOM_XGENE
	tristate "APM X-Gene True Random Number Generator (TRNG) support"
	depends on HW_RANDOM && ARCH_XGENE
	default HW_RANDOM
	---help---
	  This driver provides kernel-side support for the Random Number
	  Generator hardware found on APM X-Gene SoC.

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

	  If unsure, say Y.

config HW_RANDOM_STM32
	tristate "STMicroelectronics STM32 random number generator"
	depends on HW_RANDOM && (ARCH_STM32 || COMPILE_TEST)
	help
	  This driver provides kernel-side support for the Random Number
	  Generator hardware found on STM32 microcontrollers.

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

	  If unsure, say N.

endif # HW_RANDOM

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.
