summaryrefslogtreecommitdiff
path: root/sys/dev/random/randomdev.h
diff options
context:
space:
mode:
authorMark Murray <markm@FreeBSD.org>2014-10-30 21:21:53 +0000
committerMark Murray <markm@FreeBSD.org>2014-10-30 21:21:53 +0000
commit10cb24248a6f13974e11c255c8014cfefe6420a7 (patch)
treed5dfa61a018a7d209b25f173c6ee76709037035a /sys/dev/random/randomdev.h
parent39d22d86ab05fb09689a9882909dfd35ab546ade (diff)
Notes
Diffstat (limited to 'sys/dev/random/randomdev.h')
-rw-r--r--sys/dev/random/randomdev.h47
1 files changed, 26 insertions, 21 deletions
diff --git a/sys/dev/random/randomdev.h b/sys/dev/random/randomdev.h
index b87789f0834f..4daf73588078 100644
--- a/sys/dev/random/randomdev.h
+++ b/sys/dev/random/randomdev.h
@@ -35,28 +35,33 @@
typedef void random_init_func_t(void);
typedef void random_deinit_func_t(void);
-typedef int random_block_func_t(int);
-typedef int random_read_func_t(void *, int);
-typedef int random_poll_func_t(int, struct thread *);
-typedef void random_reseed_func_t(void);
-struct random_adaptor {
- struct selinfo rsel;
- const char *ident;
- int seeded;
- unsigned priority;
- random_init_func_t *init;
- random_deinit_func_t *deinit;
- random_block_func_t *block;
- random_read_func_t *read;
- random_poll_func_t *poll;
- random_reseed_func_t *reseed;
-};
+void randomdev_init_harvester(void (*)(const void *, u_int, u_int, enum random_entropy_source));
+void randomdev_init_reader(u_int (*)(uint8_t *, u_int));
+void randomdev_deinit_harvester(void);
+void randomdev_deinit_reader(void);
-struct random_hardware_source {
- const char *ident;
- enum esource source;
- random_read_func_t *read;
-};
+/* Stub/fake routines for when no entropy processor is loaded */
+extern u_int dummy_random_read_phony(uint8_t *, u_int);
+
+/* kern.random sysctls */
+#ifdef SYSCTL_DECL /* from sysctl.h */
+SYSCTL_DECL(_kern_random);
+
+/* If this was C++, the macro below would be a template */
+#define RANDOM_CHECK_UINT(name, min, max) \
+static int \
+random_check_uint_##name(SYSCTL_HANDLER_ARGS) \
+{ \
+ if (oidp->oid_arg1 != NULL) { \
+ if (*(u_int *)(oidp->oid_arg1) <= (min)) \
+ *(u_int *)(oidp->oid_arg1) = (min); \
+ else if (*(u_int *)(oidp->oid_arg1) > (max)) \
+ *(u_int *)(oidp->oid_arg1) = (max); \
+ } \
+ return (sysctl_handle_int(oidp, oidp->oid_arg1, oidp->oid_arg2, \
+ req)); \
+}
+#endif /* SYSCTL_DECL */
#endif