Merge branch '2020-08-07-misc-improvements'
[platform/kernel/u-boot.git] / include / tpm-v1.h
1 /* SPDX-License-Identifier: GPL-2.0+ */
2 /*
3  * Copyright (c) 2013 The Chromium OS Authors.
4  * Coypright (c) 2013 Guntermann & Drunck GmbH
5  */
6
7 #ifndef __TPM_V1_H
8 #define __TPM_V1_H
9
10 #include <tpm-common.h>
11 #include <linux/bitops.h>
12
13 /* Useful constants */
14 enum {
15         TPM_REQUEST_HEADER_LENGTH       = 10,
16         TPM_RESPONSE_HEADER_LENGTH      = 10,
17         PCR_DIGEST_LENGTH               = 20,
18         DIGEST_LENGTH                   = 20,
19         TPM_REQUEST_AUTH_LENGTH         = 45,
20         TPM_RESPONSE_AUTH_LENGTH        = 41,
21         /* some max lengths, valid for RSA keys <= 2048 bits */
22         TPM_KEY12_MAX_LENGTH            = 618,
23         TPM_PUBKEY_MAX_LENGTH           = 288,
24 };
25
26 enum tpm_startup_type {
27         TPM_ST_CLEAR            = 0x0001,
28         TPM_ST_STATE            = 0x0002,
29         TPM_ST_DEACTIVATED      = 0x0003,
30 };
31
32 enum tpm_physical_presence {
33         TPM_PHYSICAL_PRESENCE_HW_DISABLE        = 0x0200,
34         TPM_PHYSICAL_PRESENCE_CMD_DISABLE       = 0x0100,
35         TPM_PHYSICAL_PRESENCE_LIFETIME_LOCK     = 0x0080,
36         TPM_PHYSICAL_PRESENCE_HW_ENABLE         = 0x0040,
37         TPM_PHYSICAL_PRESENCE_CMD_ENABLE        = 0x0020,
38         TPM_PHYSICAL_PRESENCE_NOTPRESENT        = 0x0010,
39         TPM_PHYSICAL_PRESENCE_PRESENT           = 0x0008,
40         TPM_PHYSICAL_PRESENCE_LOCK              = 0x0004,
41 };
42
43 enum tpm_nv_index {
44         TPM_NV_INDEX_LOCK       = 0xffffffff,
45         TPM_NV_INDEX_0          = 0x00000000,
46         TPM_NV_INDEX_DIR        = 0x10000001,
47 };
48
49 enum tpm_resource_type {
50         TPM_RT_KEY      = 0x00000001,
51         TPM_RT_AUTH     = 0x00000002,
52         TPM_RT_HASH     = 0x00000003,
53         TPM_RT_TRANS    = 0x00000004,
54         TPM_RT_CONTEXT  = 0x00000005,
55         TPM_RT_COUNTER  = 0x00000006,
56         TPM_RT_DELEGATE = 0x00000007,
57         TPM_RT_DAA_TPM  = 0x00000008,
58         TPM_RT_DAA_V0   = 0x00000009,
59         TPM_RT_DAA_V1   = 0x0000000A,
60 };
61
62 enum tpm_capability_areas {
63         TPM_CAP_ORD             = 0x00000001,
64         TPM_CAP_ALG             = 0x00000002,
65         TPM_CAP_PID             = 0x00000003,
66         TPM_CAP_FLAG            = 0x00000004,
67         TPM_CAP_PROPERTY        = 0x00000005,
68         TPM_CAP_VERSION         = 0x00000006,
69         TPM_CAP_KEY_HANDLE      = 0x00000007,
70         TPM_CAP_CHECK_LOADED    = 0x00000008,
71         TPM_CAP_SYM_MODE        = 0x00000009,
72         TPM_CAP_KEY_STATUS      = 0x0000000C,
73         TPM_CAP_NV_LIST         = 0x0000000D,
74         TPM_CAP_MFR             = 0x00000010,
75         TPM_CAP_NV_INDEX        = 0x00000011,
76         TPM_CAP_TRANS_ALG       = 0x00000012,
77         TPM_CAP_HANDLE          = 0x00000014,
78         TPM_CAP_TRANS_ES        = 0x00000015,
79         TPM_CAP_AUTH_ENCRYPT    = 0x00000017,
80         TPM_CAP_SELECT_SIZE     = 0x00000018,
81         TPM_CAP_DA_LOGIC        = 0x00000019,
82         TPM_CAP_VERSION_VAL     = 0x0000001A,
83 };
84
85 enum tmp_cap_flag {
86         TPM_CAP_FLAG_PERMANENT  = 0x108,
87 };
88
89 #define TPM_TAG_PERMANENT_FLAGS         0x001f
90
91 #define TPM_NV_PER_GLOBALLOCK           BIT(15)
92 #define TPM_NV_PER_PPREAD               BIT(16)
93 #define TPM_NV_PER_PPWRITE              BIT(0)
94 #define TPM_NV_PER_READ_STCLEAR         BIT(31)
95 #define TPM_NV_PER_WRITE_STCLEAR        BIT(14)
96 #define TPM_NV_PER_WRITEDEFINE          BIT(13)
97 #define TPM_NV_PER_WRITEALL             BIT(12)
98
99 enum {
100         TPM_PUBEK_SIZE                  = 256,
101 };
102
103 enum {
104         TPM_CMD_EXTEND                  = 0x14,
105         TPM_CMD_GET_CAPABILITY          = 0x65,
106         TPM_CMD_NV_DEFINE_SPACE         = 0xcc,
107         TPM_CMD_NV_WRITE_VALUE          = 0xcd,
108         TPM_CMD_NV_READ_VALUE           = 0xcf,
109 };
110
111 /**
112  * TPM return codes as defined in the TCG Main specification
113  * (TPM Main Part 2 Structures; Specification version 1.2)
114  */
115 enum tpm_return_code {
116         TPM_BASE        = 0x00000000,
117         TPM_NON_FATAL   = 0x00000800,
118         TPM_SUCCESS     = TPM_BASE,
119         /* TPM-defined fatal error codes */
120         TPM_AUTHFAIL                    = TPM_BASE +  1,
121         TPM_BADINDEX                    = TPM_BASE +  2,
122         TPM_BAD_PARAMETER               = TPM_BASE +  3,
123         TPM_AUDITFAILURE                = TPM_BASE +  4,
124         TPM_CLEAR_DISABLED              = TPM_BASE +  5,
125         TPM_DEACTIVATED                 = TPM_BASE +  6,
126         TPM_DISABLED                    = TPM_BASE +  7,
127         TPM_DISABLED_CMD                = TPM_BASE +  8,
128         TPM_FAIL                        = TPM_BASE +  9,
129         TPM_BAD_ORDINAL                 = TPM_BASE + 10,
130         TPM_INSTALL_DISABLED            = TPM_BASE + 11,
131         TPM_INVALID_KEYHANDLE           = TPM_BASE + 12,
132         TPM_KEYNOTFOUND                 = TPM_BASE + 13,
133         TPM_INAPPROPRIATE_ENC           = TPM_BASE + 14,
134         TPM_MIGRATE_FAIL                = TPM_BASE + 15,
135         TPM_INVALID_PCR_INFO            = TPM_BASE + 16,
136         TPM_NOSPACE                     = TPM_BASE + 17,
137         TPM_NOSRK                       = TPM_BASE + 18,
138         TPM_NOTSEALED_BLOB              = TPM_BASE + 19,
139         TPM_OWNER_SET                   = TPM_BASE + 20,
140         TPM_RESOURCES                   = TPM_BASE + 21,
141         TPM_SHORTRANDOM                 = TPM_BASE + 22,
142         TPM_SIZE                        = TPM_BASE + 23,
143         TPM_WRONGPCRVAL                 = TPM_BASE + 24,
144         TPM_BAD_PARAM_SIZE              = TPM_BASE + 25,
145         TPM_SHA_THREAD                  = TPM_BASE + 26,
146         TPM_SHA_ERROR                   = TPM_BASE + 27,
147         TPM_FAILEDSELFTEST              = TPM_BASE + 28,
148         TPM_AUTH2FAIL                   = TPM_BASE + 29,
149         TPM_BADTAG                      = TPM_BASE + 30,
150         TPM_IOERROR                     = TPM_BASE + 31,
151         TPM_ENCRYPT_ERROR               = TPM_BASE + 32,
152         TPM_DECRYPT_ERROR               = TPM_BASE + 33,
153         TPM_INVALID_AUTHHANDLE          = TPM_BASE + 34,
154         TPM_NO_ENDORSEMENT              = TPM_BASE + 35,
155         TPM_INVALID_KEYUSAGE            = TPM_BASE + 36,
156         TPM_WRONG_ENTITYTYPE            = TPM_BASE + 37,
157         TPM_INVALID_POSTINIT            = TPM_BASE + 38,
158         TPM_INAPPROPRIATE_SIG           = TPM_BASE + 39,
159         TPM_BAD_KEY_PROPERTY            = TPM_BASE + 40,
160         TPM_BAD_MIGRATION               = TPM_BASE + 41,
161         TPM_BAD_SCHEME                  = TPM_BASE + 42,
162         TPM_BAD_DATASIZE                = TPM_BASE + 43,
163         TPM_BAD_MODE                    = TPM_BASE + 44,
164         TPM_BAD_PRESENCE                = TPM_BASE + 45,
165         TPM_BAD_VERSION                 = TPM_BASE + 46,
166         TPM_NO_WRAP_TRANSPORT           = TPM_BASE + 47,
167         TPM_AUDITFAIL_UNSUCCESSFUL      = TPM_BASE + 48,
168         TPM_AUDITFAIL_SUCCESSFUL        = TPM_BASE + 49,
169         TPM_NOTRESETABLE                = TPM_BASE + 50,
170         TPM_NOTLOCAL                    = TPM_BASE + 51,
171         TPM_BAD_TYPE                    = TPM_BASE + 52,
172         TPM_INVALID_RESOURCE            = TPM_BASE + 53,
173         TPM_NOTFIPS                     = TPM_BASE + 54,
174         TPM_INVALID_FAMILY              = TPM_BASE + 55,
175         TPM_NO_NV_PERMISSION            = TPM_BASE + 56,
176         TPM_REQUIRES_SIGN               = TPM_BASE + 57,
177         TPM_KEY_NOTSUPPORTED            = TPM_BASE + 58,
178         TPM_AUTH_CONFLICT               = TPM_BASE + 59,
179         TPM_AREA_LOCKED                 = TPM_BASE + 60,
180         TPM_BAD_LOCALITY                = TPM_BASE + 61,
181         TPM_READ_ONLY                   = TPM_BASE + 62,
182         TPM_PER_NOWRITE                 = TPM_BASE + 63,
183         TPM_FAMILY_COUNT                = TPM_BASE + 64,
184         TPM_WRITE_LOCKED                = TPM_BASE + 65,
185         TPM_BAD_ATTRIBUTES              = TPM_BASE + 66,
186         TPM_INVALID_STRUCTURE           = TPM_BASE + 67,
187         TPM_KEY_OWNER_CONTROL           = TPM_BASE + 68,
188         TPM_BAD_COUNTER                 = TPM_BASE + 69,
189         TPM_NOT_FULLWRITE               = TPM_BASE + 70,
190         TPM_CONTEXT_GAP                 = TPM_BASE + 71,
191         TPM_MAXNVWRITES                 = TPM_BASE + 72,
192         TPM_NOOPERATOR                  = TPM_BASE + 73,
193         TPM_RESOURCEMISSING             = TPM_BASE + 74,
194         TPM_DELEGATE_LOCK               = TPM_BASE + 75,
195         TPM_DELEGATE_FAMILY             = TPM_BASE + 76,
196         TPM_DELEGATE_ADMIN              = TPM_BASE + 77,
197         TPM_TRANSPORT_NOTEXCLUSIVE      = TPM_BASE + 78,
198         TPM_OWNER_CONTROL               = TPM_BASE + 79,
199         TPM_DAA_RESOURCES               = TPM_BASE + 80,
200         TPM_DAA_INPUT_DATA0             = TPM_BASE + 81,
201         TPM_DAA_INPUT_DATA1             = TPM_BASE + 82,
202         TPM_DAA_ISSUER_SETTINGS         = TPM_BASE + 83,
203         TPM_DAA_TPM_SETTINGS            = TPM_BASE + 84,
204         TPM_DAA_STAGE                   = TPM_BASE + 85,
205         TPM_DAA_ISSUER_VALIDITY         = TPM_BASE + 86,
206         TPM_DAA_WRONG_W                 = TPM_BASE + 87,
207         TPM_BAD_HANDLE                  = TPM_BASE + 88,
208         TPM_BAD_DELEGATE                = TPM_BASE + 89,
209         TPM_BADCONTEXT                  = TPM_BASE + 90,
210         TPM_TOOMANYCONTEXTS             = TPM_BASE + 91,
211         TPM_MA_TICKET_SIGNATURE         = TPM_BASE + 92,
212         TPM_MA_DESTINATION              = TPM_BASE + 93,
213         TPM_MA_SOURCE                   = TPM_BASE + 94,
214         TPM_MA_AUTHORITY                = TPM_BASE + 95,
215         TPM_PERMANENTEK                 = TPM_BASE + 97,
216         TPM_BAD_SIGNATURE               = TPM_BASE + 98,
217         TPM_NOCONTEXTSPACE              = TPM_BASE + 99,
218         /* TPM-defined non-fatal errors */
219         TPM_RETRY               = TPM_BASE + TPM_NON_FATAL,
220         TPM_NEEDS_SELFTEST      = TPM_BASE + TPM_NON_FATAL + 1,
221         TPM_DOING_SELFTEST      = TPM_BASE + TPM_NON_FATAL + 2,
222         TPM_DEFEND_LOCK_RUNNING = TPM_BASE + TPM_NON_FATAL + 3,
223 };
224
225 struct tpm_permanent_flags {
226         __be16  tag;
227         u8      disable;
228         u8      ownership;
229         u8      deactivated;
230         u8      read_pubek;
231         u8      disable_owner_clear;
232         u8      allow_maintenance;
233         u8      physical_presence_lifetime_lock;
234         u8      physical_presence_hw_enable;
235         u8      physical_presence_cmd_enable;
236         u8      cekp_used;
237         u8      tpm_post;
238         u8      tpm_post_lock;
239         u8      fips;
240         u8      operator;
241         u8      enable_revoke_ek;
242         u8      nv_locked;
243         u8      read_srk_pub;
244         u8      tpm_established;
245         u8      maintenance_done;
246         u8      disable_full_da_logic_info;
247 } __packed;
248
249 #define TPM_SHA1_160_HASH_LEN   0x14
250
251 struct __packed tpm_composite_hash {
252         u8      digest[TPM_SHA1_160_HASH_LEN];
253 };
254
255 struct __packed tpm_pcr_selection {
256         __be16  size_of_select;
257         u8      pcr_select[3];  /* matches vboot's struct */
258 };
259
260 struct __packed tpm_pcr_info_short {
261         struct tpm_pcr_selection pcr_selection;
262         u8      locality_at_release;
263         struct tpm_composite_hash digest_at_release;
264 };
265
266 struct __packed tpm_nv_attributes {
267         __be16  tag;
268         __be32  attributes;
269 };
270
271 struct __packed tpm_nv_data_public {
272         __be16  tag;
273         __be32  nv_index;
274         struct tpm_pcr_info_short pcr_info_read;
275         struct tpm_pcr_info_short pcr_info_write;
276         struct tpm_nv_attributes permission;
277         u8      read_st_clear;
278         u8      write_st_clear;
279         u8      write_define;
280         __be32  data_size;
281 };
282
283 /**
284  * Issue a TPM_Startup command.
285  *
286  * @param dev           TPM device
287  * @param mode          TPM startup mode
288  * @return return code of the operation
289  */
290 u32 tpm_startup(struct udevice *dev, enum tpm_startup_type mode);
291
292 /**
293  * Issue a TPM_SelfTestFull command.
294  *
295  * @param dev           TPM device
296  * @return return code of the operation
297  */
298 u32 tpm_self_test_full(struct udevice *dev);
299
300 /**
301  * Issue a TPM_ContinueSelfTest command.
302  *
303  * @param dev           TPM device
304  * @return return code of the operation
305  */
306 u32 tpm_continue_self_test(struct udevice *dev);
307
308 /**
309  * Issue a TPM_NV_DefineSpace command.  The implementation is limited
310  * to specify TPM_NV_ATTRIBUTES and size of the area.  The area index
311  * could be one of the special value listed in enum tpm_nv_index.
312  *
313  * @param dev           TPM device
314  * @param index         index of the area
315  * @param perm          TPM_NV_ATTRIBUTES of the area
316  * @param size          size of the area
317  * @return return code of the operation
318  */
319 u32 tpm_nv_define_space(struct udevice *dev, u32 index, u32 perm, u32 size);
320
321 /**
322  * Issue a TPM_NV_ReadValue command.  This implementation is limited
323  * to read the area from offset 0.  The area index could be one of
324  * the special value listed in enum tpm_nv_index.
325  *
326  * @param dev           TPM device
327  * @param index         index of the area
328  * @param data          output buffer of the area contents
329  * @param count         size of output buffer
330  * @return return code of the operation
331  */
332 u32 tpm_nv_read_value(struct udevice *dev, u32 index, void *data, u32 count);
333
334 /**
335  * Issue a TPM_NV_WriteValue command.  This implementation is limited
336  * to write the area from offset 0.  The area index could be one of
337  * the special value listed in enum tpm_nv_index.
338  *
339  * @param dev           TPM device
340  * @param index         index of the area
341  * @param data          input buffer to be wrote to the area
342  * @param length        length of data bytes of input buffer
343  * @return return code of the operation
344  */
345 u32 tpm_nv_write_value(struct udevice *dev, u32 index, const void *data,
346                        u32 length);
347
348 /**
349  * Issue a TPM_Extend command.
350  *
351  * @param dev           TPM device
352  * @param index         index of the PCR
353  * @param in_digest     160-bit value representing the event to be
354  *                      recorded
355  * @param out_digest    160-bit PCR value after execution of the
356  *                      command
357  * @return return code of the operation
358  */
359 u32 tpm_extend(struct udevice *dev, u32 index, const void *in_digest,
360                void *out_digest);
361
362 /**
363  * Issue a TPM_PCRRead command.
364  *
365  * @param dev           TPM device
366  * @param index         index of the PCR
367  * @param data          output buffer for contents of the named PCR
368  * @param count         size of output buffer
369  * @return return code of the operation
370  */
371 u32 tpm_pcr_read(struct udevice *dev, u32 index, void *data, size_t count);
372
373 /**
374  * Issue a TSC_PhysicalPresence command.  TPM physical presence flag
375  * is bit-wise OR'ed of flags listed in enum tpm_physical_presence.
376  *
377  * @param dev           TPM device
378  * @param presence      TPM physical presence flag
379  * @return return code of the operation
380  */
381 u32 tpm_tsc_physical_presence(struct udevice *dev, u16 presence);
382
383 /**
384  * Issue a TPM_ReadPubek command.
385  *
386  * @param dev           TPM device
387  * @param data          output buffer for the public endorsement key
388  * @param count         size of output buffer
389  * @return return code of the operation
390  */
391 u32 tpm_read_pubek(struct udevice *dev, void *data, size_t count);
392
393 /**
394  * Issue a TPM_ForceClear command.
395  *
396  * @param dev           TPM device
397  * @return return code of the operation
398  */
399 u32 tpm_force_clear(struct udevice *dev);
400
401 /**
402  * Issue a TPM_PhysicalEnable command.
403  *
404  * @param dev           TPM device
405  * @return return code of the operation
406  */
407 u32 tpm_physical_enable(struct udevice *dev);
408
409 /**
410  * Issue a TPM_PhysicalDisable command.
411  *
412  * @param dev           TPM device
413  * @return return code of the operation
414  */
415 u32 tpm_physical_disable(struct udevice *dev);
416
417 /**
418  * Issue a TPM_PhysicalSetDeactivated command.
419  *
420  * @param dev           TPM device
421  * @param state         boolean state of the deactivated flag
422  * @return return code of the operation
423  */
424 u32 tpm_physical_set_deactivated(struct udevice *dev, u8 state);
425
426 /**
427  * Issue a TPM_GetCapability command.  This implementation is limited
428  * to query sub_cap index that is 4-byte wide.
429  *
430  * @param dev           TPM device
431  * @param cap_area      partition of capabilities
432  * @param sub_cap       further definition of capability, which is
433  *                      limited to be 4-byte wide
434  * @param cap           output buffer for capability information
435  * @param count         size of output buffer
436  * @return return code of the operation
437  */
438 u32 tpm_get_capability(struct udevice *dev, u32 cap_area, u32 sub_cap,
439                        void *cap, size_t count);
440
441 /**
442  * Issue a TPM_FlushSpecific command for a AUTH resource.
443  *
444  * @param dev           TPM device
445  * @param auth_handle   handle of the auth session
446  * @return return code of the operation
447  */
448 u32 tpm_terminate_auth_session(struct udevice *dev, u32 auth_handle);
449
450 /**
451  * Issue a TPM_OIAP command to setup an object independent authorization
452  * session.
453  * Information about the session is stored internally.
454  * If there was already an OIAP session active it is terminated and a new
455  * session is set up.
456  *
457  * @param dev           TPM device
458  * @param auth_handle   pointer to the (new) auth handle or NULL.
459  * @return return code of the operation
460  */
461 u32 tpm_oiap(struct udevice *dev, u32 *auth_handle);
462
463 /**
464  * Ends an active OIAP session.
465  *
466  * @param dev           TPM device
467  * @return return code of the operation
468  */
469 u32 tpm_end_oiap(struct udevice *dev);
470
471 /**
472  * Issue a TPM_LoadKey2 (Auth1) command using an OIAP session for authenticating
473  * the usage of the parent key.
474  *
475  * @param dev           TPM device
476  * @param parent_handle handle of the parent key.
477  * @param key           pointer to the key structure (TPM_KEY or TPM_KEY12).
478  * @param key_length    size of the key structure
479  * @param parent_key_usage_auth usage auth for the parent key
480  * @param key_handle    pointer to the key handle
481  * @return return code of the operation
482  */
483 u32 tpm_load_key2_oiap(struct udevice *dev, u32 parent_handle, const void *key,
484                        size_t key_length, const void *parent_key_usage_auth,
485                        u32 *key_handle);
486
487 /**
488  * Issue a TPM_GetPubKey (Auth1) command using an OIAP session for
489  * authenticating the usage of the key.
490  *
491  * @param dev           TPM device
492  * @param key_handle    handle of the key
493  * @param usage_auth    usage auth for the key
494  * @param pubkey        pointer to the pub key buffer; may be NULL if the pubkey
495  *                      should not be stored.
496  * @param pubkey_len    pointer to the pub key buffer len. On entry: the size of
497  *                      the provided pubkey buffer. On successful exit: the size
498  *                      of the stored TPM_PUBKEY structure (iff pubkey != NULL).
499  * @return return code of the operation
500  */
501 u32 tpm_get_pub_key_oiap(struct udevice *dev, u32 key_handle,
502                          const void *usage_auth, void *pubkey,
503                          size_t *pubkey_len);
504
505 /**
506  * Get the TPM permanent flags value
507  *
508  * @param dev           TPM device
509  * @param pflags        Place to put permanent flags
510  * @return return code of the operation
511  */
512 u32 tpm_get_permanent_flags(struct udevice *dev,
513                             struct tpm_permanent_flags *pflags);
514
515 /**
516  * Get the TPM permissions
517  *
518  * @param dev           TPM device
519  * @param perm          Returns permissions value
520  * @return return code of the operation
521  */
522 u32 tpm_get_permissions(struct udevice *dev, u32 index, u32 *perm);
523
524 /**
525  * Flush a resource with a given handle and type from the TPM
526  *
527  * @param dev           TPM device
528  * @param key_handle           handle of the resource
529  * @param resource_type                type of the resource
530  * @return return code of the operation
531  */
532 u32 tpm_flush_specific(struct udevice *dev, u32 key_handle, u32 resource_type);
533
534 #ifdef CONFIG_TPM_LOAD_KEY_BY_SHA1
535 /**
536  * Search for a key by usage AuthData and the hash of the parent's pub key.
537  *
538  * @param dev           TPM device
539  * @param auth          Usage auth of the key to search for
540  * @param pubkey_digest SHA1 hash of the pub key structure of the key
541  * @param[out] handle   The handle of the key (Non-null iff found)
542  * @return 0 if key was found in TPM; != 0 if not.
543  */
544 u32 tpm_find_key_sha1(struct udevice *dev, const u8 auth[20],
545                       const u8 pubkey_digest[20], u32 *handle);
546 #endif /* CONFIG_TPM_LOAD_KEY_BY_SHA1 */
547
548 /**
549  * Read random bytes from the TPM RNG. The implementation deals with the fact
550  * that the TPM may legally return fewer bytes than requested by retrying
551  * until @p count bytes have been received.
552  *
553  * @param dev           TPM device
554  * @param data          output buffer for the random bytes
555  * @param count         size of output buffer
556  * @return return code of the operation
557  */
558 u32 tpm_get_random(struct udevice *dev, void *data, u32 count);
559
560 /**
561  * tpm_finalise_physical_presence() - Finalise physical presence
562  *
563  * @param dev           TPM device
564  * @return return code of the operation (0 = success)
565  */
566 u32 tpm_finalise_physical_presence(struct udevice *dev);
567
568 /**
569  * tpm_nv_set_locked() - lock the non-volatile space
570  *
571  * @param dev           TPM device
572  * @return return code of the operation (0 = success)
573  */
574 u32 tpm_nv_set_locked(struct udevice *dev);
575
576 /**
577  * tpm_set_global_lock() - set the global lock
578  *
579  * @param dev           TPM device
580  * @return return code of the operation (0 = success)
581  */
582 u32 tpm_set_global_lock(struct udevice *dev);
583
584 /**
585  * tpm_resume() - start up the TPM from resume (after suspend)
586  *
587  * @param dev           TPM device
588  * @return return code of the operation (0 = success)
589  */
590 u32 tpm_resume(struct udevice *dev);
591
592 #endif /* __TPM_V1_H */