2 Lib include for SMBIOS services. Used to get system serial number and GUID
4 Copyright (c) 2005 - 2010, Intel Corporation. All rights reserved.<BR>
5 This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
19 // Define SMBIOS tables.
23 typedef UINT8 SMBIOS_STRING
;
26 UINT8 AnchorString
[4];
27 UINT8 EntryPointStructureChecksum
;
28 UINT8 EntryPointLength
;
31 UINT16 MaxStructureSize
;
32 UINT8 EntryPointRevision
;
33 UINT8 FormattedArea
[5];
34 UINT8 IntermediateAnchorString
[5];
35 UINT8 IntermediateChecksum
;
38 UINT16 NumberOfSmbiosStructures
;
39 UINT8 SmbiosBcdRevision
;
40 } SMBIOS_STRUCTURE_TABLE
;
43 // Please note that SMBIOS structures can be odd byte aligned since the
44 // unformated section of each record is a set of arbitrary size strings.
55 SMBIOS_STRING BiosVersion
;
57 SMBIOS_STRING BiosReleaseDate
;
59 UINT64 BiosCharacteristics
;
60 UINT8 BIOSCharacteristicsExtensionBytes
[2];
61 UINT8 SystemBiosMajorRelease
;
62 UINT8 SystemBiosMinorRelease
;
63 UINT8 EmbeddedControllerFirmwareMajorRelease
;
64 UINT8 EmbeddedControllerFirmwareMinorRelease
;
69 SMBIOS_STRING Manufacturer
;
70 SMBIOS_STRING ProductName
;
71 SMBIOS_STRING Version
;
72 SMBIOS_STRING SerialNumber
;
75 SMBIOS_STRING SKUNumber
;
81 SMBIOS_STRING Manufacturer
;
82 SMBIOS_STRING ProductName
;
83 SMBIOS_STRING Version
;
84 SMBIOS_STRING SerialNumber
;
85 SMBIOS_STRING AssetTag
;
87 SMBIOS_STRING LocationInChassis
;
90 UINT8 NumberOfContainedObjectHandles
;
91 UINT16 ContainedObjectHandles
[1];
95 UINT8 ContainedElementType
;
96 UINT8 ContainedElementMinimum
;
97 UINT8 ContainedElementMaximum
;
102 SMBIOS_STRING Manufacturer
;
104 SMBIOS_STRING Version
;
105 SMBIOS_STRING SerialNumber
;
106 SMBIOS_STRING AssetTag
;
108 UINT8 PowerSupplyState
;
110 UINT8 SecurityStatus
;
113 UINT8 NumberofPowerCords
;
114 UINT8 ContainedElementCount
;
115 UINT8 ContainedElementRecordLength
;
116 CONTAINED_ELEMENT ContainedElements
[1];
123 UINT8 ProcessorFamily
;
124 SMBIOS_STRING ProcessorManufacture
;
125 UINT8 ProcessorId
[8];
126 SMBIOS_STRING ProcessorVersion
;
128 UINT16 ExternalClock
;
132 UINT8 ProcessorUpgrade
;
133 UINT16 L1CacheHandle
;
134 UINT16 L2CacheHandle
;
135 UINT16 L3CacheHandle
;
136 SMBIOS_STRING SerialNumber
;
137 SMBIOS_STRING AssetTag
;
138 SMBIOS_STRING PartNumber
;
140 // Add for smbios 2.5
143 UINT8 EnabledCoreCount
;
145 UINT16 ProcessorCharacteristics
;
147 // Add for smbios 2.6
149 UINT16 ProcessorFamily2
;
154 UINT8 ErrDetectMethod
;
155 UINT8 ErrCorrectCapability
;
156 UINT8 SupportInterleave
;
157 UINT8 CurrentInterleave
;
158 UINT8 MaxMemoryModuleSize
;
160 UINT16 SupportMemoryType
;
161 UINT8 MemoryModuleVoltage
;
162 UINT8 AssociatedMemorySlotNum
;
163 UINT16 MemoryModuleConfigHandles
[1];
168 SMBIOS_STRING SocketDesignation
;
169 UINT8 BankConnections
;
171 UINT16 CurrentMemoryType
;
179 SMBIOS_STRING SocketDesignation
;
180 UINT16 CacheConfiguration
;
181 UINT16 MaximumCacheSize
;
182 UINT16 InstalledSize
;
183 UINT16 SupportedSRAMType
;
184 UINT16 CurrentSRAMType
;
186 UINT8 ErrorCorrectionType
;
187 UINT8 SystemCacheType
;
193 SMBIOS_STRING InternalReferenceDesignator
;
194 UINT8 InternalConnectorType
;
195 SMBIOS_STRING ExternalReferenceDesignator
;
196 UINT8 ExternalConnectorType
;
202 SMBIOS_STRING SlotDesignation
;
204 UINT8 SlotDataBusWidth
;
208 UINT8 SlotCharacteristics1
;
209 UINT8 SlotCharacteristics2
;
211 // Add for smbios 2.6
213 UINT16 SegmentGroupNum
;
218 typedef struct DeviceStruct
{
220 SMBIOS_STRING DescriptionString
;
225 DeviceStruct Device
[1];
240 UINT8 InstallableLanguages
;
243 SMBIOS_STRING CurrentLanguages
;
248 SMBIOS_STRING GroupName
;
253 typedef struct EVENTLOGTYPE
{
255 UINT8 DataFormatType
;
260 UINT16 LogAreaLength
;
261 UINT16 LogHeaderStartOffset
;
262 UINT16 LogDataStartOffset
;
265 UINT32 LogChangeToken
;
266 UINT32 AccessMethodAddress
;
267 UINT8 LogHeaderFormat
;
268 UINT8 NumberOfSupportedLogTypeDescriptors
;
269 UINT8 LengthOfLogTypeDescriptor
;
270 EVENTLOGTYPE EventLogTypeDescriptors
[1];
277 UINT8 MemoryErrorCorrection
;
278 UINT32 MaximumCapacity
;
279 UINT16 MemoryErrorInformationHandle
;
280 UINT16 NumberOfMemoryDevices
;
285 UINT16 MemoryArrayHandle
;
286 UINT16 MemoryErrorInformationHandle
;
292 SMBIOS_STRING DeviceLocator
;
293 SMBIOS_STRING BankLocator
;
297 SMBIOS_STRING Manufacturer
;
298 SMBIOS_STRING SerialNumber
;
299 SMBIOS_STRING AssetTag
;
300 SMBIOS_STRING PartNumber
;
302 // Add for smbios 2.6
310 UINT8 ErrorGranularity
;
311 UINT8 ErrorOperation
;
312 UINT32 VendorSyndrome
;
313 UINT32 MemoryArrayErrorAddress
;
314 UINT32 DeviceErrorAddress
;
315 UINT32 ErrorResolution
;
320 UINT32 StartingAddress
;
321 UINT32 EndingAddress
;
322 UINT16 MemoryArrayHandle
;
323 UINT8 PartitionWidth
;
328 UINT32 StartingAddress
;
329 UINT32 EndingAddress
;
330 UINT16 MemoryDeviceHandle
;
331 UINT16 MemoryArrayMappedAddressHandle
;
332 UINT8 PartitionRowPosition
;
333 UINT8 InterleavePosition
;
334 UINT8 InterleavedDataDepth
;
341 UINT8 NumberOfButtons
;
346 SMBIOS_STRING Location
;
347 SMBIOS_STRING Manufacturer
;
348 SMBIOS_STRING ManufactureDate
;
349 SMBIOS_STRING SerialNumber
;
350 SMBIOS_STRING DeviceName
;
351 UINT8 DeviceChemistry
;
352 UINT16 DeviceCapacity
;
353 UINT16 DesignVoltage
;
354 SMBIOS_STRING SBDSVersionNumber
;
355 UINT8 MaximumErrorInBatteryData
;
356 UINT16 SBDSSerialNumber
;
357 UINT16 SBDSManufactureDate
;
358 SMBIOS_STRING SBDSDeviceChemistry
;
359 UINT8 DesignCapacityMultiplier
;
368 UINT16 TimerInterval
;
374 UINT8 HardwareSecuritySettings
;
379 UINT8 NextScheduledPowerOnMonth
;
380 UINT8 NextScheduledPowerOnDayOfMonth
;
381 UINT8 NextScheduledPowerOnHour
;
382 UINT8 NextScheduledPowerOnMinute
;
383 UINT8 NextScheduledPowerOnSecond
;
388 SMBIOS_STRING Description
;
389 UINT8 LocationAndStatus
;
401 UINT16 TemperatureProbeHandle
;
402 UINT8 DeviceTypeAndStatus
;
403 UINT8 CoolingUnitGroup
;
410 SMBIOS_STRING Description
;
411 UINT8 LocationAndStatus
;
423 SMBIOS_STRING Description
;
424 UINT8 LocationAndStatus
;
436 SMBIOS_STRING ManufacturerName
;
460 UINT8 ErrorGranularity
;
461 UINT8 ErrorOperation
;
462 UINT32 VendorSyndrome
;
463 UINT64 MemoryArrayErrorAddress
;
464 UINT64 DeviceErrorAddress
;
465 UINT32 ErrorResolution
;
470 SMBIOS_STRING Description
;
478 SMBIOS_STRING Description
;
479 UINT16 ManagementDeviceHandle
;
480 UINT16 ComponentHandle
;
481 UINT16 ThresholdHandle
;
486 UINT16 LowerThresholdNonCritical
;
487 UINT16 UpperThresholdNonCritical
;
488 UINT16 LowerThresholdCritical
;
489 UINT16 UpperThresholdCritical
;
490 UINT16 LowerThresholdNonRecoverable
;
491 UINT16 UpperThresholdNonRecoverable
;
494 typedef struct MEMORYDEVICE
{
502 UINT8 MaximumChannelLoad
;
503 UINT8 MemoryDeviceCount
;
504 MEMORYDEVICE MemoryDevice
[1];
510 UINT8 IPMISpecificationRevision
;
511 UINT8 I2CSlaveAddress
;
512 UINT8 NVStorageDeviceAddress
;
518 UINT8 PowerUnitGroup
;
519 SMBIOS_STRING Location
;
520 SMBIOS_STRING DeviceName
;
521 SMBIOS_STRING Manufacturer
;
522 SMBIOS_STRING SerialNumber
;
523 SMBIOS_STRING AssetTagNumber
;
524 SMBIOS_STRING ModelPartNumber
;
525 SMBIOS_STRING RevisionLevel
;
526 UINT16 MaxPowerCapacity
;
527 UINT16 PowerSupplyCharacteristics
;
528 UINT16 InputVoltageProbeHandle
;
529 UINT16 CoolingDeviceHandle
;
530 UINT16 InputCurrentProbeHandle
;
534 // Add type 40 and type 41 for smbios 2.6
538 UINT16 ReferencedHandle
;
539 UINT8 ReferencedOffset
;
540 SMBIOS_STRING EntryString
;
542 } ADDITIONAL_INFORMATION_ENTRY
;
546 UINT8 NumberOfAdditionalInformationEntries
;
547 ADDITIONAL_INFORMATION_ENTRY AdditionalInfoEntries
[1];
552 SMBIOS_STRING ReferenceDesignation
;
554 UINT8 DeviceTypeInstance
;
555 UINT16 SegmentGroupNum
;
570 Among the following 42 type of structues for SMBIOS Stucture table,
571 There are only 11 Types(0,1,3,4,7,9,16,17,19,20,32) are required,
572 The other types is optional.
586 SMBIOS_TYPE10
*Type10
;
587 SMBIOS_TYPE11
*Type11
;
588 SMBIOS_TYPE12
*Type12
;
589 SMBIOS_TYPE13
*Type13
;
590 SMBIOS_TYPE14
*Type14
;
591 SMBIOS_TYPE15
*Type15
;
592 SMBIOS_TYPE16
*Type16
;
593 SMBIOS_TYPE17
*Type17
;
594 SMBIOS_TYPE18
*Type18
;
595 SMBIOS_TYPE19
*Type19
;
596 SMBIOS_TYPE20
*Type20
;
597 SMBIOS_TYPE21
*Type21
;
598 SMBIOS_TYPE22
*Type22
;
599 SMBIOS_TYPE23
*Type23
;
600 SMBIOS_TYPE24
*Type24
;
601 SMBIOS_TYPE25
*Type25
;
602 SMBIOS_TYPE26
*Type26
;
603 SMBIOS_TYPE27
*Type27
;
604 SMBIOS_TYPE28
*Type28
;
605 SMBIOS_TYPE29
*Type29
;
606 SMBIOS_TYPE30
*Type30
;
607 SMBIOS_TYPE31
*Type31
;
608 SMBIOS_TYPE32
*Type32
;
609 SMBIOS_TYPE33
*Type33
;
610 SMBIOS_TYPE34
*Type34
;
611 SMBIOS_TYPE35
*Type35
;
612 SMBIOS_TYPE36
*Type36
;
613 SMBIOS_TYPE37
*Type37
;
614 SMBIOS_TYPE38
*Type38
;
615 SMBIOS_TYPE39
*Type39
;
616 SMBIOS_TYPE40
*Type40
;
617 SMBIOS_TYPE41
*Type41
;
618 SMBIOS_TYPE126
*Type126
;
619 SMBIOS_TYPE127
*Type127
;
621 } SMBIOS_STRUCTURE_POINTER
;
627 IN SMBIOS_STRUCTURE_POINTER
*Smbios
,
628 IN UINT16 StringNumber
632 LibGetSmbiosSystemGuidAndSerialNumber (
633 IN EFI_GUID
*SystemGuid
,
634 OUT CHAR8
**SystemSerialNumber