SetupConfigUpdateDxeNeonCityEPRP - Analysis Report =================================================== Overview -------- Module: SetupConfigUpdateDxeNeonCityEPRP.efi Index: 0346 Size: 0xCA0 (3,232 bytes) Arch: x64 PE File: 0346_SetupConfigUpdateDxeNeonCityEPRP_1ddfaad02ed6 MD5: 9c9ec2d053407160c5dbde0889a35f04 SHA256: 1ddfaad02ed63bd762e88880fda2275f1f5d589fc4bfc49a9ed94739a16f0ed9 Type: UEFI DXE Driver Summary ------- This is a small UEFI DXE driver (~3.2 KB, 8 functions) that provides the SetupConfig update registration mechanism for the NeonCity EPRP platform. It is a platform-specific driver that hooks into the generic SetupConfig protocol to receive notifications when setup configuration changes occur. Function Map ------------ Address Size Original Name Renamed Name Description 0x390 250 _ModuleEntryPoint ModuleEntryPoint Main entry point 0x48C 11 sub_48C EfiGetLastErrorCode Returns EFI_ALREADY_STARTED 0x498 127 sub_498 GetDebugProtocol Singleton debug protocol locator 0x518 136 sub_518 DebugPrint CMOS-filtered debug output 0x5A0 62 sub_5A0 DebugAssert Debug assertion handler 0x5E0 214 sub_5E0 GetHobList HOB list discovery 0x6B8 110 sub_6B8 GuidCompare 16-byte GUID comparison 0x728 47 sub_728 ReadUnalignedQword Unaligned memory read Segments -------- Segment Start End Size Perms HEADER 0x000 0x2C0 0x2C0 --- .text 0x2C0 0x760 0x4A0 rx .rdata 0x760 0xB40 0x3E0 r .data 0xB40 0xBE0 0xA0 rw seg004 0xBE0 0xC40 0x60 r .xdata 0xC40 0xC80 0x40 r .reloc 0xC80 0xCA0 0x20 r GAP 0xCA0 0x1000 0x360 rw Global Data (renamed) --------------------- Address Name Size Description 0xB40 gDebugProtocolGuid 16 GUID for the debug protocol 0xB50 gSetupConfigProtocolGuid 16 GUID for the SetupConfig protocol 0xB60 gTargetHobGuid_lo 16 Lower half of HOB GUID for matching 0xB68 gTargetHobGuid_hi 16 Upper half of HOB GUID for matching 0xB70 gSetupConfigNotifyGuid 16 GUID for SetupConfig notification 0xB80 gSetupConfigRegistration 24 Registration context (24 bytes) 0xBA0 BootServices 8 Cached gBS pointer 0xBA8 ImageHandle 8 Cached image handle 0xBB0 RuntimeServices 8 Cached gRT pointer 0xBB8 gDebugProtocolInterface 8 Cached debug protocol pointer 0xBC0 gHobList 8 Cached HOB list pointer 0xBC8 gCmosDebugLevel 1 Cached CMOS debug level 0xB98 SystemTable 8 Cached gST pointer Key Strings ----------- 0x760 \nASSERT_EFI_ERROR (Status = %r)\n 0x788 !EFI_ERROR (Status) 0x7A0 UBA:SETUPConfigUpdate-TypeNeonCityEPRP\n 0x7C8 gImageHandle != ((void *) 0) 0x840 gST != ((void *) 0) 0x858 gBS != ((void *) 0) 0x870 gRT != ((void *) 0) 0x8E0 Buffer != ((void *) 0) 0x920 mHobList != ((void *) 0) 0x7F0 e:\hs\MdePkg\Library\UefiBootServicesTableLib\UefiBootServicesTableLib.c 0x890 e:\hs\MdePkg\Library\UefiRuntimeServicesTableLib\UefiRuntimeServicesTableLib.c 0x8F8 e:\hs\MdePkg\Library\DxeHobLib\HobLib.c 0x940 e:\hs\MdePkg\Library\BaseLib\Unaligned.c Call Graph ---------- ModuleEntryPoint (0x390) +---> DebugAssert (0x5A0) --via--> GetDebugProtocol (0x498) +---> GetHobList (0x5E0) | +---> GuidCompare (0x6B8) | | +---> ReadUnalignedQword (0x728) (called 4x) | | +---> DebugAssert (0x5A0) | +---> DebugPrint (0x518) | | +---> GetDebugProtocol (0x498) | +---> DebugAssert (0x5A0) +---> DebugPrint (0x518) +---> GetDebugProtocol (0x498) Analysis Notes -------------- 1. CMOS Debug Level Control: DebugPrint reads the CMOS diagnostic register (0x4B) via RTC ports 0x70/0x71 to determine the platform's configured debug verbosity level. Level 1 shows errors only; higher levels show progressively more debug output. 2. Hardware Strapping: When CMOS debug level is 0, the driver falls back to reading a hardware strap/pin configuration from memory-mapped I/O at 0xFDAF0490 (bit 1) to determine the debug level. 3. HOB GUID Matching: GetHobList iterates through the UEFI HOB (Hand-off Block) list looking for a specific HOB by GUID. The GUID is stored split across gTargetHobGuid_lo and gTargetHobGuid_hi for comparison purposes. 4. Protocol Registration: ModuleEntryPoint locates the SetupConfig protocol via gBS->LocateProtocol and then calls a registration function at offset +16 in the protocol interface to register for configuration update notifications. The registration includes a 24-byte context block. 5. The driver name contains "NeonCityEPRP" which identifies it as a platform-specific DXE driver for the NeonCity platform's EPRP (Enhanced Platform Reliability Profile) configuration. The "UBA:" prefix on the debug string indicates usage of AMI's UBA (Universal BIOS Architecture) framework.