diff options
Diffstat (limited to 'include/linux/hw_random.h')
| -rw-r--r-- | include/linux/hw_random.h | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/include/linux/hw_random.h b/include/linux/hw_random.h index b4b0eef5fddf..b424555753b1 100644 --- a/include/linux/hw_random.h +++ b/include/linux/hw_random.h @@ -1,7 +1,7 @@ /* Hardware Random Number Generator - Please read Documentation/hw_random.txt for details on use. + Please read Documentation/admin-guide/hw_random.rst for details on use. ---------------------------------------------------------- This software may be used and distributed according to the terms @@ -12,8 +12,9 @@ #ifndef LINUX_HWRANDOM_H_ #define LINUX_HWRANDOM_H_ +#include <linux/completion.h> +#include <linux/kref.h> #include <linux/types.h> -#include <linux/list.h> /** * struct hwrng - Hardware Random Number Generator driver @@ -27,8 +28,12 @@ * 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. + * into the buffer. The buffer is aligned for any type + * and max is a multiple of 4 and >= 32 bytes. * @priv: Private data, for use by the RNG driver. + * @quality: Estimation of true entropy in RNG's bitstream + * (in bits of entropy per 1024 bits of input; + * valid values: 1 to 1024, or 0 for maximum). */ struct hwrng { const char *name; @@ -38,14 +43,25 @@ struct hwrng { 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 completion dying; }; +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); + +extern long hwrng_msleep(struct hwrng *rng, unsigned int msecs); +extern long hwrng_yield(struct hwrng *rng); #endif /* LINUX_HWRANDOM_H_ */ |
