/** @file
MeUma.h -- Header for MeUma
Copyright (c) HR650X BIOS Decompilation Project
**/
#ifndef __MEUMA_H__
#define __MEUMA_H__
#include "../uefi_headers/Uefi.h"
//
// Function Prototypes
//
EFI_STATUS
EFIAPI
ModuleEntryPoint(
VOID
);
EFI_STATUS
EFIAPI
ReadUnaligned64(
VOID
);
EFI_STATUS
EFIAPI
WriteUnaligned64(
VOID
);
EFI_STATUS
EFIAPI
IoRead16(
VOID
);
EFI_STATUS
EFIAPI
IoWrite16(
VOID
);
EFI_STATUS
EFIAPI
IoRead32(
VOID
);
EFI_STATUS
EFIAPI
ReadPciCfg16(
VOID
);
EFI_STATUS
EFIAPI
PcdGet32(
VOID
);
EFI_STATUS
EFIAPI
PcdGetSize(
VOID
);
EFI_STATUS
EFIAPI
CompareGuid(
VOID
);
EFI_STATUS
EFIAPI
ValidateUmaLocation(
VOID
);
EFI_STATUS
EFIAPI
GetOnBoardMeType(
VOID
);
EFI_STATUS
EFIAPI
GetMeFs1FromHob(
VOID
);
EFI_STATUS
EFIAPI
GetPeiPerformance(
VOID
);
EFI_STATUS
EFIAPI
FindPerformanceLogIndex(
VOID
);
EFI_STATUS
EFIAPI
IsHeciSkipped(
VOID
);
EFI_STATUS
EFIAPI
SendHeciMessage(
VOID
);
EFI_STATUS
EFIAPI
MicroDelay(
VOID
);
EFI_STATUS
EFIAPI
// ---------------------------------------------------------------------------(
VOID
);
EFI_STATUS
EFIAPI
PPI descriptor (GUID + EFI_PEI_PPI_DESCRIPTOR) for the ME UMA PPI.(
VOID
);
EFI_STATUS
EFIAPI
in the .data section at 0xffda3390.(
VOID
);
EFI_STATUS
EFIAPI
EFI_GUID gMeUmaPpiGuid;(
VOID
);
EFI_STATUS
EFIAPI
actual ME_UMA_PPI structure(
VOID
);
EFI_STATUS
EFIAPI
/ state byte at 0xffda339c(
VOID
);
EFI_STATUS
EFIAPI
prototypes(
VOID
);
EFI_STATUS
EFIAPI
functions (previously sub_*)(
VOID
);
EFI_STATUS
EFIAPI
actual read goes through the memory-mapped ECAM or I/O CFG mechanism.(
VOID
);
EFI_STATUS
EFIAPI
construct the address and decode it via the PCI Express library.(
VOID
);
EFI_STATUS
EFIAPI
Address = (PciCfg.Reg | 0) & 0xFFF; // simplified: see PciExpressLib(
VOID
);
EFI_STATUS
EFIAPI
Helpers(
VOID
);
EFI_STATUS
EFIAPI
to Hob + 24(
VOID
);
EFI_STATUS
EFIAPI
Parameter Validation(
VOID
);
EFI_STATUS
EFIAPI
if the ME is in a debug or error mode that skips UMA checking.(
VOID
);
EFI_STATUS
EFIAPI
(!(UINT8)ModuleEntryPoint (NULL, NULL)) {(
VOID
);
EFI_STATUS
EFIAPI
UMA size:(
VOID
);
EFI_STATUS
EFIAPI
= (MeNcMemLowLimit & 0xFFF80000) + 0x80000 - MeNcMemLowBaseAddr(
VOID
);
EFI_STATUS
EFIAPI
+= MeNcMemHighLimit(
VOID
);
EFI_STATUS
EFIAPI
= (MeNcMemLowLimit & 0xFFF80000) + 0x80000 - MeNcMemLowBaseAddr;(
VOID
);
EFI_STATUS
EFIAPI
the UMA parameters from Silicon registers (via PCI config access).(
VOID
);
EFI_STATUS
EFIAPI
= *(UINT32 *)((UINTN)PciCfgRead (0) + 240); // offset 0xF0(
VOID
);
EFI_STATUS
EFIAPI
0xF4(
VOID
);
EFI_STATUS
EFIAPI
base addresses are zero, skip validation.(
VOID
);
EFI_STATUS
EFIAPI
(MeNcMemLowBaseAddr == 0 || MeNcMemLowLimit == 0) {(
VOID
);
EFI_STATUS
EFIAPI
the UMA base addresses match Silicon registers.(
VOID
);
EFI_STATUS
EFIAPI
(MeNcMemLowBaseAddr != UmaBase || MeNcMemHighBaseAddr != UmaBaseExt) {(
VOID
);
EFI_STATUS
EFIAPI
UMA size: must not exceed 64 MB, must be even (2 MB aligned).(
VOID
);
EFI_STATUS
EFIAPI
(MeUmaSizeCalc >> 20 > 64) {(
VOID
);
EFI_STATUS
EFIAPI
Type Detection(
VOID
);
EFI_STATUS
EFIAPI
Debug Mode via PCH PMC (DWR flow).(
VOID
);
EFI_STATUS
EFIAPI
(IsPchDwrFlow ()) {(
VOID
);
EFI_STATUS
EFIAPI
}(
VOID
);
EFI_STATUS
EFIAPI
the ME Firmware Status (MEFS) register from PCI config.(
VOID
);
EFI_STATUS
EFIAPI
= *(UINT32 *)((UINTN)PciCfgRead (0) + 64); // offset 0x40(
VOID
);
EFI_STATUS
EFIAPI
back to HOB if MEFS is invalid.(
VOID
);
EFI_STATUS
EFIAPI
= GetMeFs1FromHob ();(
VOID
);
EFI_STATUS
EFIAPI
the ME type from the status.(
VOID
);
EFI_STATUS
EFIAPI
((MeFirmwareStatus & 0xF) == 0xF) {(
VOID
);
EFI_STATUS
EFIAPI
type(
VOID
);
EFI_STATUS
EFIAPI
case 2:(
VOID
);
EFI_STATUS
EFIAPI
default:(
VOID
);
EFI_STATUS
EFIAPI
not read HOB, use fallback path.(
VOID
);
EFI_STATUS
EFIAPI
((EFI_D_ERROR, "HECI: GetMeFs1FromHob() Can't read correctly MeFwHob info\n"));(
VOID
);
EFI_STATUS
EFIAPI
Logging (PEI Performance)(
VOID
);
EFI_STATUS
EFIAPI
existing HOB data.(
VOID
);
EFI_STATUS
EFIAPI
fresh HOBs for the performance log and ID array.(
VOID
);
EFI_STATUS
EFIAPI
Message / PPI Installation(
VOID
);
EFI_STATUS
EFIAPI
Point(
VOID
);
EFI_STATUS
EFIAPI
((IoRead32 (1024068) & 0x80) == 0) {(
VOID
);
EFI_STATUS
EFIAPI
if the system has valid ME firmware (skip on debug/error).(
VOID
);
EFI_STATUS
EFIAPI
= (IsHeciSkipped () < 0) ? 0 : byte_FFDA339C;(
VOID
);
EFI_STATUS
EFIAPI
the ME UMA PPI.(
VOID
);
EFI_STATUS
EFIAPI
= GetPeiServices ();(
VOID
);
#endif /* __MEUMA_H__ */