/** @file
TpmSmbiosDxe.h -- Header for TpmSmbiosDxe
Copyright (c) HR650X BIOS Decompilation Project
**/
#ifndef __TPMSMBIOSDXE_H__
#define __TPMSMBIOSDXE_H__
#include "../uefi_headers/Uefi.h"
//
// Function Prototypes
//
EFI_STATUS
EFIAPI
TpmDxeTcgCallback(
VOID
);
EFI_STATUS
EFIAPI
TpmDxeTrEECallback(
VOID
);
EFI_STATUS
EFIAPI
CpuPause(
VOID
);
EFI_STATUS
EFIAPI
ReadTsc(
VOID
);
EFI_STATUS
EFIAPI
EnableInterrupts(
VOID
);
EFI_STATUS
EFIAPI
DisableInterrupts(
VOID
);
EFI_STATUS
EFIAPI
ReadEflags(
VOID
);
EFI_STATUS
EFIAPI
ReadUnaligned64(
VOID
);
EFI_STATUS
EFIAPI
AsciiStrLen(
VOID
);
EFI_STATUS
EFIAPI
IoWrite16(
VOID
);
EFI_STATUS
EFIAPI
IoRead32(
VOID
);
EFI_STATUS
EFIAPI
PciExpressBaseAddress(
VOID
);
EFI_STATUS
EFIAPI
CompareGuid(
VOID
);
EFI_STATUS
EFIAPI
IsTpm20(
VOID
);
EFI_STATUS
EFIAPI
Tpm2GetCapability(
VOID
);
EFI_STATUS
EFIAPI
TpmSmbiosPopulate(
VOID
);
EFI_STATUS
EFIAPI
GetTpmSupportHobData(
VOID
);
EFI_STATUS
EFIAPI
InternalFreePool(
VOID
);
EFI_STATUS
EFIAPI
DebugPrint(
VOID
);
EFI_STATUS
EFIAPI
DebugAssert(
VOID
);
EFI_STATUS
EFIAPI
InitializeTpmSmbios(
VOID
);
EFI_STATUS
EFIAPI
ModuleEntryPoint(
VOID
);
EFI_STATUS
EFIAPI
TpmSmbiosDxeEntry(
VOID
);
EFI_STATUS
EFIAPI
Definitions(
VOID
);
EFI_STATUS
EFIAPI
gEfiSmbiosProtocolGuid = { 0x0B30D3F9, 0xD8F0, 0x432A, { 0x90, 0x1C, 0x29, 0xC7, 0x41, 0x06, 0xA6, 0xE8 } };(
VOID
);
EFI_STATUS
EFIAPI
from UEFI Boot/Runtime Services Table Library(
VOID
);
EFI_STATUS
EFIAPI
gImageHandle = NULL;(
VOID
);
EFI_STATUS
EFIAPI
Global Variables (mapped from .data section)(
VOID
);
EFI_STATUS
EFIAPI
should be renamed as understanding of their purpose improves.(
VOID
);
EFI_STATUS
EFIAPI
ImageHandle passed to the driver entry point (saved for later use).(
VOID
);
EFI_STATUS
EFIAPI
SystemTable pointer (saved for module-internal use).(
VOID
);
EFI_STATUS
EFIAPI
BootServices pointer (extracted from SystemTable).(
VOID
);
EFI_STATUS
EFIAPI
RuntimeServices pointer (extracted from SystemTable).(
VOID
);
EFI_STATUS
EFIAPI
Vendor ID (from TPM capabilities).(
VOID
);
EFI_STATUS
EFIAPI
Specification Version: Major (LO byte), Minor (HI byte).(
VOID
);
EFI_STATUS
EFIAPI
Firmware Version 1.(
VOID
);
EFI_STATUS
EFIAPI
Firmware Version 2.(
VOID
);
EFI_STATUS
EFIAPI
Characteristics flags (bitfield).(
VOID
);
EFI_STATUS
EFIAPI
value.(
VOID
);
EFI_STATUS
EFIAPI
2.0 vendor string length.(
VOID
);
EFI_STATUS
EFIAPI
Vendor ID to Name Lookup Table(
VOID
);
EFI_STATUS
EFIAPI
by 12-byte entries: VendorId (UINT32), NamePointer (CHAR8*)(
VOID
);
EFI_STATUS
EFIAPI
VendorIdMap[17] = {(
VOID
);
EFI_STATUS
EFIAPI
{ 0x49465820, "Infineon" }, // 0x2C98: 0x49465820 (IFX\0)(
VOID
);
EFI_STATUS
EFIAPI
{ 0x534C4230, "SLB0" }, // 0x2CBC(
VOID
);
EFI_STATUS
EFIAPI
{ 0x53545320, "STM" }, // 0x2CD4: 0x53545320 (STS\0)(
VOID
);
EFI_STATUS
EFIAPI
{ 0x57454320, "WEC" }, // 0x2CEC: 0x57454320 (WEC\0)(
VOID
);
EFI_STATUS
EFIAPI
(duplicate)(
VOID
);
EFI_STATUS
EFIAPI
{ 0x4D534654, "MSFT" }, // 0x2D1C(
VOID
);
EFI_STATUS
EFIAPI
{ 0x4E544300, "NTC" }, // 0x2D34 (duplicate)(
VOID
);
EFI_STATUS
EFIAPI
Device ID comparison table (address 0x2D50).(
VOID
);
EFI_STATUS
EFIAPI
by IsTpm20() to compare device IDs at FED40000.(
VOID
);
EFI_STATUS
EFIAPI
qword_2D50[3];(
VOID
);
EFI_STATUS
EFIAPI
protocol pointer (queried via gBS->LocateProtocol).(
VOID
);
EFI_STATUS
EFIAPI
qword_2D60 = 0;(
VOID
);
EFI_STATUS
EFIAPI
protocol pointer.(
VOID
);
EFI_STATUS
EFIAPI
qword_2D68 = 0;(
VOID
);
EFI_STATUS
EFIAPI
qword_2D70 = 0;(
VOID
);
EFI_STATUS
EFIAPI
support HOB data pointer (retrieved from HOB list).(
VOID
);
EFI_STATUS
EFIAPI
qword_2D78 = 0;(
VOID
);
EFI_STATUS
EFIAPI
library output protocol (for DebugPrint/DebugAssert).(
VOID
);
EFI_STATUS
EFIAPI
qword_2DA0 = 0;(
VOID
);
EFI_STATUS
EFIAPI
qword_2DA8 = 0;(
VOID
);
EFI_STATUS
EFIAPI
list pointer.(
VOID
);
EFI_STATUS
EFIAPI
qword_2DB0 = 0;(
VOID
);
EFI_STATUS
EFIAPI
Express memory-mapped base address.(
VOID
);
EFI_STATUS
EFIAPI
qword_2DB8 = 0;(
VOID
);
EFI_STATUS
EFIAPI
2.0 GET_CAPABILITY response buffer at 0x2DD0.(
VOID
);
EFI_STATUS
EFIAPI
qword_2DD0[2];(
VOID
);
EFI_STATUS
EFIAPI
GET_CAPABILITY response buffer at 0x2EF0.(
VOID
);
EFI_STATUS
EFIAPI
qword_2EF0[2];(
VOID
);
EFI_STATUS
EFIAPI
notification callback context.(
VOID
);
EFI_STATUS
EFIAPI
qword_2FF0[2];(
VOID
);
EFI_STATUS
EFIAPI
1.2 GET_CAPABILITY response buffer at 0x3000.(
VOID
);
EFI_STATUS
EFIAPI
unk_3000[26];(
VOID
);
EFI_STATUS
EFIAPI
registration keys (for gBS->RegisterProtocolNotify).(
VOID
);
EFI_STATUS
EFIAPI
unk_3100[2]; // TrEE registration(
VOID
);
EFI_STATUS
EFIAPI
registration(
VOID
);
EFI_STATUS
EFIAPI
n25 = 25;(
VOID
);
EFI_STATUS
EFIAPI
used as TPM2 firmware version indicator(
VOID
);
EFI_STATUS
EFIAPI
n513 = 513;(
VOID
);
EFI_STATUS
EFIAPI
declaration of local helpers(
VOID
);
EFI_STATUS
EFIAPI
operation wrappers(
VOID
);
EFI_STATUS
EFIAPI
= &Source[Length - 1];(
VOID
);
EFI_STATUS
EFIAPI
= Length;(
VOID
);
EFI_STATUS
EFIAPI
the buffer in aligned 8-byte chunks, then the remainder(
VOID
);
EFI_STATUS
EFIAPI
(Buffer, 0, 8 * (Length >> 3));(
VOID
);
EFI_STATUS
EFIAPI
read / string length helpers(
VOID
);
EFI_STATUS
EFIAPI
wrapper(
VOID
);
EFI_STATUS
EFIAPI
list and TPM support HOB retrieval(
VOID
);
EFI_STATUS
EFIAPI
HOB retrieval (raw HOB walk)(
VOID
);
EFI_STATUS
EFIAPI
the HOB list from the end(
VOID
);
EFI_STATUS
EFIAPI
= (UINTN)HobStart;(
VOID
);
/// walk the HOB data entries
EFI_STATUS
EFIAPI
matching GUID(
VOID
);
EFI_STATUS
EFIAPI
= *(INT16 **)(HobPtr + 16);(
VOID
);
EFI_STATUS
EFIAPI
1.2 / 2.0 detection(
VOID
);
EFI_STATUS
EFIAPI
capability retrieval(
VOID
);
EFI_STATUS
EFIAPI
the TPM2_GET_CAPABILITY command buffer(
VOID
);
EFI_STATUS
EFIAPI
(big-endian TPM_ST_NO_SESSIONS needs byte swap)(
VOID
);
EFI_STATUS
EFIAPI
MSW(
VOID
);
EFI_STATUS
EFIAPI
LSW(
VOID
);
EFI_STATUS
EFIAPI
count = 1(
VOID
);
EFI_STATUS
EFIAPI
the command via the TCG protocol's HashLogExtendEvent(
VOID
);
EFI_STATUS
EFIAPI
similar submit-to-tpm interface(
VOID
);
EFI_STATUS
EFIAPI
= ((EFI_TCG_PROTOCOL *)TpmProtocol)->SubmitCommand ((
VOID
);
EFI_STATUS
EFIAPI
= ((UINT32)((UINT16)__ROL2__((UINT16)(qword_3010 >> 16), 8) |(
VOID
);
EFI_STATUS
EFIAPI
TPM info to output structure(
VOID
);
EFI_STATUS
EFIAPI
(TpmInfo, &unk_3000, sizeof (unk_3000));(
VOID
);
EFI_STATUS
EFIAPI
= ((UINT32)((UINT16)__ROL2__((UINT16)(qword_2DE0 >> 16), 8) |(
VOID
);
EFI_STATUS
EFIAPI
(TpmInfo, &qword_2DD0, sizeof (unk_3000));(
VOID
);
EFI_STATUS
EFIAPI
callback processing(
VOID
);
EFI_STATUS
EFIAPI
the TCG protocol if not already found(
VOID
);
EFI_STATUS
EFIAPI
(qword_2D70 == 0) {(
VOID
);
EFI_STATUS
EFIAPI
TPM capability info (route to TPM 1.2 or 2.0 path)(
VOID
);
EFI_STATUS
EFIAPI
(IsTpm20 ()) {(
VOID
);
EFI_STATUS
EFIAPI
vendor ID and firmware version from capability response(
VOID
);
EFI_STATUS
EFIAPI
= *(UINT64 *)&TpmInfoBuf;(
VOID
);
EFI_STATUS
EFIAPI
vendor ID is nonzero, populate TPM data(
VOID
);
EFI_STATUS
EFIAPI
(!(VendorId >> 48)) {(
VOID
);
EFI_STATUS
EFIAPI
with raw(
VOID
);
EFI_STATUS
EFIAPI
configuration type based on PCD settings(
VOID
);
EFI_STATUS
EFIAPI
PCD for platform-specific configuration flags(
VOID
);
EFI_STATUS
EFIAPI
= (void *)GetPcdProtocol ();(
VOID
);
EFI_STATUS
EFIAPI
} else if (((EFI_PCD_PROTOCOL *)TcgProtocol)->Get8 (215)) {(
VOID
);
EFI_STATUS
EFIAPI
} else {(
VOID
);
EFI_STATUS
EFIAPI
}(
VOID
);
EFI_STATUS
EFIAPI
TCG protocol structure(
VOID
);
EFI_STATUS
EFIAPI
= 25;(
VOID
);
EFI_STATUS
EFIAPI
TrEE protocol(
VOID
);
EFI_STATUS
EFIAPI
(qword_2D68 == 0) {(
VOID
);
EFI_STATUS
EFIAPI
another protocol (SMBIOS?)(
VOID
);
EFI_STATUS
EFIAPI
= ((EFI_BOOT_SERVICES *)qword_2D88)->LocateProtocol ((
VOID
);
EFI_STATUS
EFIAPI
TPM support HOB data(
VOID
);
EFI_STATUS
EFIAPI
= GetTpmSupportHobData ();(
VOID
);
EFI_STATUS
EFIAPI
TPM capability (capability size = 28 bytes at offset 0)(
VOID
);
EFI_STATUS
EFIAPI
global TPM variables(
VOID
);
EFI_STATUS
EFIAPI
= *(UINT32 *)(TpmInfoBuf.Tpm12Data + 22);(
VOID
);
EFI_STATUS
EFIAPI
configuration type from PCD(
VOID
);
EFI_STATUS
EFIAPI
= (VOID *)GetPcdProtocol ();(
VOID
);
EFI_STATUS
EFIAPI
} else if (((EFI_PCD_PROTOCOL *)PcdProtocol)->Get8 (215)) {(
VOID
);
EFI_STATUS
EFIAPI
TPM 1.2/2.0 flag(
VOID
);
EFI_STATUS
EFIAPI
TrEE protocol structure(
VOID
);
EFI_STATUS
EFIAPI
SMBIOS table population(
VOID
);
EFI_STATUS
EFIAPI
caller of progress(
VOID
);
EFI_STATUS
EFIAPI
(SmbiosHandle != 0) {(
VOID
);
EFI_STATUS
EFIAPI
SMBIOS protocol(
VOID
);
EFI_STATUS
EFIAPI
= (EFI_SMBIOS_PROTOCOL *)qword_2D60;(
VOID
);
EFI_STATUS
EFIAPI
proceed for SMBIOS 3.x and later(
VOID
);
EFI_STATUS
EFIAPI
(((EFI_SMBIOS_PROTOCOL *)SmbiosProtocol)->MajorVersion <= 3 &&(
VOID
);
EFI_STATUS
EFIAPI
existing SMBIOS records for an existing TPM record (type 43)(
VOID
);
EFI_STATUS
EFIAPI
= (EFI_SMBIOS_HANDLE)(-2);(
VOID
);
EFI_STATUS
EFIAPI
existing TPM record(
VOID
);
EFI_STATUS
EFIAPI
= SmbiosProtocol->Remove (SmbiosProtocol, SmbiosHandle2);(
VOID
);
EFI_STATUS
EFIAPI
PCD settings for TPM characteristics(
VOID
);
EFI_STATUS
EFIAPI
TPM version string(
VOID
);
EFI_STATUS
EFIAPI
= "HON HAI";(
VOID
);
EFI_STATUS
EFIAPI
string length from capability(
VOID
);
EFI_STATUS
EFIAPI
string lengths(
VOID
);
EFI_STATUS
EFIAPI
= AsciiStrLen (TpmVersionStr);(
VOID
);
EFI_STATUS
EFIAPI
up vendor name from vendor ID(
VOID
);
EFI_STATUS
EFIAPI
= VendorIdStr;(
VOID
);
EFI_STATUS
EFIAPI
and zero the table buffer(
VOID
);
EFI_STATUS
EFIAPI
= InternalAllocatePool (EfiBootServicesData, FinalSize + 2);(
VOID
);
EFI_STATUS
EFIAPI
TPM device info into the buffer(
VOID
);
EFI_STATUS
EFIAPI
(FinalTable, "TPM 2.0", byte_2C61);(
VOID
);
EFI_STATUS
EFIAPI
the SMBIOS record(
VOID
);
EFI_STATUS
EFIAPI
the allocated buffer(
VOID
);
EFI_STATUS
EFIAPI
(FinalTable);(
VOID
);
EFI_STATUS
EFIAPI
support HOB data retrieval(
VOID
);
EFI_STATUS
EFIAPI
GUID HOB entries from SystemTable(
VOID
);
EFI_STATUS
EFIAPI
= (UINT8 *)GetTpmSupportHob ((
VOID
);
EFI_STATUS
EFIAPI
protocol access(
VOID
);
EFI_STATUS
EFIAPI
allocation helpers(
VOID
);
EFI_STATUS
EFIAPI
output helpers(
VOID
);
EFI_STATUS
EFIAPI
debug level from CMOS(
VOID
);
EFI_STATUS
EFIAPI
(0x70, (__inbyte (0x70) & 0x80) | 0x4B);(
VOID
);
EFI_STATUS
EFIAPI
error level(
VOID
);
EFI_STATUS
EFIAPI
(DebugLevel == 1) {(
VOID
);
EFI_STATUS
EFIAPI
boot/runtime services initialization(
VOID
);
EFI_STATUS
EFIAPI
globals(
VOID
);
EFI_STATUS
EFIAPI
= ImageHandle;(
VOID
);
EFI_STATUS
EFIAPI
HOB list(
VOID
);
EFI_STATUS
EFIAPI
();(
VOID
);
EFI_STATUS
EFIAPI
PCI Express base address from PCD(
VOID
);
EFI_STATUS
EFIAPI
= (UINTN)((EFI_PCD_PROTOCOL *)GetPcdProtocol ())->Get32 (5);(
VOID
);
EFI_STATUS
EFIAPI
PCI express is enabled, enable memory-mapped I/O(
VOID
);
EFI_STATUS
EFIAPI
((INT8)PciExpressBaseAddress (1024068) >= 0) {(
VOID
);
EFI_STATUS
EFIAPI
interrupt state, disable interrupts, and perform TSC delay(
VOID
);
EFI_STATUS
EFIAPI
= (ReadEflags () & 0x200) != 0;(
VOID
);
EFI_STATUS
EFIAPI
for approximately 357 TSC ticks (short delay loop)(
VOID
);
EFI_STATUS
EFIAPI
= (StartTsc + 357) & 0x800000;(
VOID
);
EFI_STATUS
EFIAPI
interrupt state(
VOID
);
EFI_STATUS
EFIAPI
(InterruptsWereEnabled) {(
VOID
);
EFI_STATUS
EFIAPI
entry point(
VOID
);
EFI_STATUS
EFIAPI
ImageHandle for callback use(
VOID
);
EFI_STATUS
EFIAPI
= (UINTN)ImageHandle;(
VOID
);
EFI_STATUS
EFIAPI
(gBS->LocateProtocol (&gEfiTrEEProtocolGuid, NULL, &qword_2D68) != EFI_SUCCESS) {(
VOID
);
EFI_STATUS
EFIAPI
(gBS->LocateProtocol (&gEfiTcgProtocolGuid, NULL, &qword_2D70) != EFI_SUCCESS) {(
VOID
);
#endif /* __TPMSMBIOSDXE_H__ */