forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
66 lines
2.2 KiB
66 lines
2.2 KiB
/* |
|
Hardware Random Number Generator |
|
|
|
Please read Documentation/hw_random.txt for details on use. |
|
|
|
---------------------------------------------------------- |
|
This software may be used and distributed according to the terms |
|
of the GNU General Public License, incorporated herein by reference. |
|
|
|
*/ |
|
|
|
#ifndef LINUX_HWRANDOM_H_ |
|
#define LINUX_HWRANDOM_H_ |
|
|
|
#include <linux/completion.h> |
|
#include <linux/types.h> |
|
#include <linux/list.h> |
|
#include <linux/kref.h> |
|
|
|
/** |
|
* struct hwrng - Hardware Random Number Generator driver |
|
* @name: Unique RNG name. |
|
* @init: Initialization callback (can be NULL). |
|
* @cleanup: Cleanup callback (can be NULL). |
|
* @data_present: Callback to determine if data is available |
|
* on the RNG. If NULL, it is assumed that |
|
* there is always data available. *OBSOLETE* |
|
* @data_read: Read data from the RNG device. |
|
* Returns the number of lower random bytes in "data". |
|
* Must not be NULL. *OBSOLETE* |
|
* @read: New API. drivers can fill up to max bytes of data |
|
* into the buffer. The buffer is aligned for any type |
|
* and max is guaranteed to be >= to that alignment |
|
* (either 4 or 8 depending on architecture). |
|
* @priv: Private data, for use by the RNG driver. |
|
* @quality: Estimation of true entropy in RNG's bitstream |
|
* (per mill). |
|
*/ |
|
struct hwrng { |
|
const char *name; |
|
int (*init)(struct hwrng *rng); |
|
void (*cleanup)(struct hwrng *rng); |
|
int (*data_present)(struct hwrng *rng, int wait); |
|
int (*data_read)(struct hwrng *rng, u32 *data); |
|
int (*read)(struct hwrng *rng, void *data, size_t max, bool wait); |
|
unsigned long priv; |
|
unsigned short quality; |
|
|
|
/* internal. */ |
|
struct list_head list; |
|
struct kref ref; |
|
struct completion cleanup_done; |
|
}; |
|
|
|
struct device; |
|
|
|
/** Register a new Hardware Random Number Generator driver. */ |
|
extern int hwrng_register(struct hwrng *rng); |
|
extern int devm_hwrng_register(struct device *dev, struct hwrng *rng); |
|
/** Unregister a Hardware Random Number Generator driver. */ |
|
extern void hwrng_unregister(struct hwrng *rng); |
|
extern void devm_hwrng_unregister(struct device *dve, struct hwrng *rng); |
|
/** Feed random bits into the pool. */ |
|
extern void add_hwgenerator_randomness(const char *buffer, size_t count, size_t entropy); |
|
|
|
#endif /* LINUX_HWRANDOM_H_ */
|
|
|