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 "qemu/queue.h"
17 #include "qom/object.h"
19 #define TYPE_RNG_BACKEND "rng-backend"
20 OBJECT_DECLARE_TYPE(RngBackend
, RngBackendClass
,
23 #define TYPE_RNG_BUILTIN "rng-builtin"
25 typedef struct RngRequest RngRequest
;
27 typedef void (EntropyReceiveFunc
)(void *opaque
,
33 EntropyReceiveFunc
*receive_entropy
;
38 QSIMPLEQ_ENTRY(RngRequest
) next
;
41 struct RngBackendClass
43 ObjectClass parent_class
;
45 void (*request_entropy
)(RngBackend
*s
, RngRequest
*req
);
47 void (*opened
)(RngBackend
*s
, Error
**errp
);
56 QSIMPLEQ_HEAD(, RngRequest
) requests
;
61 * rng_backend_request_entropy:
62 * @s: the backend to request entropy from
63 * @size: the number of bytes of data to request
64 * @receive_entropy: a function to be invoked when entropy is available
65 * @opaque: data that should be passed to @receive_entropy
67 * This function is used by the front-end to request entropy from an entropy
68 * source. This function can be called multiple times before @receive_entropy
69 * is invoked with different values of @receive_entropy and @opaque. The
70 * backend will queue each request and handle appropriately.
72 * The backend does not need to pass the full amount of data to @receive_entropy
73 * but will pass a value greater than 0.
75 void rng_backend_request_entropy(RngBackend
*s
, size_t size
,
76 EntropyReceiveFunc
*receive_entropy
,
80 * rng_backend_free_request:
81 * @s: the backend that created the request
82 * @req: the request to finalize
84 * Used by child rng backend classes to finalize requests once they've been
85 * processed. The request is removed from the list of active requests and
88 void rng_backend_finalize_request(RngBackend
*s
, RngRequest
*req
);