Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / ipxe / src / tests / entropy_sample.c
1 /*
2  * Copyright (C) 2012 Michael Brown <mbrown@fensystems.co.uk>.
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License as
6  * published by the Free Software Foundation; either version 2 of the
7  * License, or any later version.
8  *
9  * This program is distributed in the hope that it will be useful, but
10  * WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
17  * 02110-1301, USA.
18  */
19
20 FILE_LICENCE ( GPL2_OR_LATER );
21
22 /** @file
23  *
24  * Entropy sampling
25  *
26  */
27
28 #include <stdio.h>
29 #include <ipxe/entropy.h>
30 #include <ipxe/test.h>
31
32 /** Total number of test samples */
33 #define SAMPLE_COUNT 65536
34
35 /** Number of samples per block */
36 #define SAMPLE_BLOCKSIZE 256
37
38 /**
39  * Generate entropy samples for external testing
40  *
41  */
42 static void entropy_sample_test_exec ( void ) {
43         static noise_sample_t samples[SAMPLE_BLOCKSIZE];
44         unsigned int i;
45         unsigned int j;
46         int rc;
47
48         /* Collect and print blocks of samples */
49         for ( i = 0 ; i < ( SAMPLE_COUNT / SAMPLE_BLOCKSIZE ) ; i++ ) {
50
51                 /* Collect one block of samples */
52                 rc = entropy_enable();
53                 ok ( rc == 0 );
54                 for ( j = 0 ; j < SAMPLE_BLOCKSIZE ; j++ ) {
55                         rc = get_noise ( &samples[j] );
56                         ok ( rc == 0 );
57                 }
58                 entropy_disable();
59
60                 /* Print out sample values */
61                 for ( j = 0 ; j < SAMPLE_BLOCKSIZE ; j++ ) {
62                         printf ( "SAMPLE %d %d\n", ( i * SAMPLE_BLOCKSIZE + j ),
63                                  samples[j] );
64                 }
65         }
66 }
67
68 /** Entropy sampling self-test */
69 struct self_test entropy_sample_test __self_test = {
70         .name = "entropy_sample",
71         .exec = entropy_sample_test_exec,
72 };