]> git.proxmox.com Git - mirror_edk2.git/blob - ShellPkg/Library/UefiShellDebug1CommandsLib/SmbiosView/LibSmbios.h
Updated platform DSC files to add CPU Exception Library instances.
[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 //
325 // Add for smbios 2.7
326 //
327 UINT64 ExtendedStartingAddress;
328 UINT64 ExtendedEndingAddress;
329 } SMBIOS_TYPE19;
330
331 typedef struct {
332 SMBIOS_HEADER Hdr;
333 UINT32 StartingAddress;
334 UINT32 EndingAddress;
335 UINT16 MemoryDeviceHandle;
336 UINT16 MemoryArrayMappedAddressHandle;
337 UINT8 PartitionRowPosition;
338 UINT8 InterleavePosition;
339 UINT8 InterleavedDataDepth;
340 } SMBIOS_TYPE20;
341
342 typedef struct {
343 SMBIOS_HEADER Hdr;
344 UINT8 Type;
345 UINT8 Interface;
346 UINT8 NumberOfButtons;
347 } SMBIOS_TYPE21;
348
349 typedef struct {
350 SMBIOS_HEADER Hdr;
351 SMBIOS_STRING Location;
352 SMBIOS_STRING Manufacturer;
353 SMBIOS_STRING ManufactureDate;
354 SMBIOS_STRING SerialNumber;
355 SMBIOS_STRING DeviceName;
356 UINT8 DeviceChemistry;
357 UINT16 DeviceCapacity;
358 UINT16 DesignVoltage;
359 SMBIOS_STRING SBDSVersionNumber;
360 UINT8 MaximumErrorInBatteryData;
361 UINT16 SBDSSerialNumber;
362 UINT16 SBDSManufactureDate;
363 SMBIOS_STRING SBDSDeviceChemistry;
364 UINT8 DesignCapacityMultiplier;
365 UINT32 OEMSpecific;
366 } SMBIOS_TYPE22;
367
368 typedef struct {
369 SMBIOS_HEADER Hdr;
370 UINT8 Capabilities;
371 UINT16 ResetCount;
372 UINT16 ResetLimit;
373 UINT16 TimerInterval;
374 UINT16 Timeout;
375 } SMBIOS_TYPE23;
376
377 typedef struct {
378 SMBIOS_HEADER Hdr;
379 UINT8 HardwareSecuritySettings;
380 } SMBIOS_TYPE24;
381
382 typedef struct {
383 SMBIOS_HEADER Hdr;
384 UINT8 NextScheduledPowerOnMonth;
385 UINT8 NextScheduledPowerOnDayOfMonth;
386 UINT8 NextScheduledPowerOnHour;
387 UINT8 NextScheduledPowerOnMinute;
388 UINT8 NextScheduledPowerOnSecond;
389 } SMBIOS_TYPE25;
390
391 typedef struct {
392 SMBIOS_HEADER Hdr;
393 SMBIOS_STRING Description;
394 UINT8 LocationAndStatus;
395 UINT16 MaximumValue;
396 UINT16 MinimumValue;
397 UINT16 Resolution;
398 UINT16 Tolerance;
399 UINT16 Accuracy;
400 UINT32 OEMDefined;
401 UINT16 NominalValue;
402 } SMBIOS_TYPE26;
403
404 typedef struct {
405 SMBIOS_HEADER Hdr;
406 UINT16 TemperatureProbeHandle;
407 UINT8 DeviceTypeAndStatus;
408 UINT8 CoolingUnitGroup;
409 UINT32 OEMDefined;
410 UINT16 NominalSpeed;
411 } SMBIOS_TYPE27;
412
413 typedef struct {
414 SMBIOS_HEADER Hdr;
415 SMBIOS_STRING Description;
416 UINT8 LocationAndStatus;
417 UINT16 MaximumValue;
418 UINT16 MinimumValue;
419 UINT16 Resolution;
420 UINT16 Tolerance;
421 UINT16 Accuracy;
422 UINT32 OEMDefined;
423 UINT16 NominalValue;
424 } SMBIOS_TYPE28;
425
426 typedef struct {
427 SMBIOS_HEADER Hdr;
428 SMBIOS_STRING Description;
429 UINT8 LocationAndStatus;
430 UINT16 MaximumValue;
431 UINT16 MinimumValue;
432 UINT16 Resolution;
433 UINT16 Tolerance;
434 UINT16 Accuracy;
435 UINT32 OEMDefined;
436 UINT16 NominalValue;
437 } SMBIOS_TYPE29;
438
439 typedef struct {
440 SMBIOS_HEADER Hdr;
441 SMBIOS_STRING ManufacturerName;
442 UINT8 Connections;
443 } SMBIOS_TYPE30;
444
445 typedef struct {
446 SMBIOS_HEADER Hdr;
447 UINT8 Checksum;
448 UINT8 Reserved1;
449 UINT16 Reserved2;
450 UINT32 BisEntry16;
451 UINT32 BisEntry32;
452 UINT64 Reserved3;
453 UINT32 Reserved4;
454 } SMBIOS_TYPE31;
455
456 typedef struct {
457 SMBIOS_HEADER Hdr;
458 UINT8 Reserved[6];
459 UINT8 BootStatus[1];
460 } SMBIOS_TYPE32;
461
462 typedef struct {
463 SMBIOS_HEADER Hdr;
464 UINT8 ErrorType;
465 UINT8 ErrorGranularity;
466 UINT8 ErrorOperation;
467 UINT32 VendorSyndrome;
468 UINT64 MemoryArrayErrorAddress;
469 UINT64 DeviceErrorAddress;
470 UINT32 ErrorResolution;
471 } SMBIOS_TYPE33;
472
473 typedef struct {
474 SMBIOS_HEADER Hdr;
475 SMBIOS_STRING Description;
476 UINT8 Type;
477 UINT32 Address;
478 UINT8 AddressType;
479 } SMBIOS_TYPE34;
480
481 typedef struct {
482 SMBIOS_HEADER Hdr;
483 SMBIOS_STRING Description;
484 UINT16 ManagementDeviceHandle;
485 UINT16 ComponentHandle;
486 UINT16 ThresholdHandle;
487 } SMBIOS_TYPE35;
488
489 typedef struct {
490 SMBIOS_HEADER Hdr;
491 UINT16 LowerThresholdNonCritical;
492 UINT16 UpperThresholdNonCritical;
493 UINT16 LowerThresholdCritical;
494 UINT16 UpperThresholdCritical;
495 UINT16 LowerThresholdNonRecoverable;
496 UINT16 UpperThresholdNonRecoverable;
497 } SMBIOS_TYPE36;
498
499 typedef struct MEMORYDEVICE {
500 UINT8 DeviceLoad;
501 UINT16 DeviceHandle;
502 } MEMORYDEVICE;
503
504 typedef struct {
505 SMBIOS_HEADER Hdr;
506 UINT8 ChannelType;
507 UINT8 MaximumChannelLoad;
508 UINT8 MemoryDeviceCount;
509 MEMORYDEVICE MemoryDevice[1];
510 } SMBIOS_TYPE37;
511
512 typedef struct {
513 SMBIOS_HEADER Hdr;
514 UINT8 InterfaceType;
515 UINT8 IPMISpecificationRevision;
516 UINT8 I2CSlaveAddress;
517 UINT8 NVStorageDeviceAddress;
518 UINT64 BaseAddress;
519 } SMBIOS_TYPE38;
520
521 typedef struct {
522 SMBIOS_HEADER Hdr;
523 UINT8 PowerUnitGroup;
524 SMBIOS_STRING Location;
525 SMBIOS_STRING DeviceName;
526 SMBIOS_STRING Manufacturer;
527 SMBIOS_STRING SerialNumber;
528 SMBIOS_STRING AssetTagNumber;
529 SMBIOS_STRING ModelPartNumber;
530 SMBIOS_STRING RevisionLevel;
531 UINT16 MaxPowerCapacity;
532 UINT16 PowerSupplyCharacteristics;
533 UINT16 InputVoltageProbeHandle;
534 UINT16 CoolingDeviceHandle;
535 UINT16 InputCurrentProbeHandle;
536 } SMBIOS_TYPE39;
537
538 //
539 // Add type 40 and type 41 for smbios 2.6
540 //
541 typedef struct {
542 UINT8 EntryLength;
543 UINT16 ReferencedHandle;
544 UINT8 ReferencedOffset;
545 SMBIOS_STRING EntryString;
546 UINT8 Value[1];
547 } ADDITIONAL_INFORMATION_ENTRY;
548
549 typedef struct {
550 SMBIOS_HEADER Hdr;
551 UINT8 NumberOfAdditionalInformationEntries;
552 ADDITIONAL_INFORMATION_ENTRY AdditionalInfoEntries[1];
553 } SMBIOS_TYPE40;
554
555 typedef struct {
556 SMBIOS_HEADER Hdr;
557 SMBIOS_STRING ReferenceDesignation;
558 UINT8 DeviceType;
559 UINT8 DeviceTypeInstance;
560 UINT16 SegmentGroupNum;
561 UINT8 BusNum;
562 UINT8 DevFuncNum;
563 } SMBIOS_TYPE41;
564
565 typedef struct {
566 SMBIOS_HEADER Hdr;
567 } SMBIOS_TYPE126;
568
569 typedef struct {
570 SMBIOS_HEADER Hdr;
571 } SMBIOS_TYPE127;
572
573 /*
574 Notes:
575 Among the following 42 type of structues for SMBIOS Stucture table,
576 There are only 11 Types(0,1,3,4,7,9,16,17,19,20,32) are required,
577 The other types is optional.
578 */
579 typedef union {
580 SMBIOS_HEADER *Hdr;
581 SMBIOS_TYPE0 *Type0;
582 SMBIOS_TYPE1 *Type1;
583 SMBIOS_TYPE2 *Type2;
584 SMBIOS_TYPE3 *Type3;
585 SMBIOS_TYPE4 *Type4;
586 SMBIOS_TYPE5 *Type5;
587 SMBIOS_TYPE6 *Type6;
588 SMBIOS_TYPE7 *Type7;
589 SMBIOS_TYPE8 *Type8;
590 SMBIOS_TYPE9 *Type9;
591 SMBIOS_TYPE10 *Type10;
592 SMBIOS_TYPE11 *Type11;
593 SMBIOS_TYPE12 *Type12;
594 SMBIOS_TYPE13 *Type13;
595 SMBIOS_TYPE14 *Type14;
596 SMBIOS_TYPE15 *Type15;
597 SMBIOS_TYPE16 *Type16;
598 SMBIOS_TYPE17 *Type17;
599 SMBIOS_TYPE18 *Type18;
600 SMBIOS_TYPE19 *Type19;
601 SMBIOS_TYPE20 *Type20;
602 SMBIOS_TYPE21 *Type21;
603 SMBIOS_TYPE22 *Type22;
604 SMBIOS_TYPE23 *Type23;
605 SMBIOS_TYPE24 *Type24;
606 SMBIOS_TYPE25 *Type25;
607 SMBIOS_TYPE26 *Type26;
608 SMBIOS_TYPE27 *Type27;
609 SMBIOS_TYPE28 *Type28;
610 SMBIOS_TYPE29 *Type29;
611 SMBIOS_TYPE30 *Type30;
612 SMBIOS_TYPE31 *Type31;
613 SMBIOS_TYPE32 *Type32;
614 SMBIOS_TYPE33 *Type33;
615 SMBIOS_TYPE34 *Type34;
616 SMBIOS_TYPE35 *Type35;
617 SMBIOS_TYPE36 *Type36;
618 SMBIOS_TYPE37 *Type37;
619 SMBIOS_TYPE38 *Type38;
620 SMBIOS_TYPE39 *Type39;
621 SMBIOS_TYPE40 *Type40;
622 SMBIOS_TYPE41 *Type41;
623 SMBIOS_TYPE126 *Type126;
624 SMBIOS_TYPE127 *Type127;
625 UINT8 *Raw;
626 } SMBIOS_STRUCTURE_POINTER;
627
628 #pragma pack()
629
630 /**
631 Return SMBIOS string given the string number.
632
633 @param[in] Smbios Pointer to SMBIOS structure.
634 @param[in] StringNumber String number to return. -1 is used to skip all strings and
635 point to the next SMBIOS structure.
636
637 @return Pointer to string, or pointer to next SMBIOS strcuture if StringNumber == -1
638 **/
639 CHAR8*
640 LibGetSmbiosString (
641 IN SMBIOS_STRUCTURE_POINTER *Smbios,
642 IN UINT16 StringNumber
643 );
644
645 #endif