]> git.proxmox.com Git - mirror_edk2.git/blame_incremental - SecurityPkg/Tcg/TcgSmm/Tpm.asl
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / SecurityPkg / Tcg / TcgSmm / Tpm.asl
... / ...
CommitLineData
1/** @file\r
2 The TPM definition block in ACPI table for physical presence\r
3 and MemoryClear.\r
4\r
5Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved.<BR>\r
6Copyright (c) Microsoft Corporation.<BR>\r
7SPDX-License-Identifier: BSD-2-Clause-Patent\r
8\r
9**/\r
10\r
11DefinitionBlock (\r
12 "Tpm.aml",\r
13 "SSDT",\r
14 2,\r
15 "INTEL ",\r
16 "TcgTable",\r
17 0x1000\r
18 )\r
19{\r
20 Scope (\_SB)\r
21 {\r
22 Device (TPM)\r
23 {\r
24 //\r
25 // Define _HID, "PNP0C31" is defined in\r
26 // "Secure Startup-FVE and TPM Admin BIOS and Platform Requirements"\r
27 //\r
28 Name (_HID, EISAID ("PNP0C31"))\r
29\r
30 //\r
31 // Readable name of this device, don't know if this way is correct yet\r
32 //\r
33 Name (_STR, Unicode ("TPM 1.2 Device"))\r
34\r
35 //\r
36 // Return the resource consumed by TPM device\r
37 //\r
38 Name (_CRS, ResourceTemplate () {\r
39 Memory32Fixed (ReadWrite, 0xfed40000, 0x5000)\r
40 })\r
41\r
42 //\r
43 // Operational region for Smi port access\r
44 //\r
45 OperationRegion (SMIP, SystemIO, FixedPcdGet16 (PcdSmiCommandIoPort), 1)\r
46 Field (SMIP, ByteAcc, NoLock, Preserve)\r
47 {\r
48 IOPN, 8\r
49 }\r
50\r
51 //\r
52 // Operational region for TPM access\r
53 //\r
54 OperationRegion (TPMR, SystemMemory, 0xfed40000, 0x5000)\r
55 Field (TPMR, AnyAcc, NoLock, Preserve)\r
56 {\r
57 ACC0, 8,\r
58 }\r
59\r
60 //\r
61 // Operational region for TPM support, TPM Physical Presence and TPM Memory Clear\r
62 // Region Offset 0xFFFF0000 and Length 0xF0 will be fixed in C code.\r
63 //\r
64 OperationRegion (TNVS, SystemMemory, 0xFFFF0000, 0xF0)\r
65 Field (TNVS, AnyAcc, NoLock, Preserve)\r
66 {\r
67 PPIN, 8, // Software SMI for Physical Presence Interface\r
68 PPIP, 32, // Used for save physical presence parameter\r
69 PPRP, 32, // Physical Presence request operation response\r
70 PPRQ, 32, // Physical Presence request operation\r
71 LPPR, 32, // Last Physical Presence request operation\r
72 FRET, 32, // Physical Presence function return code\r
73 MCIN, 8, // Software SMI for Memory Clear Interface\r
74 MCIP, 32, // Used for save the Mor parameter\r
75 MORD, 32, // Memory Overwrite Request Data\r
76 MRET, 32, // Memory Overwrite function return code\r
77 UCRQ, 32 // Physical Presence request operation to Get User Confirmation Status\r
78 }\r
79\r
80 Method (PTS, 1, Serialized)\r
81 {\r
82 //\r
83 // Detect Sx state for MOR, only S4, S5 need to handle\r
84 //\r
85 If (LAnd (LLess (Arg0, 6), LGreater (Arg0, 3)))\r
86 {\r
87 //\r
88 // Bit4 -- DisableAutoDetect. 0 -- Firmware MAY autodetect.\r
89 //\r
90 If (LNot (And (MORD, 0x10)))\r
91 {\r
92 //\r
93 // Trigger the SMI through ACPI _PTS method.\r
94 //\r
95 Store (0x02, MCIP)\r
96\r
97 //\r
98 // Trigger the SMI interrupt\r
99 //\r
100 Store (MCIN, IOPN)\r
101 }\r
102 }\r
103 Return (0)\r
104 }\r
105\r
106 Method (_STA, 0)\r
107 {\r
108 if (LEqual (ACC0, 0xff))\r
109 {\r
110 Return (0)\r
111 }\r
112 Return (0x0f)\r
113 }\r
114\r
115 //\r
116 // TCG Hardware Information\r
117 //\r
118 Method (HINF, 1, Serialized, 0, {BuffObj, PkgObj}, {UnknownObj}) // IntObj\r
119 {\r
120 //\r
121 // Switch by function index\r
122 //\r
123 Switch (ToInteger(Arg0))\r
124 {\r
125 Case (0)\r
126 {\r
127 //\r
128 // Standard query\r
129 //\r
130 Return (Buffer () {0x03})\r
131 }\r
132 Case (1)\r
133 {\r
134 //\r
135 // Return failure if no TPM present\r
136 //\r
137 Name(TPMV, Package () {0x01, Package () {0x1, 0x20}})\r
138 if (LEqual (_STA (), 0x00))\r
139 {\r
140 Return (Package () {0x00})\r
141 }\r
142\r
143 //\r
144 // Return TPM version\r
145 //\r
146 Return (TPMV)\r
147 }\r
148 Default {BreakPoint}\r
149 }\r
150 Return (Buffer () {0})\r
151 }\r
152\r
153 Name(TPM2, Package (0x02){\r
154 Zero,\r
155 Zero\r
156 })\r
157\r
158 Name(TPM3, Package (0x03){\r
159 Zero,\r
160 Zero,\r
161 Zero\r
162 })\r
163\r
164 //\r
165 // TCG Physical Presence Interface\r
166 //\r
167 Method (TPPI, 2, Serialized, 0, {BuffObj, PkgObj, IntObj, StrObj}, {UnknownObj, UnknownObj}) // IntObj, PkgObj\r
168 {\r
169 //\r
170 // Switch by function index\r
171 //\r
172 Switch (ToInteger(Arg0))\r
173 {\r
174 Case (0)\r
175 {\r
176 //\r
177 // Standard query, supports function 1-8\r
178 //\r
179 Return (Buffer () {0xFF, 0x01})\r
180 }\r
181 Case (1)\r
182 {\r
183 //\r
184 // a) Get Physical Presence Interface Version\r
185 //\r
186 Return ("1.2")\r
187 }\r
188 Case (2)\r
189 {\r
190 //\r
191 // b) Submit TPM Operation Request to Pre-OS Environment\r
192 //\r
193\r
194 Store (DerefOf (Index (Arg1, 0x00)), PPRQ)\r
195 Store (0x02, PPIP)\r
196\r
197 //\r
198 // Trigger the SMI interrupt\r
199 //\r
200 Store (PPIN, IOPN)\r
201 Return (FRET)\r
202\r
203\r
204 }\r
205 Case (3)\r
206 {\r
207 //\r
208 // c) Get Pending TPM Operation Requested By the OS\r
209 //\r
210\r
211 Store (PPRQ, Index (TPM2, 0x01))\r
212 Return (TPM2)\r
213 }\r
214 Case (4)\r
215 {\r
216 //\r
217 // d) Get Platform-Specific Action to Transition to Pre-OS Environment\r
218 //\r
219 Return (2)\r
220 }\r
221 Case (5)\r
222 {\r
223 //\r
224 // e) Return TPM Operation Response to OS Environment\r
225 //\r
226 Store (0x05, PPIP)\r
227\r
228 //\r
229 // Trigger the SMI interrupt\r
230 //\r
231 Store (PPIN, IOPN)\r
232\r
233 Store (LPPR, Index (TPM3, 0x01))\r
234 Store (PPRP, Index (TPM3, 0x02))\r
235\r
236 Return (TPM3)\r
237 }\r
238 Case (6)\r
239 {\r
240\r
241 //\r
242 // f) Submit preferred user language (Not implemented)\r
243 //\r
244\r
245 Return (3)\r
246\r
247 }\r
248 Case (7)\r
249 {\r
250 //\r
251 // g) Submit TPM Operation Request to Pre-OS Environment 2\r
252 //\r
253 Store (7, PPIP)\r
254 Store (DerefOf (Index (Arg1, 0x00)), PPRQ)\r
255\r
256 //\r
257 // Trigger the SMI interrupt\r
258 //\r
259 Store (PPIN, IOPN)\r
260 Return (FRET)\r
261 }\r
262 Case (8)\r
263 {\r
264 //\r
265 // e) Get User Confirmation Status for Operation\r
266 //\r
267 Store (8, PPIP)\r
268 Store (DerefOf (Index (Arg1, 0x00)), UCRQ)\r
269\r
270 //\r
271 // Trigger the SMI interrupt\r
272 //\r
273 Store (PPIN, IOPN)\r
274\r
275 Return (FRET)\r
276 }\r
277\r
278 Default {BreakPoint}\r
279 }\r
280 Return (1)\r
281 }\r
282\r
283 Method (TMCI, 2, Serialized, 0, IntObj, {UnknownObj, UnknownObj}) // IntObj, PkgObj\r
284 {\r
285 //\r
286 // Switch by function index\r
287 //\r
288 Switch (ToInteger (Arg0))\r
289 {\r
290 Case (0)\r
291 {\r
292 //\r
293 // Standard query, supports function 1-1\r
294 //\r
295 Return (Buffer () {0x03})\r
296 }\r
297 Case (1)\r
298 {\r
299 //\r
300 // Save the Operation Value of the Request to MORD (reserved memory)\r
301 //\r
302 Store (DerefOf (Index (Arg1, 0x00)), MORD)\r
303\r
304 //\r
305 // Trigger the SMI through ACPI _DSM method.\r
306 //\r
307 Store (0x01, MCIP)\r
308\r
309 //\r
310 // Trigger the SMI interrupt\r
311 //\r
312 Store (MCIN, IOPN)\r
313 Return (MRET)\r
314 }\r
315 Default {BreakPoint}\r
316 }\r
317 Return (1)\r
318 }\r
319\r
320 Method (_DSM, 4, Serialized, 0, UnknownObj, {BuffObj, IntObj, IntObj, PkgObj})\r
321 {\r
322\r
323 //\r
324 // TCG Hardware Information\r
325 //\r
326 If(LEqual(Arg0, ToUUID ("cf8e16a5-c1e8-4e25-b712-4f54a96702c8")))\r
327 {\r
328 Return (HINF (Arg2))\r
329 }\r
330\r
331 //\r
332 // TCG Physical Presence Interface\r
333 //\r
334 If(LEqual(Arg0, ToUUID ("3dddfaa6-361b-4eb4-a424-8d10089d1653")))\r
335 {\r
336 Return (TPPI (Arg2, Arg3))\r
337 }\r
338\r
339 //\r
340 // TCG Memory Clear Interface\r
341 //\r
342 If(LEqual(Arg0, ToUUID ("376054ed-cc13-4675-901c-4756d7f2d45d")))\r
343 {\r
344 Return (TMCI (Arg2, Arg3))\r
345 }\r
346\r
347 Return (Buffer () {0})\r
348 }\r
349 }\r
350 }\r
351}\r