/** @file
BmcElog.h -- Header for BmcElog
Copyright (c) HR650X BIOS Decompilation Project
**/
#ifndef __BMCELOG_H__
#define __BMCELOG_H__
#include "../uefi_headers/Uefi.h"
//
// Function Prototypes
//
EFI_STATUS
EFIAPI
DebugAssert(
VOID
);
EFI_STATUS
EFIAPI
IpmiDetectInterface(
VOID
);
EFI_STATUS
EFIAPI
IpmiSendCommand(
VOID
);
EFI_STATUS
EFIAPI
IpmiGetResponse(
VOID
);
EFI_STATUS
EFIAPI
BmcElogRead(
VOID
);
EFI_STATUS
EFIAPI
BmcElogClear(
VOID
);
EFI_STATUS
EFIAPI
BmcElogSetStatus(
VOID
);
EFI_STATUS
EFIAPI
BmcElogWrite(
VOID
);
EFI_STATUS
EFIAPI
CompareGuid(
VOID
);
EFI_STATUS
EFIAPI
OnExitBootServices(
VOID
);
EFI_STATUS
EFIAPI
OnVirtualAddressChange(
VOID
);
EFI_STATUS
EFIAPI
FreeBmcElogProtocolBuffer(
VOID
);
EFI_STATUS
EFIAPI
BmcElogEntryPoint(
VOID
);
EFI_STATUS
EFIAPI
globals(
VOID
);
EFI_STATUS
EFIAPI
gImageHandle = NULL;(
VOID
);
EFI_STATUS
EFIAPI
transport protocol handle (opaque)(
VOID
);
EFI_STATUS
EFIAPI
*mIpmiTransport = NULL;(
VOID
);
EFI_STATUS
EFIAPI
reporting function(
VOID
);
EFI_STATUS
EFIAPI
= sub_1A60();(
VOID
);
EFI_STATUS
EFIAPI
(result)(
VOID
);
EFI_STATUS
EFIAPI
(*(UINT64 (__fastcall **)(UINT64, UINT64, UINT64))(result + 8))(
VOID
);
EFI_STATUS
EFIAPI
is the DebugAssert() routine from DebugLib.(
VOID
);
EFI_STATUS
EFIAPI
(mBootServices != 0) {(
VOID
);
EFI_STATUS
EFIAPI
memory operations(
VOID
);
EFI_STATUS
EFIAPI
((UINTN)Source < (UINTN)Destination &&(
VOID
);
EFI_STATUS
EFIAPI
= &Src8[Length - 1];(
VOID
);
EFI_STATUS
EFIAPI
overlap: copy 8 bytes at a time(
VOID
);
EFI_STATUS
EFIAPI
= Length >> 3;(
VOID
);
EFI_STATUS
EFIAPI
(Length >= 8) {(
VOID
);
EFI_STATUS
EFIAPI
transport helper(
VOID
);
EFI_STATUS
EFIAPI
mIpmiTransport cached, return it.(
VOID
);
EFI_STATUS
EFIAPI
mBootServices exists:(
VOID
);
EFI_STATUS
EFIAPI
if buffer size needed <= 0x10(
VOID
);
EFI_STATUS
EFIAPI
pool(
VOID
);
EFI_STATUS
EFIAPI
protocol handle for the IPMI transport GUID (unk_3000)(
VOID
);
EFI_STATUS
EFIAPI
in mIpmiTransport(
VOID
);
EFI_STATUS
EFIAPI
(mIpmiTransport != NULL) {(
VOID
);
EFI_STATUS
EFIAPI
transport via GetIpmiTransport()(
VOID
);
EFI_STATUS
EFIAPI
CMOS 0x70/0x71 register 0x4B to get BMC interface type(
VOID
);
EFI_STATUS
EFIAPI
to transport interface ID:(
VOID
);
EFI_STATUS
EFIAPI
-> 0x80000004 (KCS)(
VOID
);
EFI_STATUS
EFIAPI
-> 0x80000006 (SMBUS) [value 3 would be BT](
VOID
);
EFI_STATUS
EFIAPI
-> BT(
VOID
);
EFI_STATUS
EFIAPI
IoOperation matches the interface, call transport.(
VOID
);
EFI_STATUS
EFIAPI
Args;(
VOID
);
EFI_STATUS
EFIAPI
CMOS register 0x4B(
VOID
);
EFI_STATUS
EFIAPI
= IoRead8 (0x70);(
VOID
);
EFI_STATUS
EFIAPI
the transport function through the protocol(
VOID
);
EFI_STATUS
EFIAPI
((EFI_STATUS (__fastcall *)((
VOID
);
EFI_STATUS
EFIAPI
up to 512 iterations sending the IPMI command via(
VOID
);
EFI_STATUS
EFIAPI
transport protocol (qword_3040).(
VOID
);
EFI_STATUS
EFIAPI
transport returns CC_CANNOT_RETRY (0xC5), retry with(
VOID
);
EFI_STATUS
EFIAPI
"Write" sub-command (0x42 / 0x42 = Write).(
VOID
);
EFI_STATUS
EFIAPI
return success or timeout.(
VOID
);
EFI_STATUS
EFIAPI
*Transport;(
VOID
);
EFI_STATUS
EFIAPI
transport protocol(
VOID
);
EFI_STATUS
EFIAPI
command packet(
VOID
);
EFI_STATUS
EFIAPI
command via transport->SendCommand (offset +16)(
VOID
);
EFI_STATUS
EFIAPI
= ((EFI_STATUS (__fastcall *)((
VOID
);
EFI_STATUS
EFIAPI
0, // Lun(
VOID
);
EFI_STATUS
EFIAPI
WriteData(
VOID
);
EFI_STATUS
EFIAPI
for retryable error (0xC5 = CC_CANNOT_RETRY)(
VOID
);
EFI_STATUS
EFIAPI
(*(UINT8 *)((UINT8 *)Transport + 8) == 0xC5) {(
VOID
);
EFI_STATUS
EFIAPI
0(
VOID
);
EFI_STATUS
EFIAPI
sub-command(
VOID
);
EFI_STATUS
EFIAPI
GetResponse command to the IPMI transport.(
VOID
);
EFI_STATUS
EFIAPI
the BMC_ELOG_REFROTOCOL signature validation.(
VOID
);
EFI_STATUS
EFIAPI
data from transport buffer to output.(
VOID
);
EFI_STATUS
EFIAPI
Buffer[16];(
VOID
);
EFI_STATUS
EFIAPI
REFROTOCOL signature at This-113(
VOID
);
EFI_STATUS
EFIAPI
revision, builds read request via transport.(
VOID
);
EFI_STATUS
EFIAPI
16 bytes of event data to output.(
VOID
);
EFI_STATUS
EFIAPI
*Ref;(
VOID
);
EFI_STATUS
EFIAPI
signature(
VOID
);
EFI_STATUS
EFIAPI
= (BMC_ELOG_REFROTOCOL *)((UINT8 *)This - 113);(
VOID
);
EFI_STATUS
EFIAPI
the IPMI Get SEL Entry command(
VOID
);
EFI_STATUS
EFIAPI
ReadData[2] = 0xFF00; // Record type mask / last entry(
VOID
);
EFI_STATUS
EFIAPI
record ID(
VOID
);
EFI_STATUS
EFIAPI
SEL Entry(
VOID
);
EFI_STATUS
EFIAPI
signature, performs clear/reserve SEL operation.(
VOID
);
EFI_STATUS
EFIAPI
a3 (Data) is non-NULL, does a full SEL erase with record ID reservation.(
VOID
);
EFI_STATUS
EFIAPI
a3 is NULL, does a "Get SEL Info" then "Clear SEL" via sub_138C.(
VOID
);
EFI_STATUS
EFIAPI
SEL Info(
VOID
);
EFI_STATUS
EFIAPI
= 14;(
VOID
);
EFI_STATUS
EFIAPI
);(
VOID
);
EFI_STATUS
EFIAPI
is not supported(
VOID
);
EFI_STATUS
EFIAPI
EFI_UNSUPPORTED;(
VOID
);
EFI_STATUS
EFIAPI
SEL first(
VOID
);
EFI_STATUS
EFIAPI
ReserveStatus;(
VOID
);
EFI_STATUS
EFIAPI
SEL(
VOID
);
EFI_STATUS
EFIAPI
SEL with reservation (full clear)(
VOID
);
EFI_STATUS
EFIAPI
EraseData[4];(
VOID
);
EFI_STATUS
EFIAPI
byte 1(
VOID
);
EFI_STATUS
EFIAPI
byte 0(
VOID
);
EFI_STATUS
EFIAPI
completion code(
VOID
);
EFI_STATUS
EFIAPI
(*(UINT8 *)((UINT8 *)(*(VOID **)((UINT8 *)mHobList + 0x3040)) + 8) == 0x80) {(
VOID
);
EFI_STATUS
EFIAPI
via Set SEL Time / erase mechanism using sub_138C(
VOID
);
EFI_STATUS
EFIAPI
ClearBuf[6];(
VOID
);
EFI_STATUS
EFIAPI
SEL Time(
VOID
);
EFI_STATUS
EFIAPI
signature and revision.(
VOID
);
EFI_STATUS
EFIAPI
or gets SEL info to read/write bit 3 of the SEL operation(
VOID
);
EFI_STATUS
EFIAPI
flags (bit 3 = SEL enable/disable).(
VOID
);
EFI_STATUS
EFIAPI
SEL Info parameter(
VOID
);
EFI_STATUS
EFIAPI
Get SEL Info command (NetFn=6, Cmd=0x47)(
VOID
);
EFI_STATUS
EFIAPI
NetFn(
VOID
);
EFI_STATUS
EFIAPI
the enable/disable bit(
VOID
);
EFI_STATUS
EFIAPI
NewResponse = Response;(
VOID
);
EFI_STATUS
EFIAPI
SEL Time (to change enable)(
VOID
);
EFI_STATUS
EFIAPI
REFROTOCOL signature, checks revision(
VOID
);
EFI_STATUS
EFIAPI
an IPMI session, sends command data(
VOID
);
EFI_STATUS
EFIAPI
returns the record ID.(
VOID
);
EFI_STATUS
EFIAPI
buffer and open IPMI session(
VOID
);
EFI_STATUS
EFIAPI
(Buffer, sizeof (Buffer));(
VOID
);
EFI_STATUS
EFIAPI
overflow bit; if set return EFI_OUT_OF_RESOURCES(
VOID
);
EFI_STATUS
EFIAPI
EFI_OUT_OF_RESOURCES;(
VOID
);
EFI_STATUS
EFIAPI
must be <= 0x10 (max SEL record size)(
VOID
);
EFI_STATUS
EFIAPI
(DataSize > 16) {(
VOID
);
EFI_STATUS
EFIAPI
the Add SEL Entry command(
VOID
);
EFI_STATUS
EFIAPI
library support(
VOID
);
EFI_STATUS
EFIAPI
/ sub_1E04:(
VOID
);
EFI_STATUS
EFIAPI
two GUIDs as two 64-bit values.(
VOID
);
EFI_STATUS
EFIAPI
reads a UINT64 from a potentially unaligned address.(
VOID
);
EFI_STATUS
EFIAPI
*Data1 = (UINT64 *)Guid1;(
VOID
);
EFI_STATUS
EFIAPI
the HOB list (from SystemTable + 104/112) looking for(
VOID
);
EFI_STATUS
EFIAPI
HOB with a specific GUID (unk_3020, unk_3028).(
VOID
);
EFI_STATUS
EFIAPI
result in mHobList.(
VOID
);
EFI_STATUS
EFIAPI
no matching HOB, asserts.(
VOID
);
EFI_STATUS
EFIAPI
Hob;(
VOID
);
EFI_STATUS
EFIAPI
list not found - assertion(
VOID
);
EFI_STATUS
EFIAPI
((
VOID
);
EFI_STATUS
EFIAPI
notification handlers(
VOID
);
EFI_STATUS
EFIAPI
the cached BootServices pointer.(
VOID
);
EFI_STATUS
EFIAPI
= 0;(
VOID
);
EFI_STATUS
EFIAPI
mIpmiTransport is set, calls RuntimeServices->ConvertPointer(
VOID
);
EFI_STATUS
EFIAPI
convert the pointer for the new virtual address mapping.(
VOID
);
EFI_STATUS
EFIAPI
allocation helpers(
VOID
);
EFI_STATUS
EFIAPI
and ZeroMem for the BmcElog protocol structure.(
VOID
);
EFI_STATUS
EFIAPI
*Buffer;(
VOID
);
EFI_STATUS
EFIAPI
the BmcElog protocol buffer allocated during initialization.(
VOID
);
EFI_STATUS
EFIAPI
Status;(
VOID
);
EFI_STATUS
EFIAPI
module globals(
VOID
);
EFI_STATUS
EFIAPI
= SystemTable;(
VOID
);
EFI_STATUS
EFIAPI
pointers(
VOID
);
EFI_STATUS
EFIAPI
(ImageHandle == NULL) {(
VOID
);
EFI_STATUS
EFIAPI
boot services pointer (used in sub_1BA8-style notification cleanups)(
VOID
);
EFI_STATUS
EFIAPI
= (UINT64)gBS;(
VOID
);
EFI_STATUS
EFIAPI
ExitBootServices event to clear BS pointer(
VOID
);
EFI_STATUS
EFIAPI
VirtualAddressChange event(
VOID
);
EFI_STATUS
EFIAPI
the HOB list(
VOID
);
EFI_STATUS
EFIAPI
();(
VOID
);
EFI_STATUS
EFIAPI
the cached transport pointer(
VOID
);
EFI_STATUS
EFIAPI
IPMI transport protocol handle(
VOID
);
EFI_STATUS
EFIAPI
= gBS->LocateProtocol ((
VOID
);
EFI_STATUS
EFIAPI
SEL (for subsequent clear operations)(
VOID
);
EFI_STATUS
EFIAPI
(InitData, sizeof (InitData));(
VOID
);
EFI_STATUS
EFIAPI
SEL command data(
VOID
);
EFI_STATUS
EFIAPI
response for SEL support(
VOID
);
EFI_STATUS
EFIAPI
(InitData[1] & 0x04) {(
VOID
);
EFI_STATUS
EFIAPI
and initialize the REFROTOCOL structure(
VOID
);
EFI_STATUS
EFIAPI
= (BMC_ELOG_REFROTOCOL *)AllocateZeroedRefProtocol (EfiBootServicesData);(
VOID
);
EFI_STATUS
EFIAPI
the protocol structure(
VOID
);
EFI_STATUS
EFIAPI
function pointers into the REFROTOCOL at known offsets(
VOID
);
EFI_STATUS
EFIAPI
the protocol(
VOID
);
EFI_STATUS
EFIAPI
= gBS->InstallProtocolInterface ((
VOID
);
EFI_STATUS
EFIAPI
SEL logging (if already enabled, ensure it stays)(
VOID
);
EFI_STATUS
EFIAPI
= 1;(
VOID
);
#endif /* __BMCELOG_H__ */