diff options
author | markm <markm@FreeBSD.org> | 2004-04-09 15:47:10 +0000 |
---|---|---|
committer | markm <markm@FreeBSD.org> | 2004-04-09 15:47:10 +0000 |
commit | 55fe453be79ed7f8b847749e04d07c6f89ef819d (patch) | |
tree | f371f8b6d5d4ad0a1bedfd885d8e2ae634e63b27 /sys/dev/random/nehemiah.c | |
parent | ca56ea20fc3b156a88a5caf374733a36948e1cbf (diff) | |
download | FreeBSD-src-55fe453be79ed7f8b847749e04d07c6f89ef819d.zip FreeBSD-src-55fe453be79ed7f8b847749e04d07c6f89ef819d.tar.gz |
Reorganise the entropy device so that high-yield entropy sources
can more easily be used INSTEAD OF the hard-working Yarrow.
The only hardware source used at this point is the one inside
the VIA C3 Nehemiah (Stepping 3 and above) CPU. More sources will
be added in due course. Contributions welcome!
Diffstat (limited to 'sys/dev/random/nehemiah.c')
-rw-r--r-- | sys/dev/random/nehemiah.c | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/sys/dev/random/nehemiah.c b/sys/dev/random/nehemiah.c new file mode 100644 index 0000000..e496828 --- /dev/null +++ b/sys/dev/random/nehemiah.c @@ -0,0 +1,66 @@ +/*- + * Copyright (c) 2004 Mark R V Murray + * All rights reserved. + * + * 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 + * in this position and unchanged. + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + */ + +#include <sys/cdefs.h> +__FBSDID("$FreeBSD$"); + +#include <sys/types.h> +#include <sys/time.h> +#include <sys/lock.h> +#include <sys/mutex.h> +#include <sys/selinfo.h> + +#include <dev/random/randomdev.h> + +static int random_nehemiah_read(void *, int); + +struct random_systat random_nehemiah = { + .ident = "Hardware, VIA Nehemiah", + .init = (random_init_func_t *)random_null_func, + .deinit = (random_deinit_func_t *)random_null_func, + .read = random_nehemiah_read, + .write = (random_write_func_t *)random_null_func, + .reseed = (random_reseed_func_t *)random_null_func, + .seeded = 1, +}; + +/* ARGSUSED */ +static int +random_nehemiah_read(void *buf, int c) +{ +#if (defined(__GNUC__) || defined(__INTEL_COMPILER)) && defined(__i386__) + int count = c; + int rate = 0; + + /* VIA C3 Nehemiah "rep; xstore" */ + __asm __volatile("rep; .byte 0x0f, 0xa7, 0xc0" + : "+D" (buf), "+c" (count), "=d" (rate) + : + : "memory"); +#endif + return (c); +} |