/** @file
BmcLanConfig.h -- Header for BmcLanConfig
Copyright (c) HR650X BIOS Decompilation Project
**/
#ifndef __BMCLANCONFIG_H__
#define __BMCLANCONFIG_H__
#include "../uefi_headers/Uefi.h"
//
// Function Prototypes
//
EFI_STATUS
EFIAPI
InitializeBmcLanConfig(
VOID
);
EFI_STATUS
EFIAPI
ReadUnaligned64(
VOID
);
EFI_STATUS
EFIAPI
IsGuidMatch(
VOID
);
EFI_STATUS
EFIAPI
IpmiSendCommandWithRetry(
VOID
);
EFI_STATUS
EFIAPI
IpmiSetLanConfigParamBytes(
VOID
);
EFI_STATUS
EFIAPI
IpmiGetLanConfigParamBytes(
VOID
);
EFI_STATUS
EFIAPI
IpmiGetChannelNumber(
VOID
);
EFI_STATUS
EFIAPI
GetLanChannelNumbers(
VOID
);
EFI_STATUS
EFIAPI
AsciiIpv4AddrToBytes(
VOID
);
EFI_STATUS
EFIAPI
AsciiMacAddrToBytes(
VOID
);
EFI_STATUS
EFIAPI
IpmiSetLanConfigParams(
VOID
);
EFI_STATUS
EFIAPI
_ModuleEntryPoint(
VOID
);
EFI_STATUS
EFIAPI
LAN Configuration Parameter Selectors(
VOID
);
EFI_STATUS
EFIAPI
IP address (4 bytes)(
VOID
);
EFI_STATUS
EFIAPI
mask (4 bytes)(
VOID
);
EFI_STATUS
EFIAPI
gateway IP (4 bytes)(
VOID
);
EFI_STATUS
EFIAPI
gateway MAC (6 bytes)(
VOID
);
EFI_STATUS
EFIAPI
LAN network function(
VOID
);
EFI_STATUS
EFIAPI
Application network function(
VOID
);
EFI_STATUS
EFIAPI
LUN(
VOID
);
EFI_STATUS
EFIAPI
protocol pointers (stored in .data section, runtime BSS)(
VOID
);
EFI_STATUS
EFIAPI
IPMI transport protocol interface, located by LocateProtocol()(
VOID
);
EFI_STATUS
EFIAPI
the GUID at unk_1F20 ({0x36232936, ...}).(
VOID
);
EFI_STATUS
EFIAPI
*mIpmiTransport = NULL; // qword_23F0(
VOID
);
EFI_STATUS
EFIAPI
HOB list pointer, located from the system table configuration table(
VOID
);
EFI_STATUS
EFIAPI
// The debug output protocol, located from HOB(
VOID
);
EFI_STATUS
EFIAPI
PCD protocol interface(
VOID
);
EFI_STATUS
EFIAPI
//(
VOID
);
EFI_STATUS
EFIAPI
declarations(
VOID
);
EFI_STATUS
EFIAPI
InitializeBmcLanConfig ((
VOID
);
EFI_STATUS
EFIAPI
helper functions (MdePkg library wrappers)(
VOID
);
EFI_STATUS
EFIAPI
from end to beginning.(
VOID
);
EFI_STATUS
EFIAPI
= (UINT8 *)Source + Length - 1;(
VOID
);
EFI_STATUS
EFIAPI
overlap or Destination starts before Source.(
VOID
);
EFI_STATUS
EFIAPI
from beginning, using qmemcpy for aligned 8-byte chunks.(
VOID
);
EFI_STATUS
EFIAPI
= Length >> 3;(
VOID
);
EFI_STATUS
EFIAPI
list and protocol locator functions(
VOID
);
EFI_STATUS
EFIAPI
pool for the HOB protocol lookup, using BootServices.(
VOID
);
EFI_STATUS
EFIAPI
the HOB list size is 16 bytes or less (platform-specific check)(
VOID
);
EFI_STATUS
EFIAPI
LocateProtocol for the debug output protocol instead.(
VOID
);
EFI_STATUS
EFIAPI
(gBS->CalculateEfiHobListSize (mHobList) <= sizeof (UINT64) + sizeof (UINT64)) {(
VOID
);
EFI_STATUS
EFIAPI
Transport Protocol Command Functions(
VOID
);
EFI_STATUS
EFIAPI
[1:0] of second byte = busy flag from BMC(
VOID
);
EFI_STATUS
EFIAPI
LAN Configuration Parameters command:(
VOID
);
EFI_STATUS
EFIAPI
= 1;(
VOID
);
EFI_STATUS
EFIAPI
LAN Configuration Parameters(
VOID
);
EFI_STATUS
EFIAPI
format: bit 7 = parameter revision flag(
VOID
);
EFI_STATUS
EFIAPI
bit 7 set: value is byte[1] | ((byte[2] & 0x3F) << 8)(
VOID
);
EFI_STATUS
EFIAPI
bit 7 clear: parameter is not supported / invalid(
VOID
);
EFI_STATUS
EFIAPI
(ResponseBuffer[0] & 0x80) {(
VOID
);
EFI_STATUS
EFIAPI
Channel Discovery(
VOID
);
EFI_STATUS
EFIAPI
the IPMI transport's capabilities for max channels and medium type.(
VOID
);
EFI_STATUS
EFIAPI
= ((EFI_IPMI_TRANSPORT_PROTOCOL *)IpmiProtocol)->GetMaxChannels (185);(
VOID
);
EFI_STATUS
EFIAPI
candidate channels 1 through 11(
VOID
);
EFI_STATUS
EFIAPI
{(
VOID
);
EFI_STATUS
EFIAPI
command: Get Channel Number(
VOID
);
EFI_STATUS
EFIAPI
= IPMI_CC_SUCCESS;(
VOID
);
EFI_STATUS
EFIAPI
code(
VOID
);
EFI_STATUS
EFIAPI
type bits [6:0] = 4 means this channel supports the(
VOID
);
EFI_STATUS
EFIAPI
LAN (NC-SI or USB-over-LAN) medium.(
VOID
);
EFI_STATUS
EFIAPI
((EFI_D_INFO, "%a: Channel Medium Type: %x\n", "GetLanChannelNumber", ResponseByte & 0x7F));(
VOID
);
EFI_STATUS
EFIAPI
channel buffer already has the correct values from the scan(
VOID
);
EFI_STATUS
EFIAPI
this is effectively a length adjustment.(
VOID
);
EFI_STATUS
EFIAPI
(ChannelBuffer, ChannelBuffer, *ChannelCount);(
VOID
);
EFI_STATUS
EFIAPI
String Parsers for IPMI Configuration(
VOID
);
EFI_STATUS
EFIAPI
from last octet (parse backwards)(
VOID
);
EFI_STATUS
EFIAPI
string length (cap at 15 chars to avoid pathological inputs)(
VOID
);
EFI_STATUS
EFIAPI
= 0;(
VOID
);
EFI_STATUS
EFIAPI
value ranges: max 3 digits, max value 255(
VOID
);
EFI_STATUS
EFIAPI
(DigitCount > 2) {(
VOID
);
EFI_STATUS
EFIAPI
leading null characters (padding)(
VOID
);
EFI_STATUS
EFIAPI
NextChar;(
VOID
);
EFI_STATUS
EFIAPI
out output on parse failure(
VOID
);
EFI_STATUS
EFIAPI
from last byte (parse backwards)(
VOID
);
EFI_STATUS
EFIAPI
separator: commit the current byte(
VOID
);
EFI_STATUS
EFIAPI
(!HasDigits || MacString[Index + 1] == L'-') {(
VOID
);
EFI_STATUS
EFIAPI
of string: commit final byte(
VOID
);
EFI_STATUS
EFIAPI
(HasDigits) {(
VOID
);
EFI_STATUS
EFIAPI
hex nibble(
VOID
);
EFI_STATUS
EFIAPI
= TRUE;(
VOID
);
EFI_STATUS
EFIAPI
LAN Configuration (Parameter Block Programming)(
VOID
);
EFI_STATUS
EFIAPI
3: Station IP Address (4 bytes at offset 1)(
VOID
);
EFI_STATUS
EFIAPI
((
VOID
);
EFI_STATUS
EFIAPI
6: Subnet Mask (4 bytes at offset 5)(
VOID
);
EFI_STATUS
EFIAPI
12: Default Gateway IP (4 bytes at offset 9)(
VOID
);
EFI_STATUS
EFIAPI
13: Default Gateway MAC (6 bytes at offset 13)(
VOID
);
EFI_STATUS
EFIAPI
Entry Point: InitializeBmcLanConfig(
VOID
);
EFI_STATUS
EFIAPI
the IPMI Transport Protocol(
VOID
);
EFI_STATUS
EFIAPI
= gBS->LocateProtocol ((
VOID
);
EFI_STATUS
EFIAPI
active LAN channels(
VOID
);
EFI_STATUS
EFIAPI
= sizeof (ChannelNumberBuffer);(
VOID
);
EFI_STATUS
EFIAPI
each discovered LAN channel(
VOID
);
EFI_STATUS
EFIAPI
(Index = 0; Index < ChannelCount; Index++) {(
VOID
);
EFI_STATUS
EFIAPI
configuration data is referenced from the "ServerSetup"(
VOID
);
EFI_STATUS
EFIAPI
variable (string at 0x1940). Each channel has a 19-byte(
VOID
);
EFI_STATUS
EFIAPI
block programmed via IpmiSetLanConfigParams().(
VOID
);
EFI_STATUS
EFIAPI
dump of configured parameters(
VOID
);
EFI_STATUS
EFIAPI
((EFI_D_INFO, "#########################\n"));(
VOID
);
EFI_STATUS
EFIAPI
UEFI Module Entry Point(
VOID
);
EFI_STATUS
EFIAPI
(0x350)(
VOID
);
EFI_STATUS
EFIAPI
global pointers.(
VOID
);
EFI_STATUS
EFIAPI
EFIAPI(
VOID
);
EFI_STATUS
EFIAPI
global service table pointers with assertions(
VOID
);
EFI_STATUS
EFIAPI
= ImageHandle;(
VOID
);
EFI_STATUS
EFIAPI
HOB list for debug protocol access(
VOID
);
EFI_STATUS
EFIAPI
();(
VOID
);
EFI_STATUS
EFIAPI
BMC LAN configuration(
VOID
);
EFI_STATUS
EFIAPI
InitializeBmcLanConfig ();(
VOID
);
#endif /* __BMCLANCONFIG_H__ */