/** @file
DxeIpmiBmcInitialize.h -- Header for DxeIpmiBmcInitialize
Copyright (c) HR650X BIOS Decompilation Project
**/
#ifndef __DXEIPMIBMCINITIALIZE_H__
#define __DXEIPMIBMCINITIALIZE_H__
#include "../uefi_headers/Uefi.h"
//
// Function Prototypes
//
EFI_STATUS
EFIAPI
_ModuleEntryPoint(
VOID
);
EFI_STATUS
EFIAPI
ModuleEntryInit(
VOID
);
EFI_STATUS
EFIAPI
DxeIpmiBmcInitialize2(
VOID
);
EFI_STATUS
EFIAPI
DxeIpmiBmcUnload(
VOID
);
EFI_STATUS
EFIAPI
IpmiBmcSelfTest(
VOID
);
EFI_STATUS
EFIAPI
BmcSelfTestProtocolCallback(
VOID
);
EFI_STATUS
EFIAPI
OemCheckBmcVersion(
VOID
);
EFI_STATUS
EFIAPI
SmbiosInstallType42Record(
VOID
);
EFI_STATUS
EFIAPI
SpmiInstallAcpiTable(
VOID
);
EFI_STATUS
EFIAPI
IpmiSetBootFlags(
VOID
);
EFI_STATUS
EFIAPI
AddSystemInfoStr(
VOID
);
EFI_STATUS
EFIAPI
SmbiosGetStringByIndex(
VOID
);
EFI_STATUS
EFIAPI
BmcKcsReadyCheck(
VOID
);
EFI_STATUS
EFIAPI
BmcKcsErrorRecovery(
VOID
);
EFI_STATUS
EFIAPI
BmcKcsWriteRead(
VOID
);
EFI_STATUS
EFIAPI
BmcKcsTransport(
VOID
);
EFI_STATUS
EFIAPI
WaitSystemInfoInProgressClear(
VOID
);
EFI_STATUS
EFIAPI
AcpiGetDsdtTable(
VOID
);
EFI_STATUS
EFIAPI
AcpiFindSrvvObject(
VOID
);
EFI_STATUS
EFIAPI
AcpiUpdateSrvvObject(
VOID
);
EFI_STATUS
EFIAPI
BmcSendCommand(
VOID
);
EFI_STATUS
EFIAPI
BmcSendCommandNoResponse(
VOID
);
EFI_STATUS
EFIAPI
BmcSendCommandWithResponse(
VOID
);
EFI_STATUS
EFIAPI
OemBmcInterfaceInit(
VOID
);
EFI_STATUS
EFIAPI
HandleUsbBootSetting(
VOID
);
EFI_STATUS
EFIAPI
SetupBrowserCallback(
VOID
);
EFI_STATUS
EFIAPI
BmcUninstallProtocols(
VOID
);
EFI_STATUS
EFIAPI
AsciiStrLen(
VOID
);
EFI_STATUS
EFIAPI
StrLen(
VOID
);
EFI_STATUS
EFIAPI
MicroSecondDelay(
VOID
);
EFI_STATUS
EFIAPI
BcdToDecimal(
VOID
);
EFI_STATUS
EFIAPI
SendIpmiCommandRaw(
VOID
);
EFI_STATUS
EFIAPI
SignalEvent(
VOID
);
EFI_STATUS
EFIAPI
HandleIpmiCmosClear(
VOID
);
EFI_STATUS
EFIAPI
EfiCreateProtocolNotifyEvent(
VOID
);
EFI_STATUS
EFIAPI
ReadBmcSetupOptions(
VOID
);
EFI_STATUS
EFIAPI
Entry Point(
VOID
);
EFI_STATUS
EFIAPI
Entry Init (AutoGen + Library Constructor)(
VOID
);
EFI_STATUS
EFIAPI
ImageHandle, gST, gBS, gRT(
VOID
);
EFI_STATUS
EFIAPI
from AutoGen.c constructor chain(
VOID
);
EFI_STATUS
EFIAPI
- Main Driver Entry(
VOID
);
EFI_STATUS
EFIAPI
UEFI services if not already done(
VOID
);
EFI_STATUS
EFIAPI
if ServerSetup variable exists (setup configuration is ready)(
VOID
);
EFI_STATUS
EFIAPI
BMC instance structure(
VOID
);
EFI_STATUS
EFIAPI
BMC instance fields(
VOID
);
EFI_STATUS
EFIAPI
data IO port(
VOID
);
EFI_STATUS
EFIAPI
command IO port(
VOID
);
EFI_STATUS
EFIAPI
be set later(
VOID
);
EFI_STATUS
EFIAPI
transport function pointers (virtual methods)(
VOID
);
EFI_STATUS
EFIAPI
BMC self test(
VOID
);
EFI_STATUS
EFIAPI
protocol notification for SMBIOS protocol(
VOID
);
EFI_STATUS
EFIAPI
- Unload Handler(
VOID
);
EFI_STATUS
EFIAPI
all protocol handles opened by this module(
VOID
);
EFI_STATUS
EFIAPI
allocated memory, uninstall protocols(
VOID
);
EFI_STATUS
EFIAPI
BMC self test protocol if installed(
VOID
);
EFI_STATUS
EFIAPI
runtime services references, clean up(
VOID
);
EFI_STATUS
EFIAPI
protocol on ImageHandle for all registered protocols(
VOID
);
EFI_STATUS
EFIAPI
- Run BMC Self Test and Install Protocol(
VOID
);
EFI_STATUS
EFIAPI
loop for BMC self test command(
VOID
);
EFI_STATUS
EFIAPI
failure code(
VOID
);
EFI_STATUS
EFIAPI
test failure(
VOID
);
EFI_STATUS
EFIAPI
goto Done;(
VOID
);
EFI_STATUS
EFIAPI
self test result byte(
VOID
);
EFI_STATUS
EFIAPI
(no errors)(
VOID
);
EFI_STATUS
EFIAPI
decimal(
VOID
);
EFI_STATUS
EFIAPI
test with warnings(
VOID
);
EFI_STATUS
EFIAPI
warning bits(
VOID
);
EFI_STATUS
EFIAPI
}(
VOID
);
EFI_STATUS
EFIAPI
test not implemented (consider success)(
VOID
);
EFI_STATUS
EFIAPI
result codes(
VOID
);
EFI_STATUS
EFIAPI
error(
VOID
);
EFI_STATUS
EFIAPI
protocol notification if status is acceptable(
VOID
);
EFI_STATUS
EFIAPI
Get Device ID to retrieve BMC identification(
VOID
);
EFI_STATUS
EFIAPI
response(
VOID
);
EFI_STATUS
EFIAPI
case(
VOID
);
EFI_STATUS
EFIAPI
and install BMC Self Test Protocol(
VOID
);
EFI_STATUS
EFIAPI
protocol(
VOID
);
EFI_STATUS
EFIAPI
self test codes via status code if interface available(
VOID
);
EFI_STATUS
EFIAPI
status code for each self test code(
VOID
);
EFI_STATUS
EFIAPI
SPMI ACPI table if enabled(
VOID
);
EFI_STATUS
EFIAPI
notification for ACPI table protocol(
VOID
);
EFI_STATUS
EFIAPI
system information(
VOID
);
EFI_STATUS
EFIAPI
IPMI boot flags(
VOID
);
EFI_STATUS
EFIAPI
BMC via setup options(
VOID
);
EFI_STATUS
EFIAPI
Setup variables to configure BMC behavior(
VOID
);
EFI_STATUS
EFIAPI
firmware version info, set boot flags(
VOID
);
EFI_STATUS
EFIAPI
BMC instance protocol(
VOID
);
EFI_STATUS
EFIAPI
SMM/SMI callback for BMC communication(
VOID
);
EFI_STATUS
EFIAPI
- Protocol Installation Callback(
VOID
);
EFI_STATUS
EFIAPI
invoked when BmcSelfTestProtocol is installed(
VOID
);
EFI_STATUS
EFIAPI
to notify other drivers that BMC self test is complete(
VOID
);
EFI_STATUS
EFIAPI
- OEM BMC Version Checking(
VOID
);
EFI_STATUS
EFIAPI
SMBIOS protocol(
VOID
);
EFI_STATUS
EFIAPI
Get Device ID IPMI command(
VOID
);
EFI_STATUS
EFIAPI
- Install SMBIOS Type 42 Record(
VOID
);
EFI_STATUS
EFIAPI
memory for Type 42 record(
VOID
);
EFI_STATUS
EFIAPI
42 magic(
VOID
);
EFI_STATUS
EFIAPI
via SMBIOS protocol add function(
VOID
);
EFI_STATUS
EFIAPI
re-read to get the actual record(
VOID
);
EFI_STATUS
EFIAPI
string by index and report(
VOID
);
EFI_STATUS
EFIAPI
string information from SMBIOS(
VOID
);
EFI_STATUS
EFIAPI
set up Type 42 record fields(
VOID
);
EFI_STATUS
EFIAPI
- Install SPMI ACPI Table(
VOID
);
EFI_STATUS
EFIAPI
ACPI Table protocol(
VOID
);
EFI_STATUS
EFIAPI
SPMI table (65 bytes)(
VOID
);
EFI_STATUS
EFIAPI
SPMI table header(
VOID
);
EFI_STATUS
EFIAPI
area(
VOID
);
EFI_STATUS
EFIAPI
Type: KCS(
VOID
);
EFI_STATUS
EFIAPI
BMC interface address (from self-test protocol)(
VOID
);
EFI_STATUS
EFIAPI
data port(
VOID
);
EFI_STATUS
EFIAPI
BMC revision (from Get Device ID result)(
VOID
);
EFI_STATUS
EFIAPI
revision(
VOID
);
EFI_STATUS
EFIAPI
SRVV ASL object if needed(
VOID
);
EFI_STATUS
EFIAPI
SRVV name in DSDT(
VOID
);
EFI_STATUS
EFIAPI
SPMI ACPI table(
VOID
);
EFI_STATUS
EFIAPI
- Set IPMI Boot Options Flags(
VOID
);
EFI_STATUS
EFIAPI
Setup variables to determine boot override(
VOID
);
EFI_STATUS
EFIAPI
= 0;(
VOID
);
EFI_STATUS
EFIAPI
IPMI CMOS clear variable(
VOID
);
EFI_STATUS
EFIAPI
= gRT->GetVariable ((
VOID
);
EFI_STATUS
EFIAPI
IPMI Set Boot Options command if needed(
VOID
);
EFI_STATUS
EFIAPI
Boot Options(
VOID
);
EFI_STATUS
EFIAPI
- Add System Information String via IPMI(
VOID
);
EFI_STATUS
EFIAPI
string structure: StringInfoHeader + data(
VOID
);
EFI_STATUS
EFIAPI
IPMI Set System Info command in blocks of 16 bytes(
VOID
);
EFI_STATUS
EFIAPI
Set System Info command with parameters.(
VOID
);
EFI_STATUS
EFIAPI
block is up to 16 bytes.(
VOID
);
EFI_STATUS
EFIAPI
String(
VOID
);
EFI_STATUS
EFIAPI
number(
VOID
);
EFI_STATUS
EFIAPI
block: include string length in header(
VOID
);
EFI_STATUS
EFIAPI
string length(
VOID
);
EFI_STATUS
EFIAPI
this block is smaller than 16, write rest as zero(
VOID
);
EFI_STATUS
EFIAPI
- Get SMBIOS String by Index(
VOID
);
EFI_STATUS
EFIAPI
to the Nth string(
VOID
);
EFI_STATUS
EFIAPI
Offset = (UINTN)SmbiosRecord.Raw + SmbiosRecord.Hdr->Length;(
VOID
);
EFI_STATUS
EFIAPI
SetSystemInfo to report the string to IPMI(
VOID
);
EFI_STATUS
EFIAPI
= AddSystemInfoStr((UINT8*)Offset, AsciiStrLen((CHAR8*)Offset));(
VOID
);
EFI_STATUS
EFIAPI
KCS (Keyboard Controller Style) Transport(
VOID
);
EFI_STATUS
EFIAPI
for target state(
VOID
);
EFI_STATUS
EFIAPI
(State == 1) {(
VOID
);
EFI_STATUS
EFIAPI
for IBF=0 and no SMS_ATN(
VOID
);
EFI_STATUS
EFIAPI
for OBF=1(
VOID
);
EFI_STATUS
EFIAPI
for error state again after wait(
VOID
);
EFI_STATUS
EFIAPI
((KcsStatus & KCS_STATE_MASK) == KCS_ERROR_STATE) {(
VOID
);
EFI_STATUS
EFIAPI
ABORT to the command port(
VOID
);
EFI_STATUS
EFIAPI
(Bmc->InterfaceType == 1) {(
VOID
);
EFI_STATUS
EFIAPI
ABORT(
VOID
);
EFI_STATUS
EFIAPI
for IBF clear(
VOID
);
EFI_STATUS
EFIAPI
= Bmc->TimeoutMs;(
VOID
);
EFI_STATUS
EFIAPI
the data port to clear OBF(
VOID
);
EFI_STATUS
EFIAPI
Phase: Send each byte of request(
VOID
);
EFI_STATUS
EFIAPI
(UINTN i = 0; i < RequestSize; i++) {(
VOID
);
EFI_STATUS
EFIAPI
for IBF=0 (write ready)(
VOID
);
EFI_STATUS
EFIAPI
Phase: Read response bytes(
VOID
);
EFI_STATUS
EFIAPI
(UINTN i = 0; i < *ResponseSize; i++) {(
VOID
);
EFI_STATUS
EFIAPI
for OBF=1 (read ready)(
VOID
);
EFI_STATUS
EFIAPI
KCS request:(
VOID
);
EFI_STATUS
EFIAPI
= Checksum (NetFn + Command + Data, 2's complement)(
VOID
);
EFI_STATUS
EFIAPI
via KCS(
VOID
);
EFI_STATUS
EFIAPI
= sizeof(Response);(
VOID
);
EFI_STATUS
EFIAPI
response:(
VOID
);
EFI_STATUS
EFIAPI
(CompletionCode != NULL) {(
VOID
);
EFI_STATUS
EFIAPI
Information Wait Function (sub_3BB8)(
VOID
);
EFI_STATUS
EFIAPI
Set In Progress status from BMC(
VOID
);
EFI_STATUS
EFIAPI
selector: Set In Progress(
VOID
);
EFI_STATUS
EFIAPI
MicroSecondDelay(100);(
VOID
);
EFI_STATUS
EFIAPI
Helpers(
VOID
);
EFI_STATUS
EFIAPI
AML byte code to find NAME ("SRVV", ...) or ("SVTT", ...)(
VOID
);
EFI_STATUS
EFIAPI
= 0x53525656 in AML name format(
VOID
);
EFI_STATUS
EFIAPI
= ...(
VOID
);
EFI_STATUS
EFIAPI
searches for AML NameOp + String "SRVV"(
VOID
);
EFI_STATUS
EFIAPI
Instance Callback: BmcSendCommand (sub_2FA0)(
VOID
);
EFI_STATUS
EFIAPI
= CR (BmcInstance, BMC_INSTANCE_SIGNATURE);(
VOID
);
EFI_STATUS
EFIAPI
command: NetFn + Command + data(
VOID
);
EFI_STATUS
EFIAPI
= sizeof(LocalResponse);(
VOID
);
EFI_STATUS
EFIAPI
Request[1], // Command(
VOID
);
EFI_STATUS
EFIAPI
RequestSize - 2(
VOID
);
EFI_STATUS
EFIAPI
BMC Interface Initialization (sub_18A0)(
VOID
);
EFI_STATUS
EFIAPI
firmware version from setup(
VOID
);
EFI_STATUS
EFIAPI
firmware information to BMC (Get Device ID + OEM fields)(
VOID
);
EFI_STATUS
EFIAPI
EFI_SUCCESS;(
VOID
);
EFI_STATUS
EFIAPI
Boot Setting Handler (sub_30A8)(
VOID
);
EFI_STATUS
EFIAPI
Browser Protocol Callback (sub_3148)(
VOID
);
EFI_STATUS
EFIAPI
Self Test: Notify Callback (sub_1D30)(
VOID
);
EFI_STATUS
EFIAPI
- BMC self test protocol was installed.(
VOID
);
EFI_STATUS
EFIAPI
modules can wait on this event.(
VOID
);
EFI_STATUS
EFIAPI
- Cleanup callbacks (sub_1834)(
VOID
);
EFI_STATUS
EFIAPI
Functions(
VOID
);
EFI_STATUS
EFIAPI
via I/O port 0x70/0x71 RTC polling(
VOID
);
EFI_STATUS
EFIAPI
RTC register 0x4B to check timer(
VOID
);
EFI_STATUS
EFIAPI
UINTN Count;(
VOID
);
EFI_STATUS
EFIAPI
Raw Command (sub_4628)(
VOID
);
EFI_STATUS
EFIAPI
Event (sub_44A4)(
VOID
);
EFI_STATUS
EFIAPI
CMOS Clear Handling (sub_2944 area)(
VOID
);
EFI_STATUS
EFIAPI
(sub_40E4)(
VOID
);
EFI_STATUS
EFIAPI
parameters(
VOID
);
EFI_STATUS
EFIAPI
(ProtocolGuid != NULL);(
VOID
);
EFI_STATUS
EFIAPI
event and register for protocol notification(
VOID
);
EFI_STATUS
EFIAPI
= gBS->CreateEvent ((
VOID
);
EFI_STATUS
EFIAPI
SetupBackup first(
VOID
);
EFI_STATUS
EFIAPI
backup not available, try primary Setup(
VOID
);
EFI_STATUS
EFIAPI
(EFI_ERROR (Status)) {(
VOID
);
EFI_STATUS
EFIAPI
BMC-related setup options(
VOID
);
EFI_STATUS
EFIAPI
(!EFI_ERROR (Status)) {(
VOID
);
EFI_STATUS
EFIAPI
setup data and configure BMC(
VOID
);
EFI_STATUS
EFIAPI
of DxeIpmiBmcInitialize.c(
VOID
);
#endif /* __DXEIPMIBMCINITIALIZE_H__ */