/* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #ifndef LINUX_HWRANDOM_H_ #define LINUX_HWRANDOM_H_ #include #include /** * struct hwrng - Hardware Random Number Generator driver * @name: Unique RNG name. * @init: Initialization callback (can be NULL). * @read: New API. drivers can fill up to max bytes of data * into the buffer. The buffer is aligned for any type. */ struct hwrng { const char *name; int (*init)(struct hwrng *rng); int (*read)(struct hwrng *rng, void *data, size_t max, bool wait); struct list_head list; struct cdev cdev; struct device *dev; void *buf; unsigned long priv; }; /* Register a new Hardware Random Number Generator driver. */ int hwrng_register(struct device *dev, struct hwrng *rng); #ifdef CONFIG_HWRNG struct hwrng *hwrng_get_first(void); int hwrng_get_data(struct hwrng *rng, void *buffer, size_t size, int wait); #else static inline struct hwrng *hwrng_get_first(void) { return ERR_PTR(-ENODEV); }; static inline int hwrng_get_data(struct hwrng *rng, void *buffer, size_t size, int wait) { return -ENODEV; } #endif void hwrng_unregister(struct hwrng *rng); static inline long hwrng_yield(struct hwrng *rng) { return 0; } #endif /* LINUX_HWRANDOM_H_ */