/** @file
CapsuleRuntimeDxe.h -- Header for CapsuleRuntimeDxe
Copyright (c) HR650X BIOS Decompilation Project
**/
#ifndef __CAPSULERUNTIMEDXE_H__
#define __CAPSULERUNTIMEDXE_H__
#include "../uefi_headers/Uefi.h"
//
// Function Prototypes
//
EFI_STATUS
EFIAPI
CapsuleRuntimeDxeDriverEntryPoint(
VOID
);
EFI_STATUS
EFIAPI
CapsuleUpdateCapsule(
VOID
);
EFI_STATUS
EFIAPI
CapsuleQueryCapsuleCapabilities(
VOID
);
EFI_STATUS
EFIAPI
IsCapspaceGuidEqual(
VOID
);
EFI_STATUS
EFIAPI
ReadUnaligned64(
VOID
);
EFI_STATUS
EFIAPI
CheckCapsuleType(
VOID
);
EFI_STATUS
EFIAPI
GetCapsuleRuntimeProtocol(
VOID
);
EFI_STATUS
EFIAPI
ModuleEntryPoint(
VOID
);
EFI_STATUS
EFIAPI
DebugAssertInternal(
VOID
);
EFI_STATUS
EFIAPI
DebugPrint(
VOID
);
EFI_STATUS
EFIAPI
VirtualAddressChangeEvent(
VOID
);
EFI_STATUS
EFIAPI
ExitBootServicesEvent(
VOID
);
EFI_STATUS
EFIAPI
RuntimeCapsuleEvent(
VOID
);
EFI_STATUS
EFIAPI
CapsuleRuntimeVariableEvent(
VOID
);
EFI_STATUS
EFIAPI
AsmCpuid(
VOID
);
EFI_STATUS
EFIAPI
data - boot-time only references(
VOID
);
EFI_STATUS
EFIAPI
gImageHandle = NULL;(
VOID
);
EFI_STATUS
EFIAPI
copies for runtime transition(
VOID
);
EFI_STATUS
EFIAPI
*gBS_Runtime = NULL;(
VOID
);
EFI_STATUS
EFIAPI
configuration globals(
VOID
);
EFI_STATUS
EFIAPI
gCapsuleMaxSize = 104857600; // 100 MB(
VOID
);
EFI_STATUS
EFIAPI
MB(
VOID
);
EFI_STATUS
EFIAPI
services function table (obtained via gBS->LocateProtocol)(
VOID
);
EFI_STATUS
EFIAPI
the protocol GUID.(
VOID
);
EFI_STATUS
EFIAPI
VOID *mCapsuleRuntimeProtocol = NULL;(
VOID
);
EFI_STATUS
EFIAPI
{0x...} for the capsule runtime protocol (placeholder)(
VOID
);
EFI_STATUS
EFIAPI
and unk_3030 are GUID structures used for GUID comparison(
VOID
);
EFI_STATUS
EFIAPI
is a GUID table used by capsule type detection(
VOID
);
EFI_STATUS
EFIAPI
prototypes (forward declarations for local functions)(
VOID
);
EFI_STATUS
EFIAPI
EFIAPI(
VOID
);
EFI_STATUS
EFIAPI
UEFI Boot/Runtime Services Library state(
VOID
);
EFI_STATUS
EFIAPI
register the capsule runtime protocol.(
VOID
);
EFI_STATUS
EFIAPI
(ImageHandle, SystemTable);(
VOID
);
EFI_STATUS
EFIAPI
the capsule runtime protocol.(
VOID
);
EFI_STATUS
EFIAPI
gBS->InstallMultipleProtocolInterfaces. Here we approximate the(
VOID
);
EFI_STATUS
EFIAPI
that sets up gRT->UpdateCapsule / gRT->QueryCapsuleCapabilities.(
VOID
);
EFI_STATUS
EFIAPI
decompiled code writes:(
VOID
);
EFI_STATUS
EFIAPI
14(
VOID
);
EFI_STATUS
EFIAPI
15(
VOID
);
EFI_STATUS
EFIAPI
and install the capsule runtime protocol(
VOID
);
EFI_STATUS
EFIAPI
= gBS->InstallMultipleProtocolInterfaces ((
VOID
);
EFI_STATUS
EFIAPI
on failure (debug builds only)(
VOID
);
EFI_STATUS
EFIAPI
((EFI_D_ERROR, "\nASSERT_EFI_ERROR (Status = %r)\n", Status));(
VOID
);
EFI_STATUS
EFIAPI
constructor(
VOID
);
EFI_STATUS
EFIAPI
= ImageHandle;(
VOID
);
EFI_STATUS
EFIAPI
= SystemTable->RuntimeServices;(
VOID
);
EFI_STATUS
EFIAPI
copies for VirtualAddressChange event(
VOID
);
EFI_STATUS
EFIAPI
= gBS;(
VOID
);
EFI_STATUS
EFIAPI
VirtualAddressChange event (TPL_NOTIFY, EFI_EVENT_SIGNAL_VIRTUAL_ADDRESS_CHANGE)(
VOID
);
EFI_STATUS
EFIAPI
= gBS->CreateEvent ((
VOID
);
EFI_STATUS
EFIAPI
ExitBootServices event (TPL_CALLBACK, EFI_EVENT_SIGNAL_EXIT_BOOT_SERVICES)(
VOID
);
EFI_STATUS
EFIAPI
= gBS->CreateEventEx ((
VOID
);
EFI_STATUS
EFIAPI
constructor: initialize HOB list and register runtime capsule event(
VOID
);
EFI_STATUS
EFIAPI
(gRT == NULL) {(
VOID
);
EFI_STATUS
EFIAPI
event for runtime capsule update notification(
VOID
);
EFI_STATUS
EFIAPI
runtime event for capsule variable (EfiRuntimeServicesData)(
VOID
);
EFI_STATUS
EFIAPI
(sub_14FC)(
VOID
);
EFI_STATUS
EFIAPI
capsule flags:(
VOID
);
EFI_STATUS
EFIAPI
bit 17 (0x20000) = POPULATE_SYSTEM_TABLE(
VOID
);
EFI_STATUS
EFIAPI
bit 18 (0x40000) = INITIATE_RESET(
VOID
);
EFI_STATUS
EFIAPI
bit 17+18 (0x30000) mask(
VOID
);
EFI_STATUS
EFIAPI
bit 18+19 (0x50000) mask(
VOID
);
EFI_STATUS
EFIAPI
both bits 17 and 18 are clear (0x20000 check) or(
VOID
);
EFI_STATUS
EFIAPI
18 is set and bit 17 is clear (0x40000 check), this(
VOID
);
EFI_STATUS
EFIAPI
needs runtime protocol validation.(
VOID
);
EFI_STATUS
EFIAPI
(((ThisCapsule->Flags & 0x30000) == 0x20000) ||(
VOID
);
EFI_STATUS
EFIAPI
system table capsule - break out and process below(
VOID
);
EFI_STATUS
EFIAPI
a populate-system-table capsule; capsule type check required(
VOID
);
EFI_STATUS
EFIAPI
= CheckCapsuleType (ThisCapsule);(
VOID
);
EFI_STATUS
EFIAPI
capsules processed, check if any need reset populate(
VOID
);
EFI_STATUS
EFIAPI
(CapsuleCount == 0) {(
VOID
);
EFI_STATUS
EFIAPI
capsules have bit 16 set - need a reset capsule(
VOID
);
EFI_STATUS
EFIAPI
= (UINT64)EFI_UNSUPPORTED;(
VOID
);
EFI_STATUS
EFIAPI
a capsule without bit 16 set(
VOID
);
EFI_STATUS
EFIAPI
= (UINT64)EFI_INVALID_PARAMETER;(
VOID
);
EFI_STATUS
EFIAPI
we broke out above (populate system table capsule found)(
VOID
);
EFI_STATUS
EFIAPI
through to success path(
VOID
);
EFI_STATUS
EFIAPI
EFI_SUCCESS;(
VOID
);
EFI_STATUS
EFIAPI
(sub_1608)(
VOID
);
EFI_STATUS
EFIAPI
capsule flag checks as UpdateCapsule(
VOID
);
EFI_STATUS
EFIAPI
(sub_1710)(
VOID
);
EFI_STATUS
EFIAPI
(sub_1778)(
VOID
);
EFI_STATUS
EFIAPI
(sub_17A8)(
VOID
);
EFI_STATUS
EFIAPI
if HOB list has room (<= 16 bytes header)(
VOID
);
EFI_STATUS
EFIAPI
= gBS->GetHobListSize ();(
VOID
);
EFI_STATUS
EFIAPI
(sub_1830)(
VOID
);
EFI_STATUS
EFIAPI
debug level from CMOS(
VOID
);
EFI_STATUS
EFIAPI
= IoRead8 (0x70);(
VOID
);
EFI_STATUS
EFIAPI
debug level to severity mask(
VOID
);
EFI_STATUS
EFIAPI
(DebugLevel) {(
VOID
);
EFI_STATUS
EFIAPI
(sub_18B0)(
VOID
);
EFI_STATUS
EFIAPI
(sub_18F0)(
VOID
);
EFI_STATUS
EFIAPI
(sub_18FC)(
VOID
);
EFI_STATUS
EFIAPI
(sub_1924)(
VOID
);
EFI_STATUS
EFIAPI
(sub_1A04)(
VOID
);
EFI_STATUS
EFIAPI
check against 2 known capsule GUIDs in the local table(
VOID
);
EFI_STATUS
EFIAPI
(TableIndex = 0; TableIndex < 2; TableIndex++) {(
VOID
);
EFI_STATUS
EFIAPI
check against the extern capsule GUID list(
VOID
);
EFI_STATUS
EFIAPI
(&gExternCapsuleGuidList == NULL) {(
VOID
);
EFI_STATUS
EFIAPI
(sub_1A94)(
VOID
);
EFI_STATUS
EFIAPI
(sub_1A8C)(
VOID
);
EFI_STATUS
EFIAPI
(sub_1020)(
VOID
);
#endif /* __CAPSULERUNTIMEDXE_H__ */