| Address | Name | Description |
|---|---|---|
| DriverEntryPoint | ||
| ProcessLibraryConstructorList | ||
| AcpiS3ContextInitialize | ||
| AllocateS3NvsPageTable | ||
| LocateAcpiFacsTable | ||
| BootScriptTableInit | ||
| ScriptWriteTerminator | ||
| ScriptFinalizeEntry | ||
| BootScriptResync | ||
| SaveLockBox | ||
| SetLockBoxAttributes | ||
| UpdateLockBox | ||
| RestoreLockBox | ||
| GetSystemConfigurationTable | ||
| ScriptIoWriteEntry | ||
| ScriptIoReadWriteEntry | ||
| ScriptMemWriteEntry | ||
| ScriptMemReadWriteEntry | ||
| ScriptPciCfgWriteEntry | ||
| ScriptPciCfgReadWriteEntry | ||
| ScriptSmbusExecuteEntry | ||
| ScriptStallEntry | ||
| ScriptDispatchEntry | ||
| ScriptInformationEntry | ||
| ScriptPciCfg2WriteEntry | ||
| ScriptPollInsert | ||
| BootScriptClose | ||
| EFI | System Table (from UefiBootServicesTableLib) | |
| 0x5458 | EFI_BOOT_SERVICES *gBootServices = NULL; // 0x5460 | |
| 0x5468 | EFI_RUNTIME_SERVICES *gRuntimeServices = NULL; // 0x5470 | |
| Cached | protocol pointers | |
| 0x5478 | (DebugPort) | |
| 0x5480 | (PCD) | |
| 0x5488 | (HOB list) | |
| 0x5490 | (PCIe MMIO base) | |
| 0x5498 | (SMM Comm Region) | |
| 0x54A0 | (SMM Comm protocol) | |
| 0x54A8 | UINT8 gBootScriptInSmm = 0; // 0x54B0 | |
| 0x54B8 | VOID *gS3SmmSaveStateProtocol = NULL; // 0x54C0 | |
| 0x54C8 | VOID *gS3SmmSaveStateNotify = NULL; // 0x54D0 | |
| 0x54D8 | BOOT_SCRIPT_TABLE *gBootScriptTable = NULL; // 0x54E0 | |
| 0x54E8 | /*=========================================================================== | |
| unk_52C0 | extern EFI_GUID gEfiDebugPortProtocolGuid; // unk_52D0 | |
| unk_52E0 | extern EFI_GUID gAcpiS3ContextGuid; // unk_52F0, 0x5360, 0x5400 | |
| unk_5300 | extern EFI_GUID gEfiLockBoxProtocolGuid; // unk_5310 | |
| unk_5320 | extern EFI_GUID gEfiS3SaveStateProtocolGuid; // unk_5330, 0x5340 | |
| unk_5350 | extern EFI_GUID gEfiAcpiTableGuid2; // unk_53B0 | |
| unk_5390 | extern EFI_GUID gEfiHobListGuid; // unk_53A0 | |
| Initialize | library globals (gImageHandle, gST, gBS, gRT, etc.) | |
| Schedule | AcpiS3ContextInitialize as a timer event (10ms, TPL_CALLBACK) | |
| 10 | ms | |
| Install | the EFI S3 Save State protocol | |
| Initialize | HOB list pointer | |
| Get | PCD protocol | |
| Get | PCI Express base address from PCD | |
| Check | if PCIe is enabled (bit 7 of PcdPciExpressEnable) | |
| Read | PCIe extended config BAR length | |
| Wait | for PCIe bus master enable (poll bit) | |
| spin | } | |
| Enable | or disable PCIe based on platform config | |
| Check | if LockBox is available | |
| Allocate | the ACPI S3 context structure (48 bytes) | |
| Locate | FACS table via ACPI config tables | |
| Build | IDTR profile buffer | |
| This | is a self-referencing 4096-byte structure: | |
| Limit | field at buffer[4096..4097] = 4095 | |
| Save | IDTR profile into LockBox (10 bytes) | |
| Determine | NX page table requirements | |
| Boot | script stack | |
| Debug | buffer (4KB, filled with 0xFF) | |
| Debug | prints of AcpiS3Context fields | |
| Save | ACPI S3 context into lockbox | |
| Mark | as restore-in-place | |
| Finalize | boot script initialization | |
| Determine | physical address width from CPUID | |
| Get | physical address bits from HOB or CPUID | |
| Clamp | to 48 bits for 4-level paging | |
| Calculate | page table levels | |
| Find | ACPI RSDP from system configuration tables | |
| Use | XSDT if revision >= 2 (ACPI 3.0+) | |
| Search | for either FACS or FADT (from FADT we get the FACS address) | |
| Direct | FACS match (rare — usually FACS is pointed to by FADT) | |
| Found | FADT — extract FACS address | |
| Fall | through to RSDT if XSDT didn't help | |
| Use | RSDT (32-bit entries) | |
| Get | PCD value for initial number of entries | |
| Allocate | boot script descriptor table | |
| initial | 4 pages = 16KB | |
| Set | up SMM communication if available | |
| Communicate | with SMM: share boot script table descriptor | |
| If | SMM side exists, allocate a second buffer for SMM boot script | |
| Second | buffer in SMM for S3 save state | |
| Register | S3 Save State protocol notification | |
| Register | SMM ready-to-lock notification | |
| Register | S3 SMM Save State notification | |
| Mode | 1: Pre-SMM (DXE-owned buffer) | |
| Mode | 2: Post-SMM (SMM-owned buffer) | |
| Resync | from LockBox if needed | |
| Check | available space | |
| Update | the boot script data in LockBox | |
| Update | the total length field in LockBox | |
| Initialize | buffer header: | |
| Check | if we need to grow | |
| Copy | old data to new buffer | |
| First | call to RestoreLockBox retrieves the current data size | |
| Then | we need to get the actual data | |
| Read | back the total length from LockBox | |
| Locate | the SMM Communication Region Table via system config table | |
| fallback | to stack-local buffer | |
| Build | the SMM communication buffer: | |
| Function | 1 = SaveLockBox | |
| HeaderSize | CopyMem ((VOID *)((UINTN)CommBuffer + sizeof (EFI_GUID) + sizeof (UINT64) + sizeof (UINT64) + sizeof (UINT64)) | |
| Target | LockBox GUID | |
| Build | SMM communication buffer for SetAttributes: | |
| Function | = 4 (SetLockBoxAttributes) | |
| MessageLength | (UINT64 )((UINTN)CommBuffer + sizeof (EFI_GUID) + sizeof (UINT64)) = (UINT64)-1; | |
| Function | (UINT32 )((UINTN)CommBuffer + sizeof (EFI_GUID) + sizeof (UINT64) + sizeof (UINT64)) = 40; // HeaderSize | |
| Function | 2 = UpdateLockBox | |
| Function | 3 = RestoreLockBox | |
| Signal | once to catch already-installed protocols | |
| Forward | declarations for functions referenced solely via function pointers: |
Generated by HR650X BIOS Decompilation Project