Newer
Older
AMI-Aptio-BIOS-Reversed / SmbiosRpTable / SmbiosRpTable.md
@Ajax Dong Ajax Dong 2 days ago 3 KB Init

SmbiosRpTable

Function Table

Address Name Description
ZeroMemAligned64
ModuleEntryPoint
UefiMainEntry
SmbiosType133RecordInstall
DebugPrint
GetPlatformDebugLevel
DebugAssert
ReadUnaligned64
CompareGuid
Global variables
EFI_HANDLE ImageHandle = NULL;
Zero 8-byte aligned chunks first.
SetMem32 ((UINT32 *)Buffer, 0, (UINT32)(Length >> 3));
Zero the remaining bytes (0-7).
SetMem8 (
Initialize the DXE global variables (ImageHandle, SystemTable
UefiMainEntry (ImageHandle, SystemTable);
Locate the SMBIOS protocol.
Status = gBS->LocateProtocol (
Install a Type 133 SMBIOS record with the communication buffer address.
return SmbiosType133RecordInstall (SmbiosProtocol);
Get the HOB list from the system configuration table.
GetHobList ();
Resolve HII protocol GUIDs.
Allocate ACPI NVS memory for BIOS utility communication buffer (16KB).
BufferAddr = 0xFFFFFFFFULL;
Allocate the SMBIOS record structure.
SmbiosRecord = (SMBIOS_STRUCTURE *)AllocateACPINvsBuffer ();
Zero the record buffer (14 bytes for type 133 header + 2 handle).
ZeroMem14 ((UINTN)SmbiosRecord);
Fill in Type 133 SMBIOS record:
Type = SMBIOS_TYPE_BIOS_UTILITY_COMMUNICATION (133)
Handle = 0x0C85 (3205)
Buffer = ACPI NVS physical address
Size = 0x4000 (16KB)
RecordHeader = (EFI_SMBIOS_TABLE_HEADER *)SmbiosRecord;
The record payload contains:
Add the SMBIOS record.
Status = SmbiosProtocol->Add (
Only attempt to locate protocol if we have a sane number of CPUs.
return NULL;
Check the platform debug level via CMOS index 0x4B.
CurrentDebugLevel = GetPlatformDebugLevel ();
Error level only: 0x80000004 (EFI_D_ERROR)
AllowedMask = DEBUG_ERROR;
Allow all except DEBUG_ERROR when in verbose mode.
AllowedMask = DEBUG_VERBOSE;
Read CMOS index 0x4B (debug level register).
DebugRegister = IoRead8 (CMOS_INDEX_PORT);
Check extended memory for debug settings on certain platforms.
if (DebugLevel == 0) {
Check for gEfiHobListGuid match.
if (CompareGuid (&gEfiHobListGuid, Guid1)) {
If we get here, the HOB list was not found.
DEBUG ((EFI_D_ERROR, "\nASSERT_EFI_ERROR (Status = %r)\n", EFI_NOT_FOUND));
Compare the first 8 bytes (Data1 + Data2 + Data3).
if (ReadUnaligned64 ((UINT64 )Guid1) != ReadUnaligned64 ((UINT64 )Guid2)) {
Compare last 8 bytes (Data4).
return ReadUnaligned64 ((UINT64 )Guid1->Data4) == ReadUnaligned64 ((UINT64 )Guid2->Data4);

Generated by HR650X BIOS Decompilation Project