2 * QEMU Random Number Generator Backend
4 * Copyright IBM, Corp. 2012
7 * Anthony Liguori <aliguori@us.ibm.com>
9 * This work is licensed under the terms of the GNU GPL, version 2 or later.
10 * See the COPYING file in the top-level directory.
16 #include "qom/object.h"
17 #include "qemu-common.h"
18 #include "qapi/error.h"
20 #define TYPE_RNG_BACKEND "rng-backend"
21 #define RNG_BACKEND(obj) \
22 OBJECT_CHECK(RngBackend, (obj), TYPE_RNG_BACKEND)
23 #define RNG_BACKEND_GET_CLASS(obj) \
24 OBJECT_GET_CLASS(RngBackendClass, (obj), TYPE_RNG_BACKEND)
25 #define RNG_BACKEND_CLASS(klass) \
26 OBJECT_CLASS_CHECK(RngBackendClass, (klass), TYPE_RNG_BACKEND)
28 typedef struct RngBackendClass RngBackendClass
;
29 typedef struct RngBackend RngBackend
;
31 typedef void (EntropyReceiveFunc
)(void *opaque
,
35 struct RngBackendClass
37 ObjectClass parent_class
;
39 void (*request_entropy
)(RngBackend
*s
, size_t size
,
40 EntropyReceiveFunc
*receive_entropy
, void *opaque
);
41 void (*cancel_requests
)(RngBackend
*s
);
43 void (*opened
)(RngBackend
*s
, Error
**errp
);
55 * rng_backend_request_entropy:
56 * @s: the backend to request entropy from
57 * @size: the number of bytes of data to request
58 * @receive_entropy: a function to be invoked when entropy is available
59 * @opaque: data that should be passed to @receive_entropy
61 * This function is used by the front-end to request entropy from an entropy
62 * source. This function can be called multiple times before @receive_entropy
63 * is invoked with different values of @receive_entropy and @opaque. The
64 * backend will queue each request and handle appropriately.
66 * The backend does not need to pass the full amount of data to @receive_entropy
67 * but will pass a value greater than 0.
69 void rng_backend_request_entropy(RngBackend
*s
, size_t size
,
70 EntropyReceiveFunc
*receive_entropy
,
74 * rng_backend_cancel_requests:
75 * @s: the backend to cancel all pending requests in
77 * Cancels all pending requests submitted by @rng_backend_request_entropy. This
78 * should be used by a device during reset or in preparation for live migration
79 * to stop tracking any request.
81 void rng_backend_cancel_requests(RngBackend
*s
);