1
2
3
4
5
6
7
8
9
10
11
12
13#ifndef TPM_BACKEND_H
14#define TPM_BACKEND_H
15
16#include "qom/object.h"
17#include "qemu/option.h"
18#include "sysemu/tpm.h"
19#include "qapi/error.h"
20
21#define TYPE_TPM_BACKEND "tpm-backend"
22#define TPM_BACKEND(obj) \
23 OBJECT_CHECK(TPMBackend, (obj), TYPE_TPM_BACKEND)
24#define TPM_BACKEND_GET_CLASS(obj) \
25 OBJECT_GET_CLASS(TPMBackendClass, (obj), TYPE_TPM_BACKEND)
26#define TPM_BACKEND_CLASS(klass) \
27 OBJECT_CLASS_CHECK(TPMBackendClass, (klass), TYPE_TPM_BACKEND)
28
29typedef struct TPMBackendClass TPMBackendClass;
30typedef struct TPMBackend TPMBackend;
31
32typedef struct TPMBackendCmd {
33 uint8_t locty;
34 const uint8_t *in;
35 uint32_t in_len;
36 uint8_t *out;
37 uint32_t out_len;
38 bool selftest_done;
39} TPMBackendCmd;
40
41struct TPMBackend {
42 Object parent;
43
44
45 TPMIf *tpmif;
46 bool opened;
47 bool had_startup_error;
48 TPMBackendCmd *cmd;
49
50
51 char *id;
52
53 QLIST_ENTRY(TPMBackend) list;
54};
55
56struct TPMBackendClass {
57 ObjectClass parent_class;
58
59 enum TpmType type;
60 const QemuOptDesc *opts;
61
62 const char *desc;
63
64 TPMBackend *(*create)(QemuOpts *opts);
65
66
67 int (*startup_tpm)(TPMBackend *t, size_t buffersize);
68
69
70 void (*reset)(TPMBackend *t);
71
72 void (*cancel_cmd)(TPMBackend *t);
73
74
75 bool (*get_tpm_established_flag)(TPMBackend *t);
76
77
78 int (*reset_tpm_established_flag)(TPMBackend *t, uint8_t locty);
79
80 TPMVersion (*get_tpm_version)(TPMBackend *t);
81
82 size_t (*get_buffer_size)(TPMBackend *t);
83
84 TpmTypeOptions *(*get_tpm_options)(TPMBackend *t);
85
86 void (*handle_request)(TPMBackend *s, TPMBackendCmd *cmd, Error **errp);
87};
88
89
90
91
92
93
94
95enum TpmType tpm_backend_get_type(TPMBackend *s);
96
97
98
99
100
101
102
103
104
105
106
107
108int tpm_backend_init(TPMBackend *s, TPMIf *tpmif, Error **errp);
109
110
111
112
113
114
115
116
117
118int tpm_backend_startup_tpm(TPMBackend *s, size_t buffersize);
119
120
121
122
123
124
125
126
127
128bool tpm_backend_had_startup_error(TPMBackend *s);
129
130
131
132
133
134
135
136
137
138void tpm_backend_deliver_request(TPMBackend *s, TPMBackendCmd *cmd);
139
140
141
142
143
144
145
146
147void tpm_backend_reset(TPMBackend *s);
148
149
150
151
152
153
154
155
156void tpm_backend_cancel_cmd(TPMBackend *s);
157
158
159
160
161
162
163
164
165
166bool tpm_backend_get_tpm_established_flag(TPMBackend *s);
167
168
169
170
171
172
173
174
175int tpm_backend_reset_tpm_established_flag(TPMBackend *s, uint8_t locty);
176
177
178
179
180
181
182
183
184
185TPMVersion tpm_backend_get_tpm_version(TPMBackend *s);
186
187
188
189
190
191
192
193
194
195size_t tpm_backend_get_buffer_size(TPMBackend *s);
196
197
198
199
200
201
202
203
204void tpm_backend_finish_sync(TPMBackend *s);
205
206
207
208
209
210
211
212
213
214TPMInfo *tpm_backend_query_tpm(TPMBackend *s);
215
216TPMBackend *qemu_find_tpm_be(const char *id);
217
218#endif
219