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