1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- /*
- * 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
|