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