From 27bcb431cb813271645924e55e86f0bdc11dc919 Mon Sep 17 00:00:00 2001 From: Dmitriy Korovkin Date: Wed, 27 May 2015 17:14:51 -0400 Subject: [PATCH] Random number generator driver unification Remove ARM specific driver that duplicates the platform independent one. Rename x86 specific driver to make it unique. Added configuration options for random and non-random number generators. Change-Id: Ie1b277d2927cdfe877650ae09134db7c86becb76 Signed-off-by: Dmitriy Korovkin --- arch/arm/bsp/Makefile | 2 +- arch/arm/bsp/rand32.c | 78 ------------------- arch/x86/Kconfig | 8 -- arch/x86/bsp/Makefile | 2 +- arch/x86/bsp/{rand32.c => rand32-timestamp.c} | 3 - drivers/Makefile | 1 + drivers/random/Kconfig | 39 ++++++++-- drivers/random/Makefile | 2 +- drivers/random/rand32-timer.c | 2 - 9 files changed, 37 insertions(+), 100 deletions(-) delete mode 100644 arch/arm/bsp/rand32.c rename arch/x86/bsp/{rand32.c => rand32-timestamp.c} (96%) diff --git a/arch/arm/bsp/Makefile b/arch/arm/bsp/Makefile index 39b3f749b88..fe55957d332 100644 --- a/arch/arm/bsp/Makefile +++ b/arch/arm/bsp/Makefile @@ -10,4 +10,4 @@ EXTRA_CFLAGS +=-I$(srctree)/arch/arm/ti_lm3s6965 endif obj-y = CortexM/ -obj-y += sysFatalErrorHandler.o rand32.o +obj-y += sysFatalErrorHandler.o diff --git a/arch/arm/bsp/rand32.c b/arch/arm/bsp/rand32.c deleted file mode 100644 index ee2ca906bff..00000000000 --- a/arch/arm/bsp/rand32.c +++ /dev/null @@ -1,78 +0,0 @@ -/* rand32.c - random number generator */ - -/* - * Copyright (c) 2013-2015 Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors - * may be used to endorse or promote products derived from this software without - * specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -/* -DESCRIPTION -This module provides a non-random implementation of _Rand32Get(), which is not -meant to be used in a final product as a truly random number generator. It -was provided to allow testing of kernel stack canaries on a BSP that does not -(yet) provide a random number generator. -*/ - -#include -#include - -#if defined(CONFIG_TEST_RANDOM_GENERATOR) -#if defined(__GNUC__) - -/******************************************************************************* - * - * _Rand32Init - initialize the random number generator - * - * The non-random number generator does not require any initialization. - * - * RETURNS: N/A - */ - - -void _Rand32Init(void) -{ -} - -/******************************************************************************* - * - * _Rand32Get - get a 32 bit random number - * - * The non-random number generator returns values that are based off the - * target's clock counter, which means that successive calls will normally - * display ever-increasing values. - * - * RETURNS: a 32-bit number - */ - -uint32_t _Rand32Get(void) -{ - return timer_read(); -} - -#endif /* __GNUC__ */ -#endif /* CONFIG_TEST_RANDOM_GENERATOR */ diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index 694a5e52410..7430d313152 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -151,14 +151,6 @@ config PCI_DEBUG help This options enables PCI debigging functions -#FIXME This symbols is not being used. -config CUSTOM_RANDOM_GENERATOR - bool "Custom random generator" - default n - help - This option signifies that the target uses custom random number - generator. - if BSP_GENERIC_PC source "arch/x86/generic_pc/Kconfig" endif diff --git a/arch/x86/bsp/Makefile b/arch/x86/bsp/Makefile index f38437c24e2..f789a38ae4e 100644 --- a/arch/x86/bsp/Makefile +++ b/arch/x86/bsp/Makefile @@ -11,4 +11,4 @@ obj-$(CONFIG_LOAPIC) += systemApic.o obj-$(CONFIG_CLFLUSH_INSTRUCTION_SUPPORTED) += cache.o obj-$(CONFIG_PIC) += systemPic.o obj-$(CONFIG_PIC) += i8259Boi.o -obj-$(CONFIG_TEST_RANDOM_GENERATOR) += rand32.o +obj-$(CONFIG_X86_TSC_RANDOM_GENERATOR) += rand32-timestamp.o diff --git a/arch/x86/bsp/rand32.c b/arch/x86/bsp/rand32-timestamp.c similarity index 96% rename from arch/x86/bsp/rand32.c rename to arch/x86/bsp/rand32-timestamp.c index 1b9ee1cd99c..abb08b3a304 100644 --- a/arch/x86/bsp/rand32.c +++ b/arch/x86/bsp/rand32-timestamp.c @@ -42,7 +42,6 @@ was provided to allow testing of kernel stack canaries on a BSP that does not #include #include -#if defined(CONFIG_TEST_RANDOM_GENERATOR) /******************************************************************************* * * _Rand32Init - initialize the random number generator @@ -71,5 +70,3 @@ uint32_t _Rand32Get(void) { return _do_read_cpu_timestamp32(); } - -#endif /* CONFIG_TEST_RANDOM_GENERATOR */ diff --git a/drivers/Makefile b/drivers/Makefile index 119cb9addd6..c4c3ae47b57 100644 --- a/drivers/Makefile +++ b/drivers/Makefile @@ -1,4 +1,5 @@ obj-y = console/ +obj-y += random/ obj-y += serial/ obj-y += timer/ obj-y += interrupt_controller/ diff --git a/drivers/random/Kconfig b/drivers/random/Kconfig index 297648857f8..461adb36e34 100644 --- a/drivers/random/Kconfig +++ b/drivers/random/Kconfig @@ -31,15 +31,42 @@ # menu "Random Generation Configuration" -config TEST_RANDOM_GENERATOR +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 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. - 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_32 + 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 diff --git a/drivers/random/Makefile b/drivers/random/Makefile index 45886956f85..66d07ce0be4 100644 --- a/drivers/random/Makefile +++ b/drivers/random/Makefile @@ -1,4 +1,4 @@ EXTRA_CFLAGS +=-I$(srctree)/arch/$(ARCH) EXTRA_CFLAGS +=-I$(srctree)/arch/$(ARCH)/$(strip $(CONFIG_BSP_DIR)) -obj-y = rand32-timer.o +obj-$(CONFIG_TIMER_RANDOM_GENERATOR) = rand32-timer.o diff --git a/drivers/random/rand32-timer.c b/drivers/random/rand32-timer.c index ee2ca906bff..d9d167a5e57 100644 --- a/drivers/random/rand32-timer.c +++ b/drivers/random/rand32-timer.c @@ -41,7 +41,6 @@ was provided to allow testing of kernel stack canaries on a BSP that does not #include #include -#if defined(CONFIG_TEST_RANDOM_GENERATOR) #if defined(__GNUC__) /******************************************************************************* @@ -75,4 +74,3 @@ uint32_t _Rand32Get(void) } #endif /* __GNUC__ */ -#endif /* CONFIG_TEST_RANDOM_GENERATOR */