/** @file
FpgaDxe.h -- Header for FpgaDxe
Copyright (c) HR650X BIOS Decompilation Project
**/
#ifndef __FPGADXE_H__
#define __FPGADXE_H__
#include "../uefi_headers/Uefi.h"
//
// Function Prototypes
//
EFI_STATUS
EFIAPI
InternalAssert(
VOID
);
EFI_STATUS
EFIAPI
GetDxeServicesTable(
VOID
);
EFI_STATUS
EFIAPI
GetPcdProtocol(
VOID
);
EFI_STATUS
EFIAPI
GetMmPciBaseProtocol(
VOID
);
EFI_STATUS
EFIAPI
GetHobList(
VOID
);
EFI_STATUS
EFIAPI
GetUsraProtocol(
VOID
);
EFI_STATUS
EFIAPI
GetSmmCommunication(
VOID
);
EFI_STATUS
EFIAPI
S3BootScriptEventNotify(
VOID
);
EFI_STATUS
EFIAPI
S3BootScriptBackupNotify(
VOID
);
EFI_STATUS
EFIAPI
CompareGuid(
VOID
);
EFI_STATUS
EFIAPI
InitializeLibServices(
VOID
);
EFI_STATUS
EFIAPI
DebugPrint(
VOID
);
EFI_STATUS
EFIAPI
PcdGet64(
VOID
);
EFI_STATUS
EFIAPI
UsraReadMmio(
VOID
);
EFI_STATUS
EFIAPI
UsraWriteMmio(
VOID
);
EFI_STATUS
EFIAPI
UsraReadPciCfg(
VOID
);
EFI_STATUS
EFIAPI
UsraReadPciCfgByte(
VOID
);
EFI_STATUS
EFIAPI
SaveLockBox(
VOID
);
EFI_STATUS
EFIAPI
SetLockBoxAttributes(
VOID
);
EFI_STATUS
EFIAPI
RestoreLockBox(
VOID
);
EFI_STATUS
EFIAPI
S3BootScriptSyncNotify(
VOID
);
EFI_STATUS
EFIAPI
S3BootScriptLibInit(
VOID
);
EFI_STATUS
EFIAPI
FpgaConfigurationGetValues(
VOID
);
EFI_STATUS
EFIAPI
FpgaDxeEntryPoint(
VOID
);
EFI_STATUS
EFIAPI
ModuleEntryPoint(
VOID
);
EFI_STATUS
EFIAPI
FpgaOnReadyToBoot(
VOID
);
EFI_STATUS
EFIAPI
ProcessLibraryDestructor(
VOID
);
EFI_STATUS
EFIAPI
variable storage(
VOID
);
EFI_STATUS
EFIAPI
gImageHandle = NULL;(
VOID
);
EFI_STATUS
EFIAPI
VOID *mPcd = NULL; // qword_67A0(
VOID
);
EFI_STATUS
EFIAPI
VOID *mUsra = NULL; // qword_6808(
VOID
);
EFI_STATUS
EFIAPI
VOID *mEventDxeSmmReadyToLock = NULL; // qword_67E0(
VOID
);
EFI_STATUS
EFIAPI
UINTN gPciExpressBaseAddress = 0; // qword_67C8(
VOID
);
EFI_STATUS
EFIAPI
VOID *mSmmCommRegion = NULL; // qword_6810(
VOID
);
EFI_STATUS
EFIAPI
HOB configuration data (from unk_6880)(
VOID
);
/// non-zero if HOB is valid
EFI_STATUS
EFIAPI
gFpgaConfigValid; // byte_6880(
VOID
);
EFI_STATUS
EFIAPI
-- bitmask of active sockets(
VOID
);
EFI_STATUS
EFIAPI
UINT8 gFpgaSktConfig6; // byte_6886(
VOID
);
EFI_STATUS
EFIAPI
UINT8 gFpgaSktConfig32; // byte_68A0(
VOID
);
EFI_STATUS
EFIAPI
-- if ==1, skip DXE lock config(
VOID
);
EFI_STATUS
EFIAPI
(per-socket fields)(
VOID
);
EFI_STATUS
EFIAPI
(4 entries)(
VOID
);
EFI_STATUS
EFIAPI
//(
VOID
);
EFI_STATUS
EFIAPI
boot script context(
VOID
);
EFI_STATUS
EFIAPI
*gS3BootScriptBuf = NULL; // qword_6828(
VOID
);
EFI_STATUS
EFIAPI
UINT8 gBootScriptFlag1 = 0; // byte_67D8(
VOID
);
EFI_STATUS
EFIAPI
VOID *gSmmReadyToLockEvent1= NULL; // qword_67F0(
VOID
);
EFI_STATUS
EFIAPI
VOID *gSmmReadyToLockEvent3= NULL; // qword_67F8(
VOID
);
EFI_STATUS
EFIAPI
GUID storage (mutable runtime data, unk_6740/60/70/50)(
VOID
);
EFI_STATUS
EFIAPI
gLockBoxGuid1[16]; // qword_6740(
VOID
);
EFI_STATUS
EFIAPI
UINT8 gLockBoxGuid3[16]; // qword_6770(
VOID
);
EFI_STATUS
EFIAPI
helper prototypes(
VOID
);
EFI_STATUS
EFIAPI
in 8-byte chunks, then remaining bytes.(
VOID
);
EFI_STATUS
EFIAPI
(Buffer, Length);(
VOID
);
EFI_STATUS
EFIAPI
-- Library constructor: UefiBootServicesTableLib, UefiRuntimeServicesTableLib(
VOID
);
EFI_STATUS
EFIAPI
-- DxeServicesTableLib constructor(
VOID
);
EFI_STATUS
EFIAPI
-- PcdLib constructor(
VOID
);
EFI_STATUS
EFIAPI
-- DxeMmPciBaseLib constructor(
VOID
);
EFI_STATUS
EFIAPI
-- DxeHobLib constructor(
VOID
);
EFI_STATUS
EFIAPI
-- Guid comparison helper(
VOID
);
EFI_STATUS
EFIAPI
-- HOB traversal helpers(
VOID
);
EFI_STATUS
EFIAPI
-- Debug library: DebugPrint / DebugAssert wrappers(
VOID
);
EFI_STATUS
EFIAPI
whether this error level should be displayed and whether(
VOID
);
EFI_STATUS
EFIAPI
debug protocol supports it.(
VOID
);
EFI_STATUS
EFIAPI
(DebugProtocol->IsValid (ErrorLevel)) {(
VOID
);
EFI_STATUS
EFIAPI
-- PCI Express MMIO access(
VOID
);
EFI_STATUS
EFIAPI
= ((PCD_PROTOCOL *)mPcd)->Get64 (TokenNumber);(
VOID
);
EFI_STATUS
EFIAPI
-- USRA (Universal Segment Resource Access) wrappers(
VOID
);
EFI_STATUS
EFIAPI
Descriptor.Address = (Offset & 0xFFF) |(
VOID
);
EFI_STATUS
EFIAPI
byte read(
VOID
);
EFI_STATUS
EFIAPI
-- SMM LockBox protocol locate(
VOID
);
EFI_STATUS
EFIAPI
-- SMM LockBox: SaveLockBox(
VOID
);
EFI_STATUS
EFIAPI
to stack buffer(
VOID
);
EFI_STATUS
EFIAPI
the LockBox command structure(
VOID
);
EFI_STATUS
EFIAPI
(CommBuffer, &gLockBoxGuid1, 16);(
VOID
);
EFI_STATUS
EFIAPI
-- SMM LockBox: SetLockBoxAttributes(
VOID
);
EFI_STATUS
EFIAPI
-- SMM LockBox: RestoreLockBox(
VOID
);
EFI_STATUS
EFIAPI
-- Boot script save event notification(
VOID
);
EFI_STATUS
EFIAPI
saved(
VOID
);
EFI_STATUS
EFIAPI
lock(
VOID
);
EFI_STATUS
EFIAPI
-- Boot script backup notification(
VOID
);
EFI_STATUS
EFIAPI
new length and save the boot script to LockBox(
VOID
);
EFI_STATUS
EFIAPI
(gS3BootScriptBackup != NULL) {(
VOID
);
EFI_STATUS
EFIAPI
-- Boot script context sync (S3 Ready-To-Lock notification event)(
VOID
);
EFI_STATUS
EFIAPI
primary and backup are different, copy primary -> backup(
VOID
);
EFI_STATUS
EFIAPI
(gS3BootScriptBuf != gS3BootScriptBackup) {(
VOID
);
EFI_STATUS
EFIAPI
-- S3 Boot Script Library init(
VOID
);
EFI_STATUS
EFIAPI
if (PcdS3BootScriptBufferSize == 0) {(
VOID
);
EFI_STATUS
EFIAPI
boot script table from boot services data(
VOID
);
EFI_STATUS
EFIAPI
= gBS->AllocatePool ((
VOID
);
EFI_STATUS
EFIAPI
(gS3BootScriptBuf, 32);(
VOID
);
EFI_STATUS
EFIAPI
event notification for when SMM Ready-To-Lock protocol appears(
VOID
);
EFI_STATUS
EFIAPI
= EfiCreateEventReadyToBoot ((
VOID
);
EFI_STATUS
EFIAPI
low byte as flag(
VOID
);
EFI_STATUS
EFIAPI
SMM Ready-To-Lock protocol and register additional notifications(
VOID
);
EFI_STATUS
EFIAPI
(!EFI_ERROR (gBS->LocateProtocol ((
VOID
);
EFI_STATUS
EFIAPI
S3 boot script backup buffer(
VOID
);
EFI_STATUS
EFIAPI
= PcdGet64 (PcdS3BootScriptBufferSizeToken); // 138(
VOID
);
EFI_STATUS
EFIAPI
event for the backup save(
VOID
);
EFI_STATUS
EFIAPI
(gS3BootScriptBackup, 32);(
VOID
);
EFI_STATUS
EFIAPI
sync notification for the final protocol(
VOID
);
EFI_STATUS
EFIAPI
= gEfiSmmReadyToLockProtocol2->RegisterNotification ((
VOID
);
EFI_STATUS
EFIAPI
-- FPGA Configuration HOB retrieval / creation(
VOID
);
EFI_STATUS
EFIAPI
for the FPGA configuration HOB by its GUID(
VOID
);
EFI_STATUS
EFIAPI
= (FPGA_CONFIG_HOB *)GetFirstGuidHob (&gFpgaConfigHobGuid);(
VOID
);
/// create it
EFI_STATUS
EFIAPI
not found(
VOID
);
EFI_STATUS
EFIAPI
((DEBUG_ERROR, "FPGA Configuration Get HOB-> HOB is not found, create it!\n"));(
VOID
);
EFI_STATUS
EFIAPI
per-socket entries (at offset 15)(
VOID
);
EFI_STATUS
EFIAPI
= (UINT8 *)&FpgaHob->Socket[0];(
VOID
);
EFI_STATUS
EFIAPI
start(
VOID
);
EFI_STATUS
EFIAPI
Dst[2] = 0xFF; // max bus(
VOID
);
EFI_STATUS
EFIAPI
Dst[4] = 0; // reserved(
VOID
);
EFI_STATUS
EFIAPI
Dst[6] = 0; // temp threshold N0(
VOID
);
EFI_STATUS
EFIAPI
threshold N1(
VOID
);
EFI_STATUS
EFIAPI
to restore from UEFI variable "FpgaSocketConfig"(
VOID
);
EFI_STATUS
EFIAPI
= 27;(
VOID
);
EFI_STATUS
EFIAPI
per-socket data (indices 0..4)(
VOID
);
EFI_STATUS
EFIAPI
= VariableData;(
VOID
);
EFI_STATUS
EFIAPI
Dst[4] = Src[11]; // gap(
VOID
);
EFI_STATUS
EFIAPI
N0(
VOID
);
EFI_STATUS
EFIAPI
N1(
VOID
);
EFI_STATUS
EFIAPI
-- FpgaDxe entry point(
VOID
);
EFI_STATUS
EFIAPI
1: Initialize library service globals(
VOID
);
EFI_STATUS
EFIAPI
(ImageHandle, SystemTable);(
VOID
);
EFI_STATUS
EFIAPI
2: Get DXE Services Table(
VOID
);
EFI_STATUS
EFIAPI
= GetDxeServicesTable ();(
VOID
);
EFI_STATUS
EFIAPI
3: Get PCD protocol(
VOID
);
EFI_STATUS
EFIAPI
= GetPcdProtocol ();(
VOID
);
EFI_STATUS
EFIAPI
4: Get MM PCI base protocol (for ECAM access)(
VOID
);
EFI_STATUS
EFIAPI
= GetMmPciBaseProtocol ();(
VOID
);
EFI_STATUS
EFIAPI
5: Get HOB list(
VOID
);
EFI_STATUS
EFIAPI
= GetHobList ();(
VOID
);
EFI_STATUS
EFIAPI
6: Get PCI Express base address from PCD(
VOID
);
EFI_STATUS
EFIAPI
= PcdGet64 (PcdPciExpressBaseAddress); // Token 5(
VOID
);
EFI_STATUS
EFIAPI
7: Enable PCI Express MMIO access via PCD bit(
VOID
);
EFI_STATUS
EFIAPI
= PcdGet64 (PcdPciExpressEnable); // Token 4(
VOID
);
EFI_STATUS
EFIAPI
wrapper(
VOID
);
EFI_STATUS
EFIAPI
8: Read CMOS diagnostic status(
VOID
);
EFI_STATUS
EFIAPI
= IoRead32 (0x508); // CMOS port 0x508(
VOID
);
EFI_STATUS
EFIAPI
9: Short delay to stabilize FPGA(
VOID
);
EFI_STATUS
EFIAPI
= IoRead32 (0x508) & 0xFFFFFF;(
VOID
);
EFI_STATUS
EFIAPI
CMOS access(
VOID
);
EFI_STATUS
EFIAPI
(FpgaActive) {(
VOID
);
EFI_STATUS
EFIAPI
request(
VOID
);
EFI_STATUS
EFIAPI
special action needed(
VOID
);
EFI_STATUS
EFIAPI
10: Initialize S3 Boot Script Library(
VOID
);
EFI_STATUS
EFIAPI
= S3BootScriptLibInit ();(
VOID
);
EFI_STATUS
EFIAPI
11: Locate USRA protocol(
VOID
);
EFI_STATUS
EFIAPI
= gBS->LocateProtocol ((
VOID
);
EFI_STATUS
EFIAPI
12: Get FPGA configuration from HOB(
VOID
);
EFI_STATUS
EFIAPI
= FpgaConfigurationGetValues (&FpgaHob);(
VOID
);
EFI_STATUS
EFIAPI
configuration bytes from HOB(
VOID
);
EFI_STATUS
EFIAPI
= *(UINT8 *)((UINT8 *)FpgaHob + 0);(
VOID
);
EFI_STATUS
EFIAPI
per-socket data(
VOID
);
EFI_STATUS
EFIAPI
(&gFpgaSktConfigBuf, (UINT8 *)FpgaHob + 7, 7);(
VOID
);
EFI_STATUS
EFIAPI
13: If no FPGA is active, return successfully (nothing to do)(
VOID
);
EFI_STATUS
EFIAPI
(gFpgaSktActive == 0) {(
VOID
);
EFI_STATUS
EFIAPI
14: Locate GlobalNvsArea ACPI protocol and cache pointer(
VOID
);
EFI_STATUS
EFIAPI
15: Program per-socket FPGA active state into NVS(
VOID
);
EFI_STATUS
EFIAPI
(SocketIndex = 0; SocketIndex < 4; SocketIndex++) {(
VOID
);
EFI_STATUS
EFIAPI
16: Locate protocol for OEM FPGA data(
VOID
);
EFI_STATUS
EFIAPI
17: Initialize SMBus for FPGA access(
VOID
);
EFI_STATUS
EFIAPI
SMBusOp;(
VOID
);
EFI_STATUS
EFIAPI
read byte(
VOID
);
EFI_STATUS
EFIAPI
18: Register ReadyToBoot notification callback(
VOID
);
EFI_STATUS
EFIAPI
((
VOID
);
EFI_STATUS
EFIAPI
-- Module entry point (AutoGen)(
VOID
);
EFI_STATUS
EFIAPI
the driver unload / cleanup handler(
VOID
);
EFI_STATUS
EFIAPI
-- FpgaOnReadyToBoot (ReadyToBoot notification)(
VOID
);
EFI_STATUS
EFIAPI
that we have entered ReadyToBoot(
VOID
);
EFI_STATUS
EFIAPI
SMBus(
VOID
);
EFI_STATUS
EFIAPI
FME BAR array(
VOID
);
EFI_STATUS
EFIAPI
(&gFmeBar, sizeof (gFmeBar));(
VOID
);
EFI_STATUS
EFIAPI
each active socket(
VOID
);
EFI_STATUS
EFIAPI
= 0;(
VOID
);
EFI_STATUS
EFIAPI
MCP limit bus and socket bus number(
VOID
);
EFI_STATUS
EFIAPI
= *(UINT8 *)((UINTN)gGlobalNvsArea + SocketBit * 6 + 6904);(
VOID
);
EFI_STATUS
EFIAPI
current PCI secondary/subordinate buses(
VOID
);
EFI_STATUS
EFIAPI
= UsraReadPciCfgByte (SocketBit, BusNum, 25);(
VOID
);
EFI_STATUS
EFIAPI
segment number from protocol(
VOID
);
EFI_STATUS
EFIAPI
= *(UINT8 *)((UINTN)gFpgaSkuProtocol + SocketBit * 43 + 31);(
VOID
);
EFI_STATUS
EFIAPI
PCI devices to find the virtual FPGA bus(
VOID
);
EFI_STATUS
EFIAPI
= NULL;(
VOID
);
EFI_STATUS
EFIAPI
subordinate bus limit(
VOID
);
EFI_STATUS
EFIAPI
((DEBUG_INFO, "Update Device on B%x:D%x:F%x\n", Bus, Device, Func));(
VOID
);
EFI_STATUS
EFIAPI
the FPGA device behind this root port(
VOID
);
EFI_STATUS
EFIAPI
(PciIo, SocketBit);(
VOID
);
EFI_STATUS
EFIAPI
secondary/subordinate limits via USRA(
VOID
);
EFI_STATUS
EFIAPI
(SocketBit, BusNum, 0, 25, McpLimitBus - 1);(
VOID
);
EFI_STATUS
EFIAPI
FME BAR(
VOID
);
EFI_STATUS
EFIAPI
= UsraReadMmio (SocketBit, (UINT8)(McpLimitBus - 1), 0, 16);(
VOID
);
EFI_STATUS
EFIAPI
primary bus(
VOID
);
EFI_STATUS
EFIAPI
(SocketBit, BusNum, 2, 25, McpLimitBus);(
VOID
);
EFI_STATUS
EFIAPI
Blue BitStream version for active sockets(
VOID
);
EFI_STATUS
EFIAPI
((DEBUG_INFO, "DumpBbsVersion () ...\n"));(
VOID
);
EFI_STATUS
EFIAPI
temperature threshold registers(
VOID
);
EFI_STATUS
EFIAPI
power limit configuration(
VOID
);
EFI_STATUS
EFIAPI
(FpgaMcpPowerLimitConfig () < 0) {(
VOID
);
EFI_STATUS
EFIAPI
miscellaneous initialization(
VOID
);
EFI_STATUS
EFIAPI
();(
VOID
);
EFI_STATUS
EFIAPI
device config(
VOID
);
EFI_STATUS
EFIAPI
((DEBUG_INFO, "FpgaPcieDeviceConfig() ...\n"));(
VOID
);
EFI_STATUS
EFIAPI
lock configuration (unless unlock flag is set)(
VOID
);
EFI_STATUS
EFIAPI
(gFpgaDxeUnlock == 1) {(
VOID
);
EFI_STATUS
EFIAPI
182(
VOID
);
EFI_STATUS
EFIAPI
-- S3 boot script library destructor / cleanup(
VOID
);
EFI_STATUS
EFIAPI
SMM Ready-To-Lock event notifications(
VOID
);
EFI_STATUS
EFIAPI
(gEfiSmmReadyToLockProtocol != NULL) {(
VOID
);
EFI_STATUS
EFIAPI
SMM communication protocol(
VOID
);
EFI_STATUS
EFIAPI
(mSmmCommunication != NULL) {(
VOID
);
#endif /* __FPGADXE_H__ */