/** @file
SpsPei.h -- Header for SpsPei
Copyright (c) HR650X BIOS Decompilation Project
**/
#ifndef __SPSPEI_H__
#define __SPSPEI_H__
#include "../uefi_headers/Uefi.h"
//
// Function Prototypes
//
EFI_STATUS
EFIAPI
InternalSetMem32_Block(
VOID
);
EFI_STATUS
EFIAPI
TruncateTo32(
VOID
);
EFI_STATUS
EFIAPI
ReadIdtr(
VOID
);
EFI_STATUS
EFIAPI
ReadUnaligned64(
VOID
);
EFI_STATUS
EFIAPI
WriteUnaligned64(
VOID
);
EFI_STATUS
EFIAPI
GetTimestampFrequency(
VOID
);
EFI_STATUS
EFIAPI
IoRead16(
VOID
);
EFI_STATUS
EFIAPI
IoWrite16(
VOID
);
EFI_STATUS
EFIAPI
IoRead32(
VOID
);
EFI_STATUS
EFIAPI
SpsDebugPrint(
VOID
);
EFI_STATUS
EFIAPI
DebugAssert(
VOID
);
EFI_STATUS
EFIAPI
GetDebugLevel(
VOID
);
EFI_STATUS
EFIAPI
PcdGet32(
VOID
);
EFI_STATUS
EFIAPI
PcdCallbackInit(
VOID
);
EFI_STATUS
EFIAPI
PcdGetFromProtocol(
VOID
);
EFI_STATUS
EFIAPI
PchPwrmBaseGet(
VOID
);
EFI_STATUS
EFIAPI
GetPchSkuType(
VOID
);
EFI_STATUS
EFIAPI
SetPchMmioRange(
VOID
);
EFI_STATUS
EFIAPI
PeiServicesLocatePpi(
VOID
);
EFI_STATUS
EFIAPI
HobIsMatchingGuid(
VOID
);
EFI_STATUS
EFIAPI
GetMeFs1FromHob(
VOID
);
EFI_STATUS
EFIAPI
IsSpsFw(
VOID
);
EFI_STATUS
EFIAPI
IsSpsNormalModeS3(
VOID
);
EFI_STATUS
EFIAPI
MicroSecondDelaySpin(
VOID
);
EFI_STATUS
EFIAPI
MicroSecondDelay(
VOID
);
EFI_STATUS
EFIAPI
WaitForMeNormalOrRecovery(
VOID
);
EFI_STATUS
EFIAPI
WaitForMeFwInitComplete(
VOID
);
EFI_STATUS
EFIAPI
WaitForMeResetCounterChange(
VOID
);
EFI_STATUS
EFIAPI
SetNmBootMode(
VOID
);
EFI_STATUS
EFIAPI
SpsS3Path(
VOID
);
EFI_STATUS
EFIAPI
SpsNonS3Path(
VOID
);
EFI_STATUS
EFIAPI
FinalizeSpsInit(
VOID
);
EFI_STATUS
EFIAPI
PpiNotifyHeciReady(
VOID
);
EFI_STATUS
EFIAPI
ExecutePreDidReset(
VOID
);
EFI_STATUS
EFIAPI
IccSetGetCurrentClockingMode(
VOID
);
EFI_STATUS
EFIAPI
PeiHeciSetSscAlternate(
VOID
);
EFI_STATUS
EFIAPI
SpsPeiEntryPoint(
VOID
);
EFI_STATUS
EFIAPI
ModuleEntryPoint(
VOID
);
EFI_STATUS
EFIAPI
GetBootMode(
VOID
);
EFI_STATUS
EFIAPI
SetWatchdogTimer(
VOID
);
EFI_STATUS
EFIAPI
GUIDs defined in the .data section(
VOID
);
EFI_STATUS
EFIAPI
EFI_GUID gHeci1PpiGuid;(
VOID
);
EFI_STATUS
EFIAPI
descriptors for PPI registration(
VOID
);
EFI_STATUS
EFIAPI
EFI_PEI_NOTIFY_DESCRIPTOR mS3NotifyDesc;(
VOID
);
EFI_STATUS
EFIAPI
Wrappers / Internal Helpers(
VOID
);
EFI_STATUS
EFIAPI
and Assert(
VOID
);
EFI_STATUS
EFIAPI
0-3: directly interpret(
VOID
);
EFI_STATUS
EFIAPI
(Value == 0) {(
VOID
);
EFI_STATUS
EFIAPI
> 3: check if n3_0 is zero (backup from memory)(
VOID
);
EFI_STATUS
EFIAPI
(n3_0 == 0) {(
VOID
);
EFI_STATUS
EFIAPI
fallback from memory-mapped register(
VOID
);
EFI_STATUS
EFIAPI
= (*(volatile UINT8 *)0xFDAF0490 & 2) | 1;(
VOID
);
EFI_STATUS
EFIAPI
only(
VOID
);
EFI_STATUS
EFIAPI
Access via PEI PCD Protocol(
VOID
);
EFI_STATUS
EFIAPI
call-back data structures (used for lazy initialization)(
VOID
);
EFI_STATUS
EFIAPI
UINT32 mPcdTable[] = { 0 };(
VOID
);
EFI_STATUS
EFIAPI
table path(
VOID
);
EFI_STATUS
EFIAPI
= *(UINT32 *)(*(UINT32 *)((UINTN)PcdEntry + 12) +(
VOID
);
EFI_STATUS
EFIAPI
protocol path(
VOID
);
EFI_STATUS
EFIAPI
(PcdProtocol->GetSize (PcdGetPtr) != 0) {(
VOID
);
EFI_STATUS
EFIAPI
/ Platform Helpers(
VOID
);
EFI_STATUS
EFIAPI
LPC device ID from PCH config space at Bus 0, Dev 1F, Func 0(
VOID
);
EFI_STATUS
EFIAPI
= IoRead16 (GetMeFwHob (31, 2));(
VOID
);
EFI_STATUS
EFIAPI
PWRM base from the same config space(
VOID
);
EFI_STATUS
EFIAPI
= 1;(
VOID
);
EFI_STATUS
EFIAPI
= 2;(
VOID
);
EFI_STATUS
EFIAPI
(Host Embedded Controller Interface) Access(
VOID
);
EFI_STATUS
EFIAPI
Firmware HOB Access(
VOID
);
EFI_STATUS
EFIAPI
path: assert MeFwHob->Group[0].FunNumber == HECI1_DEVICE(
VOID
);
EFI_STATUS
EFIAPI
((EFI_D_ERROR, "HECI: GetMeFs1FromHob() Can't read correctly MeFwHob info\n"));(
VOID
);
EFI_STATUS
EFIAPI
DWR flow(
VOID
);
EFI_STATUS
EFIAPI
((*(volatile UINT32 *)(PwrmBase + 300) & 0x8000) != 0) {(
VOID
);
EFI_STATUS
EFIAPI
not yet available; read from HOB directly(
VOID
);
EFI_STATUS
EFIAPI
= GetMeFs1FromHob ();(
VOID
);
EFI_STATUS
EFIAPI
FSM state(
VOID
);
EFI_STATUS
EFIAPI
((MeFs1 & MEFS1_ME_STATE_MASK) == 4) {(
VOID
);
EFI_STATUS
EFIAPI
}(
VOID
);
EFI_STATUS
EFIAPI
case 1: // Debug(
VOID
);
EFI_STATUS
EFIAPI
return 255;(
VOID
);
EFI_STATUS
EFIAPI
return 1;(
VOID
);
EFI_STATUS
EFIAPI
ME firmware state(
VOID
);
EFI_STATUS
EFIAPI
Building(
VOID
);
EFI_STATUS
EFIAPI
/ Delay(
VOID
);
EFI_STATUS
EFIAPI
Message Functions(
VOID
);
EFI_STATUS
EFIAPI
boot mode for context(
VOID
);
EFI_STATUS
EFIAPI
= 4;(
VOID
);
EFI_STATUS
EFIAPI
ME state(
VOID
);
EFI_STATUS
EFIAPI
((MeStatus & MEFS1_ME_STATE_MASK) - 2) {(
VOID
);
EFI_STATUS
EFIAPI
GetMeFwHob (0);(
VOID
);
EFI_STATUS
EFIAPI
(5 - 2 = 3)(
VOID
);
EFI_STATUS
EFIAPI
for ME firmware init(
VOID
);
EFI_STATUS
EFIAPI
= WaitForMeFwInitComplete (GetSpsPolicyPpi ());(
VOID
);
EFI_STATUS
EFIAPI
HECI PPI(
VOID
);
EFI_STATUS
EFIAPI
= PeiServicesLocatePpi (&gHeci1PpiGuid, (VOID **)&HeciPpi);(
VOID
);
EFI_STATUS
EFIAPI
and adjust MMIO range(
VOID
);
EFI_STATUS
EFIAPI
= *(volatile UINT32 *)PCH_MMIO_RANGE_REGISTER;(
VOID
);
EFI_STATUS
EFIAPI
if END_OF_POST should be sent(
VOID
);
EFI_STATUS
EFIAPI
(GetHeciPpi (NULL) != NULL &&(
VOID
);
EFI_STATUS
EFIAPI
flags(
VOID
);
EFI_STATUS
EFIAPI
SPS policy(
VOID
);
EFI_STATUS
EFIAPI
= (SPS_POLICY_PPI *)GetSpsPolicyPpi ();(
VOID
);
EFI_STATUS
EFIAPI
= WaitForMeFwInitComplete (SpsPolicy);(
VOID
);
EFI_STATUS
EFIAPI
the HECI PPI(
VOID
);
EFI_STATUS
EFIAPI
(0);(
VOID
);
EFI_STATUS
EFIAPI
HECI and send ME-BIOS Interface Version request(
VOID
);
EFI_STATUS
EFIAPI
loop for interface version negotiation(
VOID
);
EFI_STATUS
EFIAPI
(RetryCount = 0; RetryCount < HECI_MSG_GET_MEBIOS_RETRY; RetryCount++) {(
VOID
);
EFI_STATUS
EFIAPI
- interface version negotiated(
VOID
);
EFI_STATUS
EFIAPI
Node Manager (NM) if enabled(
VOID
);
EFI_STATUS
EFIAPI
((FeatureSet & FEATURE_NODE_MANAGER) != 0) {(
VOID
);
EFI_STATUS
EFIAPI
configured(
VOID
);
EFI_STATUS
EFIAPI
(SpsPolicy != NULL) {(
VOID
);
EFI_STATUS
EFIAPI
HECI-2(
VOID
);
EFI_STATUS
EFIAPI
(EFI_ERROR (PeiServicesLocatePpi (&gHeci1PpiGuid, (VOID **)&IccPpi)) ||(
VOID
);
EFI_STATUS
EFIAPI
ICC clock settings(
VOID
);
EFI_STATUS
EFIAPI
(IccSetGetCurrentClockingMode (NULL) >= 0) {(
VOID
);
EFI_STATUS
EFIAPI
ICC clock settings if feature enabled(
VOID
);
EFI_STATUS
EFIAPI
((FeatureSet & FEATURE_ICC_CLOCK_SETTINGS) != 0 &&(
VOID
);
EFI_STATUS
EFIAPI
SPS init with HOB publishing(
VOID
);
EFI_STATUS
EFIAPI
((
VOID
);
EFI_STATUS
EFIAPI
buffer published in the HOB (16 bytes)(
VOID
);
EFI_STATUS
EFIAPI
{(
VOID
);
EFI_STATUS
EFIAPI
the SPS info HOB via PEI services(
VOID
);
EFI_STATUS
EFIAPI
= (SPS_INFO_HOB *)HobCreateSpsInfo ((
VOID
);
EFI_STATUS
EFIAPI
SPS info HOB was registered(
VOID
);
EFI_STATUS
EFIAPI
(HobGetGuid (&gSpsInfoHobGuid) == NULL) {(
VOID
);
EFI_STATUS
EFIAPI
existing SPS info HOB(
VOID
);
EFI_STATUS
EFIAPI
= (SPS_INFO_HOB *)HobGetGuid (&gSpsInfoHobGuid);(
VOID
);
EFI_STATUS
EFIAPI
notify descriptor and PPI pointer in the HOB at known offsets(
VOID
);
EFI_STATUS
EFIAPI
+35: low byte of NotifyDesc(
VOID
);
EFI_STATUS
EFIAPI
+36: low byte of Ppi(
VOID
);
EFI_STATUS
EFIAPI
pre-reset ME state(
VOID
);
EFI_STATUS
EFIAPI
= *(volatile UINT32 *)(GetMeFwHob (0) + 64);(
VOID
);
EFI_STATUS
EFIAPI
and send Pre-DID reset MKHI message(
VOID
);
EFI_STATUS
EFIAPI
reset response(
VOID
);
EFI_STATUS
EFIAPI
((MkhiMsgBuf[0] & 0x7F00) != 0 ||(
VOID
);
EFI_STATUS
EFIAPI
for reset counter to change(
VOID
);
EFI_STATUS
EFIAPI
= WaitForMeResetCounterChange ((
VOID
);
EFI_STATUS
EFIAPI
for ME to return to Normal or Recovery state(
VOID
);
EFI_STATUS
EFIAPI
= WaitForMeNormalOrRecovery (&Timeout);(
VOID
);
EFI_STATUS
EFIAPI
(Integrated Clock Control)(
VOID
);
EFI_STATUS
EFIAPI
header: signature 0x40000, version, response fields(
VOID
);
EFI_STATUS
EFIAPI
LocalBuf;(
VOID
);
EFI_STATUS
EFIAPI
HECI PPI and send ICC command(
VOID
);
EFI_STATUS
EFIAPI
Entry Point(
VOID
);
EFI_STATUS
EFIAPI
1: Verify ME firmware is SPS(
VOID
);
EFI_STATUS
EFIAPI
(IsSpsFw () != 1) {(
VOID
);
EFI_STATUS
EFIAPI
2: Read boot mode(
VOID
);
EFI_STATUS
EFIAPI
3: Check pre-DID reset policy(
VOID
);
EFI_STATUS
EFIAPI
((EFI_D_INFO, " execution\n"));(
VOID
);
EFI_STATUS
EFIAPI
in recovery mode: re-initialize(
VOID
);
EFI_STATUS
EFIAPI
((EFI_D_WARN(
VOID
);
EFI_STATUS
EFIAPI
4: Branch to S3 or non-S3 path(
VOID
);
EFI_STATUS
EFIAPI
(BootMode == BOOT_MODE_S3_RESUME) {(
VOID
);
EFI_STATUS
EFIAPI
resume path(
VOID
);
EFI_STATUS
EFIAPI
((EFI_D_INFO, "[SPS] S3 resume path\n"));(
VOID
);
EFI_STATUS
EFIAPI
((EFI_D_INFO, "[SPS] Non S3 boot path\n"));(
VOID
);
EFI_STATUS
EFIAPI
(0, 0, 0, 0, 0);(
VOID
);
EFI_STATUS
EFIAPI
Entry Point (PEI)(
VOID
);
EFI_STATUS
EFIAPI
whether bit 7 of the marker byte is set.(
VOID
);
EFI_STATUS
EFIAPI
(*(CHAR8 *)(GetBootMode () + 1024068) >= 0) {(
VOID
);
EFI_STATUS
EFIAPI
call: set watchdog timer (1280ms)(
VOID
);
EFI_STATUS
EFIAPI
();(
VOID
);
EFI_STATUS
EFIAPI
as initialized(
VOID
);
EFI_STATUS
EFIAPI
Notify Descriptors (in .data section)(
VOID
);
EFI_STATUS
EFIAPI
at 0xFFDA68B0 (for S3 path)(
VOID
);
EFI_STATUS
EFIAPI
= SpsS3Path(
VOID
);
EFI_STATUS
EFIAPI
mS3NotifyDesc = {(
VOID
);
EFI_STATUS
EFIAPI
at 0xFFDA68BC (for Non-S3 path)(
VOID
);
EFI_STATUS
EFIAPI
= PpiNotifyHeciReady(
VOID
);
EFI_STATUS
EFIAPI
mNonS3NotifyDesc = {(
VOID
);
#endif /* __SPSPEI_H__ */