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

OemSaveSmbiosDxe

Function Table

Address Name Description
DebugAssert
DebugPrint
StrLen
AsciiStrLen
ReadUnaligned64
CompareGuid
OemSaveSmbiosPcdvalue
OemRestoreSmbiosPcdvalue
OemRestoreSmbiosString
OemSaveSmbiosDxeEntryPoint
OemSaveSmbiosDxeEntry
EFI global variable storage
EFI_HANDLE gImageHandle;
EFI_SMBIOS_PROTOCOL *gSmbiosProtocol = NULL; // qword_2F68
qword_2F70 VOID *mHobList = NULL; // qword_2F78
Control flags set by OemRestoreSmbiosPcdvalue, consumed by OemRestoreSmbiosString
BOOLEAN gSystemManufacturerRestored = FALSE; // byte_2F18 Token 118
byte_2F19 Token 117
byte_2F1A Token 119
byte_2F1B Token 120
byte_2F1C Token 187
byte_2F30 Token 121
byte_2F31 Token 122
byte_2F32 Token 123
byte_2F33 Token 124
byte_2F34 Token 125
byte_2F10 Token 126
byte_2F11 Token 127
byte_2F12 Token 128
byte_2F13 Token 129
byte_2F14 Token 188
GUID definitions
gEfiSmbiosProtocolGuid -- from unk_2EC0
gHobListGuid -- from unk_2EF0
gPcdProtocolGuid -- from unk_2ED0
Utility / library wrapper functions
No overlap: copy forwards in 8-byte chunks
Copy remaining bytes
Read CMOS index 0x4B to get debug level
DebugLevel = IoRead8 (0x70);
OemSaveSmbiosPcdvalue -- sub_41C
Reads all system/board/chassis PCD values and saves them into the
OemSmbiosPcdValue UEFI variable.
System information buffers (280 bytes each for SMBIOS strings)
CHAR8 SmbiosStrings[13][280];
Read existing variable (may not exist on first boot)
DataSize = sizeof (Buffer);
PCD Token 118 - System Manufacturer
Pcd = GetPcdProtocol ();
PCD Token 117 - System Product Name
PCD Token 119 - System Version
PCD Token 120 - System Serial Number
PCD Token 187 - System UUID
PCD Token 121 - Base Board Manufacturer
PCD Token 122 - Base Board Product Name
PCD Token 123 - Base Board Version
PCD Token 124 - Base Board Serial Number
PCD Token 125 - Base Board Asset Tag
PCD Token 126 - Chassis Manufacturer
PCD Token 127 - Chassis Version
PCD Token 128 - Chassis Serial Number
PCD Token 129 - Chassis Asset Tag
PCD Token 188 - Chassis Type: if not 2, save byte from chassis asset tag slot
Write the variable
VarSize = 3657;
OemRestoreSmbiosPcdvalue -- sub_A70
Reads the OemSmbiosPcdValue variable and restores PCD tokens that still
contain default ("To be filled by O.E.M.") values.
Token 118 - System Manufacturer
Token 117 - System Product Name (offset 0x148 in Buffer = 280 bytes)
Token 119 - System Version (offset 0x260)
Token 120 - System Serial Number (offset 0x378)
Token 187 - System UUID (offset 0x490, 16 bytes)
Token 121 - Base Board Manufacturer (offset 0x4A0)
Token 122 - Base Board Product Name (offset 0x5B8)
Token 123 - Base Board Version (offset 0x6D0)
Token 124 - Base Board Serial Number (offset 0x7E8)
Token 125 - Base Board Asset Tag (offset 0x900)
Token 126 - Chassis Manufacturer (offset 0xA18)
Token 127 - Chassis Version (offset 0xB30)
Token 128 - Chassis Serial Number (offset 0xC48)
Token 129 - Chassis Asset Tag (offset 0xD60)
Token 188 - Chassis Type: if already 2, skip; otherwise restore from saved byte
OemRestoreSmbiosString -- sub_1138
Applies restored PCD values into the SMBIOS table via EFI_SMBIOS_PROTOCOL.
For each type (1=System, 2=BaseBoard, 3=Chassis), if the corresponding
restore flag is set, writes the string into the SMBIOS record.
Status = gBS->LocateProtocol (&gEfiSmbiosProtocolGuid, NULL, (VOID )&Smbios);**
TargetType = 1;
UNI_BIOS_SPECIFICATION handle
Read CMOS to check if this is a ThinkSystem platform
IoWrite8 (0x72, 0x5C);
Prepend "ThinkSystem " prefix
System UUID: read from saved 16-byte UUID in buffer (offset 0x490)
if (gSystemUuidRestored) {
TargetType = 2;
TargetType = 3;
Chassis type byte at buffer+0xD60+280 (= offset 0xE78 from buffer start)
if (gChassisTypeRestored) {
OemSaveSmbiosDxeEntryPoint -- _ModuleEntryPoint
Driver entry point. Initializes globals, then calls the three main
routines in order: OemRestoreSmbiosPcdvalue, OemSaveSmbiosPcdvalue
Initialize HOB list
GetHobList ();
Standard UEFI DXE driver entry.

Generated by HR650X BIOS Decompilation Project