coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
ppi_stub.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 
7 #include "tpm_ppi.h"
8 
9 static void tpm_ppi_func0_cb(void *arg)
10 {
11  /* Functions 1-8. */
12  u8 buf[] = {0xff, 0x01};
14 }
15 
16 static void tpm_ppi_func1_cb(void *arg)
17 {
18  if (CONFIG(TPM2))
19  /* Interface version: 1.3 */
21  else
22  /* Interface version: 1.2 */
24 }
25 
26 static void tpm_ppi_func2_cb(void *arg)
27 {
28  /* Submit operations: drop on the floor and return success. */
30 }
31 
32 static void tpm_ppi_func3_cb(void *arg)
33 {
34  /* Pending operation: none. */
40 }
41 
42 static void tpm_ppi_func4_cb(void *arg)
43 {
44  /* Pre-OS transition method: reboot. */
46 }
47 
48 static void tpm_ppi_func5_cb(void *arg)
49 {
50  /* Operation response: no operation executed. */
57 }
58 
59 static void tpm_ppi_func6_cb(void *arg)
60 {
61  /*
62  * Set preferred user language: deprecated and must return 3 AKA
63  * "not implemented".
64  */
66 }
67 
68 static void tpm_ppi_func7_cb(void *arg)
69 {
70  /* Submit operations: deny. */
72 }
73 
74 static void tpm_ppi_func8_cb(void *arg)
75 {
76  /* All actions are forbidden. */
78 }
79 
80 static void (*tpm_ppi_callbacks[])(void *) = {
90 };
91 
92 static void tpm_mci_func0_cb(void *arg)
93 {
94  /* Function 1. */
96 }
97 static void tpm_mci_func1_cb(void *arg)
98 {
99  /* Just return success. */
101 }
102 
103 static void (*tpm_mci_callbacks[])(void *) = {
106 };
107 
108 void tpm_ppi_acpi_fill_ssdt(const struct device *dev)
109 {
110  /*
111  * _DSM method
112  */
113  struct dsm_uuid ids[] = {
114  /* Physical presence interface.
115  * This is used to submit commands like "Clear TPM" to
116  * be run at next reboot provided that user confirms
117  * them. Spec allows user to cancel all commands and/or
118  * configure BIOS to reject commands. So we pretend that
119  * user did just this: cancelled everything. If user
120  * really wants to clear TPM the only option now is to
121  * do it manually in payload.
122  */
125  /* Memory clearing on boot: just a dummy. */
128  };
129 
131 }
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_return_byte(uint8_t arg)
Definition: acpigen.c:1577
char * acpigen_write_package(int nr_el)
Definition: acpigen.c:86
void acpigen_emit_byte(unsigned char b)
Definition: acpigen.c:61
void acpigen_write_return_byte_buffer(uint8_t *arr, size_t size)
Definition: acpigen.c:1560
void acpigen_write_byte(unsigned int data)
Definition: acpigen.c:96
void acpigen_write_return_singleton_buffer(uint8_t arg)
Definition: acpigen.c:1566
void acpigen_write_return_string(const char *arg)
Definition: acpigen.c:1595
#define ARRAY_SIZE(a)
Definition: helpers.h:12
@ CONFIG
Definition: dsi_common.h:201
@ TPM2
Definition: acpi.h:76
@ RETURN_OP
Definition: acpigen.h:146
#define DSM_UUID(DSM_UUID, DSM_CALLBACKS, DSM_COUNT, DSM_ARG)
Definition: acpigen.h:220
struct bootblock_arg arg
Definition: decompressor.c:22
static uint8_t * buf
Definition: uart.c:7
static void tpm_ppi_func7_cb(void *arg)
Definition: ppi_stub.c:68
static void tpm_ppi_func0_cb(void *arg)
Definition: ppi_stub.c:9
static void tpm_mci_func1_cb(void *arg)
Definition: ppi_stub.c:97
static void(* tpm_mci_callbacks[])(void *)
Definition: ppi_stub.c:103
static void tpm_ppi_func6_cb(void *arg)
Definition: ppi_stub.c:59
static void tpm_mci_func0_cb(void *arg)
Definition: ppi_stub.c:92
void tpm_ppi_acpi_fill_ssdt(const struct device *dev)
Definition: ppi_stub.c:108
static void(* tpm_ppi_callbacks[])(void *)
Definition: ppi_stub.c:80
static void tpm_ppi_func1_cb(void *arg)
Definition: ppi_stub.c:16
static void tpm_ppi_func3_cb(void *arg)
Definition: ppi_stub.c:32
static void tpm_ppi_func8_cb(void *arg)
Definition: ppi_stub.c:74
static void tpm_ppi_func5_cb(void *arg)
Definition: ppi_stub.c:48
static void tpm_ppi_func4_cb(void *arg)
Definition: ppi_stub.c:42
static void tpm_ppi_func2_cb(void *arg)
Definition: ppi_stub.c:26
#define NULL
Definition: stddef.h:19
uint8_t u8
Definition: stdint.h:45
Definition: device.h:107
#define PPI2_RET_SUCCESS
Definition: tpm_ppi.h:19
#define PPI8_RET_FIRMWARE_ONLY
Definition: tpm_ppi.h:48
#define TPM_PPI_UUID
Definition: tpm_ppi.h:54
#define TPM_MCI_UUID
Definition: tpm_ppi.h:56
#define PPI6_RET_NOT_IMPLEMENTED
Definition: tpm_ppi.h:38
#define PPI7_RET_BLOCKED_BY_FIRMWARE
Definition: tpm_ppi.h:44
typedef void(X86APIP X86EMU_intrFuncs)(int num)