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