OpenCore  1.0.4
OpenCore Bootloader
Loading...
Searching...
No Matches
OcSmbiosLib.h
Go to the documentation of this file.
1
19#ifndef OC_SMBIOS_LIB_H
20#define OC_SMBIOS_LIB_H
21
22#include <Library/OcCpuLib.h>
23#include <Library/OcFileLib.h>
26#include <Guid/OcSmBios.h>
27
28//
29// We use this vendor name to spoof SMBIOS data on request.
30// Note, never use Apple or similar on non-Apple instances (e.g. VMs).
31// This breaks many internal and external OS mechanisms.
32//
33#define OC_SMBIOS_VENDOR_NAME "Acidanthera"
34
36 //
37 // Strings.
38 //
39 CONST CHAR8 *AssetTag;
40 CONST CHAR8 *BankLocator;
41 CONST CHAR8 *DeviceLocator;
42 CONST CHAR8 *Manufacturer;
43 CONST CHAR8 *PartNumber;
44 CONST CHAR8 *SerialNumber;
45 //
46 // Size is in megabytes and speed is in MT/s.
47 //
48 CONST UINT32 *Size;
49 CONST UINT16 *Speed;
51
52typedef struct OC_SMBIOS_DATA_ {
53 //
54 // Type 0
55 //
56 CONST CHAR8 *BIOSVendor;
57 CONST CHAR8 *BIOSVersion;
58 CONST CHAR8 *BIOSReleaseDate;
59 //
60 // Type 1
61 //
62 CONST CHAR8 *SystemManufacturer;
63 CONST CHAR8 *SystemProductName;
64 CONST CHAR8 *SystemVersion;
65 CONST CHAR8 *SystemSerialNumber;
66 CONST GUID *SystemUUID;
67 CONST CHAR8 *SystemSKUNumber;
68 CONST CHAR8 *SystemFamily;
69 //
70 // Type 2
71 //
72 CONST CHAR8 *BoardManufacturer;
73 CONST CHAR8 *BoardProduct;
74 CONST CHAR8 *BoardVersion;
75 CONST CHAR8 *BoardSerialNumber;
76 CONST CHAR8 *BoardAssetTag;
78 CONST UINT8 *BoardType;
79 //
80 // Type 3
81 //
82 CONST UINT8 *ChassisType;
83 CONST CHAR8 *ChassisManufacturer;
84 CONST CHAR8 *ChassisVersion;
85 CONST CHAR8 *ChassisSerialNumber;
86 CONST CHAR8 *ChassisAssetTag;
87 //
88 // Type 16
89 //
93 CONST UINT64 *MemoryMaxCapacity;
94 //
95 // Type 17
96 //
97 CONST UINT16 *MemoryDataWidth;
99 CONST UINT8 *MemoryFormFactor;
100 //
101 // Forcibly override MemoryFormFactor on non-Automatic mode when TRUE.
102 //
104 CONST UINT16 *MemoryTotalWidth;
105 CONST UINT8 *MemoryType;
106 CONST UINT16 *MemoryTypeDetail;
107 //
108 // Type 128
109 // FirmwareFeatures and FirmwareFeaturesMask are split into two UINT32
110 // values, the lower referring to the traditional FirmwareFeatures and the
111 // upper representing the additions introduced by ExtendedFirmwareFeatures.
112 //
115 //
116 // Type 131
117 //
118 CONST UINT16 *ProcessorType;
119 //
120 // Type 133
121 //
122 CONST UINT32 *PlatformFeature;
123 //
124 // Type 134
125 //
126 CONST UINT8 *SmcVersion;
128
130 //
131 // OcSmbiosUpdateOverwrite if new size is <= than the page-aligned original and
132 // there are no issues with legacy region unlock. OcSmbiosUpdateCreate otherwise.
133 //
135 //
136 // Replace the tables with newly allocated. Normally it is in EfiRuntimeData (EDK 2), but
137 // boot.efi relocates EfiRuntimeData unless AptioMemoryFix is used, so it is incorrect.
138 // * MacEFI allocates in EfiReservedMemoryType at BASE_4GB-1:
139 // - gEfiSmbiosTableGuid entry: AllocateMaxAddress or AllocateAnyPages
140 // - gEfiSmbiosTableGuid pages: AllocateMaxAddress
141 // - gEfiSmbiosTable3Guid entry and pages: AllocateAnyPages
142 // * Clover similarly allocates at EfiACPIMemoryNVS or EfiACPIReclaimMemory, if allocating
143 // from EfiACPIMemoryNVS fails. EfiACPIReclaimMemory is actually unsafe, as ACPI driver may
144 // theoretically nuke it after loading as per 7.2 Memory Allocation Services, Table 29 of
145 // UEFI 2.7A specification (page 166).
146 // * We allocate EfiReservedMemoryType at AllocateMaxAddress without any fallbacks.
147 //
149 //
150 // Overwrite existing gEfiSmbiosTableGuid and gEfiSmbiosTable3Guid data if it fits new size.
151 // Abort with unspecified state otherwise.
152 //
154 //
155 // Writes first SMBIOS table (gEfiSmbiosTableGuid) to gOcCustomSmbiosTableGuid to workaround
156 // some types of firmware overwriting SMBIOS contents at ExitBootServices. Otherwise equivalent
157 // to OcSmbiosUpdateCreate. Requires patching AppleSmbios.kext and AppleACPIPlatform.kext
158 // to read from another GUID: "EB9D2D31" -> "EB9D2D35" (in ASCII).
159 //
162
163//
164// Growing SMBIOS table data.
165//
166typedef struct OC_SMBIOS_TABLE_ {
167 //
168 // SMBIOS table.
169 //
170 UINT8 *Table;
171 //
172 // Current table position.
173 //
175 //
176 // Current string position.
177 //
179 //
180 // Allocated table size, multiple of EFI_PAGE_SIZE.
181 //
183 //
184 // Incrementable handle.
185 //
186 SMBIOS_HANDLE Handle;
187 //
188 // Largest structure size within the table.
189 //
191 //
192 // Number of structures within the table.
193 //
196
204EFI_STATUS
206 IN OUT OC_SMBIOS_TABLE *SmbiosTable
207 );
208
216VOID
218 IN OUT OC_SMBIOS_TABLE *Table
219 );
220
231EFI_STATUS
233 IN OUT OC_SMBIOS_TABLE *SmbiosTable,
234 IN OC_SMBIOS_DATA *Data,
235 IN OC_SMBIOS_UPDATE_MODE Mode,
236 IN OC_CPU_INFO *CpuInfo
237 );
238
259VOID
261 IN OC_SMBIOS_TABLE *SmbiosTable,
262 OUT CHAR8 *ProductName OPTIONAL,
263 OUT CHAR8 *SerialNumber OPTIONAL,
264 OUT EFI_GUID *SystemUuid OPTIONAL,
265 OUT CHAR8 *Mlb OPTIONAL,
266 OUT UINT8 *Rom OPTIONAL,
267 IN BOOLEAN UuidIsRawEncoded,
268 IN BOOLEAN UseVariableStorage
269 );
270
278VOID
280 IN CONST UINT8 *SmcRevision,
281 OUT UINT8 *SmcVersion
282 );
283
296 IN CONST CHAR8 *UpdateMode
297 );
298
308EFI_STATUS
310 IN EFI_FILE_PROTOCOL *Root
311 );
312
313#endif // OC_SMBIOS_LIB_H
UINT8 SmcVersion[APPLE_SMBIOS_SMC_VERSION_SIZE]
OC_SMBIOS_UPDATE_MODE OcSmbiosGetUpdateMode(IN CONST CHAR8 *UpdateMode)
struct OC_SMBIOS_TABLE_ OC_SMBIOS_TABLE
enum OC_SMBIOS_UPDATE_MODE_ OC_SMBIOS_UPDATE_MODE
VOID OcSmbiosExtractOemInfo(IN OC_SMBIOS_TABLE *SmbiosTable, OUT CHAR8 *ProductName OPTIONAL, OUT CHAR8 *SerialNumber OPTIONAL, OUT EFI_GUID *SystemUuid OPTIONAL, OUT CHAR8 *Mlb OPTIONAL, OUT UINT8 *Rom OPTIONAL, IN BOOLEAN UuidIsRawEncoded, IN BOOLEAN UseVariableStorage)
VOID OcSmbiosTableFree(IN OUT OC_SMBIOS_TABLE *Table)
EFI_STATUS OcSmbiosCreate(IN OUT OC_SMBIOS_TABLE *SmbiosTable, IN OC_SMBIOS_DATA *Data, IN OC_SMBIOS_UPDATE_MODE Mode, IN OC_CPU_INFO *CpuInfo)
EFI_STATUS OcSmbiosDump(IN EFI_FILE_PROTOCOL *Root)
Definition SmbiosDump.c:35
struct OC_SMBIOS_DATA_ OC_SMBIOS_DATA
struct OC_SMBIOS_MEMORY_DEVICE_DATA_ OC_SMBIOS_MEMORY_DEVICE_DATA
EFI_STATUS OcSmbiosTablePrepare(IN OUT OC_SMBIOS_TABLE *SmbiosTable)
OC_SMBIOS_UPDATE_MODE_
@ OcSmbiosUpdateOverwrite
@ OcSmbiosUpdateTryOverwrite
@ OcSmbiosUpdateCustom
@ OcSmbiosUpdateCreate
VOID OcSmbiosGetSmcVersion(IN CONST UINT8 *SmcRevision, OUT UINT8 *SmcVersion)
CONST CHAR8 * ChassisSerialNumber
Definition OcSmbiosLib.h:85
CONST CHAR8 * SystemProductName
Definition OcSmbiosLib.h:63
CONST UINT8 * MemoryErrorCorrection
Definition OcSmbiosLib.h:91
UINT64 FirmwareFeatures
CONST UINT32 * PlatformFeature
CONST UINT8 * MemoryType
CONST CHAR8 * ChassisManufacturer
Definition OcSmbiosLib.h:83
CONST UINT8 * SmcVersion
CONST CHAR8 * SystemFamily
Definition OcSmbiosLib.h:68
CONST CHAR8 * SystemManufacturer
Definition OcSmbiosLib.h:62
CONST UINT16 * MemoryTotalWidth
CONST CHAR8 * BIOSVendor
Definition OcSmbiosLib.h:56
CONST CHAR8 * ChassisVersion
Definition OcSmbiosLib.h:84
CONST UINT8 * MemoryFormFactor
Definition OcSmbiosLib.h:99
CONST CHAR8 * SystemSerialNumber
Definition OcSmbiosLib.h:65
CONST UINT16 * ProcessorType
CONST CHAR8 * BoardManufacturer
Definition OcSmbiosLib.h:72
CONST CHAR8 * BoardVersion
Definition OcSmbiosLib.h:74
BOOLEAN ForceMemoryFormFactor
CONST UINT8 * ChassisType
Definition OcSmbiosLib.h:82
CONST CHAR8 * BoardLocationInChassis
Definition OcSmbiosLib.h:77
CONST CHAR8 * BIOSReleaseDate
Definition OcSmbiosLib.h:58
CONST UINT16 * MemoryTypeDetail
CONST UINT8 * BoardType
Definition OcSmbiosLib.h:78
CONST CHAR8 * BoardAssetTag
Definition OcSmbiosLib.h:76
CONST CHAR8 * BoardProduct
Definition OcSmbiosLib.h:73
CONST CHAR8 * SystemVersion
Definition OcSmbiosLib.h:64
CONST UINT64 * MemoryMaxCapacity
Definition OcSmbiosLib.h:93
CONST UINT16 * MemoryDataWidth
Definition OcSmbiosLib.h:97
OC_SMBIOS_MEMORY_DEVICE_DATA * MemoryDevices
Definition OcSmbiosLib.h:98
UINT16 MemoryDevicesCount
Definition OcSmbiosLib.h:92
BOOLEAN HasCustomMemory
Definition OcSmbiosLib.h:90
CONST CHAR8 * SystemSKUNumber
Definition OcSmbiosLib.h:67
CONST CHAR8 * BoardSerialNumber
Definition OcSmbiosLib.h:75
CONST CHAR8 * BIOSVersion
Definition OcSmbiosLib.h:57
CONST CHAR8 * ChassisAssetTag
Definition OcSmbiosLib.h:86
UINT64 FirmwareFeaturesMask
CONST GUID * SystemUUID
Definition OcSmbiosLib.h:66
UINT32 AllocatedTableSize
SMBIOS_HANDLE Handle
CHAR8 * CurrentStrPtr
UINT16 MaxStructureSize
UINT16 NumberOfStructures
APPLE_SMBIOS_STRUCTURE_POINTER CurrentPtr