Newer
Older
AMI-Aptio-BIOS-Reversed / SmbiosDataUpdateDxeNeonCityEPECB / SmbiosDataUpdateDxeNeonCityEPECB.md
@Ajax Dong Ajax Dong 2 days ago 7 KB Init

SmbiosDataUpdateDxeNeonCityEPECB

Function Table

Address Name Description
SmbiosFreePool
SmbiosDataUpdateDxeEntryPoint
SmbiosDataUpdateEntry
SmbiosUpdateBoardTables
SmbiosConstructType9Slot
SmbiosConstructType17Memory
SmbiosConstructType41Device
SmbiosInstallTable
SmbiosGetPlatformLang
SmbiosNotifyEndOfType
SmbiosAssert
Module Globals
Standard UEFI globals (from UefiBootServicesTableLib
EFI_HANDLE gImageHandle = NULL;
UBA platform SMBIOS configuration protocol
VOID *gUbaPlatformSmbiosProtocol = NULL;
HII handle for SMBIOS string packages
EFI_HII_HANDLE gSmbiosStringPackHandle = NULL;
HII protocol interfaces
VOID *gHiiDatabaseProtocol = NULL;
SMBIOS protocol instance (locate on demand)
EFI_SMBIOS_PROTOCOL *gSmbiosProtocol = NULL;
VOID *gMmPciBase = NULL;
HOB list (HobLib)
VOID *mHobList = NULL;
EFI Component Name and Driver Binding - AutoGen
AutoGen header: SmbiosDataUpdateDxeStrDefs.h
These are populated by the build system (AutoGen.c).
Source path from build:
Library Function Wrappers
Entry Point
Save UEFI globals for library compatibility
gImageHandle = ImageHandle;
Locate HII Database Protocol
Status = gBS->LocateProtocol (
Locate HII String Protocol
Retrieve HOB list pointer for HobLib
Status = EfiGetSystemConfigurationTable (
Locate DxeServicesTable (gDS)
Locate PciUsra protocol (Memory Mapped PCI config access)
if (mPciUsra == NULL) {
Register SMBIOS data update protocol with UBA
Status = SmbiosDataUpdateEntry (ImageHandle, SystemTable);
SMBIOS Data Update Entry
Locate UBA platform SMBIOS configuration protocol from the
platform PEIM or DXE driver
Copy platform GUID into the SMBIOS configuration table
CopyGuid (
Register HII string packages for SMBIOS string references
gSmbiosStringPackHandle = HiiAddPackages (
Initialize SMBIOS table install parameters
ZeroMem (TableInstallParams, sizeof (TableInstallParams));
Locate SMBIOS protocol if not already found
if (gSmbiosProtocol == NULL) {
Call UBA board update function to install platform-specific SMBIOS tables
Max SMBIOS table size
Allocate a reusable work buffer for SMBIOS structure construction
SmbiosTableBuffer = SmbiosAllocateZeroPool (SmbiosTableBufferSize);
Phase 1: Install SMBIOS Type 9 (System Slots) - up to 30 entries
for (Index = 0; Index < 30; Index++) {
Notify end of type 9 table enumeration
SmbiosNotifyEndOfType (9);
Phase 2: Install SMBIOS Type 17 (Memory Devices) - up to 8 entries
for (Index = 0; Index < 8; Index++) {
Notify end of type 17 table enumeration
SmbiosNotifyEndOfType (41);
Phase 3: Install SMBIOS Type 41 (Onboard Devices) - up to 4 entries
for (Index = 0; Index < 4; Index++) {
Clean up work buffer
SmbiosFreePool (SmbiosTableBuffer);
SMBIOS Type 9 (System Slots) Construction
Slot 0: StringId=0x0002, Type=0x0B(x16), Width=0x04(x16)
Slot 1:
Slot 2:
Slot 3:
Slot 4:
Slot 5:
Slot 6:
Slot 7:
Slot 8:
Slot 9:
Slot 10:
Slot 11:
Slot 12:
Slot 13:
Slot 14:
Slot 15:
Slot 16:
Slot 17:
Slot 18:
Slot 19:
Slot 20:
Slot 21:
Slot 22:
Slot 23:
Slot 24:
Slot 25:
Slot 26:
Slot 27:
Slot 28:
Slot 29:
Initialize SMBIOS header
SmbiosHeader = (SMBIOS_STRUCT_HEADER *)Buffer;
SMBIOS 3.1 type 9 with segment/bus/devfunc
Extract slot data from lookup table
StringId = (UINT16 )&mSlotData[10 * Index];
Populate type 9 fields
First string
Look up slot designation string from HII
StringBuffer = SmbiosGetHiiString (
Append the slot designation string
SMBIOS Type 17 (Memory Device) Construction
Initialize SMBIOS header: type 17 (Memory Device)
CPU0 Channel 0 Slot 0: DIMM_A1
x8 MemoryDevice->DataWidth = 3; // x72
4GB MemoryDevice->FormFactor = 9; // DIMM
DDR4 MemoryDevice->Speed = 2133;
Use platform data
CPU0 Channel 0 Slot 1: DIMM_A2
CPU0 Channel 1 Slot 0: DIMM_B1
CPU0 Channel 1 Slot 1: DIMM_B2
CPU1 Channel 0 Slot 0: DIMM_C1
CPU1 Channel 0 Slot 1: DIMM_C2
CPU1 Channel 1 Slot 0: DIMM_D1
CPU1 Channel 1 Slot 1: DIMM_D2
Look up the device locator string from HII
String IDs: 28-35 for DIMM labels
Append string to SMBIOS structure
Add the bank locator string (second string)
SMBIOS Type 41 (Onboard Devices Extended Information) Construction
Onboard VGA controller
Onboard Network Controller 1
Onboard Network Controller 2
Onboard SATA Controller
SMBIOS Table Installation
Locate SMBIOS protocol if not already loaded
Add the SMBIOS table via the protocol's Add() function
Status = gSmbiosProtocol->Add (
HII String Retrieval
Locate HII string protocol if needed
if (gHiiStringProtocol == NULL) {
First call to get required buffer size (returns BUFFER_TOO_SMALL)
StringSize = 0;
Allocate string buffer
StringBuffer = (EFI_STRING)AllocatePool (StringSize);
Retrieve the string
Status = HiiString->GetString (
Convert from UCS-2 to ASCII
AsciiSize = StringSize / sizeof (CHAR16) + 1;
Platform Language Retrieval
Query required size for PlatformLang variable
Status = gRT->GetVariable (
Allocate and retrieve the value
SMBIOS Notify End-of-Type
The SMBIOS protocol notification interface allows drivers to
signal completion of table enumeration per type.
This is typically a no-op on most firmware.
Debug message display function (conditional on build flags).
Writes formatted output to the UEFI debug console.
are compiled out in RELEASE builds.
Legacy ASSERT support wrappers
Calls into UEFI's DebugAssert via DebugLib
DEBUG ((EFI_D_ERROR, "ASSERT [%a]:%d: %a\n", FileName, LineNumber, Description));

Generated by HR650X BIOS Decompilation Project