]> git.proxmox.com Git - mirror_edk2.git/blame - SecurityPkg/Tcg/Tcg2Smm/Tpm.asl
SecurityPkg: Tcg: New field for User Confirmation Status
[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
201 Store (0x02, PPIP)\r
202 \r
203 //\r
204 // Triggle the SMI interrupt\r
205 //\r
206 Store (PPIN, IOB2)\r
207 Return (FRET)\r
208\r
209\r
210 }\r
211 Case (3)\r
212 {\r
213 //\r
214 // c) Get Pending TPM Operation Requested By the OS\r
215 //\r
216 \r
217 Store (PPRQ, Index (TPM2, 0x01))\r
218 Return (TPM2)\r
219 }\r
220 Case (4)\r
221 {\r
222 //\r
223 // d) Get Platform-Specific Action to Transition to Pre-OS Environment\r
224 //\r
225 Return (2)\r
226 }\r
227 Case (5)\r
228 {\r
229 //\r
230 // e) Return TPM Operation Response to OS Environment\r
231 //\r
232 Store (0x05, PPIP)\r
233 \r
234 //\r
235 // Triggle the SMI interrupt\r
236 //\r
237 Store (PPIN, IOB2)\r
238 \r
239 Store (LPPR, Index (TPM3, 0x01))\r
240 Store (PPRP, Index (TPM3, 0x02))\r
241\r
242 Return (TPM3)\r
243 }\r
244 Case (6)\r
245 {\r
246\r
247 //\r
248 // f) Submit preferred user language (Not implemented)\r
249 //\r
250\r
251 Return (3)\r
252\r
253 }\r
254 Case (7)\r
255 {\r
256 //\r
257 // g) Submit TPM Operation Request to Pre-OS Environment 2\r
258 //\r
259 Store (7, PPIP)\r
260 Store (DerefOf (Index (Arg2, 0x00)), PPRQ)\r
261 Store (0, PPRM)\r
262 If (LEqual (PPRQ, 23)) {\r
263 Store (DerefOf (Index (Arg2, 0x01)), PPRM)\r
264 }\r
265 \r
266 //\r
267 // Triggle the SMI interrupt \r
268 //\r
269 Store (PPIN, IOB2) \r
270 Return (FRET)\r
271 }\r
272 Case (8)\r
273 {\r
274 //\r
275 // e) Get User Confirmation Status for Operation\r
276 //\r
277 Store (8, PPIP)\r
053f31e3 278 Store (DerefOf (Index (Arg2, 0x00)), UCRQ)\r
1abfa4ce
JY
279 \r
280 //\r
281 // Triggle the SMI interrupt\r
282 //\r
283 Store (PPIN, IOB2)\r
284 \r
285 Return (FRET)\r
286 }\r
287\r
288 Default {BreakPoint}\r
289 }\r
290 Return (1)\r
291 }\r
292\r
293 Method (TMCI, 3, Serialized, 0, IntObj, {UnknownObj, UnknownObj, UnknownObj}) // IntObj, IntObj, PkgObj\r
294 {\r
295 //\r
296 // Switch by function index\r
297 //\r
298 Switch (ToInteger (Arg1))\r
299 {\r
300 Case (0)\r
301 {\r
302 //\r
303 // Standard query, supports function 1-1\r
304 //\r
305 Return (Buffer () {0x03})\r
306 }\r
307 Case (1)\r
308 {\r
309 //\r
310 // Save the Operation Value of the Request to MORD (reserved memory)\r
311 //\r
312 Store (DerefOf (Index (Arg2, 0x00)), MORD)\r
313 \r
314 //\r
315 // Triggle the SMI through ACPI _DSM method.\r
316 //\r
317 Store (0x01, MCIP)\r
318 \r
319 //\r
320 // Triggle the SMI interrupt\r
321 //\r
322 Store (MCIN, IOB2)\r
323 Return (MRET)\r
324 }\r
325 Default {BreakPoint}\r
326 }\r
327 Return (1) \r
328 }\r
329\r
330 Method (_DSM, 4, Serialized, 0, UnknownObj, {BuffObj, IntObj, IntObj, PkgObj})\r
331 {\r
332\r
333 //\r
334 // TCG Hardware Information\r
335 //\r
336 If(LEqual(Arg0, ToUUID ("cf8e16a5-c1e8-4e25-b712-4f54a96702c8")))\r
337 {\r
338 Return (HINF (Arg1, Arg2, Arg3))\r
339 }\r
340\r
341 //\r
342 // TCG Physical Presence Interface\r
343 //\r
344 If(LEqual(Arg0, ToUUID ("3dddfaa6-361b-4eb4-a424-8d10089d1653")))\r
345 {\r
346 Return (TPPI (Arg1, Arg2, Arg3))\r
347 }\r
348\r
349 //\r
350 // TCG Memory Clear Interface\r
351 //\r
352 If(LEqual(Arg0, ToUUID ("376054ed-cc13-4675-901c-4756d7f2d45d")))\r
353 {\r
354 Return (TMCI (Arg1, Arg2, Arg3))\r
355 }\r
356\r
357 Return (Buffer () {0})\r
358 }\r
359 }\r
360 }\r
361}\r