2 The TPM definition block in ACPI table for physical presence
5 Copyright (c) 2011, 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
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.
30 // Define _HID, "PNP0C31" is defined in
31 // "Secure Startup-FVE and TPM Admin BIOS and Platform Requirements"
33 Name (_HID, EISAID ("PNP0C31"))
36 // Readable name of this device, don't know if this way is correct yet
38 Name (_STR, Unicode ("TPM 1.2 Device"))
41 // Return the resource consumed by TPM device
43 Name (_CRS, ResourceTemplate () {
44 Memory32Fixed (ReadOnly, 0xfed40000, 0x5000)
48 // Operational region for Smi port access
50 OperationRegion (SMIP, SystemIO, 0xB2, 1)
51 Field (SMIP, ByteAcc, NoLock, Preserve)
57 // Operational region for TPM access
59 OperationRegion (TPMR, SystemMemory, 0xfed40000, 0x5000)
60 Field (TPMR, AnyAcc, NoLock, Preserve)
66 // Operational region for TPM support, TPM Physical Presence and TPM Memory Clear
67 // Region Offset to be fixed at runtime
69 OperationRegion (TNVS, SystemMemory, 0xFFFF0000, 0x1E)
70 Field (TNVS, AnyAcc, NoLock, Preserve)
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
83 Method (PTS, 1, Serialized)
86 // Detect Sx state for MOR, only S4, S5 need to handle
88 If (LAnd (LLess (Arg0, 6), LGreater (Arg0, 3)))
91 // Bit4 -- DisableAutoDetect. 0 -- Firmware MAY autodetect.
93 If (LNot (And (MORD, 0x10)))
96 // Triggle the SMI through ACPI _PTS method.
101 // Triggle the SMI interrupt
111 if (LEqual (ACC0, 0xff))
119 // TCG Hardware Information
121 Method (HINF, 3, Serialized, 0, {BuffObj, PkgObj}, {UnknownObj, UnknownObj, UnknownObj}) // IntObj, IntObj, PkgObj
124 // Switch by function index
126 Switch (ToInteger(Arg1))
133 Return (Buffer () {0x03})
138 // Return failure if no TPM present
140 Name(TPMV, Package () {0x01, Package () {0x1, 0x20}})
141 if (LEqual (_STA (), 0x00))
143 Return (Package () {0x00})
147 // Return TPM version
153 Return (Buffer () {0})
156 Name(TPM2, Package (0x02){
161 Name(TPM3, Package (0x03){
168 // TCG Physical Presence Interface
170 Method (TPPI, 3, Serialized, 0, {BuffObj, PkgObj, IntObj, StrObj}, {UnknownObj, UnknownObj, UnknownObj}) // IntObj, IntObj, PkgObj
173 // Switch by function index
175 Switch (ToInteger(Arg1))
180 // Standard query, supports function 1-8
182 Return (Buffer () {0xFF, 0x01})
187 // a) Get Physical Presence Interface Version
194 // b) Submit TPM Operation Request to Pre-OS Environment
197 Store (DerefOf (Index (Arg2, 0x00)), PPRQ)
201 // Triggle the SMI interrupt
211 // c) Get Pending TPM Operation Requested By the OS
214 Store (PPRQ, Index (TPM2, 0x01))
220 // d) Get Platform-Specific Action to Transition to Pre-OS Environment
227 // e) Return TPM Operation Response to OS Environment
232 // Triggle the SMI interrupt
236 Store (LPPR, Index (TPM3, 0x01))
237 Store (PPRP, Index (TPM3, 0x02))
245 // f) Submit preferred user language (Not implemented)
254 // g) Submit TPM Operation Request to Pre-OS Environment 2
257 Store (DerefOf (Index (Arg2, 0x00)), PPRQ)
260 // Triggle the SMI interrupt
268 // e) Get User Confirmation Status for Operation
271 Store (DerefOf (Index (Arg2, 0x00)), PPRQ)
274 // Triggle the SMI interrupt
286 Method (TMCI, 3, Serialized, 0, IntObj, {UnknownObj, UnknownObj, UnknownObj}) // IntObj, IntObj, PkgObj
289 // Switch by function index
291 Switch (ToInteger (Arg1))
296 // Standard query, supports function 1-1
298 Return (Buffer () {0x03})
303 // Save the Operation Value of the Request to MORD (reserved memory)
305 Store (DerefOf (Index (Arg2, 0x00)), MORD)
308 // Triggle the SMI through ACPI _DSM method.
313 // Triggle the SMI interrupt
323 Method (_DSM, 4, Serialized, 0, UnknownObj, {BuffObj, IntObj, IntObj, PkgObj})
327 // TCG Hardware Information
329 If(LEqual(Arg0, ToUUID ("cf8e16a5-c1e8-4e25-b712-4f54a96702c8")))
331 Return (HINF (Arg1, Arg2, Arg3))
335 // TCG Physical Presence Interface
337 If(LEqual(Arg0, ToUUID ("3dddfaa6-361b-4eb4-a424-8d10089d1653")))
339 Return (TPPI (Arg1, Arg2, Arg3))
343 // TCG Memory Clear Interface
345 If(LEqual(Arg0, ToUUID ("376054ed-cc13-4675-901c-4756d7f2d45d")))
347 Return (TMCI (Arg1, Arg2, Arg3))
350 Return (Buffer () {0})