OpenCore  1.0.4
OpenCore Bootloader
Loading...
Searching...
No Matches
SmbiosInternal.c
Go to the documentation of this file.
1
15#include <Uefi.h>
16
17#include <Protocol/PciRootBridgeIo.h>
18
19#include <Library/DebugLib.h>
20#include <Library/BaseMemoryLib.h>
21#include <Library/MemoryAllocationLib.h>
22#include <Library/OcCpuLib.h>
23#include <Library/OcMiscLib.h>
24#include <Library/OcSmbiosLib.h>
25#include <Library/PrintLib.h>
26#include <Library/UefiLib.h>
27#include <Library/UefiBootServicesTableLib.h>
28#include <Library/UefiRuntimeServicesTableLib.h>
29
30#include "SmbiosInternal.h"
31#include "DebugSmbios.h"
32
33EFI_STATUS
35 IN OUT OC_SMBIOS_TABLE *Table,
36 IN UINT32 Size
37 )
38{
39 UINT32 TableSize;
40 UINT32 RequestedSize;
41 UINT8 *NewTable;
42
43 //
44 // Always requrest 2 more bytes, so that the table can be terminated.
45 //
47
48 if (Table->Table == NULL) {
49 TableSize = 0;
50 } else {
51 TableSize = (UINT32)((UINT8 *)Table->CurrentStrPtr - Table->Table);
52 }
53
54 //
55 // We are not allowed to allocate more than we can write.
56 //
57 RequestedSize = TableSize + Size;
58 if (RequestedSize > SMBIOS_TABLE_MAX_LENGTH) {
59 return EFI_OUT_OF_RESOURCES;
60 }
61
62 //
63 // Skip reallocation if region fits.
64 //
65 if (RequestedSize <= Table->AllocatedTableSize) {
66 return EFI_SUCCESS;
67 }
68
69 RequestedSize = ALIGN_VALUE (RequestedSize, EFI_PAGE_SIZE);
70 if (RequestedSize > ALIGN_VALUE (SMBIOS_TABLE_MAX_LENGTH, EFI_PAGE_SIZE)) {
71 RequestedSize = ALIGN_VALUE (SMBIOS_TABLE_MAX_LENGTH, EFI_PAGE_SIZE);
72 }
73
74 NewTable = ReallocatePool (TableSize, RequestedSize, Table->Table);
75 if (NewTable == NULL) {
76 return EFI_OUT_OF_RESOURCES;
77 }
78
79 //
80 // Guarantee zero fill for the table.
81 //
82 ZeroMem (NewTable + TableSize, RequestedSize - TableSize);
83
84 Table->CurrentPtr.Raw = NewTable + (Table->CurrentPtr.Raw - Table->Table);
85 Table->CurrentStrPtr = (CHAR8 *)NewTable + TableSize;
86 Table->Table = NewTable;
87 Table->AllocatedTableSize = RequestedSize;
88
89 return EFI_SUCCESS;
90}
91
92UINT8
94 IN OC_SMBIOS_TABLE *Table,
95 IN CONST CHAR8 *Override OPTIONAL,
96 IN UINT8 *Index
97 )
98{
99 UINT32 Length;
100
101 //
102 // No override.
103 //
104 if (Override == NULL) {
105 return 0;
106 }
107
108 Length = (UINT32)AsciiStrLen (Override);
109
110 //
111 // Truncate to fit but do not error.
112 //
113 if (Length > SMBIOS_STRING_MAX_LENGTH) {
114 Length = SMBIOS_STRING_MAX_LENGTH;
115 DEBUG ((DEBUG_INFO, "OCMB: SMBIOS truncating '%a' to %u bytes\n", Override, Length));
116 }
117
118 while (Length > 0 && Override[Length - 1] == ' ') {
119 Length--;
120 }
121
122 if (Length == 0) {
123 return 0;
124 }
125
126 if (EFI_ERROR (SmbiosExtendTable (Table, Length + 1))) {
127 DEBUG ((DEBUG_WARN, "OCSMB: SMBIOS failed to write '%a' with %u byte extension\n", Override, Length + 1));
128 return 0;
129 }
130
131 return SmbiosSetString (&Table->CurrentStrPtr, Override, Length, Index);
132}
133
134STATIC
135EFI_STATUS
137 IN OUT OC_SMBIOS_TABLE *Table,
138 IN UINT32 Type,
139 IN UINT16 Index
140 )
141{
142 //
143 // Support select tables to have more than 1 entry.
144 //
145 if ( (Type == SMBIOS_TYPE_PROCESSOR_INFORMATION)
146 || (Type == SMBIOS_TYPE_CACHE_INFORMATION)
147 || (Type == SMBIOS_TYPE_PORT_CONNECTOR_INFORMATION)
148 || (Type == SMBIOS_TYPE_SYSTEM_SLOTS)
149 || (Type == SMBIOS_TYPE_PHYSICAL_MEMORY_ARRAY)
150 || (Type == SMBIOS_TYPE_MEMORY_ARRAY_MAPPED_ADDRESS)
151 || (Type == SMBIOS_TYPE_MEMORY_DEVICE)
152 || (Type == SMBIOS_TYPE_MEMORY_DEVICE_MAPPED_ADDRESS))
153 {
154 Table->CurrentPtr.Standard.Hdr->Handle = Table->Handle++;
155 return EFI_SUCCESS;
156 } else if (Index != 1) {
157 ASSERT (FALSE);
158 return EFI_INVALID_PARAMETER;
159 }
160
161 switch (Type) {
162 case SMBIOS_TYPE_BIOS_INFORMATION:
163 Table->CurrentPtr.Standard.Hdr->Handle = OcSmbiosBiosInformationHandle;
164 break;
165 case SMBIOS_TYPE_SYSTEM_INFORMATION:
166 Table->CurrentPtr.Standard.Hdr->Handle = OcSmbiosSystemInformationHandle;
167 break;
168 case SMBIOS_TYPE_BASEBOARD_INFORMATION:
169 Table->CurrentPtr.Standard.Hdr->Handle = OcSmbiosBaseboardInformationHandle;
170 break;
171 case SMBIOS_TYPE_SYSTEM_ENCLOSURE:
172 Table->CurrentPtr.Standard.Hdr->Handle = OcSmbiosSystemEnclosureHandle;
173 break;
174 case SMBIOS_TYPE_MEMORY_CONTROLLER_INFORMATION:
175 Table->CurrentPtr.Standard.Hdr->Handle = OcSmbiosMemoryControllerInformationHandle;
176 break;
177 case SMBIOS_TYPE_MEMORY_MODULE_INFORMATON:
178 Table->CurrentPtr.Standard.Hdr->Handle = OcSmbiosMemoryModuleInformatonHandle;
179 break;
180 case SMBIOS_TYPE_ONBOARD_DEVICE_INFORMATION:
181 Table->CurrentPtr.Standard.Hdr->Handle = OcSmbiosOnboardDeviceInformationHandle;
182 break;
183 case SMBIOS_TYPE_OEM_STRINGS:
184 Table->CurrentPtr.Standard.Hdr->Handle = OcSmbiosOemStringsHandle;
185 break;
186 case SMBIOS_TYPE_SYSTEM_CONFIGURATION_OPTIONS:
187 Table->CurrentPtr.Standard.Hdr->Handle = OcSmbiosSystemConfigurationOptionsHandle;
188 break;
189 case SMBIOS_TYPE_BIOS_LANGUAGE_INFORMATION:
190 Table->CurrentPtr.Standard.Hdr->Handle = OcSmbiosBiosLanguageInformationHandle;
191 break;
192 case SMBIOS_TYPE_GROUP_ASSOCIATIONS:
193 Table->CurrentPtr.Standard.Hdr->Handle = OcSmbiosGroupAssociationsHandle;
194 break;
195 case SMBIOS_TYPE_SYSTEM_EVENT_LOG:
196 Table->CurrentPtr.Standard.Hdr->Handle = OcSmbiosSystemEventLogHandle;
197 break;
198 case SMBIOS_TYPE_32BIT_MEMORY_ERROR_INFORMATION:
199 Table->CurrentPtr.Standard.Hdr->Handle = OcSmbios32BitMemoryErrorInformationHandle;
200 break;
201 case SMBIOS_TYPE_BUILT_IN_POINTING_DEVICE:
202 Table->CurrentPtr.Standard.Hdr->Handle = OcSmbiosBuiltInPointingDeviceHandle;
203 break;
204 case SMBIOS_TYPE_PORTABLE_BATTERY:
205 Table->CurrentPtr.Standard.Hdr->Handle = OcSmbiosPortableBatteryHandle;
206 break;
207 case SMBIOS_TYPE_SYSTEM_RESET:
208 Table->CurrentPtr.Standard.Hdr->Handle = OcSmbiosSystemResetHandle;
209 break;
210 case SMBIOS_TYPE_HARDWARE_SECURITY:
211 Table->CurrentPtr.Standard.Hdr->Handle = OcSmbiosHardwareSecurityHandle;
212 break;
213 case SMBIOS_TYPE_SYSTEM_POWER_CONTROLS:
214 Table->CurrentPtr.Standard.Hdr->Handle = OcSmbiosSystemPowerControlsHandle;
215 break;
216 case SMBIOS_TYPE_VOLTAGE_PROBE:
217 Table->CurrentPtr.Standard.Hdr->Handle = OcSmbiosVoltageProbeHandle;
218 break;
219 case SMBIOS_TYPE_COOLING_DEVICE:
220 Table->CurrentPtr.Standard.Hdr->Handle = OcSmbiosCoolingDeviceHandle;
221 break;
222 case SMBIOS_TYPE_TEMPERATURE_PROBE:
223 Table->CurrentPtr.Standard.Hdr->Handle = OcSmbiosTemperatureProbeHandle;
224 break;
225 case SMBIOS_TYPE_ELECTRICAL_CURRENT_PROBE:
226 Table->CurrentPtr.Standard.Hdr->Handle = OcSmbiosElectricalCurrentProbeHandle;
227 break;
228 case SMBIOS_TYPE_OUT_OF_BAND_REMOTE_ACCESS:
229 Table->CurrentPtr.Standard.Hdr->Handle = OcSmbiosOutOfBandRemoteAccessHandle;
230 break;
231 case SMBIOS_TYPE_BOOT_INTEGRITY_SERVICE:
232 Table->CurrentPtr.Standard.Hdr->Handle = OcSmbiosBootIntegrityServiceHandle;
233 break;
234 case SMBIOS_TYPE_SYSTEM_BOOT_INFORMATION:
235 Table->CurrentPtr.Standard.Hdr->Handle = OcSmbiosSystemBootInformationHandle;
236 break;
237 case SMBIOS_TYPE_64BIT_MEMORY_ERROR_INFORMATION:
238 Table->CurrentPtr.Standard.Hdr->Handle = OcSmbios64BitMemoryErrorInformationHandle;
239 break;
240 case SMBIOS_TYPE_MANAGEMENT_DEVICE:
241 Table->CurrentPtr.Standard.Hdr->Handle = OcSmbiosManagementDeviceHandle;
242 break;
243 case SMBIOS_TYPE_MANAGEMENT_DEVICE_COMPONENT:
244 Table->CurrentPtr.Standard.Hdr->Handle = OcSmbiosManagementDeviceComponentHandle;
245 break;
246 case SMBIOS_TYPE_MANAGEMENT_DEVICE_THRESHOLD_DATA:
247 Table->CurrentPtr.Standard.Hdr->Handle = OcSmbiosManagementDeviceThresholdDataHandle;
248 break;
249 case SMBIOS_TYPE_MEMORY_CHANNEL:
250 Table->CurrentPtr.Standard.Hdr->Handle = OcSmbiosMemoryChannelHandle;
251 break;
252 case SMBIOS_TYPE_IPMI_DEVICE_INFORMATION:
253 Table->CurrentPtr.Standard.Hdr->Handle = OcSmbiosIpmiDeviceInformationHandle;
254 break;
255 case SMBIOS_TYPE_SYSTEM_POWER_SUPPLY:
256 Table->CurrentPtr.Standard.Hdr->Handle = OcSmbiosSystemPowerSupplyHandle;
257 break;
258 case SMBIOS_TYPE_ADDITIONAL_INFORMATION:
259 Table->CurrentPtr.Standard.Hdr->Handle = OcSmbiosAdditionalInformationHandle;
260 break;
261 case SMBIOS_TYPE_ONBOARD_DEVICES_EXTENDED_INFORMATION:
262 Table->CurrentPtr.Standard.Hdr->Handle = OcSmbiosOnboardDevicesExtendedInformationHandle;
263 break;
264 case SMBIOS_TYPE_MANAGEMENT_CONTROLLER_HOST_INTERFACE:
265 Table->CurrentPtr.Standard.Hdr->Handle = OcSmbiosManagementControllerHostInterfaceHandle;
266 break;
267 case SMBIOS_TYPE_TPM_DEVICE:
268 Table->CurrentPtr.Standard.Hdr->Handle = OcSmbiosTpmDeviceHandle;
269 break;
270 case SMBIOS_TYPE_INACTIVE:
271 Table->CurrentPtr.Standard.Hdr->Handle = OcSmbiosInactiveHandle;
272 break;
273 case SMBIOS_TYPE_END_OF_TABLE:
274 Table->CurrentPtr.Standard.Hdr->Handle = OcSmbiosEndOfTableHandle;
275 break;
277 Table->CurrentPtr.Standard.Hdr->Handle = OcAppleSmbiosFirmwareInformationHandle;
278 break;
280 Table->CurrentPtr.Standard.Hdr->Handle = OcAppleSmbiosMemorySpdDataHandle;
281 break;
283 Table->CurrentPtr.Standard.Hdr->Handle = OcAppleSmbiosProcessorTypeHandle;
284 break;
286 Table->CurrentPtr.Standard.Hdr->Handle = OcAppleSmbiosProcessorBusSpeedHandle;
287 break;
289 Table->CurrentPtr.Standard.Hdr->Handle = OcAppleSmbiosPlatformFeatureHandle;
290 break;
292 Table->CurrentPtr.Standard.Hdr->Handle = OcAppleSmbiosSmcInformationHandle;
293 break;
294 default:
295 ASSERT (FALSE);
296 Table->CurrentPtr.Standard.Hdr->Handle = Table->Handle++;
297 break;
298 }
299
300 return EFI_SUCCESS;
301}
302
303EFI_STATUS
305 IN OUT OC_SMBIOS_TABLE *Table,
306 IN SMBIOS_TYPE Type,
307 IN UINT8 MinLength,
308 IN UINT16 Index
309 )
310{
311 EFI_STATUS Status;
312
313 Status = SmbiosExtendTable (Table, MinLength);
314 if (EFI_ERROR (Status)) {
315 DEBUG ((DEBUG_WARN, "OCSMB: Failed to extend SMBIOS for table %u - %r\n", Type, Status));
316 return Status;
317 }
318
319 Table->CurrentPtr.Standard.Hdr->Type = Type;
320 Table->CurrentPtr.Standard.Hdr->Length = MinLength;
321 Status = SmbiosAssignStructHandle (Table, Type, Index);
322 if (EFI_ERROR (Status)) {
323 return Status;
324 }
325
326 Table->CurrentStrPtr = (CHAR8 *)Table->CurrentPtr.Standard.Raw + MinLength;
327
328 return EFI_SUCCESS;
329}
330
331VOID
333 IN OUT OC_SMBIOS_TABLE *Table
334 )
335{
336 DEBUG_CODE_BEGIN ();
337 SmbiosDebugAnyStructure (Table->CurrentPtr);
338 DEBUG_CODE_END ();
339
340 if (Table->CurrentPtr.Standard.Hdr->Length > Table->MaxStructureSize) {
341 Table->MaxStructureSize = Table->CurrentPtr.Standard.Hdr->Length;
342 }
343
344 Table->CurrentPtr.Raw += Table->CurrentPtr.Standard.Hdr->Length;
345
346 Table->NumberOfStructures++;
347
348 //
349 // SMBIOS spec requires 2 terminator bytes after structures without strings and 1 byte otherwise.
350 // We allocate 2 extra bytes (SMBIOS_STRUCTURE_TERMINATOR_SIZE), and end up using one or two here.
351 //
352 if (Table->CurrentStrPtr != (CHAR8 *)Table->CurrentPtr.Raw) {
353 Table->CurrentStrPtr++;
354 Table->CurrentPtr.Raw = (UINT8 *)Table->CurrentStrPtr;
355 } else {
356 Table->CurrentStrPtr += 2;
357 Table->CurrentPtr.Raw += 2;
358 }
359}
360
361CHAR8 *
363 IN APPLE_SMBIOS_STRUCTURE_POINTER SmbiosTable,
364 IN SMBIOS_TABLE_STRING String
365 )
366{
367 UINT8 *Walker;
368 UINT8 Index;
369
370 if (String == 0) {
371 return NULL;
372 }
373
374 Walker = SmbiosTable.Raw + SmbiosTable.Standard.Hdr->Length;
375
376 for (Index = 1; Index != String; Index++) {
377 while (*Walker != 0) {
378 Walker++;
379 }
380
381 Walker++;
382
383 //
384 // Double NULL termination means end of table.
385 //
386 if (*Walker == 0) {
387 return NULL;
388 }
389 }
390
391 return (CHAR8 *)Walker;
392}
393
394UINT8
396 IN OUT CHAR8 **Buffer,
397 IN CONST CHAR8 *String,
398 IN UINT32 Length,
399 IN OUT UINT8 *Index
400 )
401{
402 ASSERT (Buffer != NULL);
403 ASSERT (String != NULL);
404 ASSERT (Index != NULL);
405 ASSERT (Length > 0);
406
407 CopyMem (*Buffer, String, Length);
408 *Buffer += Length + 1;
409 (*Index)++;
410
411 return *Index;
412}
413
414UINT32
416 IN APPLE_SMBIOS_STRUCTURE_POINTER SmbiosTable,
417 IN UINT32 SmbiosTableSize
418 )
419{
420 UINT32 Length;
421 UINT8 *Walker;
422
423 Length = SmbiosTable.Standard.Hdr->Length;
424 if (Length > SmbiosTableSize) {
425 return 0;
426 }
427
428 SmbiosTable.Raw += Length;
429 SmbiosTableSize -= Length;
430 Walker = SmbiosTable.Raw;
431 while (SmbiosTableSize >= SMBIOS_STRUCTURE_TERMINATOR_SIZE) {
432 if ((Walker[0] == 0) && (Walker[1] == 0)) {
433 return Length + (UINT32)(Walker - SmbiosTable.Raw) + SMBIOS_STRUCTURE_TERMINATOR_SIZE;
434 }
435
436 Walker++;
437 SmbiosTableSize--;
438 }
439
440 return 0;
441}
442
445 IN APPLE_SMBIOS_STRUCTURE_POINTER SmbiosTable,
446 IN UINT32 SmbiosTableSize,
447 IN SMBIOS_TYPE Type,
448 IN UINT16 Index
449 )
450{
451 UINT16 SmbiosTypeIndex;
452 UINT32 Length;
453
454 SmbiosTypeIndex = 1;
455
456 while (SmbiosTableSize >= sizeof (SMBIOS_STRUCTURE)) {
457 //
458 // Perform basic size sanity check.
459 //
460 Length = SmbiosGetStructureLength (SmbiosTable, SmbiosTableSize);
461 if (Length == 0) {
462 break;
463 }
464
465 //
466 // We found the right table.
467 //
468 if ((SmbiosTypeIndex == Index) && (SmbiosTable.Standard.Hdr->Type == Type)) {
469 return SmbiosTable;
470 }
471
472 //
473 // Abort on EOT.
474 //
475 if (SmbiosTable.Standard.Hdr->Type == SMBIOS_TYPE_END_OF_TABLE) {
476 break;
477 }
478
479 //
480 // Skip extra tables of this type until we reach requested number.
481 //
482 if (SmbiosTable.Standard.Hdr->Type == Type) {
483 SmbiosTypeIndex++;
484 //
485 // Unsigned wraparound, we have more than MAX_UINT16 tables of this kind.
486 //
487 if (SmbiosTypeIndex == 0) {
488 break;
489 }
490 }
491
492 SmbiosTable.Raw += Length;
493 SmbiosTableSize -= Length;
494 }
495
496 SmbiosTable.Raw = NULL;
497 return SmbiosTable;
498}
499
500UINT16
502 IN APPLE_SMBIOS_STRUCTURE_POINTER SmbiosTable,
503 IN UINT32 SmbiosTableSize,
504 IN SMBIOS_TYPE Type
505 )
506{
507 UINT16 Count;
508 UINT32 Length;
509
510 Count = 0;
511
512 while (SmbiosTableSize >= sizeof (SMBIOS_STRUCTURE)) {
513 //
514 // Perform basic size sanity check.
515 //
516 Length = SmbiosGetStructureLength (SmbiosTable, SmbiosTableSize);
517 if (Length == 0) {
518 break;
519 }
520
521 //
522 // We found the right table.
523 //
524 if (SmbiosTable.Standard.Hdr->Type == Type) {
525 Count++;
526 //
527 // Unsigned wraparound, we have more than MAX_UINT16 tables of this kind.
528 //
529 if (Count == 0) {
530 break;
531 }
532 }
533
534 //
535 // Abort on EOT.
536 //
537 if (SmbiosTable.Standard.Hdr->Type == SMBIOS_TYPE_END_OF_TABLE) {
538 break;
539 }
540
541 SmbiosTable.Raw += Length;
542 SmbiosTableSize -= Length;
543 }
544
545 return Count;
546}
UINT64 Length
#define APPLE_SMBIOS_TYPE_PROCESSOR_BUS_SPEED
Definition AppleSmBios.h:23
#define APPLE_SMBIOS_TYPE_FIRMWARE_INFORMATION
Definition AppleSmBios.h:20
#define APPLE_SMBIOS_TYPE_MEMORY_SPD_DATA
Definition AppleSmBios.h:21
#define APPLE_SMBIOS_TYPE_PROCESSOR_TYPE
Definition AppleSmBios.h:22
#define APPLE_SMBIOS_TYPE_SMC_INFORMATION
Definition AppleSmBios.h:25
#define APPLE_SMBIOS_TYPE_PLATFORM_FEATURE
Definition AppleSmBios.h:24
VOID SmbiosDebugAnyStructure(IN APPLE_SMBIOS_STRUCTURE_POINTER Record)
DMG_SIZE_DEVICE_PATH Size
OC_TYPING_BUFFER_ENTRY Buffer[OC_TYPING_BUFFER_SIZE]
Definition OcTypingLib.h:42
CHAR8 * SmbiosGetString(IN APPLE_SMBIOS_STRUCTURE_POINTER SmbiosTable, IN SMBIOS_TABLE_STRING String)
EFI_STATUS SmbiosExtendTable(IN OUT OC_SMBIOS_TABLE *Table, IN UINT32 Size)
EFI_STATUS SmbiosInitialiseStruct(IN OUT OC_SMBIOS_TABLE *Table, IN SMBIOS_TYPE Type, IN UINT8 MinLength, IN UINT16 Index)
APPLE_SMBIOS_STRUCTURE_POINTER SmbiosGetStructureOfType(IN APPLE_SMBIOS_STRUCTURE_POINTER SmbiosTable, IN UINT32 SmbiosTableSize, IN SMBIOS_TYPE Type, IN UINT16 Index)
UINT32 SmbiosGetStructureLength(IN APPLE_SMBIOS_STRUCTURE_POINTER SmbiosTable, IN UINT32 SmbiosTableSize)
UINT8 SmbiosSetString(IN OUT CHAR8 **Buffer, IN CONST CHAR8 *String, IN UINT32 Length, IN OUT UINT8 *Index)
STATIC EFI_STATUS SmbiosAssignStructHandle(IN OUT OC_SMBIOS_TABLE *Table, IN UINT32 Type, IN UINT16 Index)
UINT8 SmbiosOverrideString(IN OC_SMBIOS_TABLE *Table, IN CONST CHAR8 *Override OPTIONAL, IN UINT8 *Index)
VOID SmbiosFinaliseStruct(IN OUT OC_SMBIOS_TABLE *Table)
UINT16 SmbiosGetStructureCount(IN APPLE_SMBIOS_STRUCTURE_POINTER SmbiosTable, IN UINT32 SmbiosTableSize, IN SMBIOS_TYPE Type)
@ OcSmbiosOutOfBandRemoteAccessHandle
@ OcSmbiosBaseboardInformationHandle
@ OcSmbiosPortableBatteryHandle
@ OcSmbiosSystemResetHandle
@ OcSmbiosOemStringsHandle
@ OcSmbiosBiosLanguageInformationHandle
@ OcSmbiosMemoryControllerInformationHandle
@ OcSmbiosGroupAssociationsHandle
@ OcSmbiosCoolingDeviceHandle
@ OcAppleSmbiosProcessorBusSpeedHandle
@ OcSmbiosAdditionalInformationHandle
@ OcSmbiosSystemConfigurationOptionsHandle
@ OcSmbiosSystemEnclosureHandle
@ OcSmbiosSystemEventLogHandle
@ OcSmbiosIpmiDeviceInformationHandle
@ OcSmbiosHardwareSecurityHandle
@ OcSmbiosOnboardDeviceInformationHandle
@ OcSmbiosOnboardDevicesExtendedInformationHandle
@ OcSmbiosBiosInformationHandle
@ OcSmbiosSystemPowerControlsHandle
@ OcAppleSmbiosFirmwareInformationHandle
@ OcAppleSmbiosProcessorTypeHandle
@ OcSmbiosManagementDeviceThresholdDataHandle
@ OcSmbios32BitMemoryErrorInformationHandle
@ OcSmbiosInactiveHandle
@ OcSmbiosEndOfTableHandle
@ OcSmbiosSystemPowerSupplyHandle
@ OcAppleSmbiosPlatformFeatureHandle
@ OcSmbiosSystemInformationHandle
@ OcSmbiosBootIntegrityServiceHandle
@ OcSmbiosManagementControllerHostInterfaceHandle
@ OcSmbiosMemoryModuleInformatonHandle
@ OcSmbiosManagementDeviceComponentHandle
@ OcSmbios64BitMemoryErrorInformationHandle
@ OcSmbiosMemoryChannelHandle
@ OcSmbiosTpmDeviceHandle
@ OcAppleSmbiosSmcInformationHandle
@ OcSmbiosBuiltInPointingDeviceHandle
@ OcSmbiosVoltageProbeHandle
@ OcSmbiosManagementDeviceHandle
@ OcSmbiosTemperatureProbeHandle
@ OcAppleSmbiosMemorySpdDataHandle
@ OcSmbiosSystemBootInformationHandle
@ OcSmbiosElectricalCurrentProbeHandle
#define SMBIOS_STRUCTURE_TERMINATOR_SIZE
VOID *EFIAPI CopyMem(OUT VOID *DestinationBuffer, IN CONST VOID *SourceBuffer, IN UINTN Length)
VOID *EFIAPI ZeroMem(OUT VOID *Buffer, IN UINTN Length)
#define ASSERT(x)
Definition coder.h:55