Newer
Older
AMI-Aptio-BIOS-Reversed / PurleyPlatPkg / Ras / Memory / MemRas / MemRas.h
/** @file
  MemRas.h -- Header for MemRas

Copyright (c) HR650X BIOS Decompilation Project
**/

#ifndef __MEMRAS_H__
#define __MEMRAS_H__

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

//
// Function Prototypes
//

EFI_STATUS
EFIAPI
ModuleEntryPoint(
  VOID
);

EFI_STATUS
EFIAPI
MemRasInitGlobals(
  VOID
);

EFI_STATUS
EFIAPI
MemRasDriverEntry(
  VOID
);

EFI_STATUS
EFIAPI
MemRasSecondaryInit(
  VOID
);

EFI_STATUS
EFIAPI
MemRasFallbackInit(
  VOID
);

EFI_STATUS
EFIAPI
auto-generated UEFI header from AutoGen.c(
  VOID
);

EFI_STATUS
EFIAPI
GUIDs (referenced in .rdata section as unk_22B*)(
  VOID
);

EFI_STATUS
EFIAPI
are populated from HOBs and platform policy protocols at init time.(
  VOID
);

EFI_STATUS
EFIAPI
read from HOB at offset 1677(
  VOID
);

EFI_STATUS
EFIAPI
- 0=non-lockstep, 1=lockstep(
  VOID
);

EFI_STATUS
EFIAPI
from platform policy protocol(
  VOID
);

EFI_STATUS
EFIAPI
UINT8  SpareMode;           // byte_65ED2(
  VOID
);

EFI_STATUS
EFIAPI
UINT32 MemoryBase;          // dword_63C4C(
  VOID
);

EFI_STATUS
EFIAPI
configuration from HOB(
  VOID
);

EFI_STATUS
EFIAPI
UINT64 MemoryRangeEnd;      // qword_27848(
  VOID
);

EFI_STATUS
EFIAPI
UINT32 NumChannels;         // qword_27838(
  VOID
);

EFI_STATUS
EFIAPI
UINT32 MemoryGranularity;   // qword_27828(
  VOID
);

EFI_STATUS
EFIAPI
[0x5CC](
  VOID
);

EFI_STATUS
EFIAPI
DXE driver entry point. Called by DXE dispatcher.(
  VOID
);

EFI_STATUS
EFIAPI
EFIAPI(
  VOID
);

EFI_STATUS
EFIAPI
1: Allocate and initialize global context.(
  VOID
);

EFI_STATUS
EFIAPI
socket configuration buffer, protocol structure(
  VOID
);

EFI_STATUS
EFIAPI
buffers, and error log buffer.(
  VOID
);

EFI_STATUS
EFIAPI
2: Primary driver entry - allocate protocol, populate(
  VOID
);

EFI_STATUS
EFIAPI
table, read platform config from HOB and policy protocols(
  VOID
);

EFI_STATUS
EFIAPI
protocol interface, register S3 save events(
  VOID
);

EFI_STATUS
EFIAPI
VLS (Virtual Lockstep) info.(
  VOID
);

EFI_STATUS
EFIAPI
= MemRasDriverEntry(ImageHandle, SystemTable);(
  VOID
);

EFI_STATUS
EFIAPI
3 (fallback): On failure, attempt secondary initialization.(
  VOID
);

EFI_STATUS
EFIAPI
memory initialization, event registration, S3 boot script.(
  VOID
);

EFI_STATUS
EFIAPI
= MemRasFallbackInit(ImageHandle, SystemTable);(
  VOID
);

EFI_STATUS
EFIAPI
first from ModuleEntryPoint. Allocates and initializes all(
  VOID
);

EFI_STATUS
EFIAPI
sequence (23 sub-initializers):(
  VOID
);

EFI_STATUS
EFIAPI
MemRasInitGlobals((
  VOID
);

EFI_STATUS
EFIAPI
sub-initializer is a library constructor from the(
  VOID
);

EFI_STATUS
EFIAPI
static libraries. They are called sequentially.(
  VOID
);

EFI_STATUS
EFIAPI
debug builds, each failure triggers ASSERT via(
  VOID
);

EFI_STATUS
EFIAPI
pattern for each call is:(
  VOID
);

EFI_STATUS
EFIAPI
= LibraryConstructor();(
  VOID
);

EFI_STATUS
EFIAPI
1: Core library initialization(
  VOID
);

EFI_STATUS
EFIAPI
- BaseLib / lock init(
  VOID
);

EFI_STATUS
EFIAPI
- UefiBootServicesTableLib constructor(
  VOID
);

EFI_STATUS
EFIAPI
- UefiRuntimeServicesTableLib constructor(
  VOID
);

EFI_STATUS
EFIAPI
2: Driver support libraries(
  VOID
);

EFI_STATUS
EFIAPI
- UefiDriverEntryPoint / UefiLib constructors(
  VOID
);

EFI_STATUS
EFIAPI
- [stub, returns success](
  VOID
);

EFI_STATUS
EFIAPI
- Memory allocation library(
  VOID
);

EFI_STATUS
EFIAPI
- HOB library (mHobList initialization)(
  VOID
);

EFI_STATUS
EFIAPI
- SmmMmPciBaseLib constructor(
  VOID
);

EFI_STATUS
EFIAPI
- S3BootScriptLib / SmmLockBoxSmmLib constructor(
  VOID
);

EFI_STATUS
EFIAPI
- AcpiTimerLib constructor(
  VOID
);

EFI_STATUS
EFIAPI
- DxeServicesTableLib + TianoCustomDecompressLib(
  VOID
);

EFI_STATUS
EFIAPI
3: Platform-specific RAS libraries(
  VOID
);

EFI_STATUS
EFIAPI
- mpsyncdatalib + emcaplatformhookslib init(
  VOID
);

EFI_STATUS
EFIAPI
- SmmLnvSendIpmiCmdLib / SmmVariable protocol(
  VOID
);

EFI_STATUS
EFIAPI
- AmiErrReportingLib init(
  VOID
);

EFI_STATUS
EFIAPI
- OemRasLib init(
  VOID
);

EFI_STATUS
EFIAPI
- Platform-specific RAS init(
  VOID
);

EFI_STATUS
EFIAPI
EFI_SUCCESS;(
  VOID
);

EFI_STATUS
EFIAPI
driver entry. Allocates protocol structure, reads HOB data(
  VOID
);

EFI_STATUS
EFIAPI
function pointer table, installs protocol interface(
  VOID
);

EFI_STATUS
EFIAPI
sets up event handlers.(
  VOID
);

EFI_STATUS
EFIAPI
1: Allocate context structure (24 bytes) and zero it.(
  VOID
);

EFI_STATUS
EFIAPI
-> ContextBuffer (sizeof=24)(
  VOID
);

EFI_STATUS
EFIAPI
= gBS->AllocatePool(EfiBootServicesData, 24, &ContextBuffer);(
  VOID
);

EFI_STATUS
EFIAPI
2: Allocate protocol structure (568 bytes) and zero it.(
  VOID
);

EFI_STATUS
EFIAPI
-> Protocol (MEM_RAS_PROTOCOL)(
  VOID
);

EFI_STATUS
EFIAPI
= gBS->AllocatePool(EfiBootServicesData, 568, &Protocol);(
  VOID
);

EFI_STATUS
EFIAPI
protocol to context(
  VOID
);

EFI_STATUS
EFIAPI
3: Allocate socket configuration buffer (32768 bytes).(
  VOID
);

EFI_STATUS
EFIAPI
-> SocketConfig(
  VOID
);

EFI_STATUS
EFIAPI
in .data section (global variable)(
  VOID
);

EFI_STATUS
EFIAPI
= gBS->AllocatePool(EfiBootServicesData, 0x8000, &gSocketConfig);(
  VOID
);

EFI_STATUS
EFIAPI
scratch buffer tracking(
  VOID
);

EFI_STATUS
EFIAPI
4: Allocate scratch buffer (25037 bytes).(
  VOID
);

EFI_STATUS
EFIAPI
8 bytes of protocol structure stores pointer to this.(
  VOID
);

EFI_STATUS
EFIAPI
= gBS->AllocatePool(EfiBootServicesData, 25037, &Protocol[0]);(
  VOID
);

EFI_STATUS
EFIAPI
5: Allocate error log buffer (1643 bytes).(
  VOID
);

EFI_STATUS
EFIAPI
-> gErrorLogBuffer(
  VOID
);

EFI_STATUS
EFIAPI
= gBS->AllocatePool(EfiBootServicesData, 1643, &gErrorLogBuffer);(
  VOID
);

EFI_STATUS
EFIAPI
6: Locate PlatformRasPolicy protocol (unk_22BB0).(
  VOID
);

EFI_STATUS
EFIAPI
provides platform RAS configuration data.(
  VOID
);

EFI_STATUS
EFIAPI
= gBS->LocateProtocol(&gPlatformRasPolicyGuid, NULL, &PlatformPolicy);(
  VOID
);

EFI_STATUS
EFIAPI
7: Initialize protocol signature.(
  VOID
);

EFI_STATUS
EFIAPI
8: Populate function pointer table.(
  VOID
);

EFI_STATUS
EFIAPI
function pointers are installed at their respective(
  VOID
);

EFI_STATUS
EFIAPI
within the protocol structure.(
  VOID
);

EFI_STATUS
EFIAPI
Protocol->SpareRank                     = MemRasSpareRank;(
  VOID
);

EFI_STATUS
EFIAPI
Protocol->ForwardAddrTranslate          = MemRasForwardAddrTranslate;(
  VOID
);

EFI_STATUS
EFIAPI
9: Locate platform RAS policy protocol (unk_22B20).(
  VOID
);

EFI_STATUS
EFIAPI
the HOB list pointer with system configuration.(
  VOID
);

EFI_STATUS
EFIAPI
= gBS->LocateProtocol(&gPlatformRasHobGuid, NULL, (VOID **)&PlatformPolicy);(
  VOID
);

EFI_STATUS
EFIAPI
10: Locate CPU CSR access and additional protocol.(
  VOID
);

EFI_STATUS
EFIAPI
= gBS->LocateProtocol(&gCpuCsrAccessGuid, NULL, (VOID **)&CpuCsrAccess);(
  VOID
);

EFI_STATUS
EFIAPI
11: Read platform configuration from policy protocol.(
  VOID
);

EFI_STATUS
EFIAPI
1677: Channel mode (lockstep bit)(
  VOID
);

EFI_STATUS
EFIAPI
1780: VLS enable flag(
  VOID
);

EFI_STATUS
EFIAPI
1782: Spare mode(
  VOID
);

EFI_STATUS
EFIAPI
1777: RAS mode (0=SDDC, 1=ADDDC, etc.)(
  VOID
);

EFI_STATUS
EFIAPI
2067: Number of sockets(
  VOID
);

EFI_STATUS
EFIAPI
280:  Memory base address / range(
  VOID
);

EFI_STATUS
EFIAPI
4:    System memory size(
  VOID
);

EFI_STATUS
EFIAPI
8:    Number of channels(
  VOID
);

EFI_STATUS
EFIAPI
12:   Memory type(
  VOID
);

EFI_STATUS
EFIAPI
20:   Memory granularity(
  VOID
);

EFI_STATUS
EFIAPI
= (UINT8 *)*(UINTN *)PlatformPolicy;(
  VOID
);

EFI_STATUS
EFIAPI
12: Initialize 4 socket entries in scratch buffer.(
  VOID
);

EFI_STATUS
EFIAPI
byte at offset 1606 to 1 for each socket.(
  VOID
);

EFI_STATUS
EFIAPI
(UINT32 Socket = 0; Socket < 4; Socket++) {(
  VOID
);

EFI_STATUS
EFIAPI
13: Install MemRas protocol interface.(
  VOID
);

EFI_STATUS
EFIAPI
data: Protocol structure (MEM_RAS_PROTOCOL *)(
  VOID
);

EFI_STATUS
EFIAPI
handle init(
  VOID
);

EFI_STATUS
EFIAPI
to MEM_RAS_PROTOCOL *(
  VOID
);

EFI_STATUS
EFIAPI
14: Register S3 boot script save handler.(
  VOID
);

EFI_STATUS
EFIAPI
protocol for gEfiMemRasS3SaveProtocolGuid.(
  VOID
);

EFI_STATUS
EFIAPI
15: Initialize VLS (Virtual Lockstep) state.(
  VOID
);

EFI_STATUS
EFIAPI
variable doesn't exist, creates it. Locates VariableArchProtocol(
  VOID
);

EFI_STATUS
EFIAPI
reads back "VLSEstablished" to verify.(
  VOID
);

EFI_STATUS
EFIAPI
16: Initialize spare copy done handler.(
  VOID
);

EFI_STATUS
EFIAPI
17: Initialize rank sparing event handler.(
  VOID
);

EFI_STATUS
EFIAPI
18: Conditionally initialize patrol scrub.(
  VOID
);

EFI_STATUS
EFIAPI
NumSockets >= 3 or NumSockets <= 1, start patrol scrub.(
  VOID
);

EFI_STATUS
EFIAPI
(NumSockets >= 3 || NumSockets <= 1) {(
  VOID
);

EFI_STATUS
EFIAPI
19: Initialize alternate spare rank path.(
  VOID
);

EFI_STATUS
EFIAPI
20: Register per-socket MCE events (if configured).(
  VOID
);

EFI_STATUS
EFIAPI
platform config byte (offset 35) has bits 2 and 4 set(
  VOID
);

EFI_STATUS
EFIAPI
and unk_22C50.(
  VOID
);

EFI_STATUS
EFIAPI
((HobData[35] & 0x14) == 0x14) {(
  VOID
);

EFI_STATUS
EFIAPI
from ModuleEntryPoint when MemRasInitGlobals() succeeds.(
  VOID
);

EFI_STATUS
EFIAPI
unk_23560 context is valid, calls MemRasDriverEntry().(
  VOID
);

EFI_STATUS
EFIAPI
sets global status to indicate failure.(
  VOID
);

EFI_STATUS
EFIAPI
status initialized to error (0x8000000000000001)(
  VOID
);

EFI_STATUS
EFIAPI
= 0x8000000000000001uLL;(
  VOID
);

EFI_STATUS
EFIAPI
if context (unk_23560) has setjmp/longjmp already set up.(
  VOID
);

EFI_STATUS
EFIAPI
(!MemRasContextIsReady(&unk_23560)) {(
  VOID
);

EFI_STATUS
EFIAPI
was not initialized, so this is first entry.(
  VOID
);

EFI_STATUS
EFIAPI
the full driver entry.(
  VOID
);

EFI_STATUS
EFIAPI
Status;(
  VOID
);

EFI_STATUS
EFIAPI
never reach here - ASSERT failure.(
  VOID
);

EFI_STATUS
EFIAPI
when MemRasDriverEntry() returns an error.(
  VOID
);

EFI_STATUS
EFIAPI
alternative initialization path for error recovery.(
  VOID
);

EFI_STATUS
EFIAPI
steps:(
  VOID
);

EFI_STATUS
EFIAPI
the per-node error handling progress and pending bitmaps.(
  VOID
);

EFI_STATUS
EFIAPI
(RAS_ERROR_PROGRESS):(
  VOID
);

EFI_STATUS
EFIAPI
= Clear Progress bit for NodeId(
  VOID
);

EFI_STATUS
EFIAPI
= Set Progress bit for NodeId (must have Pending bit set)(
  VOID
);

EFI_STATUS
EFIAPI
= Get Progress status(
  VOID
);

EFI_STATUS
EFIAPI
(RAS_ERROR_PENDING):(
  VOID
);

EFI_STATUS
EFIAPI
= Clear Pending bit for NodeId(
  VOID
);

EFI_STATUS
EFIAPI
= Set Pending bit for NodeId (must have Pending bit clear)(
  VOID
);

EFI_STATUS
EFIAPI
= Get Pending status(
  VOID
);

EFI_STATUS
EFIAPI
(RAS_ERROR_GET_STATUS):(
  VOID
);

EFI_STATUS
EFIAPI
= Get Progress status (via dword_23680)(
  VOID
);

EFI_STATUS
EFIAPI
= Get Pending status (via dword_23684)(
  VOID
);

EFI_STATUS
EFIAPI
UINT8  NodeId(
  VOID
);

EFI_STATUS
EFIAPI
UINT32 Operation(
  VOID
);

EFI_STATUS
EFIAPI
UINT32 *Status OPTIONAL(
  VOID
);

EFI_STATUS
EFIAPI
(Operation) {(
  VOID
);

EFI_STATUS
EFIAPI
0: // Progress(
  VOID
);

EFI_STATUS
EFIAPI
(*Status) {(
  VOID
);

EFI_STATUS
EFIAPI
0: // Clear(
  VOID
);

EFI_STATUS
EFIAPI
&= ~(1 << NodeId);(
  VOID
);

EFI_STATUS
EFIAPI
1: // Set(
  VOID
);

EFI_STATUS
EFIAPI
|= (1 << NodeId);(
  VOID
);

EFI_STATUS
EFIAPI
EFI_INVALID_PARAMETER;(
  VOID
);

EFI_STATUS
EFIAPI
1: // Pending(
  VOID
);

EFI_STATUS
EFIAPI
2: // Get - return Progress bitmap(
  VOID
);

EFI_STATUS
EFIAPI
3: // Get - return Pending bitmap(
  VOID
);

#endif /* __MEMRAS_H__ */