#
# 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/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.

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_IMX_RNG
        tristate "Freescale RNG B/C Random Number Generator"
        depends on HW_RANDOM && ARCH_MXC && HAVE_IMX_RNG
        ---help---
          This driver provides kernel-side support for the Random Number
          Generator (RNGBB and RNGC) hardware found on Freescale i.MX processors.

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

          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_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.

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.
