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

SlotDataUpdateDxeCLX64L

Function Table

Address Name Description
ReadUnaligned64
LogUbaMessage
UbaAssert
MatchHobGuid
GetHobList
_ModuleEntryPoint
Global UEFI table pointers (set by _ModuleEntryPoint)
EFI_HANDLE gImageHandle = NULL;
Cached UBA debug protocol pointer
VOID *gUbaDebugProtocol = NULL;
Cached HOB list pointer
VOID *gHobList = NULL;
UBA Slot Data Update Protocol GUID
STATIC CONST EFI_GUID mSlotDataUpdateProtocolGuid = SLOT_DATA_UPDATE_PROTOCOL_GUID;
Slot Data Entry Protocol GUID
STATIC CONST EFI_GUID mSlotDataEntryGuid = SLOT_DATA_ENTRY_PROTOCOL_GUID;
HOB List GUID
STATIC CONST EFI_GUID mGetHobListGuid = GET_HOB_LIST_PROTOCOL_GUID;
First PSLT entry: physical slot configuration for CLX64L platform
STATIC CONST PSLT_HEADER mSlotTableEntry1 = {
Signature = "PSLT"
Version 0xBA0, // TableOffset
TableLength { // SlotData[24]:
Slot 0: B0:D2:F0 -> Port 1
Slot 1: B1:D2:F1 -> Port 0
Slot mapping attribute
Reserved 0x00, 0x00, 0x00, 0x00, // Reserved
Reserved }
Second PSLT entry: extended slot configuration
Contains null table offset (placeholder/reserved entry)
STATIC CONST PSLT_HEADER mSlotTableEntry2 = {
No slot mapping
Reserved 0xB4, 0x04, 0x00, 0x00, // Secondary table reference
UBA debug protocol GUID (internal UBA protocol for debug services)
This GUID varies by platform; located via gBS->LocateProtocol
STATIC CONST EFI_GUID mUbaDebugProtocolGuid = {
Return cached protocol if already located
if (gUbaDebugProtocol != NULL) {
Allocate pool for the protocol instance
Status = gBootServices->AllocatePool (
Zero the allocated pool
Locate the UBA debug protocol
Status = gBootServices->LocateProtocol (
Read CMOS debug level
CmosIndex = __inbyte (RTC_INDEX_PORT);
Determine if debug is enabled for this severity
if (DebugLevel > 3) {
if (DebugLevel == 0) {
Map debug level to UBA severity mask
SeverityLevel = (DebugLevel == 1) ?
If severity matches, forward to UBA debug print
if ((SeverityLevel & Severity) != 0) {
Read the first 8 bytes of the HOB header
Guid1 = ReadUnaligned64 (HobEntry);
Return cached HOB list if already located
if (gHobList != NULL) {
Initialize //
Iterate through HOB entries from the system table
if (gSystemTable->NumberOfTableEntries != 0) {
Found matching HOB; return the data field at offset 16
Result = (UINT64 )((UINTN)gSystemTable->ConfigurationTable +
No matching HOB found - assert
LogUbaMessage (
Verify HOB list was found
if (gHobList == NULL) {
Save global UEFI table pointers
gImageHandle = ImageHandle;
Cache boot services pointer from system table (offset 0x60)
gBootServices = SystemTable->BootServices;
Cache runtime services pointer from system table (offset 0x58)
gRuntimeServices = SystemTable->RuntimeServices;
Initialize HOB list cache
GetHobList (0);
Log initialization message
LogUbaMessage (UBA_DEBUG_ERROR, "UBA:SlotDataUpdate-TypeClx64L\n");
Locate the UBA Slot Data Update protocol (BootServices->LocateProtocol)
Install first PSLT entry: physical slot table (40 bytes)
Status = SlotProtocol->GetSlotData (
Install second PSLT entry: extended slot config (40 bytes)
return SlotProtocol->GetSlotData (

Generated by HR650X BIOS Decompilation Project