# Kconfig - random generator driver configuration options

#
# Copyright (c) 2014-2015 Wind River Systems, Inc.
#
# SPDX-License-Identifier: Apache-2.0
#

menuconfig RANDOM_GENERATOR
	bool
	prompt "Random Drivers"
	default n
	help
	  Include RANDOM drivers in system config.

if RANDOM_GENERATOR

source "drivers/random/Kconfig.mcux"

config RANDOM_HAS_DRIVER
	bool
	default n
	help
	  This is an option to be enabled by individual random driver
	  to signal that there is a true random driver.

config RANDOM_NAME
	string "Random Device Name"
	depends on RANDOM_GENERATOR
	default "RANDOM_0"
	help
	  Specify the device name to be used for the RANDOM driver.

config SYS_LOG_RANDOM_LEVEL
	int "Random Log level"
	depends on SYS_LOG && RANDOM_GENERATOR
	default 0
	range 0 4
	help
	  Sets log level for random driver.
	  Levels are:
	  - 0 OFF: do not write
	  - 1 ERROR: only write SYS_LOG_ERR
	  - 2 WARNING: write SYS_LOG_WRN in addition to previous level
	  - 3 INFO: write SYS_LOG_INF in addition to previous levels
	  - 4 DEBUG: write SYS_LOG_DBG in addition to previous levels

config TEST_RANDOM_GENERATOR
	bool
	prompt "Non-random number generator"
	depends on RANDOM_GENERATOR && ! RANDOM_HAS_DRIVER
	default n
	help
	  This option signifies that the kernel's random number APIs are
	  permitted to return values that are not truly random.
	  This capability is provided for testing purposes, when a truly random
	  number generator is not available. The non-random number generator
	  should not be used in a production environment.

config X86_TSC_RANDOM_GENERATOR
	bool
	prompt "x86 timestamp counter based number generator"
	depends on TEST_RANDOM_GENERATOR && X86
	default y
	help
	  This options enables number generator based on timestamp counter
	  of x86 boards, obtained with rdtsc instruction.

config TIMER_RANDOM_GENERATOR
	bool
	prompt "System timer clock based number generator"
	depends on TEST_RANDOM_GENERATOR && !X86_TSC_RANDOM_GENERATOR
	default y
	help
	  This options enables number generator based on system timer
	  clock. This number generator is not random and used for
	  testing only.

endif
