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

SlotDataUpdateDxeNeonCityEPECB

Function Table

Address Name Description
ReadUnaligned64
CompareGuidValue
PlatformSlotDataInit
UbaDebugAssert
SlotDataAccessor1
SlotDataAccessor2
SlotDataUpdateEntryPoint
Local GUIDs
UBA Debug Protocol GUID used by assertion handler.
EFI_GUID gUbaDebugProtocolGuid =
UBA Slot Data Update Protocol GUID.
EFI_GUID gUbaSlotDataUpdateProtocolGuid =
Platform Slot Config GUID 1 (maps to 40-byte PSLT).
EFI_GUID gSlotConfigGuid40 =
Platform Slot Config GUID 2 (maps to 32-byte PSLT).
EFI_GUID gSlotConfigGuid32 =
HOB List GUID (defined in MdePkg).
gEfiHobListGuid = {0x7739F24C, 0x93D7, 0x11D4, {0x9A, 0x3A, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D}}
EFI_GUID gEfiHobListGuid =
Global Variables
EFI_SYSTEM_TABLE *gSystemTable = NULL;
Cached UBA debug protocol pointer (for ASSERT output).
VOID *gUbaDebugProtocol = NULL;
Cached HOB list pointer.
VOID *gHobList = NULL;
Static data: Platform Slot Table (PSLT) entries
PSLT entry 1 (40 bytes): Dual-slot configuration.
SlotIdentifier = 0x4B0 -> SlotDataAccessor1
SlotIdentifier2 = 0x4B4 -> SlotDataAccessor2
GLOBAL_REMOVE_IF_UNREFERENCED UINT64 mSlotConfig40[] = {
PSLT entry 2 (32 bytes): Single-slot configuration.
GLOBAL_REMOVE_IF_UNREFERENCED UINT64 mSlotConfig32[] = {
Function Prototypes (forward declarations)
VOID *LocateDebugProtocol (VOID);
Slot Data Accessor Functions (referenced by PSLT entries)
Helper Functions
UBA Debug Protocol Support
Raise TPL to HIGH_LEVEL to serialize access during protocol lookup.
OldTpl = gBootServices->RaiseTPL (TPL_HIGH_LEVEL);
Locate the UBA debug protocol for assertion output.
Status = gBootServices->LocateProtocol (
Call the assertion function at protocol + 0x08 (index 1).
HOB List Support
Return early if there are no configuration table entries.
if (gSystemTable->NumberOfTableEntries == 0) {
Iterate through configuration table entries to find gEfiHobListGuid.
for (Index = 0; Index < gSystemTable->NumberOfTableEntries; Index++) {
Found the HOB list - cache and return the pointer.
gHobList = Entry->VendorTable;
HOB list not found - report error and assert.
DEBUG ((DEBUG_ERROR, "\nASSERT_EFI_ERROR (Status = %r)\n", EFI_NOT_FOUND));
Platform Detection & Slot Data Initialization
Save current NMI state and select CMOS register 0x4B.
Register 0x4B holds platform configuration data.
NmiSave = IoRead8 (0x70);
Handle special CMOS values:
if (CmosValue > 3) {
Read hardware strap from fixed MMIO address.
Bit 1 selects platform type; OR with 1 for default.
CmosValue **= (MmioRead32 (0xFDAF0490) & 2) 1;**
Map CMOS value to platform type flags:
Value **1 -> Flag 0x00000004**
Other **-> Flag 0x00000006**
if ((CmosValue - 1) <= 0xFD) {
Dispatch to UBA protocol slot data init handler (index 0 = first function pointer).
The protocol's first function handles platform-specific init dispatch:
Result = ((UINTN (EFIAPI )(UINTN, CHAR8 , UINTN))(
Entry Point
Store global EFI handles.
gImageHandle = ImageHandle;
Validate input parameters (uses UBA assert for output).
ASSERT (ImageHandle != NULL);
Locate the HOB list from the system table configuration table.
LocateHobList ();
Perform platform detection and slot data initialization
via the UBA framework. This checks CMOS register 0x4B
and dispatches to the appropriate platform type handler.
PlatformSlotDataInit (0x80000000, "UBA:SlotDataUpdate-TypeNeonCityEPECB\n");
Locate the UBA slot data update protocol.
LocalVariable = 0;
Register 32-byte slot configuration (single slot, referenced by gSlotConfigGuid32).
Status = ((EFI_STATUS (EFIAPI )(VOID , EFI_GUID , VOID , UINTN))(
Register 40-byte slot configuration (dual slot, referenced by gSlotConfigGuid40).

Generated by HR650X BIOS Decompilation Project