| Address | Name | Description |
|---|---|---|
| GetSlotCount | ||
| UbaDebugPrint | ||
| UbaDebugAssert | ||
| ReadUnaligned64 | ||
| IsHobGuidMatch | ||
| InstallSlotData | ||
| _ModuleEntryPoint | ||
| GUID | Definitions | |
| Global | Variables | |
| Platform | Slot Data (PSLT entries embedded in .data section) | |
| The | PSLT entries are stored statically in the .data section and registered | |
| with | the UBA protocol during initialization. They define the PCIe slot layout | |
| for | the LightningRidge EXEC B2 platform. | |
| PSLT_HEADER | layout: | |
| Offset | Size Field | |
| 0 | 4 Signature ("PSLT" = 0x544C5350) | |
| 4 | 4 Version (1) | |
| 8 | 4 TotalDataSize (total PSLT data size in bytes) | |
| 12 | 4 SlotCountFunc (RVA of GetSlotCount function) | |
| 16 | 4 Reserved (pad) | |
| 20 | 4 SlotDataFunc (RVA of GetSlotData function) | |
| 24 | 8 ConfigData (platform slot config flags) | |
| Function | Implementations | |
| Return | cached protocol if already located (lazy init check). | |
| if | (gUbaProtocol != NULL) { | |
| Allocate | a small test buffer to verify pool availability. | |
| Size | 31 = 0x1F bytes via gBS->AllocatePool (BootServices + 24). | |
| This | is a probe to verify the UEFI memory system is operational. | |
| Check | if AllocatePool succeeded by verifying it returned > 0x10. | |
| if | (TestBufferSize <= 0x10) { | |
| Locate | the UBA protocol using LocateProtocol (BootServices + 320 = 0x140). | |
| Get | the UBA protocol interface (lazy init through cached result). | |
| Uba | = UbaGetProtocolInterface (); | |
| Read | platform type from RTC CMOS register 0x4B. | |
| We | preserve bit 7 (NMI mask) of the address register. | |
| PlatformType | = IoRead8 (0x70); // Read current CMOS address | |
| Select | reg 0x4B, keep NMI mask | |
| Read | platform type byte | |
| Determine | debug routing based on platform type (N3). | |
| if | (N3 > 3) { | |
| N3 | is in valid range > 3, use as-is (no remapping needed) | |
| Platform | type 0: read hardware strap from memory-mapped IO. | |
| 0xFDAF0490 | is the LPC/strap register. Bit 1 indicates the | |
| platform | type. OR with 1 to ensure N3 is at least 1. | |
| N3 | *= ((volatile UINT8 *)0xFDAF0490 & 0x02) | 0x01;** |
| else | N3 is 1, 2, or 3: use directly without remapping | |
| Map | platform type to debug route value. | |
| Valid | range: N3 - 1 <= 0xFD (check that N3 is not 0 after remap) | |
| if | ((UINT8)(N3 - 1) <= 0xFD) { | |
| EFI_D_INFO | route | |
| EFI_D_VERBOSE | route (N3 >= 2) | |
| If | the debug level matches the routing mask, call UBA debug output. | |
| if | ((DebugRoute & Severity) != 0) { | |
| UBA | protocol function index 0 (offset 0x00): DebugPrint | |
| UbaDebugFunc | = (UBA_DEBUG_PRINT)(Uba->DebugPrint); | |
| Get | the UBA protocol and call its assertion handler. | |
| UBA | protocol function index 1 (offset 0x08) is the assert handler: | |
| VOID | (*)(UINT64 FileName, UINTN LineNumber, UINT64 Description) | |
| Read | each GUID as two 64-bit values (low and high halves) | |
| and | compare. The ReadUnaligned64 wrapper includes NULL checking. | |
| Guid1Low | = ReadUnaligned64 ((CONST UINT64 *)Guid1); | |
| Return | cached HOB list if already located. | |
| if | (gHobList != NULL) { | |
| SystemTable | + 104 (0x68) = NumberOfTableEntries (UINTN) | |
| SystemTable | + 112 (0x70) = ConfigurationTable (EFI_CONFIGURATION_TABLE *) | |
| Total | entry size: 24 bytes | |
| HobCount | = (UINTN )((UINT8 *)gSystemTable + 104); | |
| Walk | the configuration table to find the DXE Services HOB entry. | |
| for | (Index = 0; Index < HobCount; Index++) { | |
| Found | the DXE Services HOB - cache its VendorTable pointer. | |
| gHobList | = *(VOID )(HobEntries + Index 24 + 16);* | |
| DXE | Services HOB not found in config table - report error. | |
| UbaDebugPrint | (0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n"); | |
| HobList | is still NULL after scanning all config entries. | |
| This | triggers a CpuDeadLoop (via the UBA assert). | |
| UbaDebugAssert | ( | |
| debug banner identifying this module. | ||
| UbaDebugPrint | (0x80000000, "UBA:SlotDataUpdate-TypeLightningRidgeEXECB2\n"); | |
| Locate | the UBA protocol interface via LocateProtocol. | |
| BootServices | + 320 (0x140) = LocateProtocol | |
| Registration | key: NULL | |
| Status | = gBootServices->LocateProtocol ( | |
| UBA | protocol function at offset +0x10 (Register): SetData. | |
| VOID | *Data, UINTN DataSize) | |
| UbaRegister | = (UBA_REGISTER)(Uba->RegisterFunc); | |
| Register | PSLT Entry 1: Primary slot table with GUID B93613E1-... | |
| Status | = UbaRegister ( | |
| Register | PSLT Entry 2: Extended slot config with GUID 226763AE-... | |
| Phase | 1: Cache and validate global UEFI pointers | |
| Save | ImageHandle globally and ASSERT if NULL. | |
| gImageHandle | = ImageHandle; | |
| Save | SystemTable globally and ASSERT if NULL. | |
| gSystemTable | = SystemTable; | |
| Save | BootServices pointer from SystemTable and ASSERT if NULL. | |
| gBootServices | = SystemTable->BootServices; | |
| Save | RuntimeServices pointer from SystemTable and ASSERT if NULL. | |
| gRuntimeServices | = SystemTable->RuntimeServices; | |
| Phase | 2: Initialize HOB list from system table configuration | |
| gEfiDxeServicesTableGuid | ({7739F24C-93D7-11D4-...}) and caches | |
| the | associated VendorTable pointer in gHobList. | |
| GetHobList | (); | |
| Phase | 3: Register platform slot data with UBA protocol | |
| Status | = InstallSlotData (); |
Generated by HR650X BIOS Decompilation Project