/** @file
  SlotDataUpdateDxeLightningRidgeEXRP.h -- Header for SlotDataUpdateDxeLightningRidgeEXRP

Copyright (c) HR650X BIOS Decompilation Project
**/

#ifndef __SLOTDATAUPDATEDXELIGHTNINGRIDGEEXRP_H__
#define __SLOTDATAUPDATEDXELIGHTNINGRIDGEEXRP_H__

#include "../uefi_headers/Uefi.h"

//
// Function Prototypes
//

EFI_STATUS
EFIAPI
GetSlotCount(
  VOID
);

EFI_STATUS
EFIAPI
GetSlotData(
  VOID
);

EFI_STATUS
EFIAPI
UbaDebugPrint(
  VOID
);

EFI_STATUS
EFIAPI
UbaDebugAssert(
  VOID
);

EFI_STATUS
EFIAPI
ReadUnaligned64(
  VOID
);

EFI_STATUS
EFIAPI
IsHobGuidMatch(
  VOID
);

EFI_STATUS
EFIAPI
InstallSlotData(
  VOID
);

EFI_STATUS
EFIAPI
SlotDataUpdateDxeEntryPoint(
  VOID
);

EFI_STATUS
EFIAPI
Definitions (stored in .rdata section)(
  VOID
);

EFI_STATUS
EFIAPI
gUbaProtocolGuid          = UBA_PROTOCOL_GUID;(
  VOID
);

EFI_STATUS
EFIAPI
Variables(
  VOID
);

EFI_STATUS
EFIAPI
gImageHandle      = NULL;  ///< 0xBF8: Image handle from entry point(
  VOID
);

EFI_STATUS
EFIAPI
Slot Data (embedded in .data section)(
  VOID
);

EFI_STATUS
EFIAPI
PSLT entries are defined statically and registered with the UBA protocol(
  VOID
);

EFI_STATUS
EFIAPI
initialization.(
  VOID
);

EFI_STATUS
EFIAPI
Entry 1 (at 0xBB0, 40 bytes):(
  VOID
);

EFI_STATUS
EFIAPI
Entry 2 (at 0xBD8, 32 bytes):(
  VOID
);

EFI_STATUS
EFIAPI
function pointers at offsets 16 and 32 within Entry 1, and offset 16(
  VOID
);

EFI_STATUS
EFIAPI
Entry 2, are IMAGE_REL_BASED_DIR64 fixups applied by the PE loader(
  VOID
);

EFI_STATUS
EFIAPI
runtime to relocate from RVA to absolute address.(
  VOID
);

EFI_STATUS
EFIAPI
Entry 1 (at 0xBB0, size 40): Primary PSLT with GetSlotCount + GetSlotData(
  VOID
);

EFI_STATUS
EFIAPI
Entry 2 (at 0xBD8, size 32): Secondary PSLT with GetSlotCount only(
  VOID
);

EFI_STATUS
EFIAPI
Implementations(
  VOID
);

EFI_STATUS
EFIAPI
EXRP platform has exactly 2 slots.(
  VOID
);

EFI_STATUS
EFIAPI
2;(
  VOID
);

EFI_STATUS
EFIAPI
through the default slot data unchanged.(
  VOID
);

EFI_STATUS
EFIAPI
platform-specific slot data remapping is needed.(
  VOID
);

EFI_STATUS
EFIAPI
DefaultData;(
  VOID
);

EFI_STATUS
EFIAPI
cached protocol if already located.(
  VOID
);

EFI_STATUS
EFIAPI
(gUbaProtocol != NULL) {(
  VOID
);

EFI_STATUS
EFIAPI
current TPL level by raising to TPL_HIGH_LEVEL and restoring.(
  VOID
);

EFI_STATUS
EFIAPI
the old TPL was above TPL_NOTIFY (0x10), we cannot safely call(
  VOID
);

EFI_STATUS
EFIAPI
(which may block/allocate memory).(
  VOID
);

EFI_STATUS
EFIAPI
too high for LocateProtocol - skip and return NULL.(
  VOID
);

EFI_STATUS
EFIAPI
NULL;(
  VOID
);

EFI_STATUS
EFIAPI
the UBA protocol using its GUID.(
  VOID
);

EFI_STATUS
EFIAPI
registration key(
  VOID
);

EFI_STATUS
EFIAPI
platform type from RTC CMOS register 0x4B.(
  VOID
);

EFI_STATUS
EFIAPI
= IoRead8 (RTC_CMOS_ADDRESS_PORT);(
  VOID
);

EFI_STATUS
EFIAPI
debug routing based on platform type.(
  VOID
);

EFI_STATUS
EFIAPI
(N3 > 3) {(
  VOID
);

EFI_STATUS
EFIAPI
is in the valid platform type range (4-255), use as-is.(
  VOID
);

EFI_STATUS
EFIAPI
routing change needed.(
  VOID
);

EFI_STATUS
EFIAPI
type 0: read hardware strap from fixed memory address.(
  VOID
);

EFI_STATUS
EFIAPI
1 of the strap byte indicates debug capability.(
  VOID
);

EFI_STATUS
EFIAPI
= (*(volatile UINT8 *)PLATFORM_STRAP_ADDRESS & 0x02) | 0x01;(
  VOID
);

EFI_STATUS
EFIAPI
values 1, 2, 3: use directly (valid)(
  VOID
);

EFI_STATUS
EFIAPI
the platform type to a debug route value.(
  VOID
);

EFI_STATUS
EFIAPI
of 0 would have been remapped above, so 1+ is expected.(
  VOID
);

EFI_STATUS
EFIAPI
((N3 - 1) <= 0xFD) {(
  VOID
);

EFI_STATUS
EFIAPI
range: N3 is 1 to 255 (effectively all non-zero values).(
  VOID
);

EFI_STATUS
EFIAPI
(N3 == 1) {(
  VOID
);

EFI_STATUS
EFIAPI
} else {(
  VOID
);

EFI_STATUS
EFIAPI
}(
  VOID
);

EFI_STATUS
EFIAPI
the debug level matches the computed route mask, forward the message.(
  VOID
);

EFI_STATUS
EFIAPI
((DebugRoute & DebugLevel) != 0) {(
  VOID
);

EFI_STATUS
EFIAPI
protocol function index 1 (offset 0x08): DebugPrint(
  VOID
);

EFI_STATUS
EFIAPI
function is called with (Severity, FormatString, VaList).(
  VOID
);

EFI_STATUS
EFIAPI
= (UINT64 (*)(UINT64, CHAR8 *, UINT64 *))(
  VOID
);

EFI_STATUS
EFIAPI
the UBA protocol and call its assert handler.(
  VOID
);

EFI_STATUS
EFIAPI
assert handler is at the same function index as DebugPrint(
  VOID
);

EFI_STATUS
EFIAPI
(UbaGetProtocolInterface () != NULL) {(
  VOID
);

EFI_STATUS
EFIAPI
each GUID as two unaligned 64-bit values and compare.(
  VOID
);

EFI_STATUS
EFIAPI
= ReadUnaligned64 (Guid1);(
  VOID
);

EFI_STATUS
EFIAPI
+ 0x68 (104) = NumberOfTableEntries(
  VOID
);

EFI_STATUS
EFIAPI
+ 0x70 (112) = ConfigurationTable pointer(
  VOID
);

EFI_STATUS
EFIAPI
= *(UINTN *)((UINT8 *)gSystemTable + 104);(
  VOID
);

EFI_STATUS
EFIAPI
the configuration table to find the DXE Services HOB entry.(
  VOID
);

EFI_STATUS
EFIAPI
(Index = 0; Index < HobCount; Index++) {(
  VOID
);

EFI_STATUS
EFIAPI
the DXE Services HOB - cache its VendorTable pointer.(
  VOID
);

EFI_STATUS
EFIAPI
= *(VOID **)(HobEntries + Index * sizeof(EFI_CONFIGURATION_TABLE) + sizeof(EFI_GUID));(
  VOID
);

EFI_STATUS
EFIAPI
Services HOB not found - report error.(
  VOID
);

EFI_STATUS
EFIAPI
(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n");(
  VOID
);

EFI_STATUS
EFIAPI
debug banner identifying this module.(
  VOID
);

EFI_STATUS
EFIAPI
(0x80000000LL, "UBA:SlotDataUpdate-TypeLightningRidgeEXRP\n");(
  VOID
);

EFI_STATUS
EFIAPI
the UBA protocol interface.(
  VOID
);

EFI_STATUS
EFIAPI
= gBootServices->LocateProtocol ((
  VOID
);

EFI_STATUS
EFIAPI
protocol GUID(
  VOID
);

EFI_STATUS
EFIAPI
the UBA SetData function at protocol index 2 (offset 0x10).(
  VOID
);

EFI_STATUS
EFIAPI
*Data, UINTN DataSize)(
  VOID
);

EFI_STATUS
EFIAPI
= (UINT64 (*)(VOID *, EFI_GUID *, VOID *, UINT64))(
  VOID
);

EFI_STATUS
EFIAPI
PSLT Entry 1: Primary slot table with GetSlotCount + GetSlotData.(
  VOID
);

EFI_STATUS
EFIAPI
= UbaSetData (UbaProtocol, &gUbaSlotDataPsl1Guid, (VOID *)mPslEntry1, 40);(
  VOID
);

EFI_STATUS
EFIAPI
PSLT Entry 2: Secondary slot table with GetSlotCount only.(
  VOID
);

EFI_STATUS
EFIAPI
= UbaSetData (UbaProtocol, &gUbaSlotDataPsl2Guid, (VOID *)mPslEntry2, 32);(
  VOID
);

EFI_STATUS
EFIAPI
UEFI global variables.(
  VOID
);

EFI_STATUS
EFIAPI
= ImageHandle;(
  VOID
);

EFI_STATUS
EFIAPI
the HOB list (cached globally in gHobList).(
  VOID
);

EFI_STATUS
EFIAPI
();(
  VOID
);

EFI_STATUS
EFIAPI
platform-specific slot data via UBA protocol.(
  VOID
);

EFI_STATUS
EFIAPI
= InstallSlotData ();(
  VOID
);

#endif /* __SLOTDATAUPDATEDXELIGHTNINGRIDGEEXRP_H__ */