/** @file
Tpm20Acpi.h -- Header for Tpm20Acpi
Copyright (c) HR650X BIOS Decompilation Project
**/
#ifndef __TPM20ACPI_H__
#define __TPM20ACPI_H__
#include "../uefi_headers/Uefi.h"
//
// Function Prototypes
//
EFI_STATUS
EFIAPI
ReadUnaligned64(
VOID
);
EFI_STATUS
EFIAPI
IsHobGuidEqual(
VOID
);
EFI_STATUS
EFIAPI
IoWrite16(
VOID
);
EFI_STATUS
EFIAPI
IoRead32(
VOID
);
EFI_STATUS
EFIAPI
ReadTimestampCounter(
VOID
);
EFI_STATUS
EFIAPI
ReadCallerEflags(
VOID
);
EFI_STATUS
EFIAPI
CpuPause(
VOID
);
EFI_STATUS
EFIAPI
EnableInterrupts(
VOID
);
EFI_STATUS
EFIAPI
DisableInterrupts(
VOID
);
EFI_STATUS
EFIAPI
InitializeAcpiSupport(
VOID
);
EFI_STATUS
EFIAPI
GetHobList(
VOID
);
EFI_STATUS
EFIAPI
AssertHandler(
VOID
);
EFI_STATUS
EFIAPI
DebugPrint(
VOID
);
EFI_STATUS
EFIAPI
InitializeUefiBootServicesTable(
VOID
);
EFI_STATUS
EFIAPI
PcdGet32(
VOID
);
EFI_STATUS
EFIAPI
PcdSet32(
VOID
);
EFI_STATUS
EFIAPI
AsciiStrLen(
VOID
);
EFI_STATUS
EFIAPI
LibGetDsdt(
VOID
);
EFI_STATUS
EFIAPI
AcpiAmlWriteInteger(
VOID
);
EFI_STATUS
EFIAPI
IsTpmHwPresent(
VOID
);
EFI_STATUS
EFIAPI
GetTpmInterfaceType(
VOID
);
EFI_STATUS
EFIAPI
IsTpmAvailable(
VOID
);
EFI_STATUS
EFIAPI
PciExpressRead(
VOID
);
EFI_STATUS
EFIAPI
Tpm20AcpiInitEntry(
VOID
);
EFI_STATUS
EFIAPI
ModuleEntryPoint(
VOID
);
EFI_STATUS
EFIAPI
variables - UEFI boot/runtime services(
VOID
);
EFI_STATUS
EFIAPI
gImageHandle = NULL;(
VOID
);
EFI_STATUS
EFIAPI
global variables(
VOID
);
EFI_STATUS
EFIAPI
mHobList = 0; ///< HOB list pointer (cached)(
VOID
);
EFI_STATUS
EFIAPI
(internal) function prototypes(
VOID
);
EFI_STATUS
EFIAPI
Boot Services Table Library initialization(
VOID
);
EFI_STATUS
EFIAPI
Operations(
VOID
);
EFI_STATUS
EFIAPI
with Source before Destination: copy backwards(
VOID
);
EFI_STATUS
EFIAPI
(Dst, Source, Length);(
VOID
);
EFI_STATUS
EFIAPI
= Length;(
VOID
);
EFI_STATUS
EFIAPI
and string operations(
VOID
);
EFI_STATUS
EFIAPI
PM1a_CNT.SLP_TYPx + SLP_EN(
VOID
);
EFI_STATUS
EFIAPI
locator helpers(
VOID
);
EFI_STATUS
EFIAPI
5 pages for ACPI tables(
VOID
);
EFI_STATUS
EFIAPI
list management(
VOID
);
EFI_STATUS
EFIAPI
of HOB list(
VOID
);
EFI_STATUS
EFIAPI
NULL;(
VOID
);
EFI_STATUS
EFIAPI
and Debug(
VOID
);
EFI_STATUS
EFIAPI
CMOS index 0x4B to determine debug routing(
VOID
);
EFI_STATUS
EFIAPI
= __inbyte (0x70);(
VOID
);
EFI_STATUS
EFIAPI
Locator(
VOID
);
EFI_STATUS
EFIAPI
cache first(
VOID
);
EFI_STATUS
EFIAPI
(mDsdtAddr != 0 && mXsdtDsdtAddr != 0) {(
VOID
);
EFI_STATUS
EFIAPI
ACPI Support protocol(
VOID
);
EFI_STATUS
EFIAPI
= GetAcpiSupportProtocol ();(
VOID
);
EFI_STATUS
EFIAPI
the RSDT/XSDT table(
VOID
);
EFI_STATUS
EFIAPI
= 0;(
VOID
);
EFI_STATUS
EFIAPI
for RSDT (1.0b) or XSDT (2.0+)(
VOID
);
EFI_STATUS
EFIAPI
(*(UINT32 *)Table == EFI_ACPI_RSDT_SIGNATURE) {(
VOID
);
EFI_STATUS
EFIAPI
found - search for DSDT pointer(
VOID
);
EFI_STATUS
EFIAPI
= (*(UINT32 *)((UINT8 *)Table + 4) - sizeof (EFI_ACPI_DESCRIPTION_HEADER)) / sizeof (UINT32);(
VOID
);
EFI_STATUS
EFIAPI
= (*(UINT32 *)((UINT8 *)Table + 4) - sizeof (EFI_ACPI_DESCRIPTION_HEADER)) / sizeof (UINT64);(
VOID
);
EFI_STATUS
EFIAPI
if we couldn't find DSDT(
VOID
);
EFI_STATUS
EFIAPI
(mDsdtAddr == 0 && mXsdtDsdtAddr == 0) {(
VOID
);
EFI_STATUS
EFIAPI
AML Write Helper(
VOID
);
EFI_STATUS
EFIAPI
for the signature in the DSDT(
VOID
);
EFI_STATUS
EFIAPI
(Offset = FoundOffset; Offset < DsdtSize; Offset += 4) {(
VOID
);
EFI_STATUS
EFIAPI
the AML NameString prefix before the signature(
VOID
);
EFI_STATUS
EFIAPI
= (UINT8 *)(DsdtBase + FoundOffset - 1);(
VOID
);
EFI_STATUS
EFIAPI
past this match and search again(
VOID
);
EFI_STATUS
EFIAPI
-= FoundOffset + 4;(
VOID
);
EFI_STATUS
EFIAPI
the value based on the AML opcode after the signature(
VOID
);
EFI_STATUS
EFIAPI
(*(BytePtr + 4)) {(
VOID
);
EFI_STATUS
EFIAPI
ZeroOp/OneOp with the value(
VOID
);
EFI_STATUS
EFIAPI
(Value > 1) {(
VOID
);
EFI_STATUS
EFIAPI
Hardware Detection(
VOID
);
EFI_STATUS
EFIAPI
Express MMIO access(
VOID
);
EFI_STATUS
EFIAPI
TPM ACPI Initialization(
VOID
);
EFI_STATUS
EFIAPI
DSDT(
VOID
);
EFI_STATUS
EFIAPI
= LibGetDsdt (&DsdtAddr);(
VOID
);
EFI_STATUS
EFIAPI
ACPI tables(
VOID
);
EFI_STATUS
EFIAPI
();(
VOID
);
EFI_STATUS
EFIAPI
TPM hardware availability(
VOID
);
EFI_STATUS
EFIAPI
(!IsTpmAvailable ()) {(
VOID
);
EFI_STATUS
EFIAPI
TPM: set defaults(
VOID
);
EFI_STATUS
EFIAPI
TPM(
VOID
);
EFI_STATUS
EFIAPI
no-TPM configuration to DSDT(
VOID
);
EFI_STATUS
EFIAPI
= AcpiAmlWriteInteger (DsdtAddr, MAX_UINT32, SIGNATURE_AMDT, 0);(
VOID
);
EFI_STATUS
EFIAPI
"TPMM" with default stolen address (no TPM)(
VOID
);
EFI_STATUS
EFIAPI
= AcpiAmlWriteInteger (DsdtAddr, MAX_UINT32, SIGNATURE_TPMM, 0xFED00000);(
VOID
);
EFI_STATUS
EFIAPI
is available - write TPMF=1(
VOID
);
EFI_STATUS
EFIAPI
= AcpiAmlWriteInteger (DsdtAddr, MAX_UINT32, SIGNATURE_TPMF, 1);(
VOID
);
EFI_STATUS
EFIAPI
if TPM has active interface(
VOID
);
EFI_STATUS
EFIAPI
(MEMORY[TPM_REG_BASE + TPM_CTRL_AREA_OFFSET] == 0xFFFFFFFF) {(
VOID
);
EFI_STATUS
EFIAPI
with no active interface (TPP mode)(
VOID
);
EFI_STATUS
EFIAPI
= 7;(
VOID
);
EFI_STATUS
EFIAPI
CtrlAreaMap registers(
VOID
);
EFI_STATUS
EFIAPI
((DEBUG_INFO, "CtrlAreaMap->Error = %x \n", MEMORY[TPM_REG_BASE + TPM_CTRL_ERROR]));(
VOID
);
EFI_STATUS
EFIAPI
"DTPT" with 1(
VOID
);
EFI_STATUS
EFIAPI
= AcpiAmlWriteInteger (DsdtAddr, MAX_UINT32, SIGNATURE_DTPT, 1);(
VOID
);
EFI_STATUS
EFIAPI
with active interface - find stolen address from HOB(
VOID
);
EFI_STATUS
EFIAPI
= GetHobList ();(
VOID
);
EFI_STATUS
EFIAPI
stolen address(
VOID
);
EFI_STATUS
EFIAPI
= STOLEN_ADDR_DEFAULT;(
VOID
);
EFI_STATUS
EFIAPI
with DMA(
VOID
);
EFI_STATUS
EFIAPI
the stolen memory region if it's not the default location(
VOID
);
EFI_STATUS
EFIAPI
(StolenAddr != STOLEN_ADDR_DEFAULT) {(
VOID
);
EFI_STATUS
EFIAPI
up TPM control area in stolen memory(
VOID
);
EFI_STATUS
EFIAPI
*(UINT32 *)(StolenAddr + 36) = 0; // ResponseSize(
VOID
);
EFI_STATUS
EFIAPI
buffer(
VOID
);
EFI_STATUS
EFIAPI
"DTPT" with 0(
VOID
);
EFI_STATUS
EFIAPI
= AcpiAmlWriteInteger (DsdtAddr, MAX_UINT32, SIGNATURE_DTPT, 0);(
VOID
);
EFI_STATUS
EFIAPI
TPM2 ACPI table(
VOID
);
EFI_STATUS
EFIAPI
(mTpmMode == 2) {(
VOID
);
EFI_STATUS
EFIAPI
and populate TPM2 table(
VOID
);
EFI_STATUS
EFIAPI
= gBS->AllocatePool (EfiBootServicesData, 56, &BufferPtr);(
VOID
);
EFI_STATUS
EFIAPI
"TPM24" signature header (52 bytes)(
VOID
);
EFI_STATUS
EFIAPI
(BufferPtr, "TPM24", 52);(
VOID
);
EFI_STATUS
EFIAPI
via ACPI table protocol(
VOID
);
EFI_STATUS
EFIAPI
= ((EFI_ACPI_TABLE_PROTOCOL *)DsdtInterface)->InstallAcpiTable ((
VOID
);
EFI_STATUS
EFIAPI
install of TPM24 signature(
VOID
);
EFI_STATUS
EFIAPI
that initialization is complete(
VOID
);
EFI_STATUS
EFIAPI
= gBS->SignalEvent ((EFI_EVENT)a1);(
VOID
);
EFI_STATUS
EFIAPI
Entry Point(
VOID
);
EFI_STATUS
EFIAPI
UEFI Boot/Runtime Services Table(
VOID
);
EFI_STATUS
EFIAPI
(ImageHandle, SystemTable);(
VOID
);
EFI_STATUS
EFIAPI
PCD database via LocateProtocol(
VOID
);
EFI_STATUS
EFIAPI
= (UINT64)PcdGet32 (5);(
VOID
);
EFI_STATUS
EFIAPI
TPM hardware via EFLAGS.IF check(
VOID
);
EFI_STATUS
EFIAPI
(ReadCallerEflags () & 0x200) {(
VOID
);
EFI_STATUS
EFIAPI
loop using TSC(
VOID
);
EFI_STATUS
EFIAPI
(((IoRead32 (1288) + 357 - IoRead32 (1288)) & 0x800000) == 0) {(
VOID
);
EFI_STATUS
EFIAPI
the initialization event via CreateEvent(
VOID
);
EFI_STATUS
EFIAPI
gBS->CreateEvent ((
VOID
);
#endif /* __TPM20ACPI_H__ */