| Address | Name | Description | |
|---|---|---|---|
| ModuleEntryPoint | |||
| UnicodeCollationEngEntryPoint | |||
| EngStriUpper | |||
| EngStriLower | |||
| EngStriColl | |||
| EngStrToFat | |||
| EngMetaiMatch | |||
| DebugAssert | |||
| DebugPrint | |||
| ReadUnaligned64 | |||
| IsProtocolInstalled | |||
| Global | Data | ||
| UINT8 | byte_10A0[512] = {0}; | ||
| UINT8 | byte_12A0[256] = {0}; | ||
| FAT | directory ordering priority table (0x1398, 256 bytes). | ||
| Stores | sort priorities for ASCII characters. | ||
| UINT8 | byte_1398[256] = {0}; | ||
| Cached | debug output device protocol pointer (0x1088). | ||
| UINT64 | qword_1088 = 0; | ||
| Cached | HOB list pointer (0x1090). | ||
| UINT64 | qword_1090 = 0; | ||
| UEFI | ImageHandle stored by the EDK2 UefiBootServicesTableLib constructor. | ||
| EFI_HANDLE | gImageHandle = NULL; | ||
| UEFI | SystemTable stored by the EDK2 UefiBootServicesTableLib constructor. | ||
| EFI_SYSTEM_TABLE | *gST = NULL; | ||
| UEFI | BootServices pointer, extracted from SystemTable. | ||
| EFI_BOOT_SERVICES | *gBS = NULL; | ||
| UEFI | RuntimeServices pointer, extracted from SystemTable. | ||
| EFI_RUNTIME_SERVICES | *gRT = NULL; | ||
| Function | Implementations | ||
| UEFI | driver entry point. Called by firmware after image loading. | ||
| Saves | the ImageHandle and SystemTable in global variables, extracts | ||
| BootServices | and RuntimeServices pointers, validates them, then | ||
| initializes | the HOB library and calls the Unicode Collation driver | ||
| entry | point. | ||
| EFI_STATUS | EFIAPI | ||
| Unicode | Collation driver entry point. | ||
| Initializes | the three case-conversion and classification tables | ||
| installs | EFI_UNICODE_COLLATION_PROTOCOL on a new handle. | ||
| Table | initialization: | ||
| flag | bit (bit 0 of byte_10A0[c + 256]) set. | ||
| Initialize | the case conversion and classification tables | ||
| for | (Index = 0; Index < 256; Index++) { | ||
| Sort | priority: default to distance from 'A' + 1 | ||
| Set | upper-case mapping for lowercase letters (a-z -> A-Z) | ||
| and | set FAT-legal flags | ||
| if | **((Index + 151 <= 0x19) | // Index in [97, 122] (0x61-0x7a)** | |
| Index | in [?, ?] | ||
| Index | in [0, 6] | ||
| Set | legal FAT char flag | ||
| Sort | priority | ||
| Alternate | mapping | ||
| Mark | the legal FAT file name characters | ||
| Char | = '0'; | ||
| Install | the Unicode Collation protocol | ||
| NULL | // ); | ||
| Status | = gBS->InstallMultipleProtocolInterfaces( | ||
| Handle | &gEfiUnicodeCollationProtocolGuid, // GUID | ||
| Interface | &gEfiUnicodeCollation2ProtocolGuid, // GUID2 | ||
| Interface2 | NULL | ||
| Convert | a string to upper case using the byte_10A0[] translation table. | ||
| For | each character in the string, if the character is < 0x100, its | ||
| otherwise | the last non-zero character processed. | ||
| Convert | a string to lower case using the byte_12A0[] translation table. | ||
| Pattern | syntax: | ||
| All | character comparisons are case-insensitive, using the lower-case | ||
| Handle | '*' | match zero or more characters | |
| if | (PatternChar == L'*') { | ||
| Handle | '?' | match any single character | |
| if | (PatternChar == L'?') { | ||
| Handle | '[' | character range | |
| if | (PatternChar == L'[') { | ||
| StringChar | as integer | ||
| Handle | range '-' | ||
| if | (CurrentPatternChar == L'-') { | ||
| Empty | bracket | no match | |
| return | FALSE; | ||
| Literal | character comparison (case-insensitive) | ||
| StringChar | = (S1 > 0xFF) ? S1 : byte_12A0[*S1]; | ||
| Converts | an ASCII string to a FAT-format Unicode string. | ||
| This | simply copies bytes from the 8-bit ASCII input and zero-extends | ||
| each | to a 16-bit CHAR16 output value. | ||
| Converts | a Unicode string to a FAT file name (8.3 format). | ||
| 1 | if any replacement with '_' was necessary. | ||
| Skip | dots and spaces | ||
| if | (Char != L'.' && Char != L' ') { | ||
| If | it's a legal FAT character (bit 0 set in classification table) | ||
| if | (Char < 0x100 && (byte_10A0[Char + 256] & 1) != 0) { | ||
| Retrieves | the debug output device protocol. | ||
| Allocates | an event and then uses gBS->LocateProtocol() to find the | ||
| debug | output device via the HOB list GUID. If the allocation succeeds | ||
| but | the protocol is not found, the cached pointer is set to NULL. | ||
| Results | are cached in qword_1088 after the first successful lookup. | ||
| VOID | * | ||
| Allocate | pool (BootServices + 24 = AllocatePool with type=31=EfiBootServicesData) | ||
| PoolSize | = (UINTN)gBS->AllocatePool(31, 0, &Interface); | ||
| Locate | protocol via HOB list GUID | ||
| Status | = gBS->LocateProtocol( | ||
| Protocol | GUID | ||
| Registration | &qword_1088 // Interface | ||
| Debug | assertion handler. | ||
| Reads | the CMOS diagnostic output device configuration (CMOS index 0x4B) | ||
| to | determine where to send assertion output. If the device supports | ||
| the | error level indicated by FileName (upper bits), calls the assertion | ||
| handler | on the debug output device. | ||
| The | CMOS byte at 0x4B encodes the platform type: | ||
| 1 | = platform with serial debug output | ||
| 2 | = platform with video/console debug output | ||
| Read | CMOS diagnostic port to determine platform type | ||
| PlatformType | *= ((volatile UINT8 *)0xFDAF0490 & 2) | 1;** | |
| EFI_ERROR_MASK | ** | bit 1 (platform type >=2)** | |
| EFI_ERROR_MASK | only (platform type 1) | ||
| Check | if the error level matches what this device handles | ||
| if | ((ErrorMask & (UINTN)FileName) != 0) { | ||
| Call | the debug device's assertion handler (offset +0 = ASSERT) | ||
| Debug | print function. | ||
| Formats | and sends a debug message through the debug output device. | ||
| The | first argument encodes the error level; the second is the format | ||
| Call | debug device's print handler (offset +8 = PRINT) | ||
| Locates | the HOB (Hand-Off Block) list from the UEFI System Table | ||
| configuration | table. | ||
| Scans | SystemTable->ConfigurationTable[] entries looking for the GUID | ||
| which | is EFI_HOB_LIST_GUID. | ||
| Results | are cached in qword_1090 after the first successful lookup. | ||
| Not | found in configuration table | ||
| Reads | an unaligned 64-bit value from memory. | ||
| Implements | the EDK2 BaseLib ReadUnaligned64() function. If the Buffer | ||
| pointer | is NULL, issues a debug assertion via DebugPrint(). | ||
| Checks | whether a configuration table entry matches a reference GUID. | ||
| Compares | the VendorGuid field of an EFI_CONFIGURATION_TABLE entry | ||
| against | the EFI_HOB_LIST_GUID by reading both as unaligned 64-bit | ||
| Compare | first 8 bytes and second 8 bytes as 64-bit values | ||
| return | (ReadUnaligned64((CONST UINT64 *)&ReferenceGuid) == |
Generated by HR650X BIOS Decompilation Project