# 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*