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.