1
2
3
4
5
6
7
8
9
10
11
12
13#ifndef QEMU_RNG_H
14#define QEMU_RNG_H
15
16#include "qom/object.h"
17
18#define TYPE_RNG_BACKEND "rng-backend"
19#define RNG_BACKEND(obj) \
20 OBJECT_CHECK(RngBackend, (obj), TYPE_RNG_BACKEND)
21#define RNG_BACKEND_GET_CLASS(obj) \
22 OBJECT_GET_CLASS(RngBackendClass, (obj), TYPE_RNG_BACKEND)
23#define RNG_BACKEND_CLASS(klass) \
24 OBJECT_CLASS_CHECK(RngBackendClass, (klass), TYPE_RNG_BACKEND)
25
26typedef struct RngRequest RngRequest;
27typedef struct RngBackendClass RngBackendClass;
28typedef struct RngBackend RngBackend;
29
30typedef void (EntropyReceiveFunc)(void *opaque,
31 const void *data,
32 size_t size);
33
34struct RngRequest
35{
36 EntropyReceiveFunc *receive_entropy;
37 uint8_t *data;
38 void *opaque;
39 size_t offset;
40 size_t size;
41 QSIMPLEQ_ENTRY(RngRequest) next;
42};
43
44struct RngBackendClass
45{
46 ObjectClass parent_class;
47
48 void (*request_entropy)(RngBackend *s, RngRequest *req);
49
50 void (*opened)(RngBackend *s, Error **errp);
51};
52
53struct RngBackend
54{
55 Object parent;
56
57
58 bool opened;
59 QSIMPLEQ_HEAD(, RngRequest) requests;
60};
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78void rng_backend_request_entropy(RngBackend *s, size_t size,
79 EntropyReceiveFunc *receive_entropy,
80 void *opaque);
81
82
83
84
85
86
87
88
89
90
91void rng_backend_finalize_request(RngBackend *s, RngRequest *req);
92#endif
93