coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
ppi.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #include <types.h>
4 #include <acpi/acpigen.h>
5 #include <acpi/acpi_device.h>
6 #include <cbmem.h>
7 #include <console/console.h>
8 
9 #include "tpm_ppi.h"
10 
11 #define BCD(x, y) (((x) << 4) | ((y) << 0))
12 
13 static void set_package_element_op(const char *package_name, unsigned int element,
14  uint8_t src_op)
15 {
17  acpigen_emit_byte(src_op);
19  acpigen_emit_namestring(package_name);
20  acpigen_write_integer(element);
21  acpigen_emit_byte(ZERO_OP); /* Ignore Index() Destination */
22 }
23 
24 static void set_package_element_name(const char *package_name, unsigned int element,
25  const char *src)
26 {
30  acpigen_emit_namestring(package_name);
31  acpigen_write_integer(element);
32  acpigen_emit_byte(ZERO_OP); /* Ignore Index() Destination */
33 }
34 
35 /* PPI function is passed in src_op. Converted to Local2. Clobbers Local1 and Local2 */
36 static void verify_supported_ppi(uint8_t src_op)
37 {
38  /*
39  * Old OSes incorrectly pass a Buffer instead of a Package.
40  * See TCG Physical Presence Interface Specification Chapter 8.1.2 for details.
41  */
42 
43  /* If (ObjectType(Arg3) == Package) */
46  acpigen_emit_byte(src_op);
51 
52  /* If (ObjectType(Arg3) == Buffer) */
55  acpigen_emit_byte(src_op);
60 
61  /* Check if it's a valid PPI function */
63  acpigen_emit_namestring("^FSUP");
68 
69  /*
70  * Note: Must fake success for 1-4, 6-13, 15-16, 19-20
71  * see "Trusted Execution Environment ACPI Profile"
72  *
73  * Even if not available, the TPM 1.2 PPI must be advertised as
74  * supported. Tests showed that Windows relies on it, even when
75  * a TPM2.0 is present!
76  * The functions aren't actually used when a TPM2.0 is present...
77  * Without this the Windows TPM 2.0 stack refuses to work.
78  */
79 
80  /*
81  * Check if we have TPM1.2 but a TPM2 PPI function was called
82  * or if we have TPM2.0 but a TPM1.2 PPI function was called.
83  */
85  acpigen_emit_namestring("^FSUP");
89 
91  acpigen_write_return_integer(PPI2_RET_SUCCESS); /* As per TPM spec */
94 
96 }
97 
98 /* TPM PPI functions */
99 
100 static void tpm_ppi_func0_cb(void *arg)
101 {
102  /* Functions 1-8. */
103  u8 buf[] = {0xff, 0x01};
105 }
106 
107  /*
108  * PPI 1.0: 2.1.1 Get Physical Presence Interface Version
109  *
110  * Arg2 (Integer): Function Index = 1
111  * Arg3 (Package): Arguments = Empty Package
112  *
113  * Returns: Type: String
114  */
115 static void tpm_ppi_func1_cb(void *arg)
116 {
117  if (CONFIG(TPM2))
118  /* Interface version: 1.3 */
120  else
121  /* Interface version: 1.2 */
123 }
124 
125 /*
126  * Submit TPM Operation Request to Pre-OS Environment [Windows optional]
127  * PPI 1.0: 2.1.3 Submit TPM Operation Request to Pre-OS Environment
128  *
129  * Supported Revisions: 1
130  * Arg1 (Integer): Revision
131  * Arg2 (Integer): Function Index = 2
132  * Arg3 (Package): Arguments = Package: Type: Integer
133  * Operation Value of the Request
134  *
135  * Returns: Type: Integer
136  * 0: Success
137  * 1: Operation Value of the Request Not Supported
138  * 2: General Failure
139  */
140 static void tpm_ppi_func2_cb(void *arg)
141 {
142  /* Revision 1 */
145 
146  /* Local2 = ConvertAndVerify(Arg3) */
148 
152 
154  acpigen_pop_len();
155 
157 }
158 
159 /*
160  * PPI 1.0: 2.1.4 Get Pending TPM Operation Requested By the OS
161  *
162  * Supported Revisions: 1, 2
163  * Arg1 (Integer): Revision
164  * Arg2 (Integer): Function Index = 3
165  * Arg3 (Package): Empty package
166  *
167  * Returns: Type: Package(Integer, Integer, Integer (optional))
168  * Integer 1:
169  * 0: Success
170  * 1: General Failure
171  * Integer 2:
172  * Pending TPM operation requested by OS
173  * Integer 3:
174  * Pending TPM operation argument requested by OS
175  */
176 static void tpm_ppi_func3_cb(void *arg)
177 {
181 
182  /* ^TPM3 [0] = PPI3_RET_GENERAL_FAILURE */
183  set_package_element_op("^TPM3", 0, LOCAL0_OP);
184 
185  /* ^TPM2 [0] = PPI3_RET_GENERAL_FAILURE */
186  set_package_element_op("^TPM2", 0, LOCAL0_OP);
187 
189 
190  /* Revision 1 */
192 
193  /* ^TPM2 [0] = PPI3_RET_SUCCESS */
197  set_package_element_op("^TPM2", 0, LOCAL1_OP);
198 
199  /* ^TPM2 [1] = ^CMDR */
200  set_package_element_name("^TPM2", 1, "^CMDR");
201 
203  acpigen_emit_namestring("^TPM2");
204  acpigen_pop_len();
205 
206  /*
207  * A return value of {0, 23, 1} indicates that operation 23
208  * with argument 1 is pending.
209  */
210 
211  /* Revision 2 */
213 
214  /* ^TPM3 [0] = PPI3_RET_SUCCESS */
218  set_package_element_op("^TPM3", 0, LOCAL1_OP);
219 
220  /* ^TPM3 [1] = ^CMDR */
221  set_package_element_name("^TPM3", 1, "^CMDR");
222 
223  /* ^TPM3 [2] = ^OARG */
224  set_package_element_name("^TPM3", 2, "^OARG");
225 
227  acpigen_emit_namestring("^TPM3");
228  acpigen_pop_len();
229 
231  acpigen_emit_namestring("^TPM3");
232 }
233 
234 /*
235  * PPI 1.0: 2.1.5 Get Platform-Specific Action to Transition to Pre-OS Environment
236  *
237  * Arg1 (Integer): Revision
238  * Arg2 (Integer): Function Index = 4
239  * Arg3 (Package): Empty package
240  *
241  * Returns: Type: Integer
242  * 0: None
243  * 1: Shutdown
244  * 2: Reboot
245  * 3: Vendor specific
246  */
247 static void tpm_ppi_func4_cb(void *arg)
248 {
249  /* Pre-OS transition method: reboot. */
251 }
252 
253 /*
254  * PPI 1.0: 2.1.6 Return TPM Operation Response to OS Environment
255  *
256  * Supported Revisions: 1
257  * Arg1 (Integer): Revision
258  * Arg2 (Integer): Function Index = 5
259  * Arg3 (Package): Empty package
260  *
261  * Returns: Type: Package(Integer, Integer, Integer)
262  * Integer 1:
263  * 0: Success
264  * 1: General Failure
265  * Integer 2:
266  * Most recent TPM operation requested by OS
267  * Integer 3:
268  * Response to most recent TPM operation requested by OS
269  */
270 static void tpm_ppi_func5_cb(void *arg)
271 {
272  /* ^TPM3 [0] = PPI5_RET_GENERAL_FAILURE */
276  set_package_element_op("^TPM3", 0, LOCAL1_OP);
277 
279 
280  /* Revision 1 */
282 
283  /* ^TPM3 [0] = PPI5_RET_SUCCESS */
287  set_package_element_op("^TPM3", 0, LOCAL1_OP);
288 
289  /* ^TPM3 [1] = ^LCMD */
290  set_package_element_name("^TPM3", 1, "^LCMD");
291 
292  /* ^TPM3 [2] = ^RESU */
293  set_package_element_name("^TPM3", 2, "^RESU");
294 
295  acpigen_pop_len();
296 
298  acpigen_emit_namestring("^TPM3");
299 }
300 
301 /*
302  * PPI 1.2: 2.1.6 Submit preferred user language [Windows optional]
303  *
304  * Arg1 (Integer): Revision
305  * Arg2 (Integer): Function Index = 5
306  * Arg3 (Package): Empty package
307  */
308 static void tpm_ppi_func6_cb(void *arg)
309 {
310  /*
311  * Set preferred user language: deprecated and must return 3 aka
312  * "not implemented".
313  */
315 }
316 
317 /*
318  * PPI 1.2: 2.1.7 Submit TPM Operation Request to Pre-OS Environment 2
319  *
320  * Supported Revisions: 1, 2
321  * Arg1 (Integer): Revision
322  * Arg2 (Integer): Function Index = 7
323  * Arg3 (Package): Integer
324  *
325  * Returns: Type: Integer
326  * 0: Success
327  * 1: Not implemented
328  * 2: General Failure
329  * 3: Blocked by current BIOS settings
330  */
331 static void tpm_ppi_func7_cb(void *arg)
332 {
334 
335  /* Local2 = ConvertAndVerify(Arg3) */
337 
338  /* If (ObjectType(Arg3) == Buffer) */
344 
345  /* Enforce use of Revision 1 that doesn't take an optional argument. */
346 
347  /* Local0 = One */
351 
352  acpigen_pop_len();
353 
354  // FIXME: Only advertise supported functions
355 
356  /* Revision 1 */
358 
359  /* ^CMDR = Local2 */
361 
362  /* ^OARG = Zero */
364 
366  acpigen_pop_len();
367 
368  /* Revision 2 */
370  /* ^CMDR = Local2 */
372 
373  /* ^OARG = Arg3 [1] */
377  acpigen_emit_namestring("^OARG");
378 
380  acpigen_pop_len();
381 
383 }
384 
385 /*
386  * PPI 1.2: 2.1.8 Get User Confirmation Status for Operation
387  *
388  * Returns if a command is supported and allowed by firmware
389  * Supported Revisions: 1
390  * Arg1 (Integer): Revision
391  * Arg2 (Integer): Function Index = 7
392  * Arg3 (Package): Integer
393  *
394  * Returns: Type: Integer
395  * 0: Not implemented
396  * 1: BIOS only
397  * 2: Blocked for OS by BIOS settings
398  * 3: Allowed and physical present user required
399  * 4: Allowed and physical present user not required
400  */
401 static void tpm_ppi_func8_cb(void *arg)
402 {
404 
405  /* Revision 1 */
408 
409  /* Check if it's a valid PPI function */
411  acpigen_emit_namestring("^FSUP");
416  acpigen_write_return_byte(0); /* Not implemented */
417  acpigen_pop_len();
418 
419  // FIXME: Only advertise supported functions
420 
421  if (CONFIG(TPM1)) {
422  /*
423  * Some functions do not require PP depending on configuration.
424  * Those aren't listed here, so the 'required PP' is always set for those.
425  */
426  static const u32 tpm1_funcs[] = {
427  TPM_NOOP,
431  };
432  for (size_t i = 0; i < ARRAY_SIZE(tpm1_funcs); i++) {
435  acpigen_pop_len(); /* Pop : If */
436  }
437  } else if (CONFIG(TPM2)) {
438  /*
439  * Some functions do not require PP depending on configuration.
440  * Those aren't listed here, so the 'required PP' is always set for those.
441  */
442  static const u32 tpm2_funcs[] = {
443  TPM2_NOOP,
451  };
452  for (size_t i = 0; i < ARRAY_SIZE(tpm2_funcs); i++) {
455  acpigen_pop_len(); /* Pop : If */
456  }
457  }
459 
460  acpigen_pop_len();
461 
463 }
464 
465 static void (*tpm_ppi_callbacks[])(void *) = {
475 };
476 
477 static void tpm_mci_func0_cb(void *arg)
478 {
479  /* Function 1. */
481 }
482 static void tpm_mci_func1_cb(void *arg)
483 {
484  /* Just return success. */
486 }
487 
488 static void (*tpm_mci_callbacks[])(void *) = {
491 };
492 
493 void tpm_ppi_acpi_fill_ssdt(const struct device *dev)
494 {
495  struct cb_tpm_ppi_payload_handshake *ppib;
496 
497  static const struct fieldlist list[] = {
498  FIELDLIST_OFFSET(0x100),// FIXME: Add support for func
499  FIELDLIST_NAMESTR("PPIN", 8),// Not used
500  FIELDLIST_NAMESTR("PPIP", 32),// Not used
501  FIELDLIST_NAMESTR("RESU", 32),// Result of the last operation (TPM error code)
502  FIELDLIST_NAMESTR("CMDR", 32),// The command requested by OS. 0 for NOP
503  FIELDLIST_NAMESTR("OARG", 32),// The command optional argument requested by OS
504  FIELDLIST_NAMESTR("LCMD", 32),// The last command requested by OS.
505  FIELDLIST_NAMESTR("FRET", 32),// Not used
506  };
507  static const u8 tpm1_funcs[] = {
508  TPM_NOOP,
509  TPM_ENABLE,
510  TPM_DISABLE,
511  TPM_ACTIVATE,
513  TPM_CLEAR,
525  };
526  static const u8 tpm2_funcs[] = {
527  TPM2_NOOP,
528  TPM2_ENABLE,
529  TPM2_DISABLE,
530  TPM2_CLEAR,
554  };
555 
556  /*
557  * On hot reset/ACPI S3 the contents are preserved.
558  */
559  ppib = (void *)cbmem_add(CBMEM_ID_TPM_PPI, sizeof(*ppib));
560  if (!ppib) {
561  printk(BIOS_ERR, "PPI: Failed to add CBMEM\n");
562  return;
563  }
564  printk(BIOS_DEBUG, "PPI: Pending OS request: 0x%x (0x%x)\n", ppib->pprq, ppib->pprm);
565  printk(BIOS_DEBUG, "PPI: OS response: CMD 0x%x = 0x%x\n", ppib->lppr, ppib->pprp);
566 
567  /* Clear unsupported fields */
568  ppib->next_step = 0;
569  ppib->ppin = 1; // Not used by ACPI. Read by EDK-2, must be 1.
570  ppib->ppip = 0;
571  ppib->fret = 0;
572  ppib->next_step = 0;
573 
574  bool found = false;
575  /* Fill in defaults, the TPM command executor may overwrite this list */
576  memset(ppib->func, 0, sizeof(ppib->func));
577  if (CONFIG(TPM1)) {
578  for (size_t i = 0; i < ARRAY_SIZE(tpm1_funcs); i++) {
579  ppib->func[tpm1_funcs[i]] = 1;
580  if (ppib->pprq == tpm1_funcs[i])
581  found = true;
582  }
583  } else {
584 
585  for (size_t i = 0; i < ARRAY_SIZE(tpm2_funcs); i++) {
586  ppib->func[tpm2_funcs[i]] = 1;
587  if (ppib->pprq == tpm2_funcs[i])
588  found = true;
589  }
590  }
591  if (!found) {
592  // Set sane defaults
593  ppib->pprq = 0;
594  ppib->pprm = 0;
595  ppib->pprp = 0;
596  }
597 
598  /* Physical Presence OpRegion */
599  struct opregion opreg = OPREGION("PPOP", SYSTEMMEMORY, (uintptr_t)ppib,
600  sizeof(*ppib));
601 
602  acpigen_write_opregion(&opreg);
605 
606  acpigen_write_name("TPM2");
610  acpigen_pop_len(); /* Package */
611 
612  acpigen_write_name("TPM3");
617  acpigen_pop_len(); /* Package */
618 
619  /*
620  * Returns One if the firmware implements this function.
621  *
622  * Arg0: Integer PPI function
623  */
625 
633  acpigen_pop_len(); /* If */
634 
635  /* TPPF = CreateField("PPOP", Local0) */
637  acpigen_emit_namestring("PPOP");
639  acpigen_emit_namestring("TPPF");
640 
641  /* Local0 = ToInteger("TPPF") */
643  acpigen_emit_namestring("TPPF");
645 
647  acpigen_pop_len(); /* Method */
648 
649  /*
650  * Returns One if the PPI spec supports this functions.
651  * That doesn't necessarily mean that the firmware implemtents it, or the
652  * TPM can execute the function.
653  *
654  * Arg0: Integer PPI function
655  * Arg1: Integer TPMversion (0: TPM2, 1: TPM1.2)
656  */
657  acpigen_write_method("FSUP", 2);
658 
666  acpigen_pop_len(); /* If */
667 
669  for (size_t i = 0; i < ARRAY_SIZE(tpm1_funcs); i++) {
672  acpigen_pop_len(); /* Pop : If */
673  }
674  acpigen_pop_len(); /* If */
675 
677 
678  for (size_t i = 0; i < ARRAY_SIZE(tpm2_funcs); i++) {
681  acpigen_pop_len(); /* Pop : If */
682  }
683  acpigen_pop_len(); /* If */
684 
686  acpigen_pop_len(); /* Method */
687 
688  /*
689  * _DSM method
690  */
691  struct dsm_uuid ids[] = {
692  /* Physical presence interface.
693  * This is used to submit commands like "Clear TPM" to
694  * be run at next reboot provided that user confirms
695  * them.
696  */
699  /* Memory clearing on boot: just a dummy. */
702  };
703 
705 }
706 
708 {
709  struct lb_tpm_physical_presence *tpm_ppi;
710  void *ppib;
711 
713  if (!ppib)
714  return;
715 
716  tpm_ppi = (struct lb_tpm_physical_presence *)lb_new_record(header);
717  tpm_ppi->tag = LB_TAG_TPM_PPI_HANDOFF;
718  tpm_ppi->size = sizeof(*tpm_ppi);
719  tpm_ppi->ppi_address = (uintptr_t)ppib;
722 
723  tpm_ppi->ppi_version = BCD(1, 3);
724 }
void acpigen_write_dword(unsigned int data)
Definition: acpigen.c:108
void acpigen_write_if(void)
Definition: acpigen.c:1437
void acpigen_emit_namestring(const char *namepath)
Definition: acpigen.c:275
void acpigen_write_return_integer(uint64_t arg)
Definition: acpigen.c:1583
void acpigen_write_store(void)
Definition: acpigen.c:1333
void acpigen_write_integer(uint64_t data)
Definition: acpigen.c:136
void acpigen_pop_len(void)
Definition: acpigen.c:37
void acpigen_write_dsm_uuid_arr(struct dsm_uuid *ids, size_t count)
Definition: acpigen.c:1742
void acpigen_write_if_lequal_op_int(uint8_t op, uint64_t val)
Definition: acpigen.c:1472
void acpigen_write_return_byte(uint8_t arg)
Definition: acpigen.c:1577
void acpigen_write_method_serialized(const char *name, int nargs)
Definition: acpigen.c:764
char * acpigen_write_package(int nr_el)
Definition: acpigen.c:86
void acpigen_get_package_op_element(uint8_t package_op, unsigned int element, uint8_t dest_op)
Definition: acpigen.c:333
void acpigen_emit_byte(unsigned char b)
Definition: acpigen.c:61
void acpigen_write_to_integer(uint8_t src, uint8_t dst)
Definition: acpigen.c:1532
void acpigen_write_field(const char *name, const struct fieldlist *l, size_t count, uint8_t flags)
Definition: acpigen.c:569
void acpigen_write_return_byte_buffer(uint8_t *arr, size_t size)
Definition: acpigen.c:1560
void acpigen_write_store_op_to_namestr(uint8_t src, const char *dst)
Definition: acpigen.c:1347
void acpigen_write_opregion(const struct opregion *opreg)
Definition: acpigen.c:447
void acpigen_write_method(const char *name, int nargs)
Definition: acpigen.c:758
void acpigen_write_return_singleton_buffer(uint8_t arg)
Definition: acpigen.c:1566
void acpigen_write_return_op(uint8_t arg)
Definition: acpigen.c:1571
void acpigen_write_name(const char *name)
Definition: acpigen.c:320
void acpigen_write_return_string(const char *arg)
Definition: acpigen.c:1595
struct arm64_kernel_header header
Definition: fit_payload.c:30
void * memset(void *dstpp, int c, size_t len)
Definition: memset.c:12
#define ARRAY_SIZE(a)
Definition: helpers.h:12
void * cbmem_add(u32 id, u64 size)
Definition: imd_cbmem.c:144
void * cbmem_find(u32 id)
Definition: imd_cbmem.c:166
#define CBMEM_ID_TPM_PPI
Definition: cbmem_id.h:64
@ LB_TAG_TPM_PPI_HANDOFF
@ LB_TPM_VERSION_TPM_VERSION_1_2
@ LB_TPM_VERSION_TPM_VERSION_2
#define printk(level,...)
Definition: stdlib.h:16
@ CONFIG
Definition: dsi_common.h:201
static struct list_node list
Definition: edid_fill_fb.c:15
@ TPM2
Definition: acpi.h:76
#define FIELD_NOLOCK
Definition: acpigen.h:172
@ TO_INTEGER_OP
Definition: acpigen.h:137
@ ARG0_OP
Definition: acpigen.h:89
@ ARG1_OP
Definition: acpigen.h:90
@ LOCAL3_OP
Definition: acpigen.h:84
@ INDEX_OP
Definition: acpigen.h:120
@ LOCAL1_OP
Definition: acpigen.h:82
@ ARG3_OP
Definition: acpigen.h:92
@ LOCAL0_OP
Definition: acpigen.h:81
@ LOCAL2_OP
Definition: acpigen.h:83
@ OBJ_TYPE_OP
Definition: acpigen.h:126
@ RETURN_OP
Definition: acpigen.h:146
@ ZERO_OP
Definition: acpigen.h:30
@ LGREATER_OP
Definition: acpigen.h:132
@ ONE_OP
Definition: acpigen.h:31
@ CREATE_BYTE_OP
Definition: acpigen.h:124
@ SYSTEMMEMORY
Definition: acpigen.h:198
#define DSM_UUID(DSM_UUID, DSM_CALLBACKS, DSM_COUNT, DSM_ARG)
Definition: acpigen.h:220
#define FIELDLIST_OFFSET(X)
Definition: acpigen.h:153
#define FIELD_ANYACC
Definition: acpigen.h:166
#define OPREGION(rname, space, offset, len)
Definition: acpigen.h:191
#define FIELDLIST_NAMESTR(X, Y)
Definition: acpigen.h:157
#define FIELD_PRESERVE
Definition: acpigen.h:174
struct lb_record * lb_new_record(struct lb_header *header)
struct bootblock_arg arg
Definition: decompressor.c:22
#define BIOS_DEBUG
BIOS_DEBUG - Verbose output.
Definition: loglevel.h:128
#define BIOS_ERR
BIOS_ERR - System in incomplete state.
Definition: loglevel.h:72
static uint8_t * buf
Definition: uart.c:7
static void tpm_ppi_func7_cb(void *arg)
Definition: ppi.c:331
void lb_tpm_ppi(struct lb_header *header)
Definition: ppi.c:707
static void tpm_ppi_func0_cb(void *arg)
Definition: ppi.c:100
static void set_package_element_name(const char *package_name, unsigned int element, const char *src)
Definition: ppi.c:24
static void tpm_mci_func1_cb(void *arg)
Definition: ppi.c:482
static void(* tpm_mci_callbacks[])(void *)
Definition: ppi.c:488
static void tpm_ppi_func6_cb(void *arg)
Definition: ppi.c:308
static void tpm_mci_func0_cb(void *arg)
Definition: ppi.c:477
void tpm_ppi_acpi_fill_ssdt(const struct device *dev)
Definition: ppi.c:493
static void set_package_element_op(const char *package_name, unsigned int element, uint8_t src_op)
Definition: ppi.c:13
static void(* tpm_ppi_callbacks[])(void *)
Definition: ppi.c:465
static void tpm_ppi_func1_cb(void *arg)
Definition: ppi.c:115
static void verify_supported_ppi(uint8_t src_op)
Definition: ppi.c:36
static void tpm_ppi_func3_cb(void *arg)
Definition: ppi.c:176
static void tpm_ppi_func8_cb(void *arg)
Definition: ppi.c:401
static void tpm_ppi_func5_cb(void *arg)
Definition: ppi.c:270
#define BCD(x, y)
Definition: ppi.c:11
static void tpm_ppi_func4_cb(void *arg)
Definition: ppi.c:247
static void tpm_ppi_func2_cb(void *arg)
Definition: ppi.c:140
#define NULL
Definition: stddef.h:19
uint32_t u32
Definition: stdint.h:51
unsigned long uintptr_t
Definition: stdint.h:21
uint8_t u8
Definition: stdint.h:45
unsigned char uint8_t
Definition: stdint.h:8
Definition: device.h:107
const char * name
Definition: acpigen.h:214
#define PPI8_RET_ALLOWED_WITH_PP
Definition: tpm_ppi.h:50
#define TPM2_SET_PP_REQUIRED_FOR_CHANGE_EPS_FALSE
Definition: tpm_ppi.h:105
#define TPM2_ENABLE_CLEAR
Definition: tpm_ppi.h:95
#define TPM2_LOG_ALL_DIGEST
Definition: tpm_ppi.h:107
#define PPI2_RET_SUCCESS
Definition: tpm_ppi.h:19
#define PPI2_RET_NOT_SUPPORTED
Definition: tpm_ppi.h:20
#define TPM_DISABLE
Definition: tpm_ppi.h:64
#define TPM2_SET_PP_REQUIRED_FOR_CLEAR_TRUE
Definition: tpm_ppi.h:93
#define TPM2_CLEAR
Definition: tpm_ppi.h:91
#define TPM2_ENABLE_CLEAR2
Definition: tpm_ppi.h:96
#define TPM2_DISABLE
Definition: tpm_ppi.h:90
#define TPM2_SET_PP_REQUIRED_FOR_TURN_OFF_FALSE
Definition: tpm_ppi.h:103
#define TPM2_SET_PP_REQUIRED_FOR_ENABLE_BLOCK_SID_TRUE
Definition: tpm_ppi.h:111
#define TPM_ENABLE
Definition: tpm_ppi.h:63
#define TPM2_NOOP
Definition: tpm_ppi.h:88
#define TPM2_SET_PP_REQUIRED_FOR_DISABLE_BLOCK_SID_FALSE
Definition: tpm_ppi.h:114
#define TPM2_SET_PP_REQUIRED_FOR_ENABLE_BLOCK_SID_FALSE
Definition: tpm_ppi.h:112
#define PPI7_RET_SUCCESS
Definition: tpm_ppi.h:41
#define TPM_NOOP
Definition: tpm_ppi.h:62
#define PPI5_RET_GENERAL_FAILURE
Definition: tpm_ppi.h:35
#define TPM2_SET_PP_REQUIRED_FOR_CHANGE_EPS_TRUE
Definition: tpm_ppi.h:106
#define TPM2_SET_PP_REQUIRED_FOR_CLEAR_FALSE
Definition: tpm_ppi.h:94
#define PPI4_RET_REBOOT
Definition: tpm_ppi.h:30
#define TPM2_SET_PP_REQUIRED_FOR_TURN_ON_FALSE
Definition: tpm_ppi.h:101
#define PPI8_RET_ALLOWED
Definition: tpm_ppi.h:51
#define TPM2_ENABLE
Definition: tpm_ppi.h:89
#define TPM_ENABLE_ACTIVE_CLEAR_ENABLE_ACTIVE
Definition: tpm_ppi.h:82
#define PPI3_RET_SUCCESS
Definition: tpm_ppi.h:24
#define TPM_SET_NOPPICLEAR_TRUE
Definition: tpm_ppi.h:78
#define TPM2_CHANGE_EPS
Definition: tpm_ppi.h:98
#define TPM_SET_NOPPIPROVISION_FALSE
Definition: tpm_ppi.h:75
#define TPM_CLEAR_ENABLE_ACTIVATE
Definition: tpm_ppi.h:74
#define PPI3_RET_GENERAL_FAILURE
Definition: tpm_ppi.h:25
#define PPI7_RET_GENERAL_FAILURE
Definition: tpm_ppi.h:43
#define TPM2_SET_PP_REQUIRED_FOR_TURN_ON_TRUE
Definition: tpm_ppi.h:102
#define TPM_ACTIVATE
Definition: tpm_ppi.h:65
#define TPM_CLEAR
Definition: tpm_ppi.h:67
#define TPM_PPI_UUID
Definition: tpm_ppi.h:54
#define TPM_ENABLE_ACTIVE_CLEAR
Definition: tpm_ppi.h:81
#define PPI8_RET_NOT_IMPLEMENTED
Definition: tpm_ppi.h:47
#define TPM_ENABLE_ACTIVATE_SETOWNERINSTALL_TRUE
Definition: tpm_ppi.h:72
#define TPM_SET_NOPPIPROVISION_TRUE
Definition: tpm_ppi.h:76
#define TPM_SETOWNERINSTALL_FALSE_DEACTIVATE_DISABLE
Definition: tpm_ppi.h:73
#define TPM_MCI_UUID
Definition: tpm_ppi.h:56
#define TPM2_CLEAR_ENABLE_ACTIVE
Definition: tpm_ppi.h:92
#define TPM2_SET_PP_REQUIRED_FOR_CHANGE_PCRS_TRUE
Definition: tpm_ppi.h:100
#define PPI6_RET_NOT_IMPLEMENTED
Definition: tpm_ppi.h:38
#define PPI5_RET_SUCCESS
Definition: tpm_ppi.h:34
#define TPM_SETOWNERINSTALL_FALSE
Definition: tpm_ppi.h:71
#define TPM_DEACTIVATE
Definition: tpm_ppi.h:66
#define TPM2_SET_PP_REQUIRED_FOR_DISABLE_BLOCK_SID_TRUE
Definition: tpm_ppi.h:113
#define VENDOR_SPECIFIC_OFFSET
Definition: tpm_ppi.h:116
#define TPM2_DISABLE_BLOCK_SID
Definition: tpm_ppi.h:110
#define TPM2_ENABLE_BLOCK_SID
Definition: tpm_ppi.h:109
#define TPM_ENABLE_ACTIVATE
Definition: tpm_ppi.h:68
#define TPM2_SET_PP_REQUIRED_FOR_CHANGE_PCRS_FALSE
Definition: tpm_ppi.h:99
#define TPM2_SET_PP_REQUIRED_FOR_TURN_OFF_TRUE
Definition: tpm_ppi.h:104
#define TPM2_DISABLE_ENDORSMENT_ENABLE_STORAGE_HISTORY
Definition: tpm_ppi.h:108
#define TPM_SET_NOPPIMAINTAINANCE_TRUE
Definition: tpm_ppi.h:80
#define TPM_SETOWNERINSTALL_TRUE
Definition: tpm_ppi.h:70
#define TPM_DEACTIVATE_DISABLE
Definition: tpm_ppi.h:69
#define PPI2_RET_GENERAL_FAILURE
Definition: tpm_ppi.h:21
#define TPM2_SET_PCR_BANKS
Definition: tpm_ppi.h:97
typedef void(X86APIP X86EMU_intrFuncs)(int num)