/** @file
Tpm20PlatformDxe.h -- Header for Tpm20PlatformDxe
Copyright (c) HR650X BIOS Decompilation Project
**/
#ifndef __TPM20PLATFORMDXE_H__
#define __TPM20PLATFORMDXE_H__
#include "../uefi_headers/Uefi.h"
//
// Function Prototypes
//
EFI_STATUS
EFIAPI
ModuleEntryPoint(
VOID
);
EFI_STATUS
EFIAPI
InitUefiServices(
VOID
);
EFI_STATUS
EFIAPI
Tpm20PlatformDriverEntry(
VOID
);
EFI_STATUS
EFIAPI
CompleteTpm20PlatformInit(
VOID
);
EFI_STATUS
EFIAPI
GetTpmPpiRequest(
VOID
);
EFI_STATUS
EFIAPI
Tpm20PpiCallback(
VOID
);
EFI_STATUS
EFIAPI
InstallTpm20HiiPackage(
VOID
);
EFI_STATUS
EFIAPI
Tpm20OnVariableLock(
VOID
);
EFI_STATUS
EFIAPI
SidPpiCallback(
VOID
);
EFI_STATUS
EFIAPI
CreateReadyToBootEvent(
VOID
);
EFI_STATUS
EFIAPI
MeasureSecureBootVariables(
VOID
);
EFI_STATUS
EFIAPI
MeasureVariable(
VOID
);
EFI_STATUS
EFIAPI
MeasureGpt(
VOID
);
EFI_STATUS
EFIAPI
Sha256Init(
VOID
);
EFI_STATUS
EFIAPI
Sha256Update(
VOID
);
EFI_STATUS
EFIAPI
Sha256Final(
VOID
);
EFI_STATUS
EFIAPI
Sm3Hash(
VOID
);
EFI_STATUS
EFIAPI
Sha512Init(
VOID
);
EFI_STATUS
EFIAPI
Sha512Update(
VOID
);
EFI_STATUS
EFIAPI
Sha384Final(
VOID
);
EFI_STATUS
EFIAPI
Sha512Final(
VOID
);
EFI_STATUS
EFIAPI
MeasureFirmwareImage(
VOID
);
EFI_STATUS
EFIAPI
Tpm2HashSequenceSha256(
VOID
);
EFI_STATUS
EFIAPI
UnicodeSPrint(
VOID
);
EFI_STATUS
EFIAPI
Sha512MessageSchedule(
VOID
);
EFI_STATUS
EFIAPI
InitializeAmiTcgPpiVar(
VOID
);
EFI_STATUS
EFIAPI
AmiSetVariable(
VOID
);
EFI_STATUS
EFIAPI
Data(
VOID
);
EFI_STATUS
EFIAPI
gImageHandle; // qword_12A48(
VOID
);
EFI_STATUS
EFIAPI
UINT64 gBS; // qword_12A40(
VOID
);
EFI_STATUS
EFIAPI
UINT64 gTcg2Protocol; // qword_12A78(
VOID
);
EFI_STATUS
EFIAPI
(unk_129E8)(
VOID
);
EFI_STATUS
EFIAPI
UINT64 gTpm20Ppi; // qword_12A28(
VOID
);
EFI_STATUS
EFIAPI
UINT8 gTpmPerBiosFlags; // byte_12AD8(
VOID
);
EFI_STATUS
EFIAPI
UINT8 gTpmPerBiosFlags3; // byte_12ADA(
VOID
);
EFI_STATUS
EFIAPI
(n0x80)(
VOID
);
EFI_STATUS
EFIAPI
UINT32 gAmiTcgPpiVar[6]; // dword_12AD0(
VOID
);
EFI_STATUS
EFIAPI
//(
VOID
);
EFI_STATUS
EFIAPI
Entry Point(
VOID
);
EFI_STATUS
EFIAPI
Initialization(
VOID
);
EFI_STATUS
EFIAPI
global data structures(
VOID
);
EFI_STATUS
EFIAPI
and initialize TCG platform protocol(
VOID
);
EFI_STATUS
EFIAPI
write protection if not already enabled(
VOID
);
EFI_STATUS
EFIAPI
if Local APIC is enabled for delay calibration(
VOID
);
EFI_STATUS
EFIAPI
HII Database protocol(
VOID
);
EFI_STATUS
EFIAPI
Driver Entry(
VOID
);
EFI_STATUS
EFIAPI
1: Read TPMPERBIOSFLAGS variable(
VOID
);
EFI_STATUS
EFIAPI
= 6;(
VOID
);
EFI_STATUS
EFIAPI
not found - set defaults(
VOID
);
EFI_STATUS
EFIAPI
= 1;(
VOID
);
EFI_STATUS
EFIAPI
2: Determine PPI request from AMI TCG PPI variable(
VOID
);
EFI_STATUS
EFIAPI
= GetTpmPpiRequest (&gAmiTcgPpiVar[0]);(
VOID
);
EFI_STATUS
EFIAPI
3: If PPI request is active, install HII + PPI protocol(
VOID
);
EFI_STATUS
EFIAPI
(gPpiRequest && gPpiRequest <= 0x80) {(
VOID
);
EFI_STATUS
EFIAPI
PPI request - install variable lock callback(
VOID
);
EFI_STATUS
EFIAPI
((*(UINT64 (__fastcall **)(UINT64, UINT64, UINT64 (__fastcall *)(), UINT64, UINT64 *))(gBS + 80))((
VOID
);
EFI_STATUS
EFIAPI
4: Locate TCG2 protocol for TPM measurements(
VOID
);
EFI_STATUS
EFIAPI
= (*(UINT64 (__fastcall **)(VOID *, UINT64, UINT64 *))(gBS + 320))((
VOID
);
EFI_STATUS
EFIAPI
TPM 2.0 Platform Initialization(
VOID
);
EFI_STATUS
EFIAPI
1: Measure Secure Boot variables(
VOID
);
EFI_STATUS
EFIAPI
= PrepareSecureBootMeasurement ();(
VOID
);
EFI_STATUS
EFIAPI
2: Measure SID (Storage ID) via PPI(
VOID
);
EFI_STATUS
EFIAPI
(7);(
VOID
);
EFI_STATUS
EFIAPI
3: Register BDS TCG TPM2 ready-to-boostrap callback(
VOID
);
EFI_STATUS
EFIAPI
= CreateReadyToBootEvent (8, SidPpiCallback2, 0, &Registration);(
VOID
);
EFI_STATUS
EFIAPI
4: Initialize TPM platform hardware(
VOID
);
EFI_STATUS
EFIAPI
= InitializeTpmPlatformHardware ();(
VOID
);
EFI_STATUS
EFIAPI
5: Register TPM platform hardware init callback(
VOID
);
EFI_STATUS
EFIAPI
= (*(UINT64 (__fastcall **)(UINT64, UINT64, UINT64 (__fastcall *)(), UINT64, UINT8 *))(gBS + 80))((
VOID
);
EFI_STATUS
EFIAPI
6: Register TPM platform ready-to-boot callback(
VOID
);
EFI_STATUS
EFIAPI
= RegisterTpmPlatformReadyBoot (16, Tpm20PlatformReadyBoot, 0, &gEfiTpm20PlatformProtocolGuid);(
VOID
);
EFI_STATUS
EFIAPI
PPI Request Handler(
VOID
);
EFI_STATUS
EFIAPI
to read AMITCGPPIVAR(
VOID
);
EFI_STATUS
EFIAPI
((*(INT64 (__fastcall **)(const UINT16 *, VOID *, INT32 *, UINT64 *, INT32 *))(gRT + 72))((
VOID
);
EFI_STATUS
EFIAPI
not found - initialize to zero(
VOID
);
EFI_STATUS
EFIAPI
= 0;(
VOID
);
EFI_STATUS
EFIAPI
exists - check if we need to migrate from AMITCGPPIVAR2(
VOID
);
EFI_STATUS
EFIAPI
(!PpiState &&(
VOID
);
EFI_STATUS
EFIAPI
AMITCGPPIVAR2 (version 23) to AMITCGPPIVAR(
VOID
);
EFI_STATUS
EFIAPI
PPI Handler (called via event notification)(
VOID
);
EFI_STATUS
EFIAPI
TPM PPI request(
VOID
);
EFI_STATUS
EFIAPI
function handles TPM enable/disable/clear operations(
VOID
);
EFI_STATUS
EFIAPI
on the gPpiRequest value(
VOID
);
EFI_STATUS
EFIAPI
HandleTpm20PpiRequest ();(
VOID
);
EFI_STATUS
EFIAPI
HII Package List for TPM PPI(
VOID
);
EFI_STATUS
EFIAPI
HII package list protocol on ImageHandle(
VOID
);
EFI_STATUS
EFIAPI
= (*(INT64 (__fastcall **)(EFI_HANDLE, VOID *, UINT64 *, EFI_HANDLE, UINT64, INT32))(gBS + 280))((
VOID
);
EFI_STATUS
EFIAPI
HiiDatabase->NewPackageList to register the HII package(
VOID
);
EFI_STATUS
EFIAPI
= (*(UINT64 (__fastcall **)(UINT64, UINT64, UINT64, UINT64))HiiDatabase)((
VOID
);
EFI_STATUS
EFIAPI
Lock Callback(
VOID
);
EFI_STATUS
EFIAPI
PPI Callback(
VOID
);
EFI_STATUS
EFIAPI
TcgSIDVariable(
VOID
);
EFI_STATUS
EFIAPI
= (*(INT64 (__fastcall **)(const UINT16 *, VOID *, INT32 *, UINT64 *, UINT64 *))(gRT + 72))((
VOID
);
EFI_STATUS
EFIAPI
UEFI spec version (>= 2.0 supports CreateEventEx)(
VOID
);
EFI_STATUS
EFIAPI
(*(UINT32 *)(gST + 8) >= 0x20000) {(
VOID
);
EFI_STATUS
EFIAPI
GUID(
VOID
);
EFI_STATUS
EFIAPI
Boot Measurement(
VOID
);
EFI_STATUS
EFIAPI
(EFI_GLOBAL_VARIABLE)(
VOID
);
EFI_STATUS
EFIAPI
SecureBoot variable(
VOID
);
EFI_STATUS
EFIAPI
= 23;(
VOID
);
EFI_STATUS
EFIAPI
the buffer(
VOID
);
EFI_STATUS
EFIAPI
and measure SecureBoot(
VOID
);
EFI_STATUS
EFIAPI
= L"SecureBoot";(
VOID
);
EFI_STATUS
EFIAPI
and measure PK(
VOID
);
EFI_STATUS
EFIAPI
= DataSize;(
VOID
);
EFI_STATUS
EFIAPI
and measure KEK(
VOID
);
EFI_STATUS
EFIAPI
and measure db(
VOID
);
EFI_STATUS
EFIAPI
and measure dbx(
VOID
);
EFI_STATUS
EFIAPI
measurement(
VOID
);
EFI_STATUS
EFIAPI
(1, 50694677);(
VOID
);
EFI_STATUS
EFIAPI
allocated buffer(
VOID
);
EFI_STATUS
EFIAPI
variable into TPM(
VOID
);
EFI_STATUS
EFIAPI
PC Client Platform Firmware Profile Specification(
VOID
);
EFI_STATUS
EFIAPI
variable Name + VendorGuid + Data into PCR(
VOID
);
EFI_STATUS
EFIAPI
Tpm2MeasureVariable (PcrIndex, EventType, VarName, VendorGuid, Data, DataSize);(
VOID
);
EFI_STATUS
EFIAPI
Measurement(
VOID
);
EFI_STATUS
EFIAPI
local variables(
VOID
);
EFI_STATUS
EFIAPI
if GPT already measured(
VOID
);
EFI_STATUS
EFIAPI
(gGptMeasurementCount > 0) {(
VOID
);
EFI_STATUS
EFIAPI
Block I/O protocol and Disk I/O protocol(
VOID
);
EFI_STATUS
EFIAPI
((*(INT64 (__fastcall **)(UINT64, VOID *, UINT64 *))(gBS + 152))((
VOID
);
EFI_STATUS
EFIAPI
buffer for partition table header(
VOID
);
EFI_STATUS
EFIAPI
= (*(INT64 (__fastcall **)(UINT64, UINT64, UINT64 *))(gBS + 64))((
VOID
);
EFI_STATUS
EFIAPI
partition table header(
VOID
);
EFI_STATUS
EFIAPI
for GPT protective MBR signature (0xEE)(
VOID
);
EFI_STATUS
EFIAPI
GPT header(
VOID
);
EFI_STATUS
EFIAPI
buffer for partition entries(
VOID
);
EFI_STATUS
EFIAPI
partition entries(
VOID
);
EFI_STATUS
EFIAPI
= (*(INT64 (__fastcall **)(UINT64, UINT64, UINT64, UINT64, UINT64))(DiskIo + 8))((
VOID
);
EFI_STATUS
EFIAPI
valid partition entries(
VOID
);
EFI_STATUS
EFIAPI
= GptBlockIo;(
VOID
);
EFI_STATUS
EFIAPI
buffer for combined GPT data(
VOID
);
EFI_STATUS
EFIAPI
= GptValidEntries * *(UINT32 *)(GptBlockIo + 84) + 100;(
VOID
);
EFI_STATUS
EFIAPI
and populate GPT data buffer(
VOID
);
EFI_STATUS
EFIAPI
*(UINT32 *)((UINT8 *)Action + 342) = BufferSize;(
VOID
);
EFI_STATUS
EFIAPI
GPT header to buffer(
VOID
);
EFI_STATUS
EFIAPI
= GptDiskIo;(
VOID
);
EFI_STATUS
EFIAPI
GPT measurement into TPM(
VOID
);
EFI_STATUS
EFIAPI
(ValidIndex) {(
VOID
);
EFI_STATUS
EFIAPI
2.0 Hash Algorithm Implementations(
VOID
);
EFI_STATUS
EFIAPI
implements the SHA-256 message schedule and compression loop(
VOID
);
EFI_STATUS
EFIAPI
implements the SHA-512 message schedule and compression loop(
VOID
);
EFI_STATUS
EFIAPI
processes TPM PPI requests (enable/disable/clear).(
VOID
);
EFI_STATUS
EFIAPI
prepares the 80 64-bit words for the SHA-512 compression loop.(
VOID
);
EFI_STATUS
EFIAPI
handles SID (Storage ID) PPI UI interactions.(
VOID
);
EFI_STATUS
EFIAPI
SHA-256 context with initial hash values (H0-H7)(
VOID
);
EFI_STATUS
EFIAPI
= 0x6a09e667, H1 = 0xbb67ae85, H2 = 0x3c6ef372, H3 = 0xa54ff53a(
VOID
);
EFI_STATUS
EFIAPI
= 0x510e527f, H5 = 0x9b05688c, H6 = 0x1f83d9ab, H7 = 0x5be0cd19(
VOID
);
EFI_STATUS
EFIAPI
(Context);(
VOID
);
EFI_STATUS
EFIAPI
Image Measurement(
VOID
);
EFI_STATUS
EFIAPI
parameters(
VOID
);
EFI_STATUS
EFIAPI
(DebugEnabled (64) && DebugLevelEnabled (64)) {(
VOID
);
EFI_STATUS
EFIAPI
TCG2 protocol if not already available(
VOID
);
EFI_STATUS
EFIAPI
(!gTpm20PpiContext) {(
VOID
);
EFI_STATUS
EFIAPI
TPM platform protocol(
VOID
);
EFI_STATUS
EFIAPI
PPI action structure(
VOID
);
EFI_STATUS
EFIAPI
of events(
VOID
);
EFI_STATUS
EFIAPI
AlgCount = 16;(
VOID
);
EFI_STATUS
EFIAPI
active PCR banks and iterate(
VOID
);
EFI_STATUS
EFIAPI
= *(UINT8 *)(Tcg2Protocol + 6);(
VOID
);
EFI_STATUS
EFIAPI
(Sha256Context);(
VOID
);
EFI_STATUS
EFIAPI
((*(UINT32 *)(Tcg2Protocol + 24) & 1) != 0) {(
VOID
);
EFI_STATUS
EFIAPI
Sha256Final (Sha256Context, (UINT8 *)&HashAlg);(
VOID
);
EFI_STATUS
EFIAPI
Sm3Hash (Sm3Context, &HashAlg);(
VOID
);
EFI_STATUS
EFIAPI
Sha384Final (Sm3Context, &HashAlg);(
VOID
);
EFI_STATUS
EFIAPI
Sha512Final (AlignedBuffer, &HashAlg);(
VOID
);
EFI_STATUS
EFIAPI
session approach for SHA-256 (via TCG protocol)(
VOID
);
EFI_STATUS
EFIAPI
sequence start(
VOID
);
EFI_STATUS
EFIAPI
= 4;(
VOID
);
EFI_STATUS
EFIAPI
sequence update(
VOID
);
EFI_STATUS
EFIAPI
sequence complete(
VOID
);
EFI_STATUS
EFIAPI
= 64;(
VOID
);
EFI_STATUS
EFIAPI
(HMAC)(
VOID
);
EFI_STATUS
EFIAPI
hash sequence(
VOID
);
EFI_STATUS
EFIAPI
the data(
VOID
);
EFI_STATUS
EFIAPI
hash sequence and get result(
VOID
);
EFI_STATUS
EFIAPI
String Print Library (Unicode SPrint wrapper)(
VOID
);
EFI_STATUS
EFIAPI
pseudocode reference: sub_8FB8(
VOID
);
EFI_STATUS
EFIAPI
assertion checks for Buffer, Format, and BufferSize limits.(
VOID
);
EFI_STATUS
EFIAPI
the internal BasePrintLib SPrint function.(
VOID
);
EFI_STATUS
EFIAPI
!= NULL(
VOID
);
EFI_STATUS
EFIAPI
<= PcdMaximumUnicodeStringLength(
VOID
);
EFI_STATUS
EFIAPI
0;(
VOID
);
EFI_STATUS
EFIAPI
pseudocode reference: sub_E220(
VOID
);
EFI_STATUS
EFIAPI
function:(
VOID
);
EFI_STATUS
EFIAPI
TCG PPI Variable Initialization(
VOID
);
EFI_STATUS
EFIAPI
Set Variable (wrapper for gRT->SetVariable)(
VOID
);
EFI_STATUS
EFIAPI
Forward Declarations (to be resolved with renamed functions)(
VOID
);
EFI_STATUS
EFIAPI
-> PrepareSecureBootMeasurement(
VOID
);
EFI_STATUS
EFIAPI
-> MeasureSidPpi(
VOID
);
EFI_STATUS
EFIAPI
-> InitializeTpmPlatformHardware(
VOID
);
EFI_STATUS
EFIAPI
-> FinalizeTpm20PlatformInit(
VOID
);
EFI_STATUS
EFIAPI
-> SendEnableBlockSidCommand(
VOID
);
EFI_STATUS
EFIAPI
-> SidPpiCallback2 (SID callback variant)(
VOID
);
EFI_STATUS
EFIAPI
-> Tpm2BdsCallback(
VOID
);
EFI_STATUS
EFIAPI
-> TpmPlatformHardwareInit(
VOID
);
EFI_STATUS
EFIAPI
-> Tpm20PlatformReadyBoot(
VOID
);
EFI_STATUS
EFIAPI
-> HandleTpm20PpiRequest(
VOID
);
EFI_STATUS
EFIAPI
-> LocateTcgPlatformProtocol(
VOID
);
EFI_STATUS
EFIAPI
-> DebugPrint(
VOID
);
EFI_STATUS
EFIAPI
-> AssertHandler(
VOID
);
EFI_STATUS
EFIAPI
-> DebugEnabled(
VOID
);
EFI_STATUS
EFIAPI
-> DebugLevelEnabled(
VOID
);
EFI_STATUS
EFIAPI
-> CompareMemory(
VOID
);
EFI_STATUS
EFIAPI
-> RegisterTpmPlatformReadyBoot(
VOID
);
EFI_STATUS
EFIAPI
-> InitializeAmiTcgPpiVar(
VOID
);
EFI_STATUS
EFIAPI
-> GetMemoryConfig(
VOID
);
EFI_STATUS
EFIAPI
-> Tpm2MeasureVariable(
VOID
);
EFI_STATUS
EFIAPI
-> Sha256InitCore(
VOID
);
EFI_STATUS
EFIAPI
-> Sha256UpdateCore(
VOID
);
EFI_STATUS
EFIAPI
-> Sha256FinalCore(
VOID
);
EFI_STATUS
EFIAPI
-> MeasureGpt(
VOID
);
EFI_STATUS
EFIAPI
-> Sm3Init(
VOID
);
EFI_STATUS
EFIAPI
-> Sm3Update(
VOID
);
EFI_STATUS
EFIAPI
-> Sm3Final(
VOID
);
EFI_STATUS
EFIAPI
-> Sha512InitCore(
VOID
);
EFI_STATUS
EFIAPI
-> Sha384FinalCore(
VOID
);
EFI_STATUS
EFIAPI
-> Sha512Sm3Init(
VOID
);
EFI_STATUS
EFIAPI
-> Sha512Sm3Update(
VOID
);
EFI_STATUS
EFIAPI
-> Sha512FinalCore(
VOID
);
EFI_STATUS
EFIAPI
-> AmiSetVariable(
VOID
);
EFI_STATUS
EFIAPI
-> Tpm2PcrExtend(
VOID
);
EFI_STATUS
EFIAPI
-> EnableWriteProtection(
VOID
);
EFI_STATUS
EFIAPI
-> ReadTimeStampCounter(
VOID
);
EFI_STATUS
EFIAPI
-> CpuPause(
VOID
);
EFI_STATUS
EFIAPI
-> EnableInterruptFlag(
VOID
);
EFI_STATUS
EFIAPI
-> SetInterruptFlag(
VOID
);
EFI_STATUS
EFIAPI
-> ClearInterruptFlag(
VOID
);
EFI_STATUS
EFIAPI
-> ReadControlRegister(
VOID
);
#endif /* __TPM20PLATFORMDXE_H__ */