]> git.proxmox.com Git - mirror_edk2.git/blame - SecurityPkg/Tcg/Tcg2Smm/Tpm.asl
SecurityPkg: Tcg2Smm: Fix type casting issue
[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
82 MRET, 32 // Memory Overwrite function return code\r
83 }\r
84\r
85 Method (PTS, 1, Serialized)\r
86 { \r
87 //\r
88 // Detect Sx state for MOR, only S4, S5 need to handle\r
89 //\r
90 If (LAnd (LLess (Arg0, 6), LGreater (Arg0, 3)))\r
91 { \r
92 //\r
93 // Bit4 -- DisableAutoDetect. 0 -- Firmware MAY autodetect.\r
94 //\r
95 If (LNot (And (MORD, 0x10)))\r
96 {\r
97 //\r
98 // Triggle the SMI through ACPI _PTS method.\r
99 //\r
100 Store (0x02, MCIP)\r
101 \r
102 //\r
103 // Triggle the SMI interrupt\r
104 //\r
105 Store (MCIN, IOB2)\r
106 }\r
107 }\r
108 Return (0)\r
109 } \r
110\r
111 Method (_STA, 0)\r
112 {\r
113 if (LEqual (ACC0, 0xff))\r
114 {\r
115 Return (0)\r
116 }\r
117 Return (0x0f)\r
118 }\r
119\r
120 //\r
121 // TCG Hardware Information\r
122 //\r
123 Method (HINF, 3, Serialized, 0, {BuffObj, PkgObj}, {UnknownObj, UnknownObj, UnknownObj}) // IntObj, IntObj, PkgObj\r
124 {\r
125 //\r
126 // Switch by function index\r
127 //\r
128 Switch (ToInteger(Arg1))\r
129 {\r
130 Case (0)\r
131 {\r
132 //\r
133 // Standard query\r
134 //\r
135 Return (Buffer () {0x03})\r
136 }\r
137 Case (1)\r
138 {\r
139 //\r
140 // Return failure if no TPM present\r
141 //\r
142 Name(TPMV, Package () {0x01, Package () {0x2, 0x0}})\r
143 if (LEqual (_STA (), 0x00))\r
144 {\r
145 Return (Package () {0x00})\r
146 }\r
147\r
148 //\r
149 // Return TPM version\r
150 //\r
151 Return (TPMV)\r
152 }\r
153 Default {BreakPoint}\r
154 }\r
155 Return (Buffer () {0})\r
156 }\r
157\r
158 Name(TPM2, Package (0x02){\r
159 Zero, \r
160 Zero\r
161 })\r
162\r
163 Name(TPM3, Package (0x03){\r
164 Zero, \r
165 Zero,\r
166 Zero\r
167 })\r
168\r
169 //\r
170 // TCG Physical Presence Interface\r
171 //\r
172 Method (TPPI, 3, Serialized, 0, {BuffObj, PkgObj, IntObj, StrObj}, {UnknownObj, UnknownObj, UnknownObj}) // IntObj, IntObj, PkgObj\r
173 { \r
174 //\r
175 // Switch by function index\r
176 //\r
177 Switch (ToInteger(Arg1))\r
178 {\r
179 Case (0)\r
180 {\r
181 //\r
182 // Standard query, supports function 1-8\r
183 //\r
184 Return (Buffer () {0xFF, 0x01})\r
185 }\r
186 Case (1)\r
187 {\r
188 //\r
189 // a) Get Physical Presence Interface Version\r
190 //\r
cd643013 191 Return ("$PV")\r
1abfa4ce
JY
192 }\r
193 Case (2)\r
194 {\r
195 //\r
196 // b) Submit TPM Operation Request to Pre-OS Environment\r
197 //\r
198 \r
199 Store (DerefOf (Index (Arg2, 0x00)), PPRQ)\r
200 Store (0x02, PPIP)\r
201 \r
202 //\r
203 // Triggle the SMI interrupt\r
204 //\r
205 Store (PPIN, IOB2)\r
206 Return (FRET)\r
207\r
208\r
209 }\r
210 Case (3)\r
211 {\r
212 //\r
213 // c) Get Pending TPM Operation Requested By the OS\r
214 //\r
215 \r
216 Store (PPRQ, Index (TPM2, 0x01))\r
217 Return (TPM2)\r
218 }\r
219 Case (4)\r
220 {\r
221 //\r
222 // d) Get Platform-Specific Action to Transition to Pre-OS Environment\r
223 //\r
224 Return (2)\r
225 }\r
226 Case (5)\r
227 {\r
228 //\r
229 // e) Return TPM Operation Response to OS Environment\r
230 //\r
231 Store (0x05, PPIP)\r
232 \r
233 //\r
234 // Triggle the SMI interrupt\r
235 //\r
236 Store (PPIN, IOB2)\r
237 \r
238 Store (LPPR, Index (TPM3, 0x01))\r
239 Store (PPRP, Index (TPM3, 0x02))\r
240\r
241 Return (TPM3)\r
242 }\r
243 Case (6)\r
244 {\r
245\r
246 //\r
247 // f) Submit preferred user language (Not implemented)\r
248 //\r
249\r
250 Return (3)\r
251\r
252 }\r
253 Case (7)\r
254 {\r
255 //\r
256 // g) Submit TPM Operation Request to Pre-OS Environment 2\r
257 //\r
258 Store (7, PPIP)\r
259 Store (DerefOf (Index (Arg2, 0x00)), PPRQ)\r
260 Store (0, PPRM)\r
261 If (LEqual (PPRQ, 23)) {\r
262 Store (DerefOf (Index (Arg2, 0x01)), PPRM)\r
263 }\r
264 \r
265 //\r
266 // Triggle the SMI interrupt \r
267 //\r
268 Store (PPIN, IOB2) \r
269 Return (FRET)\r
270 }\r
271 Case (8)\r
272 {\r
273 //\r
274 // e) Get User Confirmation Status for Operation\r
275 //\r
276 Store (8, PPIP)\r
277 Store (DerefOf (Index (Arg2, 0x00)), PPRQ)\r
278 \r
279 //\r
280 // Triggle the SMI interrupt\r
281 //\r
282 Store (PPIN, IOB2)\r
283 \r
284 Return (FRET)\r
285 }\r
286\r
287 Default {BreakPoint}\r
288 }\r
289 Return (1)\r
290 }\r
291\r
292 Method (TMCI, 3, Serialized, 0, IntObj, {UnknownObj, UnknownObj, UnknownObj}) // IntObj, IntObj, PkgObj\r
293 {\r
294 //\r
295 // Switch by function index\r
296 //\r
297 Switch (ToInteger (Arg1))\r
298 {\r
299 Case (0)\r
300 {\r
301 //\r
302 // Standard query, supports function 1-1\r
303 //\r
304 Return (Buffer () {0x03})\r
305 }\r
306 Case (1)\r
307 {\r
308 //\r
309 // Save the Operation Value of the Request to MORD (reserved memory)\r
310 //\r
311 Store (DerefOf (Index (Arg2, 0x00)), MORD)\r
312 \r
313 //\r
314 // Triggle the SMI through ACPI _DSM method.\r
315 //\r
316 Store (0x01, MCIP)\r
317 \r
318 //\r
319 // Triggle the SMI interrupt\r
320 //\r
321 Store (MCIN, IOB2)\r
322 Return (MRET)\r
323 }\r
324 Default {BreakPoint}\r
325 }\r
326 Return (1) \r
327 }\r
328\r
329 Method (_DSM, 4, Serialized, 0, UnknownObj, {BuffObj, IntObj, IntObj, PkgObj})\r
330 {\r
331\r
332 //\r
333 // TCG Hardware Information\r
334 //\r
335 If(LEqual(Arg0, ToUUID ("cf8e16a5-c1e8-4e25-b712-4f54a96702c8")))\r
336 {\r
337 Return (HINF (Arg1, Arg2, Arg3))\r
338 }\r
339\r
340 //\r
341 // TCG Physical Presence Interface\r
342 //\r
343 If(LEqual(Arg0, ToUUID ("3dddfaa6-361b-4eb4-a424-8d10089d1653")))\r
344 {\r
345 Return (TPPI (Arg1, Arg2, Arg3))\r
346 }\r
347\r
348 //\r
349 // TCG Memory Clear Interface\r
350 //\r
351 If(LEqual(Arg0, ToUUID ("376054ed-cc13-4675-901c-4756d7f2d45d")))\r
352 {\r
353 Return (TMCI (Arg1, Arg2, Arg3))\r
354 }\r
355\r
356 Return (Buffer () {0})\r
357 }\r
358 }\r
359 }\r
360}\r