/** @file
PeiIpmiBmcInitialize.h -- Header for PeiIpmiBmcInitialize
Copyright (c) HR650X BIOS Decompilation Project
**/
#ifndef __PEIIPMIBMCINITIALIZE_H__
#define __PEIIPMIBMCINITIALIZE_H__
#include "../uefi_headers/Uefi.h"
//
// Function Prototypes
//
EFI_STATUS
EFIAPI
GetReportStatusCode(
VOID
);
EFI_STATUS
EFIAPI
ReportStatusCode(
VOID
);
EFI_STATUS
EFIAPI
DebugAssert(
VOID
);
EFI_STATUS
EFIAPI
IoRead32(
VOID
);
EFI_STATUS
EFIAPI
IoRead16(
VOID
);
EFI_STATUS
EFIAPI
ReadIdtr(
VOID
);
EFI_STATUS
EFIAPI
ReadUnaligned64(
VOID
);
EFI_STATUS
EFIAPI
ReadPcd32(
VOID
);
EFI_STATUS
EFIAPI
GetPcd32(
VOID
);
EFI_STATUS
EFIAPI
GetPcd32Plus(
VOID
);
EFI_STATUS
EFIAPI
CmosRead8(
VOID
);
EFI_STATUS
EFIAPI
PchGetSku(
VOID
);
EFI_STATUS
EFIAPI
PchIsAccessibleByPcr(
VOID
);
EFI_STATUS
EFIAPI
PchPcrWrite(
VOID
);
EFI_STATUS
EFIAPI
PchGetDecodeRanges(
VOID
);
EFI_STATUS
EFIAPI
MicroSecondDelay(
VOID
);
EFI_STATUS
EFIAPI
MicroSecondDelayEx(
VOID
);
EFI_STATUS
EFIAPI
BmcKcsWriteByte(
VOID
);
EFI_STATUS
EFIAPI
BmcKcsReadByte(
VOID
);
EFI_STATUS
EFIAPI
BmcKcsWaitForIbf(
VOID
);
EFI_STATUS
EFIAPI
BmcKcsFlush(
VOID
);
EFI_STATUS
EFIAPI
BmcKcsCheckWriteReady(
VOID
);
EFI_STATUS
EFIAPI
BmcKcsWaitForObf(
VOID
);
EFI_STATUS
EFIAPI
BmcKcsSendMessage(
VOID
);
EFI_STATUS
EFIAPI
BmcKcsReceiveMessage(
VOID
);
EFI_STATUS
EFIAPI
BmcKcsSendData(
VOID
);
EFI_STATUS
EFIAPI
BmcKcsReadData(
VOID
);
EFI_STATUS
EFIAPI
BmcKcsSendCommand(
VOID
);
EFI_STATUS
EFIAPI
BmcKcsGetResponse(
VOID
);
EFI_STATUS
EFIAPI
BmcDoIpmiCmd(
VOID
);
EFI_STATUS
EFIAPI
BmcParseResponseCode(
VOID
);
EFI_STATUS
EFIAPI
PchDecodeRangeSetup(
VOID
);
EFI_STATUS
EFIAPI
PchDecodeRangeProg(
VOID
);
EFI_STATUS
EFIAPI
PchDecodeRangeGet(
VOID
);
EFI_STATUS
EFIAPI
PchDecodeRangeSet(
VOID
);
EFI_STATUS
EFIAPI
CheckPowerFailure(
VOID
);
EFI_STATUS
EFIAPI
DecodeBmcBaseAddress(
VOID
);
EFI_STATUS
EFIAPI
ModuleEntryPoint(
VOID
);
EFI_STATUS
EFIAPI
BmcProcessSoftErrorChar(
VOID
);
EFI_STATUS
EFIAPI
BmcKcsBuildAndSend(
VOID
);
EFI_STATUS
EFIAPI
BootGuardCheckTpm(
VOID
);
EFI_STATUS
EFIAPI
BootGuardGetTpmRevision(
VOID
);
EFI_STATUS
EFIAPI
ConstructorModule(
VOID
);
EFI_STATUS
EFIAPI
LocatePcdPpi(
VOID
);
EFI_STATUS
EFIAPI
data references from .rdata / .data segments(
VOID
);
EFI_STATUS
EFIAPI
UINT32 gPeiServicesIdt; // PPI GUID data(
VOID
);
EFI_STATUS
EFIAPI
variable GUID(
VOID
);
EFI_STATUS
EFIAPI
decode ranges array(
VOID
);
EFI_STATUS
EFIAPI
global reference data(
VOID
);
EFI_STATUS
EFIAPI
assert / report helper(
VOID
);
EFI_STATUS
EFIAPI
UINT32(
VOID
);
EFI_STATUS
EFIAPI
status code with debug message (ReportStatusCodeEx via PPI)(
VOID
);
EFI_STATUS
EFIAPI
ReportStatusCode ((
VOID
);
EFI_STATUS
EFIAPI
print macro using ReportStatusCode(
VOID
);
EFI_STATUS
EFIAPI
VOID(
VOID
);
EFI_STATUS
EFIAPI
operations (from BaseMemoryLib)(
VOID
);
EFI_STATUS
EFIAPI
= (UINT8 *)DestinationBuffer + Length - 1;(
VOID
);
EFI_STATUS
EFIAPI
= Length >> 2;(
VOID
);
EFI_STATUS
EFIAPI
wrapper (with bounds checks)(
VOID
);
EFI_STATUS
EFIAPI
VOID *(
VOID
);
EFI_STATUS
EFIAPI
with overflow check(
VOID
);
EFI_STATUS
EFIAPI
Port access (abstracted)(
VOID
);
EFI_STATUS
EFIAPI
32-bit IO port (aligned check)(
VOID
);
EFI_STATUS
EFIAPI
IoRead32 ((
VOID
);
EFI_STATUS
EFIAPI
16-bit IO port (alignment check)(
VOID
);
EFI_STATUS
EFIAPI
IoRead16 ((
VOID
);
EFI_STATUS
EFIAPI
IoWrite16 ((
VOID
);
EFI_STATUS
EFIAPI
/ PEI Services table pointer via IDT(
VOID
);
EFI_STATUS
EFIAPI
(Hand-Off Block) utilities(
VOID
);
EFI_STATUS
EFIAPI
of HOB list(
VOID
);
EFI_STATUS
EFIAPI
check placeholder(
VOID
);
EFI_STATUS
EFIAPI
GUID using ReadUnaligned64(
VOID
);
EFI_STATUS
EFIAPI
read of 64-bit(
VOID
);
EFI_STATUS
EFIAPI
(Platform Configuration Database) Access(
VOID
);
EFI_STATUS
EFIAPI
get wrappers(
VOID
);
EFI_STATUS
EFIAPI
GetPcd32 ((
VOID
);
EFI_STATUS
EFIAPI
/ RTC Debug Level(
VOID
);
EFI_STATUS
EFIAPI
debug error level from CMOS(
VOID
);
EFI_STATUS
EFIAPI
GetDebugLevel ((
VOID
);
EFI_STATUS
EFIAPI
SKU Detection(
VOID
);
EFI_STATUS
EFIAPI
UINT8(
VOID
);
EFI_STATUS
EFIAPI
PCR Register Access (MMIO)(
VOID
);
EFI_STATUS
EFIAPI
PCR PID 0xAF - LPC?(
VOID
);
EFI_STATUS
EFIAPI
(Sku == PCH_SKU_LBG) {(
VOID
);
EFI_STATUS
EFIAPI
PCR PID 0xAE(
VOID
);
EFI_STATUS
EFIAPI
PCR PID 0xAD(
VOID
);
EFI_STATUS
EFIAPI
PCR PID 0xAC(
VOID
);
EFI_STATUS
EFIAPI
PCR PID 0x90(
VOID
);
EFI_STATUS
EFIAPI
0xB1 - root?(
VOID
);
EFI_STATUS
EFIAPI
case(
VOID
);
EFI_STATUS
EFIAPI
Write via MMIO or SBI(
VOID
);
EFI_STATUS
EFIAPI
PchPcrWrite ((
VOID
);
EFI_STATUS
EFIAPI
Cycle Decoding - IPMI IO Range Configuration(
VOID
);
EFI_STATUS
EFIAPI
IPMI base from PCH cycle decode registers(
VOID
);
EFI_STATUS
EFIAPI
EFI_STATUS(
VOID
);
EFI_STATUS
EFIAPI
the 4 decode range registers from PCH(
VOID
);
EFI_STATUS
EFIAPI
(Index = 0; Index < PCH_DECODE_RANGE_COUNT; Index++) {(
VOID
);
EFI_STATUS
EFIAPI
MicroSecondDelay ((
VOID
);
EFI_STATUS
EFIAPI
Hz prescale(
VOID
);
EFI_STATUS
EFIAPI
for ACPI timer delta to equal the requested microseconds(
VOID
);
EFI_STATUS
EFIAPI
= MicroSeconds + (IoRead32 (0x508) & 0xFFFFFF);(
VOID
);
EFI_STATUS
EFIAPI
microseconds to ACPI timer ticks then call MicroSecondDelay(
VOID
);
EFI_STATUS
EFIAPI
MicroSecondDelayEx ((
VOID
);
EFI_STATUS
EFIAPI
BMC Interface Layer(
VOID
);
EFI_STATUS
EFIAPI
write byte: abstracted for IO vs memory mapped(
VOID
);
EFI_STATUS
EFIAPI
BmcKcsWriteByte ((
VOID
);
EFI_STATUS
EFIAPI
read byte: abstracted for IO vs memory mapped(
VOID
);
EFI_STATUS
EFIAPI
BmcKcsReadByte ((
VOID
);
EFI_STATUS
EFIAPI
for IBF (Input Buffer Full) to clear(
VOID
);
EFI_STATUS
EFIAPI
BmcKcsWaitForIbf ((
VOID
);
EFI_STATUS
EFIAPI
Abort / Flush(
VOID
);
EFI_STATUS
EFIAPI
BmcKcsFlush ((
VOID
);
EFI_STATUS
EFIAPI
for IBF to clear(
VOID
);
EFI_STATUS
EFIAPI
(TRUE) {(
VOID
);
EFI_STATUS
EFIAPI
GET_STATUS to command register(
VOID
);
EFI_STATUS
EFIAPI
(BmcPrivate->InterfaceType, BmcPrivate->DataReg, IPMI_KCS_CTRL_GET_STATUS);(
VOID
);
EFI_STATUS
EFIAPI
status from command register(
VOID
);
EFI_STATUS
EFIAPI
(BmcPrivate->InterfaceType == BMC_INTERFACE_TYPE_IO) {(
VOID
);
EFI_STATUS
EFIAPI
0 to command register (clear)(
VOID
);
EFI_STATUS
EFIAPI
(BmcPrivate->InterfaceType, BmcPrivate->CommandReg, 0);(
VOID
);
EFI_STATUS
EFIAPI
status response(
VOID
);
EFI_STATUS
EFIAPI
((Status & IPMI_KCS_STATUS_CD) == 0x40) {(
VOID
);
EFI_STATUS
EFIAPI
response: wait for OBF and read data(
VOID
);
EFI_STATUS
EFIAPI
= BmcPrivate->Timeout;(
VOID
);
EFI_STATUS
EFIAPI
status - retry(
VOID
);
EFI_STATUS
EFIAPI
(++Retries >= BMC_MAX_RETRY) {(
VOID
);
EFI_STATUS
EFIAPI
for final OBF(
VOID
);
EFI_STATUS
EFIAPI
KCS status for write readiness(
VOID
);
EFI_STATUS
EFIAPI
BmcKcsCheckWriteReady ((
VOID
);
EFI_STATUS
EFIAPI
mode: use DataReg / CommandReg directly(
VOID
);
EFI_STATUS
EFIAPI
falls through to main KCS handler(
VOID
);
EFI_STATUS
EFIAPI
mapped: pointer in BmcPrivate->CommandReg(
VOID
);
EFI_STATUS
EFIAPI
for OBF (Output Buffer Full)(
VOID
);
EFI_STATUS
EFIAPI
BmcKcsWaitForObf ((
VOID
);
EFI_STATUS
EFIAPI
Send Message (command phase)(
VOID
);
EFI_STATUS
EFIAPI
BmcKcsSendMessage ((
VOID
);
EFI_STATUS
EFIAPI
function writes the KCS message body using the WRITE_START / WRITE_END protocol(
VOID
);
EFI_STATUS
EFIAPI
is the context pointer offset, CmdDataSize is the number of bytes to send(
VOID
);
EFI_STATUS
EFIAPI
in BmcKcsSendData/BmcKcsSendCommand(
VOID
);
EFI_STATUS
EFIAPI
Receive Message (response phase)(
VOID
);
EFI_STATUS
EFIAPI
BmcKcsReceiveMessage ((
VOID
);
EFI_STATUS
EFIAPI
function reads the KCS response using the READ protocol(
VOID
);
EFI_STATUS
EFIAPI
is called after WRITE_START to send data bytes, then WRITE_END to finalize(
VOID
);
EFI_STATUS
EFIAPI
Read data bytes from BMC(
VOID
);
EFI_STATUS
EFIAPI
BmcKcsReadData ((
VOID
);
EFI_STATUS
EFIAPI
response data bytes(
VOID
);
EFI_STATUS
EFIAPI
KCS Full Command/Response (NetFn/Lun/Cmd + data)(
VOID
);
EFI_STATUS
EFIAPI
KCS: Send command with data and get response(
VOID
);
EFI_STATUS
EFIAPI
BmcKcsSendCommand ((
VOID
);
EFI_STATUS
EFIAPI
KCS Get Response(
VOID
);
EFI_STATUS
EFIAPI
BmcKcsGetResponse ((
VOID
);
EFI_STATUS
EFIAPI
IPMI command via KCS(
VOID
);
EFI_STATUS
EFIAPI
BmcDoIpmiCmd ((
VOID
);
EFI_STATUS
EFIAPI
completion code from KCS response (BMC-specific codepage char)(
VOID
);
EFI_STATUS
EFIAPI
when completion code indicates a character that maps to a known error(
VOID
);
EFI_STATUS
EFIAPI
response code 0x7E-0xBF ranges for error parsing(
VOID
);
EFI_STATUS
EFIAPI
Decode Range Programming for IPMI IO Base(
VOID
);
EFI_STATUS
EFIAPI
IPMI IO decode range in PCH(
VOID
);
EFI_STATUS
EFIAPI
PchDecodeRangeSetup ((
VOID
);
EFI_STATUS
EFIAPI
if IPMI range (0xCA0) already decoded(
VOID
);
EFI_STATUS
EFIAPI
if this range covers 0xCA0 or 0xCB0(
VOID
);
EFI_STATUS
EFIAPI
((BaseIo <= IPMI_IO_BASE_DEFAULT &&(
VOID
);
EFI_STATUS
EFIAPI
existing decode(
VOID
);
EFI_STATUS
EFIAPI
range found. Check if it fully covers IPMI IO.(
VOID
);
EFI_STATUS
EFIAPI
(BaseIo <= IPMI_IO_BASE_DEFAULT && DecodeSize >= 0x10) {(
VOID
);
EFI_STATUS
EFIAPI
to extend or create new range.(
VOID
);
EFI_STATUS
EFIAPI
decode size and base address.(
VOID
);
EFI_STATUS
EFIAPI
= BaseIo + DecodeSize;(
VOID
);
EFI_STATUS
EFIAPI
= DecodeSize - BaseIo (adjusted)(
VOID
);
EFI_STATUS
EFIAPI
through to program the decode(
VOID
);
EFI_STATUS
EFIAPI
range found covering IPMI. Check if any free range available.(
VOID
);
EFI_STATUS
EFIAPI
= PchDecodeFindFreeRange (Ranges);(
VOID
);
EFI_STATUS
EFIAPI
for free slot by scanning (some ranges may not have base)(
VOID
);
EFI_STATUS
EFIAPI
platform policy(
VOID
);
EFI_STATUS
EFIAPI
(MEMORY[PCH_PCR_LPC_IPMI_REG] >= 0) {(
VOID
);
EFI_STATUS
EFIAPI
= n3232 | (((n16 - 1) & 0xFC) << 16) | 1(
VOID
);
EFI_STATUS
EFIAPI
bytes for IPMI(
VOID
);
EFI_STATUS
EFIAPI
= (n16 - 1) & 0xFC(
VOID
);
EFI_STATUS
EFIAPI
= BaseIo | ((DecodeSize & 0xFC) << 16) | 1(
VOID
);
EFI_STATUS
EFIAPI
the decode range register(
VOID
);
EFI_STATUS
EFIAPI
via PCR(
VOID
);
EFI_STATUS
EFIAPI
= BaseIo | (((DecodeSize - 1) & 0xFC) << 16) | 1(
VOID
);
EFI_STATUS
EFIAPI
to PCR decode register(
VOID
);
EFI_STATUS
EFIAPI
the PCH decode range for IPMI(
VOID
);
EFI_STATUS
EFIAPI
PchDecodeRangeProg ((
VOID
);
EFI_STATUS
EFIAPI
index from base(
VOID
);
EFI_STATUS
EFIAPI
PCH PCR cycle decode register(
VOID
);
EFI_STATUS
EFIAPI
PchDecodeRangeGet ((
VOID
);
EFI_STATUS
EFIAPI
PchDecodeRangeSet ((
VOID
);
EFI_STATUS
EFIAPI
PCH register base(
VOID
);
EFI_STATUS
EFIAPI
*(
VOID
);
EFI_STATUS
EFIAPI
Failure Detection(
VOID
);
EFI_STATUS
EFIAPI
BMC Base Address via PCH cycle decoding registers(
VOID
);
EFI_STATUS
EFIAPI
Entry Point(
VOID
);
EFI_STATUS
EFIAPI
PEI Services revision(
VOID
);
EFI_STATUS
EFIAPI
= (PEI_SERVICES **)GetPeiServices ();(
VOID
);
EFI_STATUS
EFIAPI
if PCD needs to be set up (bit 7 of byte 1024068)(
VOID
);
EFI_STATUS
EFIAPI
((*(volatile INT8 *)((UINTN)GetPeiPcdPpi () + 1024068) & 0x80) == 0) {(
VOID
);
EFI_STATUS
EFIAPI
setup variable PPI(
VOID
);
EFI_STATUS
EFIAPI
= (*PeiServices)->LocatePpi ((
VOID
);
EFI_STATUS
EFIAPI
ServerSetup variable(
VOID
);
EFI_STATUS
EFIAPI
= 1072;(
VOID
);
EFI_STATUS
EFIAPI
BMC private data structure(
VOID
);
EFI_STATUS
EFIAPI
= (BMC_PRIVATE_DATA *)AllocateZeroPoolCheck (336);(
VOID
);
EFI_STATUS
EFIAPI
initialization functions from table(
VOID
);
EFI_STATUS
EFIAPI
= 0;(
VOID
);
EFI_STATUS
EFIAPI
BMC private structure(
VOID
);
EFI_STATUS
EFIAPI
function pointers for IPMI KCS transport(
VOID
);
EFI_STATUS
EFIAPI
be filled by init code(
VOID
);
EFI_STATUS
EFIAPI
initialization at address 0xFFE5B7EF(
VOID
);
EFI_STATUS
EFIAPI
Init Function Table (referenced from .rdata at funcs_FFE5BB6C)(
VOID
);
EFI_STATUS
EFIAPI
CONST(
VOID
);
EFI_STATUS
EFIAPI
BMC decode(
VOID
);
EFI_STATUS
EFIAPI
};(
VOID
);
EFI_STATUS
EFIAPI
Soft Error Character Handling(
VOID
);
EFI_STATUS
EFIAPI
a character from the BMC response (soft error)(
VOID
);
EFI_STATUS
EFIAPI
of known completion code characters(
VOID
);
EFI_STATUS
EFIAPI
completion code characters(
VOID
);
EFI_STATUS
EFIAPI
Send Command: Build message and send via KCS(
VOID
);
EFI_STATUS
EFIAPI
KCS command frame and send via KCS transport(
VOID
);
EFI_STATUS
EFIAPI
BmcKcsBuildAndSend ((
VOID
);
EFI_STATUS
EFIAPI
Guard TPM Detection and Initialization(
VOID
);
EFI_STATUS
EFIAPI
if Boot Guard TPM requires action(
VOID
);
EFI_STATUS
EFIAPI
BootGuardCheckTpm ((
VOID
);
EFI_STATUS
EFIAPI
Boot Guard TPM revision(
VOID
);
EFI_STATUS
EFIAPI
BootGuardGetTpmRevision ((
VOID
);
EFI_STATUS
EFIAPI
Constructor: ASSERT for PEIM entry point conditions(
VOID
);
EFI_STATUS
EFIAPI
global PEI services pointer (from IDT-based lookup)(
VOID
);
EFI_STATUS
EFIAPI
**gPS;(
VOID
);
EFI_STATUS
EFIAPI
Access for PEI Phase (using PCD PPI)(
VOID
);
#endif /* __PEIIPMIBMCINITIALIZE_H__ */