Newer
Older
AMI-Aptio-BIOS-Reversed / AmiModulePkg / AmiStatusCode / StatusCodeSmm / StatusCodeSmm.h
@Ajax Dong Ajax Dong 2 days ago 15 KB Full restructure
/** @file
  StatusCodeSmm.h -- Header for StatusCodeSmm

Copyright (c) HR650X BIOS Decompilation Project
**/

#ifndef __STATUSCODESMM_H__
#define __STATUSCODESMM_H__

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

//
// Function Prototypes
//

EFI_STATUS
EFIAPI
ModuleEntryPoint(
  VOID
);

EFI_STATUS
EFIAPI
SmmStatusCodeDriverInit(
  VOID
);

EFI_STATUS
EFIAPI
SmmStatusCodeRegisterProtocols(
  VOID
);

EFI_STATUS
EFIAPI
SmmStatusCodeRegisterCallback(
  VOID
);

EFI_STATUS
EFIAPI
SmmStatusCodeUnregisterCallback(
  VOID
);

EFI_STATUS
EFIAPI
SmmStatusCodeDispatchCallbacks(
  VOID
);

EFI_STATUS
EFIAPI
SmmStatusCodeHandler(
  VOID
);

EFI_STATUS
EFIAPI
SmmStatusCodeAssertHandler(
  VOID
);

EFI_STATUS
EFIAPI
SmmStatusCodeProgress(
  VOID
);

EFI_STATUS
EFIAPI
StatusCodeFormatString(
  VOID
);

EFI_STATUS
EFIAPI
StatusCodeReportError(
  VOID
);

EFI_STATUS
EFIAPI
StatusCodeWriteSerial(
  VOID
);

EFI_STATUS
EFIAPI
StatusCodeReportToSerial(
  VOID
);

EFI_STATUS
EFIAPI
StatusCodeWritePort80(
  VOID
);

EFI_STATUS
EFIAPI
StatusCodeCheckAndEnable(
  VOID
);

EFI_STATUS
EFIAPI
Status Code Reporting Driver(
  VOID
);

EFI_STATUS
EFIAPI
and reconstructed from IDA Pro analysis of the(
  VOID
);

EFI_STATUS
EFIAPI
HR650X BIOS UEFI firmware image. All functions have been(
  VOID
);

EFI_STATUS
EFIAPI
and renamed for clarity.(
  VOID
);

EFI_STATUS
EFIAPI
SMM driver provides status code reporting infrastructure(
  VOID
);

EFI_STATUS
EFIAPI
System Management Mode. It intercepts SMI events triggered(
  VOID
);

EFI_STATUS
EFIAPI
status code writes and routes them to configurable output(
  VOID
);

EFI_STATUS
EFIAPI
(serial, port 80 POST codes) and registered callbacks.(
  VOID
);

EFI_STATUS
EFIAPI
variable storage(
  VOID
);

EFI_STATUS
EFIAPI
gImageHandle;(
  VOID
);

EFI_STATUS
EFIAPI
data tables (defined in .rdata)(
  VOID
);

EFI_STATUS
EFIAPI
code lookup table.(
  VOID
);

EFI_STATUS
EFIAPI
entry: {UINT32 StatusCode, UINT32 StringOffset}(
  VOID
);

EFI_STATUS
EFIAPI
by {0, 0}.(
  VOID
);

EFI_STATUS
EFIAPI
memory error(
  VOID
);

EFI_STATUS
EFIAPI
thermal error(
  VOID
);

EFI_STATUS
EFIAPI
low voltage(
  VOID
);

EFI_STATUS
EFIAPI
high voltage(
  VOID
);

EFI_STATUS
EFIAPI
CPU ECC error(
  VOID
);

EFI_STATUS
EFIAPI
};(
  VOID
);

EFI_STATUS
EFIAPI
Entry Point (_ModuleEntryPoint at 0x500)(
  VOID
);

EFI_STATUS
EFIAPI
UEFI driver entry. Initializes SMM environment, registers(
  VOID
);

EFI_STATUS
EFIAPI
handlers with error recovery via SetJump/LongJump.(
  VOID
);

EFI_STATUS
EFIAPI
EFIAPI(
  VOID
);

EFI_STATUS
EFIAPI
ASSERTs fire only if LongJump fails (should never happen)(
  VOID
);

EFI_STATUS
EFIAPI
(0x5B4)(
  VOID
);

EFI_STATUS
EFIAPI
the SMM driver environment:(
  VOID
);

EFI_STATUS
EFIAPI
SmmStatusCodeDriverInit ((
  VOID
);

EFI_STATUS
EFIAPI
global pointers(
  VOID
);

EFI_STATUS
EFIAPI
SMM Base2 protocol(
  VOID
);

EFI_STATUS
EFIAPI
SMM Access2 protocol to get SMRAM sizes(
  VOID
);

EFI_STATUS
EFIAPI
PCI Express base address from PCD(
  VOID
);

EFI_STATUS
EFIAPI
HOB list(
  VOID
);

EFI_STATUS
EFIAPI
LPC serial port (if enabled)(
  VOID
);

EFI_STATUS
EFIAPI
config address 0xFA004 = LPC command register (B0/D31/F0/Reg4)(
  VOID
);

EFI_STATUS
EFIAPI
config address 0xFA000 = LPC vendor/device ID register(
  VOID
);

EFI_STATUS
EFIAPI
I/O base to 0x500(
  VOID
);

EFI_STATUS
EFIAPI
memory space (bit 1 of command register)(
  VOID
);

EFI_STATUS
EFIAPI
for TCO timer to stabilize(
  VOID
);

EFI_STATUS
EFIAPI
0x508 is the TCO I/O base register(
  VOID
);

EFI_STATUS
EFIAPI
interrupt state(
  VOID
);

EFI_STATUS
EFIAPI
(0xCD0)(
  VOID
);

EFI_STATUS
EFIAPI
three SMM handlers:(
  VOID
);

EFI_STATUS
EFIAPI
SmmStatusCodeRegisterProtocols ((
  VOID
);

EFI_STATUS
EFIAPI
#1: Register SmmStatusCodeHandler via EFI_SMM_CPU_IO2_PROTOCOL(
  VOID
);

EFI_STATUS
EFIAPI
causes the handler to fire on CPU I/O operations that generate(
  VOID
);

EFI_STATUS
EFIAPI
code SMI events.(
  VOID
);

EFI_STATUS
EFIAPI
gSmmStatusCodeHandlerPtr(
  VOID
);

EFI_STATUS
EFIAPI
#2: Register callback management protocol(
  VOID
);

EFI_STATUS
EFIAPI
#3: Register progress/status code protocol(
  VOID
);

EFI_STATUS
EFIAPI
(0x8F0)(
  VOID
);

EFI_STATUS
EFIAPI
a callback function pointer in the callback table.(
  VOID
);

EFI_STATUS
EFIAPI
are invoked when status code events occur.(
  VOID
);

EFI_STATUS
EFIAPI
SmmStatusCodeRegisterCallback ((
  VOID
);

EFI_STATUS
EFIAPI
}(
  VOID
);

EFI_STATUS
EFIAPI
empty slot(
  VOID
);

EFI_STATUS
EFIAPI
(0x8A8)(
  VOID
);

EFI_STATUS
EFIAPI
a callback function pointer from the callback table.(
  VOID
);

EFI_STATUS
EFIAPI
SmmStatusCodeUnregisterCallback ((
  VOID
);

EFI_STATUS
EFIAPI
(0x988)(
  VOID
);

EFI_STATUS
EFIAPI
all registered callback functions and invokes each with(
  VOID
);

EFI_STATUS
EFIAPI
status code parameters.(
  VOID
);

EFI_STATUS
EFIAPI
a reentrancy guard (gReentrancyGuard) to prevent recursive(
  VOID
);

EFI_STATUS
EFIAPI
dispatch.(
  VOID
);

EFI_STATUS
EFIAPI
already in progress(
  VOID
);

EFI_STATUS
EFIAPI
SmmStatusCodeDispatchCallbacks ((
  VOID
);

EFI_STATUS
EFIAPI
(0xB84)(
  VOID
);

EFI_STATUS
EFIAPI
main SMI status code handler. Called when a status code SMI(
  VOID
);

EFI_STATUS
EFIAPI
registered callbacks, and outputs to serial.(
  VOID
);

EFI_STATUS
EFIAPI
SmmStatusCodeHandler ((
  VOID
);

EFI_STATUS
EFIAPI
per-status-code callbacks(
  VOID
);

EFI_STATUS
EFIAPI
(0xC24)(
  VOID
);

EFI_STATUS
EFIAPI
when an ASSERT condition fires in SMM. Formats the assert(
  VOID
);

EFI_STATUS
EFIAPI
with file/line info, dispatches assert-specific callbacks(
  VOID
);

EFI_STATUS
EFIAPI
outputs via serial.(
  VOID
);

EFI_STATUS
EFIAPI
SmmStatusCodeAssertHandler ((
  VOID
);

EFI_STATUS
EFIAPI
assert-specific callbacks(
  VOID
);

EFI_STATUS
EFIAPI
(0xA58)(
  VOID
);

EFI_STATUS
EFIAPI
status code progress (type 1) and error (type 2) events.(
  VOID
);

EFI_STATUS
EFIAPI
registered callbacks, runs enable/disable checks(
  VOID
);

EFI_STATUS
EFIAPI
the status string, outputs to serial, and handles(
  VOID
);

EFI_STATUS
EFIAPI
EFI progress codes (type == 2), also queries a progress function(
  VOID
);

EFI_STATUS
EFIAPI
for matching dispatch.(
  VOID
);

EFI_STATUS
EFIAPI
SmmStatusCodeProgress ((
  VOID
);

EFI_STATUS
EFIAPI
enable/disable filter check callbacks(
  VOID
);

EFI_STATUS
EFIAPI
progress-specific callbacks(
  VOID
);

EFI_STATUS
EFIAPI
progress type 2, dispatch via progress function table(
  VOID
);

EFI_STATUS
EFIAPI
(0xE1C)(
  VOID
);

EFI_STATUS
EFIAPI
the status code data GUID to determine its type and(
  VOID
);

EFI_STATUS
EFIAPI
the output string accordingly:(
  VOID
);

EFI_STATUS
EFIAPI
text from data payload, converts Unicode to ASCII(
  VOID
);

EFI_STATUS
EFIAPI
format string from offset +120 and args from offset +24(
  VOID
);

EFI_STATUS
EFIAPI
line number and file/description from payload.(
  VOID
);

EFI_STATUS
EFIAPI
type=2, class=0x90, subclass=7.(
  VOID
);

EFI_STATUS
EFIAPI
line number at offset +60 and file at offset +80.(
  VOID
);

EFI_STATUS
EFIAPI
GUID match + Type 2: delegates to StatusCodeReportError(
  VOID
);

EFI_STATUS
EFIAPI
GUID match + other types: returns 0 (no output)(
  VOID
);

EFI_STATUS
EFIAPI
StatusCodeFormatString ((
  VOID
);

EFI_STATUS
EFIAPI
header to get GUID(
  VOID
);

EFI_STATUS
EFIAPI
#1: Plain string data GUID(
  VOID
);

EFI_STATUS
EFIAPI
string from payload(
  VOID
);

EFI_STATUS
EFIAPI
#2: Standard string type GUID(
  VOID
);

EFI_STATUS
EFIAPI
#3: AMI DataHub ASSERT GUID(
  VOID
);

EFI_STATUS
EFIAPI
#4: AMI ASSERT GUID(
  VOID
);

EFI_STATUS
EFIAPI
through to FormatAssert(
  VOID
);

EFI_STATUS
EFIAPI
(0xD94)(
  VOID
);

EFI_STATUS
EFIAPI
up a status code in the known error code table (gErrorCodeTable).(
  VOID
);

EFI_STATUS
EFIAPI
the code is found, formats "ERROR: %a" with the error description(
  VOID
);

EFI_STATUS
EFIAPI
from the status code data payload.(
  VOID
);

EFI_STATUS
EFIAPI
the code is not found (or table empty), formats the raw status(
  VOID
);

EFI_STATUS
EFIAPI
as three hex fields: "ERROR: Class:%X; Subclass:%X; Operation: %X\n"(
  VOID
);

EFI_STATUS
EFIAPI
StatusCodeReportError ((
  VOID
);

EFI_STATUS
EFIAPI
in table - format with string from data payload(
  VOID
);

EFI_STATUS
EFIAPI
found - format raw hex values(
  VOID
);

EFI_STATUS
EFIAPI
(0xFE8)(
  VOID
);

EFI_STATUS
EFIAPI
a string to the serial port with proper CR/LF handling.(
  VOID
);

EFI_STATUS
EFIAPI
StatusCodeWriteSerial ((
  VOID
);

EFI_STATUS
EFIAPI
"\n" - flush accumulated prefix and emit "\r\n"(
  VOID
);

EFI_STATUS
EFIAPI
(0x105C)(
  VOID
);

EFI_STATUS
EFIAPI
to StatusCodeWriteSerial (primary) and any additional(
  VOID
);

EFI_STATUS
EFIAPI
handlers registered in the output callback table.(
  VOID
);

EFI_STATUS
EFIAPI
StatusCodeReportToSerial ((
  VOID
);

EFI_STATUS
EFIAPI
serial output(
  VOID
);

EFI_STATUS
EFIAPI
(0x109C)(
  VOID
);

EFI_STATUS
EFIAPI
a byte to the hardware POST code display port (0x80).(
  VOID
);

EFI_STATUS
EFIAPI
for debug POST cards or BMC POST code capture.(
  VOID
);

EFI_STATUS
EFIAPI
StatusCodeWritePort80 ((
  VOID
);

EFI_STATUS
EFIAPI
(0x10A8)(
  VOID
);

EFI_STATUS
EFIAPI
type 1 (progress) and type 2 (error), looks up the status code(
  VOID
);

EFI_STATUS
EFIAPI
in the enable/disable table. If the code is enabled, invokes(
  VOID
);

EFI_STATUS
EFIAPI
port 80 write callbacks (including StatusCodeWritePort80).(
  VOID
);

EFI_STATUS
EFIAPI
StatusCodeCheckAndEnable ((
  VOID
);

EFI_STATUS
EFIAPI
the enable table for this type(
  VOID
);

EFI_STATUS
EFIAPI
are standard UEFI library implementations compiled into this(
  VOID
);

EFI_STATUS
EFIAPI
by the build system (MdePkg BaseLib, BasePrintLib, etc.).(
  VOID
);

EFI_STATUS
EFIAPI
are documented here for completeness.(
  VOID
);

EFI_STATUS
EFIAPI
(0x2C0) / LongJump (0x360)(
  VOID
);

EFI_STATUS
EFIAPI
saves: RBP, stack pointer, return address, XMM regs(
  VOID
);

EFI_STATUS
EFIAPI
restores context and jumps to the saved return point.(
  VOID
);

EFI_STATUS
EFIAPI
(0x1130)(
  VOID
);

EFI_STATUS
EFIAPI
the jump buffer alignment (must be 8-byte aligned).(
  VOID
);

EFI_STATUS
EFIAPI
(0x132C)(
  VOID
);

EFI_STATUS
EFIAPI
an ASSERT message string using AsciiSPrint.(
  VOID
);

EFI_STATUS
EFIAPI
(0x1210)(
  VOID
);

EFI_STATUS
EFIAPI
to the standard error interface (via protocol at 0x3ED0).(
  VOID
);

EFI_STATUS
EFIAPI
the protocol is available, formats: file, line, message.(
  VOID
);

EFI_STATUS
EFIAPI
(0x1178)(
  VOID
);

EFI_STATUS
EFIAPI
the SMM standard error protocol (GUID at 0x3ED0) and caches(
  VOID
);

EFI_STATUS
EFIAPI
in qword_4F68.(
  VOID
);

EFI_STATUS
EFIAPI
(0x11C8)(
  VOID
);

EFI_STATUS
EFIAPI
debug print: checks error level against current setting(
  VOID
);

EFI_STATUS
EFIAPI
the standard error interface if enabled.(
  VOID
);

EFI_STATUS
EFIAPI
(0x2AC8)(
  VOID
);

EFI_STATUS
EFIAPI
the debug print error level from CMOS offset 0x4C.(
  VOID
);

EFI_STATUS
EFIAPI
the CMOS value is out of range, checks a memory-mapped(
  VOID
);

EFI_STATUS
EFIAPI
(0xFDAF0490) for the BMC-preserved value.(
  VOID
);

EFI_STATUS
EFIAPI
0 (disabled), 0x80000004 (level 1), or 0x80000006 (level 2+).(
  VOID
);

EFI_STATUS
EFIAPI
(0x2A18)(
  VOID
);

EFI_STATUS
EFIAPI
Super I/O type via SIO port 0x72/0x73:(
  VOID
);

EFI_STATUS
EFIAPI
bytes to serial port data register at (base + 0).(
  VOID
);

EFI_STATUS
EFIAPI
for THR empty (LSR bit 6). Bursts up to 16 bytes per(
  VOID
);

EFI_STATUS
EFIAPI
(0x1404) - ~3573 bytes (0xDF5)(
  VOID
);

EFI_STATUS
EFIAPI
UEFI AsciiSPrint implementation from BasePrintLib.(
  VOID
);

EFI_STATUS
EFIAPI
format specifiers:(
  VOID
);

EFI_STATUS
EFIAPI
length limited to 0xF4240 (1,000,000) characters.(
  VOID
);

EFI_STATUS
EFIAPI
(0x2984)(
  VOID
);

EFI_STATUS
EFIAPI
wrapper that va_start's and calls SPrint.(
  VOID
);

EFI_STATUS
EFIAPI
(0x2544) - Unicode-aware printf(
  VOID
);

EFI_STATUS
EFIAPI
SPrint implementation from PrintLibInternal.c supporting(
  VOID
);

EFI_STATUS
EFIAPI
standard format specifiers documented above.(
  VOID
);

EFI_STATUS
EFIAPI
(0x247C)(
  VOID
);

EFI_STATUS
EFIAPI
EFI_STATUS value to human-readable string:(
  VOID
);

EFI_STATUS
EFIAPI
(0)             -> "EFI_SUCCESS"(
  VOID
);

EFI_STATUS
EFIAPI
codes (0x2xxxxxxx)  -> "EFI_WARN_..."(
  VOID
);

EFI_STATUS
EFIAPI
codes (0x8xxxxxxx)    -> various error strings(
  VOID
);

EFI_STATUS
EFIAPI
codes (0xAxxxxxxx) -> "EFI_INTERRUPT_PENDING_..."(
  VOID
);

EFI_STATUS
EFIAPI
values         -> NULL(
  VOID
);

EFI_STATUS
EFIAPI
table is embedded in .rdata at known offsets.(
  VOID
);

EFI_STATUS
EFIAPI
(0x2334)(
  VOID
);

EFI_STATUS
EFIAPI
integer value to ASCII string in given base (10 or 16).(
  VOID
);

EFI_STATUS
EFIAPI
negative values for base 10.(
  VOID
);

EFI_STATUS
EFIAPI
(0x23A8)(
  VOID
);

EFI_STATUS
EFIAPI
a decimal string to UINTN. Skips leading whitespace(
  VOID
);

EFI_STATUS
EFIAPI
+/- sign. Supports hex digits a-f/A-F (returns base-10).(
  VOID
);

EFI_STATUS
EFIAPI
(0x1358)(
  VOID
);

EFI_STATUS
EFIAPI
a buffer with repeated character (1-byte ASCII or 2-byte Unicode).(
  VOID
);

EFI_STATUS
EFIAPI
(0x138C)(
  VOID
);

EFI_STATUS
EFIAPI
UINT64 to ASCII hex string using LookupTable "0123456789ABCDEF".(
  VOID
);

EFI_STATUS
EFIAPI
(0x29A4)(
  VOID
);

EFI_STATUS
EFIAPI
compare. Compares byte-by-byte with qword optimization for(
  VOID
);

EFI_STATUS
EFIAPI
sections.(
  VOID
);

EFI_STATUS
EFIAPI
(0x1250)(
  VOID
);

EFI_STATUS
EFIAPI
if an address falls within any known SMRAM descriptor range.(
  VOID
);

EFI_STATUS
EFIAPI
(0x1294)(
  VOID
);

EFI_STATUS
EFIAPI
SMM pool memory via gSmst->SmmAllocatePool.(
  VOID
);

EFI_STATUS
EFIAPI
(0x12C4)(
  VOID
);

EFI_STATUS
EFIAPI
memory via gSmst->SmmFreePool if in SMRAM, or gBS->FreePool(
  VOID
);

EFI_STATUS
EFIAPI
not. Used during module unload or error cleanup.(
  VOID
);

EFI_STATUS
EFIAPI
(0x2BF4)(
  VOID
);

EFI_STATUS
EFIAPI
if a HOB entry matches a known GUID type by comparing(
  VOID
);

EFI_STATUS
EFIAPI
Buffer_ and Buffer__0 GUIDs.(
  VOID
);

EFI_STATUS
EFIAPI
(0x225C)(
  VOID
);

EFI_STATUS
EFIAPI
the System Table firmware volume HOB entries to find the(
  VOID
);

EFI_STATUS
EFIAPI
matching known GUIDs. Caches result in qword_4F78.(
  VOID
);

EFI_STATUS
EFIAPI
(0x2CD4)(
  VOID
);

EFI_STATUS
EFIAPI
the EFI_PCD_PROTOCOL (GUID {11B34006-...})(
  VOID
);

EFI_STATUS
EFIAPI
gBS->LocateProtocol. Caches result in qword_4F90.(
  VOID
);

EFI_STATUS
EFIAPI
(0x2220)(
  VOID
);

EFI_STATUS
EFIAPI
the MMIO address for a PCI config space register:(
  VOID
);

EFI_STATUS
EFIAPI
= Address + gPciExpressBaseAddress(
  VOID
);

EFI_STATUS
EFIAPI
Address < 0x10000000.(
  VOID
);

EFI_STATUS
EFIAPI
(0x21FC)(
  VOID
);

EFI_STATUS
EFIAPI
a byte to PCI config space via the PCIe MMIO address window.(
  VOID
);

EFI_STATUS
EFIAPI
UEFI BaseLib string utility functions.(
  VOID
);

EFI_STATUS
EFIAPI
(0x3E0), ReadTsc (0x3F0)(
  VOID
);

EFI_STATUS
EFIAPI
(0x400), DisableInterrupts (0x410)(
  VOID
);

EFI_STATUS
EFIAPI
(0x420)(
  VOID
);

EFI_STATUS
EFIAPI
functions:(
  VOID
);

EFI_STATUS
EFIAPI
= _mm_pause()(
  VOID
);

EFI_STATUS
EFIAPI
= __rdtsc()(
  VOID
);

EFI_STATUS
EFIAPI
= _enable()  (STI)(
  VOID
);

EFI_STATUS
EFIAPI
= _disable() (CLI)(
  VOID
);

EFI_STATUS
EFIAPI
= __getcallerseflags() (PUSHFQ)(
  VOID
);

EFI_STATUS
EFIAPI
(0x2C64) - Write 16-bit value to I/O port(
  VOID
);

EFI_STATUS
EFIAPI
(0x2CA4) - Read 32-bit value from I/O port(
  VOID
);

EFI_STATUS
EFIAPI
(0x2B18) - Read 16-bit from potentially unaligned addr(
  VOID
);

EFI_STATUS
EFIAPI
(0x2B48) - Read 64-bit from potentially unaligned addr(
  VOID
);

EFI_STATUS
EFIAPI
(0x2B78) - Unicode string length(
  VOID
);

EFI_STATUS
EFIAPI
(0x2BD0) - ASCII string length(
  VOID
);

#endif /* __STATUSCODESMM_H__ */