162064Smarkm/*-
2255362Smarkm * Copyright (c) 2000-2013 Mark R. V. Murray
362064Smarkm * All rights reserved.
411875Smarkm *
511875Smarkm * Redistribution and use in source and binary forms, with or without
611875Smarkm * modification, are permitted provided that the following conditions
711875Smarkm * are met:
811875Smarkm * 1. Redistributions of source code must retain the above copyright
962064Smarkm *    notice, this list of conditions and the following disclaimer
1062064Smarkm *    in this position and unchanged.
1111875Smarkm * 2. Redistributions in binary form must reproduce the above copyright
1211875Smarkm *    notice, this list of conditions and the following disclaimer in the
1311875Smarkm *    documentation and/or other materials provided with the distribution.
1411875Smarkm *
1562064Smarkm * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
1662064Smarkm * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
1762064Smarkm * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
1862064Smarkm * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
1962064Smarkm * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
2062064Smarkm * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2162064Smarkm * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2262064Smarkm * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2362064Smarkm * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
2462064Smarkm * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2562064Smarkm *
2662064Smarkm * $FreeBSD$
2711875Smarkm */
2811875Smarkm
2959772Sbde#ifndef	_SYS_RANDOM_H_
3059772Sbde#define	_SYS_RANDOM_H_
3111875Smarkm
3262766Smarkm#ifdef _KERNEL
3362766Smarkm
3491600Smarkmint read_random(void *, int);
3565753Sjhb
36136433Srwatson/*
37136433Srwatson * Note: if you add or remove members of esource, remember to also update the
38136433Srwatson * KASSERT regarding what valid members are in random_harvest_internal().
39136433Srwatson */
4091600Smarkmenum esource {
4191600Smarkm	RANDOM_START = 0,
42256381Smarkm	RANDOM_CACHED = 0,
43256381Smarkm	RANDOM_ATTACH,
4491600Smarkm	RANDOM_KEYBOARD,
4591600Smarkm	RANDOM_MOUSE,
46255362Smarkm	RANDOM_NET_TUN,
47255362Smarkm	RANDOM_NET_ETHER,
48255362Smarkm	RANDOM_NET_NG,
4991600Smarkm	RANDOM_INTERRUPT,
50255362Smarkm	RANDOM_SWI,
51256381Smarkm	RANDOM_PURE_OCTEON,
52256381Smarkm	RANDOM_PURE_SAFE,
53256381Smarkm	RANDOM_PURE_GLXSB,
54256381Smarkm	RANDOM_PURE_UBSEC,
55256381Smarkm	RANDOM_PURE_HIFN,
56256381Smarkm	RANDOM_PURE_RDRAND,
57256381Smarkm	RANDOM_PURE_NEHEMIAH,
58256381Smarkm	RANDOM_PURE_RNDTEST,
59268933Sjhb	RANDOM_PURE_VIRTIO,
6091600Smarkm	ENTROPYSOURCE
6191600Smarkm};
62256381Smarkmvoid random_harvest(void *, u_int, u_int, enum esource);
6362766Smarkm
6472667Smarkm/* Allow the sysadmin to select the broad category of
6572667Smarkm * entropy types to harvest
6672667Smarkm */
6772667Smarkmstruct harvest_select {
6872667Smarkm	int ethernet;
6972667Smarkm	int point_to_point;
7072667Smarkm	int interrupt;
7191601Smarkm	int swi;
72255362Smarkm	int namei;
7372667Smarkm};
7472667Smarkm
7572667Smarkmextern struct harvest_select harvest;
7672667Smarkm
7791601Smarkm#endif /* _KERNEL */
7862766Smarkm
7962064Smarkm#endif /* _SYS_RANDOM_H_ */
80