]> git.proxmox.com Git - mirror_edk2.git/blob - ShellPkg/Library/UefiShellDebug1CommandsLib/SmbiosView/LibSmbios.h
add comments to function declarations and definitions and updated to match coding...
[mirror_edk2.git] / ShellPkg / Library / UefiShellDebug1CommandsLib / SmbiosView / LibSmbios.h
1 /** @file
2 Lib include for SMBIOS services. Used to get system serial number and GUID
3
4 Copyright (c) 2005 - 2011, 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
9
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.
12
13 **/
14
15 #ifndef _LIB_SMBIOS_H_
16 #define _LIB_SMBIOS_H_
17
18 //
19 // Define SMBIOS tables.
20 //
21 #pragma pack(1)
22
23 typedef UINT8 SMBIOS_STRING;
24
25 typedef struct {
26 UINT8 AnchorString[4];
27 UINT8 EntryPointStructureChecksum;
28 UINT8 EntryPointLength;
29 UINT8 MajorVersion;
30 UINT8 MinorVersion;
31 UINT16 MaxStructureSize;
32 UINT8 EntryPointRevision;
33 UINT8 FormattedArea[5];
34 UINT8 IntermediateAnchorString[5];
35 UINT8 IntermediateChecksum;
36 UINT16 TableLength;
37 UINT32 TableAddress;
38 UINT16 NumberOfSmbiosStructures;
39 UINT8 SmbiosBcdRevision;
40 } SMBIOS_STRUCTURE_TABLE;
41
42 //
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.
45 //
46 typedef struct {
47 UINT8 Type;
48 UINT8 Length;
49 UINT16 Handle;
50 } SMBIOS_HEADER;
51
52 typedef struct {
53 SMBIOS_HEADER Hdr;
54 SMBIOS_STRING Vendor;
55 SMBIOS_STRING BiosVersion;
56 UINT16 BiosSegment;
57 SMBIOS_STRING BiosReleaseDate;
58 UINT8 BiosSize;
59 UINT64 BiosCharacteristics;
60 UINT8 BIOSCharacteristicsExtensionBytes[2];
61 UINT8 SystemBiosMajorRelease;
62 UINT8 SystemBiosMinorRelease;
63 UINT8 EmbeddedControllerFirmwareMajorRelease;
64 UINT8 EmbeddedControllerFirmwareMinorRelease;
65 } SMBIOS_TYPE0;
66
67 typedef struct {
68 SMBIOS_HEADER Hdr;
69 SMBIOS_STRING Manufacturer;
70 SMBIOS_STRING ProductName;
71 SMBIOS_STRING Version;
72 SMBIOS_STRING SerialNumber;
73 EFI_GUID Uuid;
74 UINT8 WakeUpType;
75 SMBIOS_STRING SKUNumber;
76 SMBIOS_STRING Family;
77 } SMBIOS_TYPE1;
78
79 typedef struct {
80 SMBIOS_HEADER Hdr;
81 SMBIOS_STRING Manufacturer;
82 SMBIOS_STRING ProductName;
83 SMBIOS_STRING Version;
84 SMBIOS_STRING SerialNumber;
85 SMBIOS_STRING AssetTag;
86 UINT8 FeatureFlag;
87 SMBIOS_STRING LocationInChassis;
88 UINT16 ChassisHandle;
89 UINT8 BoardType;
90 UINT8 NumberOfContainedObjectHandles;
91 UINT16 ContainedObjectHandles[1];
92 } SMBIOS_TYPE2;
93
94 typedef struct {
95 UINT8 ContainedElementType;
96 UINT8 ContainedElementMinimum;
97 UINT8 ContainedElementMaximum;
98 } CONTAINED_ELEMENT;
99
100 typedef struct {
101 SMBIOS_HEADER Hdr;
102 SMBIOS_STRING Manufacturer;
103 UINT8 Type;
104 SMBIOS_STRING Version;
105 SMBIOS_STRING SerialNumber;
106 SMBIOS_STRING AssetTag;
107 UINT8 BootupState;
108 UINT8 PowerSupplyState;
109 UINT8 ThermalState;
110 UINT8 SecurityStatus;
111 UINT8 OemDefined[4];
112 UINT8 Height;
113 UINT8 NumberofPowerCords;
114 UINT8 ContainedElementCount;
115 UINT8 ContainedElementRecordLength;
116 CONTAINED_ELEMENT ContainedElements[1];
117 } SMBIOS_TYPE3;
118
119 typedef struct {
120 SMBIOS_HEADER Hdr;
121 UINT8 Socket;
122 UINT8 ProcessorType;
123 UINT8 ProcessorFamily;
124 SMBIOS_STRING ProcessorManufacture;
125 UINT8 ProcessorId[8];
126 SMBIOS_STRING ProcessorVersion;
127 UINT8 Voltage;
128 UINT16 ExternalClock;
129 UINT16 MaxSpeed;
130 UINT16 CurrentSpeed;
131 UINT8 Status;
132 UINT8 ProcessorUpgrade;
133 UINT16 L1CacheHandle;
134 UINT16 L2CacheHandle;
135 UINT16 L3CacheHandle;
136 SMBIOS_STRING SerialNumber;
137 SMBIOS_STRING AssetTag;
138 SMBIOS_STRING PartNumber;
139 //
140 // Add for smbios 2.5
141 //
142 UINT8 CoreCount;
143 UINT8 EnabledCoreCount;
144 UINT8 ThreadCount;
145 UINT16 ProcessorCharacteristics;
146 //
147 // Add for smbios 2.6
148 //
149 UINT16 ProcessorFamily2;
150 } SMBIOS_TYPE4;
151
152 typedef struct {
153 SMBIOS_HEADER Hdr;
154 UINT8 ErrDetectMethod;
155 UINT8 ErrCorrectCapability;
156 UINT8 SupportInterleave;
157 UINT8 CurrentInterleave;
158 UINT8 MaxMemoryModuleSize;
159 UINT16 SupportSpeed;
160 UINT16 SupportMemoryType;
161 UINT8 MemoryModuleVoltage;
162 UINT8 AssociatedMemorySlotNum;
163 UINT16 MemoryModuleConfigHandles[1];
164 } SMBIOS_TYPE5;
165
166 typedef struct {
167 SMBIOS_HEADER Hdr;
168 SMBIOS_STRING SocketDesignation;
169 UINT8 BankConnections;
170 UINT8 CurrentSpeed;
171 UINT16 CurrentMemoryType;
172 UINT8 InstalledSize;
173 UINT8 EnabledSize;
174 UINT8 ErrorStatus;
175 } SMBIOS_TYPE6;
176
177 typedef struct {
178 SMBIOS_HEADER Hdr;
179 SMBIOS_STRING SocketDesignation;
180 UINT16 CacheConfiguration;
181 UINT16 MaximumCacheSize;
182 UINT16 InstalledSize;
183 UINT16 SupportedSRAMType;
184 UINT16 CurrentSRAMType;
185 UINT8 CacheSpeed;
186 UINT8 ErrorCorrectionType;
187 UINT8 SystemCacheType;
188 UINT8 Associativity;
189 } SMBIOS_TYPE7;
190
191 typedef struct {
192 SMBIOS_HEADER Hdr;
193 SMBIOS_STRING InternalReferenceDesignator;
194 UINT8 InternalConnectorType;
195 SMBIOS_STRING ExternalReferenceDesignator;
196 UINT8 ExternalConnectorType;
197 UINT8 PortType;
198 } SMBIOS_TYPE8;
199
200 typedef struct {
201 SMBIOS_HEADER Hdr;
202 SMBIOS_STRING SlotDesignation;
203 UINT8 SlotType;
204 UINT8 SlotDataBusWidth;
205 UINT8 CurrentUsage;
206 UINT8 SlotLength;
207 UINT16 SlotID;
208 UINT8 SlotCharacteristics1;
209 UINT8 SlotCharacteristics2;
210 //
211 // Add for smbios 2.6
212 //
213 UINT16 SegmentGroupNum;
214 UINT8 BusNum;
215 UINT8 DevFuncNum;
216 } SMBIOS_TYPE9;
217
218 typedef struct _DEVICE_STRUCTURE {
219 UINT8 DeviceType;
220 SMBIOS_STRING DescriptionString;
221 } DEVICE_STRUCTURE;
222
223 typedef struct {
224 SMBIOS_HEADER Hdr;
225 DEVICE_STRUCTURE Device[1];
226 } SMBIOS_TYPE10;
227
228 typedef struct {
229 SMBIOS_HEADER Hdr;
230 UINT8 StringCount;
231 } SMBIOS_TYPE11;
232
233 typedef struct {
234 SMBIOS_HEADER Hdr;
235 UINT8 StringCount;
236 } SMBIOS_TYPE12;
237
238 typedef struct {
239 SMBIOS_HEADER Hdr;
240 UINT8 InstallableLanguages;
241 UINT8 Flags;
242 UINT8 Reserved[15];
243 SMBIOS_STRING CurrentLanguages;
244 } SMBIOS_TYPE13;
245
246 typedef struct {
247 SMBIOS_HEADER Hdr;
248 SMBIOS_STRING GroupName;
249 UINT8 ItemType;
250 UINT16 ItemHandle;
251 } SMBIOS_TYPE14;
252
253 typedef struct EVENTLOGTYPE {
254 UINT8 LogType;
255 UINT8 DataFormatType;
256 } EVENTLOGTYPE;
257
258 typedef struct {
259 SMBIOS_HEADER Hdr;
260 UINT16 LogAreaLength;
261 UINT16 LogHeaderStartOffset;
262 UINT16 LogDataStartOffset;
263 UINT8 AccessMethod;
264 UINT8 LogStatus;
265 UINT32 LogChangeToken;
266 UINT32 AccessMethodAddress;
267 UINT8 LogHeaderFormat;
268 UINT8 NumberOfSupportedLogTypeDescriptors;
269 UINT8 LengthOfLogTypeDescriptor;
270 EVENTLOGTYPE EventLogTypeDescriptors[1];
271 } SMBIOS_TYPE15;
272
273 typedef struct {
274 SMBIOS_HEADER Hdr;
275 UINT8 Location;
276 UINT8 Use;
277 UINT8 MemoryErrorCorrection;
278 UINT32 MaximumCapacity;
279 UINT16 MemoryErrorInformationHandle;
280 UINT16 NumberOfMemoryDevices;
281 } SMBIOS_TYPE16;
282
283 typedef struct {
284 SMBIOS_HEADER Hdr;
285 UINT16 MemoryArrayHandle;
286 UINT16 MemoryErrorInformationHandle;
287 UINT16 TotalWidth;
288 UINT16 DataWidth;
289 UINT16 Size;
290 UINT8 FormFactor;
291 UINT8 DeviceSet;
292 SMBIOS_STRING DeviceLocator;
293 SMBIOS_STRING BankLocator;
294 UINT8 MemoryType;
295 UINT16 TypeDetail;
296 UINT16 Speed;
297 SMBIOS_STRING Manufacturer;
298 SMBIOS_STRING SerialNumber;
299 SMBIOS_STRING AssetTag;
300 SMBIOS_STRING PartNumber;
301 //
302 // Add for smbios 2.6
303 //
304 UINT8 Attributes;
305 } SMBIOS_TYPE17;
306
307 typedef struct {
308 SMBIOS_HEADER Hdr;
309 UINT8 ErrorType;
310 UINT8 ErrorGranularity;
311 UINT8 ErrorOperation;
312 UINT32 VendorSyndrome;
313 UINT32 MemoryArrayErrorAddress;
314 UINT32 DeviceErrorAddress;
315 UINT32 ErrorResolution;
316 } SMBIOS_TYPE18;
317
318 typedef struct {
319 SMBIOS_HEADER Hdr;
320 UINT32 StartingAddress;
321 UINT32 EndingAddress;
322 UINT16 MemoryArrayHandle;
323 UINT8 PartitionWidth;
324 } SMBIOS_TYPE19;
325
326 typedef struct {
327 SMBIOS_HEADER Hdr;
328 UINT32 StartingAddress;
329 UINT32 EndingAddress;
330 UINT16 MemoryDeviceHandle;
331 UINT16 MemoryArrayMappedAddressHandle;
332 UINT8 PartitionRowPosition;
333 UINT8 InterleavePosition;
334 UINT8 InterleavedDataDepth;
335 } SMBIOS_TYPE20;
336
337 typedef struct {
338 SMBIOS_HEADER Hdr;
339 UINT8 Type;
340 UINT8 Interface;
341 UINT8 NumberOfButtons;
342 } SMBIOS_TYPE21;
343
344 typedef struct {
345 SMBIOS_HEADER Hdr;
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;
360 UINT32 OEMSpecific;
361 } SMBIOS_TYPE22;
362
363 typedef struct {
364 SMBIOS_HEADER Hdr;
365 UINT8 Capabilities;
366 UINT16 ResetCount;
367 UINT16 ResetLimit;
368 UINT16 TimerInterval;
369 UINT16 Timeout;
370 } SMBIOS_TYPE23;
371
372 typedef struct {
373 SMBIOS_HEADER Hdr;
374 UINT8 HardwareSecuritySettings;
375 } SMBIOS_TYPE24;
376
377 typedef struct {
378 SMBIOS_HEADER Hdr;
379 UINT8 NextScheduledPowerOnMonth;
380 UINT8 NextScheduledPowerOnDayOfMonth;
381 UINT8 NextScheduledPowerOnHour;
382 UINT8 NextScheduledPowerOnMinute;
383 UINT8 NextScheduledPowerOnSecond;
384 } SMBIOS_TYPE25;
385
386 typedef struct {
387 SMBIOS_HEADER Hdr;
388 SMBIOS_STRING Description;
389 UINT8 LocationAndStatus;
390 UINT16 MaximumValue;
391 UINT16 MinimumValue;
392 UINT16 Resolution;
393 UINT16 Tolerance;
394 UINT16 Accuracy;
395 UINT32 OEMDefined;
396 UINT16 NominalValue;
397 } SMBIOS_TYPE26;
398
399 typedef struct {
400 SMBIOS_HEADER Hdr;
401 UINT16 TemperatureProbeHandle;
402 UINT8 DeviceTypeAndStatus;
403 UINT8 CoolingUnitGroup;
404 UINT32 OEMDefined;
405 UINT16 NominalSpeed;
406 } SMBIOS_TYPE27;
407
408 typedef struct {
409 SMBIOS_HEADER Hdr;
410 SMBIOS_STRING Description;
411 UINT8 LocationAndStatus;
412 UINT16 MaximumValue;
413 UINT16 MinimumValue;
414 UINT16 Resolution;
415 UINT16 Tolerance;
416 UINT16 Accuracy;
417 UINT32 OEMDefined;
418 UINT16 NominalValue;
419 } SMBIOS_TYPE28;
420
421 typedef struct {
422 SMBIOS_HEADER Hdr;
423 SMBIOS_STRING Description;
424 UINT8 LocationAndStatus;
425 UINT16 MaximumValue;
426 UINT16 MinimumValue;
427 UINT16 Resolution;
428 UINT16 Tolerance;
429 UINT16 Accuracy;
430 UINT32 OEMDefined;
431 UINT16 NominalValue;
432 } SMBIOS_TYPE29;
433
434 typedef struct {
435 SMBIOS_HEADER Hdr;
436 SMBIOS_STRING ManufacturerName;
437 UINT8 Connections;
438 } SMBIOS_TYPE30;
439
440 typedef struct {
441 SMBIOS_HEADER Hdr;
442 UINT8 Checksum;
443 UINT8 Reserved1;
444 UINT16 Reserved2;
445 UINT32 BisEntry16;
446 UINT32 BisEntry32;
447 UINT64 Reserved3;
448 UINT32 Reserved4;
449 } SMBIOS_TYPE31;
450
451 typedef struct {
452 SMBIOS_HEADER Hdr;
453 UINT8 Reserved[6];
454 UINT8 BootStatus[1];
455 } SMBIOS_TYPE32;
456
457 typedef struct {
458 SMBIOS_HEADER Hdr;
459 UINT8 ErrorType;
460 UINT8 ErrorGranularity;
461 UINT8 ErrorOperation;
462 UINT32 VendorSyndrome;
463 UINT64 MemoryArrayErrorAddress;
464 UINT64 DeviceErrorAddress;
465 UINT32 ErrorResolution;
466 } SMBIOS_TYPE33;
467
468 typedef struct {
469 SMBIOS_HEADER Hdr;
470 SMBIOS_STRING Description;
471 UINT8 Type;
472 UINT32 Address;
473 UINT8 AddressType;
474 } SMBIOS_TYPE34;
475
476 typedef struct {
477 SMBIOS_HEADER Hdr;
478 SMBIOS_STRING Description;
479 UINT16 ManagementDeviceHandle;
480 UINT16 ComponentHandle;
481 UINT16 ThresholdHandle;
482 } SMBIOS_TYPE35;
483
484 typedef struct {
485 SMBIOS_HEADER Hdr;
486 UINT16 LowerThresholdNonCritical;
487 UINT16 UpperThresholdNonCritical;
488 UINT16 LowerThresholdCritical;
489 UINT16 UpperThresholdCritical;
490 UINT16 LowerThresholdNonRecoverable;
491 UINT16 UpperThresholdNonRecoverable;
492 } SMBIOS_TYPE36;
493
494 typedef struct MEMORYDEVICE {
495 UINT8 DeviceLoad;
496 UINT16 DeviceHandle;
497 } MEMORYDEVICE;
498
499 typedef struct {
500 SMBIOS_HEADER Hdr;
501 UINT8 ChannelType;
502 UINT8 MaximumChannelLoad;
503 UINT8 MemoryDeviceCount;
504 MEMORYDEVICE MemoryDevice[1];
505 } SMBIOS_TYPE37;
506
507 typedef struct {
508 SMBIOS_HEADER Hdr;
509 UINT8 InterfaceType;
510 UINT8 IPMISpecificationRevision;
511 UINT8 I2CSlaveAddress;
512 UINT8 NVStorageDeviceAddress;
513 UINT64 BaseAddress;
514 } SMBIOS_TYPE38;
515
516 typedef struct {
517 SMBIOS_HEADER Hdr;
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;
531 } SMBIOS_TYPE39;
532
533 //
534 // Add type 40 and type 41 for smbios 2.6
535 //
536 typedef struct {
537 UINT8 EntryLength;
538 UINT16 ReferencedHandle;
539 UINT8 ReferencedOffset;
540 SMBIOS_STRING EntryString;
541 UINT8 Value[1];
542 } ADDITIONAL_INFORMATION_ENTRY;
543
544 typedef struct {
545 SMBIOS_HEADER Hdr;
546 UINT8 NumberOfAdditionalInformationEntries;
547 ADDITIONAL_INFORMATION_ENTRY AdditionalInfoEntries[1];
548 } SMBIOS_TYPE40;
549
550 typedef struct {
551 SMBIOS_HEADER Hdr;
552 SMBIOS_STRING ReferenceDesignation;
553 UINT8 DeviceType;
554 UINT8 DeviceTypeInstance;
555 UINT16 SegmentGroupNum;
556 UINT8 BusNum;
557 UINT8 DevFuncNum;
558 } SMBIOS_TYPE41;
559
560 typedef struct {
561 SMBIOS_HEADER Hdr;
562 } SMBIOS_TYPE126;
563
564 typedef struct {
565 SMBIOS_HEADER Hdr;
566 } SMBIOS_TYPE127;
567
568 /*
569 Notes:
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.
573 */
574 typedef union {
575 SMBIOS_HEADER *Hdr;
576 SMBIOS_TYPE0 *Type0;
577 SMBIOS_TYPE1 *Type1;
578 SMBIOS_TYPE2 *Type2;
579 SMBIOS_TYPE3 *Type3;
580 SMBIOS_TYPE4 *Type4;
581 SMBIOS_TYPE5 *Type5;
582 SMBIOS_TYPE6 *Type6;
583 SMBIOS_TYPE7 *Type7;
584 SMBIOS_TYPE8 *Type8;
585 SMBIOS_TYPE9 *Type9;
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;
620 UINT8 *Raw;
621 } SMBIOS_STRUCTURE_POINTER;
622
623 #pragma pack()
624
625 /**
626 Return SMBIOS string given the string number.
627
628 @param[in] Smbios Pointer to SMBIOS structure.
629 @param[in] StringNumber String number to return. -1 is used to skip all strings and
630 point to the next SMBIOS structure.
631
632 @return Pointer to string, or pointer to next SMBIOS strcuture if StringNumber == -1
633 **/
634 CHAR8*
635 LibGetSmbiosString (
636 IN SMBIOS_STRUCTURE_POINTER *Smbios,
637 IN UINT16 StringNumber
638 );
639
640 #endif