# Kconfig - random generator driver configuration options

#
# Copyright (c) 2014-2015 Wind River Systems, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

menu "Random Generation Configuration"
config RANDOM_GENERATOR
	bool
	prompt "Custom random generator"
	default n
	help
	  This option signifies that the target uses a real random number
	  generator.

config TEST_RANDOM_GENERATOR
	bool
	prompt "Non-random number generator"
	depends on !RANDOM_GENERATOR
	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 platform, 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.
endmenu
