/** @file
SmbiosType39.h -- Header for SmbiosType39
Copyright (c) HR650X BIOS Decompilation Project
**/
#ifndef __SMBIOSTYPE39_H__
#define __SMBIOSTYPE39_H__
#include "../uefi_headers/Uefi.h"
//
// Function Prototypes
//
EFI_STATUS
EFIAPI
InternalReadUnaligned64(
VOID
);
EFI_STATUS
EFIAPI
AsciiStrLen(
VOID
);
EFI_STATUS
EFIAPI
StrLen(
VOID
);
EFI_STATUS
EFIAPI
EfiGetSystemConfigurationTable(
VOID
);
EFI_STATUS
EFIAPI
SendHeciPowerSupplyCommand(
VOID
);
EFI_STATUS
EFIAPI
GetHobList(
VOID
);
EFI_STATUS
EFIAPI
FreePoolOrBuffer(
VOID
);
EFI_STATUS
EFIAPI
DebugPrint(
VOID
);
EFI_STATUS
EFIAPI
InstallSmbiosType39Structure(
VOID
);
EFI_STATUS
EFIAPI
SmbiosType39EntryPoint(
VOID
);
EFI_STATUS
EFIAPI
data(
VOID
);
EFI_STATUS
EFIAPI
gImageHandle = NULL;(
VOID
);
EFI_STATUS
EFIAPI
definitions (referenced from global data section)(
VOID
);
EFI_STATUS
EFIAPI
EFI_GUID gEfiSmbiosProtocolGuid;(
VOID
);
EFI_STATUS
EFIAPI
command message for power supply queries(
VOID
);
EFI_STATUS
EFIAPI
= HECI_GROUP_ID << 8 | 0x0A(
VOID
);
EFI_STATUS
EFIAPI
command byte(
VOID
);
EFI_STATUS
EFIAPI
data (varies per command)(
VOID
);
EFI_STATUS
EFIAPI
command template: GroupId = 0x8A0A(
VOID
);
EFI_STATUS
EFIAPI
FWS (Firmware Status) register bits(
VOID
);
EFI_STATUS
EFIAPI
out 8 bytes at a time, then remaining bytes(
VOID
);
EFI_STATUS
EFIAPI
(Buffer, Length);(
VOID
);
EFI_STATUS
EFIAPI
exceeded(
VOID
);
EFI_STATUS
EFIAPI
buffers do not overlap in a way that would cause corruption(
VOID
);
EFI_STATUS
EFIAPI
((UINTN)((CHAR8 *)Destination - Source) > AsciiStrLen (Source));(
VOID
);
EFI_STATUS
EFIAPI
the HECI request header(
VOID
);
EFI_STATUS
EFIAPI
Request.Command = Command;(
VOID
);
EFI_STATUS
EFIAPI
bay index in low byte(
VOID
);
EFI_STATUS
EFIAPI
the command via HECI with the default buffer size(
VOID
);
EFI_STATUS
EFIAPI
= sizeof (Response);(
VOID
);
EFI_STATUS
EFIAPI
response: if HeciMsg[1] is non-zero but not 0xA3, no data available(
VOID
);
EFI_STATUS
EFIAPI
(Response[1] != 0) {(
VOID
);
EFI_STATUS
EFIAPI
the returned data to the caller's buffer(
VOID
);
EFI_STATUS
EFIAPI
= &Response[3];(
VOID
);
EFI_STATUS
EFIAPI
31 pages for PCD protocol usage(
VOID
);
EFI_STATUS
EFIAPI
= EFI_SIZE_TO_PAGES (31);(
VOID
);
EFI_STATUS
EFIAPI
enough pages - return NULL(
VOID
);
EFI_STATUS
EFIAPI
NULL;(
VOID
);
EFI_STATUS
EFIAPI
the PCD protocol(
VOID
);
EFI_STATUS
EFIAPI
= gBS->LocateProtocol ((
VOID
);
EFI_STATUS
EFIAPI
CMOS to determine current debug level(
VOID
);
EFI_STATUS
EFIAPI
= IoRead8 (0x70);(
VOID
);
EFI_STATUS
EFIAPI
the error mask based on the debug level(
VOID
);
EFI_STATUS
EFIAPI
(DebugLevel > 3) {(
VOID
);
EFI_STATUS
EFIAPI
the INVALID string length for fallback(
VOID
);
EFI_STATUS
EFIAPI
= AsciiStrLen ("INVALID");(
VOID
);
EFI_STATUS
EFIAPI
the SMBIOS protocol(
VOID
);
EFI_STATUS
EFIAPI
= (SMBIOS_TABLE_TYPE39 *)(UINTN)GetSmbiosProtocol ();(
VOID
);
EFI_STATUS
EFIAPI
the notification event(
VOID
);
EFI_STATUS
EFIAPI
= gBS->CloseEvent (Event);(
VOID
);
EFI_STATUS
EFIAPI
the HECI protocol(
VOID
);
EFI_STATUS
EFIAPI
= GetHeciProtocol ();(
VOID
);
EFI_STATUS
EFIAPI
ME firmware status to determine if ME is in normal mode(
VOID
);
EFI_STATUS
EFIAPI
= 512;(
VOID
);
EFI_STATUS
EFIAPI
is not in S0/M0 normal operation state(
VOID
);
EFI_STATUS
EFIAPI
((DEBUG_INFO, "MeFs1.Bits.CurrentState == %d\n", CurrentMeState));(
VOID
);
EFI_STATUS
EFIAPI
power supply bays (0 and 1)(
VOID
);
EFI_STATUS
EFIAPI
= 0;(
VOID
);
EFI_STATUS
EFIAPI
1: Get Device Name (command = 0x9A, -102 signed)(
VOID
);
EFI_STATUS
EFIAPI
(DeviceName, "INVALID");(
VOID
);
EFI_STATUS
EFIAPI
2: Get Manufacturer (command = 0x99, -103 signed)(
VOID
);
EFI_STATUS
EFIAPI
3: Get Serial Number (command = 0x62, -98 signed as 0x9E)(
VOID
);
EFI_STATUS
EFIAPI
4: Get Asset Tag (command = 0xF1, -15 signed)(
VOID
);
EFI_STATUS
EFIAPI
tag command(
VOID
);
EFI_STATUS
EFIAPI
5: Get Model Part Number (command = 0x9B, -101 signed)(
VOID
);
EFI_STATUS
EFIAPI
6: Get Revision Level (command = 0xA7, -89 signed)(
VOID
);
EFI_STATUS
EFIAPI
7: Get Max Power Capacity(
VOID
);
EFI_STATUS
EFIAPI
request parameter(
VOID
);
EFI_STATUS
EFIAPI
8: Get Power Supply Present / Status(
VOID
);
EFI_STATUS
EFIAPI
as capacity command(
VOID
);
EFI_STATUS
EFIAPI
= Unknown(
VOID
);
EFI_STATUS
EFIAPI
power supply status based on response byte(
VOID
);
EFI_STATUS
EFIAPI
bit 1 of response[2] is clear -> status = 1 (Present, Unknown)(
VOID
);
EFI_STATUS
EFIAPI
bit 1 of response[2] is set -> status = 3 (Present, Good)(
VOID
);
EFI_STATUS
EFIAPI
= ((PsuResponse[2] & 0x02) != 0) ? 1 : 3;(
VOID
);
EFI_STATUS
EFIAPI
9: Allocate and build SMBIOS Type 39 record(
VOID
);
EFI_STATUS
EFIAPI
= AsciiStrLen (DeviceName)(
VOID
);
EFI_STATUS
EFIAPI
in the SMBIOS Type 39 record fields(
VOID
);
EFI_STATUS
EFIAPI
power unit group (2 = "From the Mapping to the Power Unit Group")(
VOID
);
EFI_STATUS
EFIAPI
the power supply status flags(
VOID
);
EFI_STATUS
EFIAPI
0 = Power Supply Present(
VOID
);
EFI_STATUS
EFIAPI
6-7 = Power Supply Status (00=Unknown, 01=OK, 10=Non-critical, 11=Critical)(
VOID
);
EFI_STATUS
EFIAPI
= (PowerSupplyPresent & 1) | ((PowerSupplyStatus & 7) << 6);(
VOID
);
EFI_STATUS
EFIAPI
fill the string area.(
VOID
);
EFI_STATUS
EFIAPI
are packed as null-terminated ASCII after the fixed structure.(
VOID
);
EFI_STATUS
EFIAPI
= (CHAR8 *)(SmbiosRecord + 1);(
VOID
);
EFI_STATUS
EFIAPI
10: Add the Type 39 record via SMBIOS protocol(
VOID
);
EFI_STATUS
EFIAPI
allocated buffers(
VOID
);
EFI_STATUS
EFIAPI
(StringBuffer);(
VOID
);
EFI_STATUS
EFIAPI
to the next supply bay(
VOID
);
EFI_STATUS
EFIAPI
+= 2;(
VOID
);
EFI_STATUS
EFIAPI
global variables(
VOID
);
EFI_STATUS
EFIAPI
= ImageHandle;(
VOID
);
EFI_STATUS
EFIAPI
HOB list and PCD protocol(
VOID
);
EFI_STATUS
EFIAPI
();(
VOID
);
EFI_STATUS
EFIAPI
up the DXE Services Table via system configuration(
VOID
);
EFI_STATUS
EFIAPI
= EfiGetSystemConfigurationTable ((
VOID
);
EFI_STATUS
EFIAPI
up the MM PCI base protocol (for MMIO PCI config access)(
VOID
);
EFI_STATUS
EFIAPI
a callback on the SMBIOS protocol installation(
VOID
);
EFI_STATUS
EFIAPI
SMBIOS protocol becomes available, InstallSmbiosType39Structure(
VOID
);
EFI_STATUS
EFIAPI
be called.(
VOID
);
EFI_STATUS
EFIAPI
= gBS->CreateEvent ((
VOID
);
#endif /* __SMBIOSTYPE39_H__ */