diff options
| author | Philippe Mathieu-Daudé <philmd@linaro.org> | 2024-12-03 15:20:13 +0100 |
|---|---|---|
| committer | Philippe Mathieu-Daudé <philmd@linaro.org> | 2024-12-20 17:44:56 +0100 |
| commit | 32cad1ffb81dcecf6f4a8af56d6e5892682839b1 (patch) | |
| tree | 6795b32d9c9a6406c9bbca905b9de8a90401af7f /include/system/rng.h | |
| parent | 63cda19446c5307cc05b965c203742a583fc5abf (diff) | |
| download | focaccia-qemu-32cad1ffb81dcecf6f4a8af56d6e5892682839b1.tar.gz focaccia-qemu-32cad1ffb81dcecf6f4a8af56d6e5892682839b1.zip | |
include: Rename sysemu/ -> system/
Headers in include/sysemu/ are not only related to system *emulation*, they are also used by virtualization. Rename as system/ which is clearer. Files renamed manually then mechanical change using sed tool. Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Tested-by: Lei Yang <leiyang@redhat.com> Message-Id: <20241203172445.28576-1-philmd@linaro.org>
Diffstat (limited to 'include/system/rng.h')
| -rw-r--r-- | include/system/rng.h | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/include/system/rng.h b/include/system/rng.h new file mode 100644 index 0000000000..e383f87d20 --- /dev/null +++ b/include/system/rng.h @@ -0,0 +1,89 @@ +/* + * QEMU Random Number Generator Backend + * + * Copyright IBM, Corp. 2012 + * + * Authors: + * Anthony Liguori <aliguori@us.ibm.com> + * + * This work is licensed under the terms of the GNU GPL, version 2 or later. + * See the COPYING file in the top-level directory. + */ + +#ifndef QEMU_RNG_H +#define QEMU_RNG_H + +#include "qemu/queue.h" +#include "qom/object.h" + +#define TYPE_RNG_BACKEND "rng-backend" +OBJECT_DECLARE_TYPE(RngBackend, RngBackendClass, + RNG_BACKEND) + +#define TYPE_RNG_BUILTIN "rng-builtin" + +typedef struct RngRequest RngRequest; + +typedef void (EntropyReceiveFunc)(void *opaque, + const void *data, + size_t size); + +struct RngRequest +{ + EntropyReceiveFunc *receive_entropy; + uint8_t *data; + void *opaque; + size_t offset; + size_t size; + QSIMPLEQ_ENTRY(RngRequest) next; +}; + +struct RngBackendClass +{ + ObjectClass parent_class; + + void (*request_entropy)(RngBackend *s, RngRequest *req); + + void (*opened)(RngBackend *s, Error **errp); +}; + +struct RngBackend +{ + Object parent; + + /*< protected >*/ + bool opened; + QSIMPLEQ_HEAD(, RngRequest) requests; +}; + + +/** + * rng_backend_request_entropy: + * @s: the backend to request entropy from + * @size: the number of bytes of data to request + * @receive_entropy: a function to be invoked when entropy is available + * @opaque: data that should be passed to @receive_entropy + * + * This function is used by the front-end to request entropy from an entropy + * source. This function can be called multiple times before @receive_entropy + * is invoked with different values of @receive_entropy and @opaque. The + * backend will queue each request and handle appropriately. + * + * The backend does not need to pass the full amount of data to @receive_entropy + * but will pass a value greater than 0. + */ +void rng_backend_request_entropy(RngBackend *s, size_t size, + EntropyReceiveFunc *receive_entropy, + void *opaque); + +/** + * rng_backend_free_request: + * @s: the backend that created the request + * @req: the request to finalize + * + * Used by child rng backend classes to finalize requests once they've been + * processed. The request is removed from the list of active requests and + * deleted. + */ +void rng_backend_finalize_request(RngBackend *s, RngRequest *req); +#endif |