]> git.proxmox.com Git - mirror_edk2.git/blob - MdePkg/Include/IndustryStandard/SmBios.h
NetworkPkg: INF/DEC file updates to EDK II packages
[mirror_edk2.git] / MdePkg / Include / IndustryStandard / SmBios.h
1 /** @file
2 Industry Standard Definitions of SMBIOS Table Specification v2.8.0.
3
4 Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>
5 This program and the accompanying materials are licensed and made available under
6 the terms and conditions of the BSD License that accompanies this distribution.
7 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 __SMBIOS_STANDARD_H__
16 #define __SMBIOS_STANDARD_H__
17
18 ///
19 /// Reference SMBIOS 2.6, chapter 3.1.2.
20 /// For v2.1 and later, handle values in the range 0FF00h to 0FFFFh are reserved for
21 /// use by this specification.
22 ///
23 #define SMBIOS_HANDLE_RESERVED_BEGIN 0xFF00
24
25 ///
26 /// Reference SMBIOS 2.7, chapter 6.1.2.
27 /// The UEFI Platform Initialization Specification reserves handle number FFFEh for its
28 /// EFI_SMBIOS_PROTOCOL.Add() function to mean "assign an unused handle number automatically."
29 /// This number is not used for any other purpose by the SMBIOS specification.
30 ///
31 #define SMBIOS_HANDLE_PI_RESERVED 0xFFFE
32
33 ///
34 /// Reference SMBIOS 2.6, chapter 3.1.3.
35 /// Each text string is limited to 64 significant characters due to system MIF limitations.
36 /// Reference SMBIOS 2.7, chapter 6.1.3.
37 /// It will have no limit on the length of each individual text string.
38 ///
39 #define SMBIOS_STRING_MAX_LENGTH 64
40
41 ///
42 /// Inactive type is added from SMBIOS 2.2. Reference SMBIOS 2.6, chapter 3.3.43.
43 /// Upper-level software that interprets the SMBIOS structure-table should bypass an
44 /// Inactive structure just like a structure type that the software does not recognize.
45 ///
46 #define SMBIOS_TYPE_INACTIVE 0x007E
47
48 ///
49 /// End-of-table type is added from SMBIOS 2.2. Reference SMBIOS 2.6, chapter 3.3.44.
50 /// The end-of-table indicator is used in the last physical structure in a table
51 ///
52 #define SMBIOS_TYPE_END_OF_TABLE 0x007F
53
54 ///
55 /// Smbios Table Entry Point Structure.
56 ///
57 #pragma pack(1)
58 typedef struct {
59 UINT8 AnchorString[4];
60 UINT8 EntryPointStructureChecksum;
61 UINT8 EntryPointLength;
62 UINT8 MajorVersion;
63 UINT8 MinorVersion;
64 UINT16 MaxStructureSize;
65 UINT8 EntryPointRevision;
66 UINT8 FormattedArea[5];
67 UINT8 IntermediateAnchorString[5];
68 UINT8 IntermediateChecksum;
69 UINT16 TableLength;
70 UINT32 TableAddress;
71 UINT16 NumberOfSmbiosStructures;
72 UINT8 SmbiosBcdRevision;
73 } SMBIOS_TABLE_ENTRY_POINT;
74
75 ///
76 /// The Smbios structure header.
77 ///
78 typedef struct {
79 UINT8 Type;
80 UINT8 Length;
81 UINT16 Handle;
82 } SMBIOS_STRUCTURE;
83
84 ///
85 /// String Number for a Null terminated string, 00h stands for no string available.
86 ///
87 typedef UINT8 SMBIOS_TABLE_STRING;
88
89 ///
90 /// BIOS Characteristics
91 /// Defines which functions the BIOS supports. PCI, PCMCIA, Flash, etc.
92 ///
93 typedef struct {
94 UINT32 Reserved :2; ///< Bits 0-1.
95 UINT32 Unknown :1;
96 UINT32 BiosCharacteristicsNotSupported :1;
97 UINT32 IsaIsSupported :1;
98 UINT32 McaIsSupported :1;
99 UINT32 EisaIsSupported :1;
100 UINT32 PciIsSupported :1;
101 UINT32 PcmciaIsSupported :1;
102 UINT32 PlugAndPlayIsSupported :1;
103 UINT32 ApmIsSupported :1;
104 UINT32 BiosIsUpgradable :1;
105 UINT32 BiosShadowingAllowed :1;
106 UINT32 VlVesaIsSupported :1;
107 UINT32 EscdSupportIsAvailable :1;
108 UINT32 BootFromCdIsSupported :1;
109 UINT32 SelectableBootIsSupported :1;
110 UINT32 RomBiosIsSocketed :1;
111 UINT32 BootFromPcmciaIsSupported :1;
112 UINT32 EDDSpecificationIsSupported :1;
113 UINT32 JapaneseNecFloppyIsSupported :1;
114 UINT32 JapaneseToshibaFloppyIsSupported :1;
115 UINT32 Floppy525_360IsSupported :1;
116 UINT32 Floppy525_12IsSupported :1;
117 UINT32 Floppy35_720IsSupported :1;
118 UINT32 Floppy35_288IsSupported :1;
119 UINT32 PrintScreenIsSupported :1;
120 UINT32 Keyboard8042IsSupported :1;
121 UINT32 SerialIsSupported :1;
122 UINT32 PrinterIsSupported :1;
123 UINT32 CgaMonoIsSupported :1;
124 UINT32 NecPc98 :1;
125 UINT32 ReservedForVendor :32; ///< Bits 32-63. Bits 32-47 reserved for BIOS vendor
126 ///< and bits 48-63 reserved for System Vendor.
127 } MISC_BIOS_CHARACTERISTICS;
128
129 ///
130 /// BIOS Characteristics Extension Byte 1.
131 /// This information, available for SMBIOS version 2.1 and later, appears at offset 12h
132 /// within the BIOS Information structure.
133 ///
134 typedef struct {
135 UINT8 AcpiIsSupported :1;
136 UINT8 UsbLegacyIsSupported :1;
137 UINT8 AgpIsSupported :1;
138 UINT8 I2OBootIsSupported :1;
139 UINT8 Ls120BootIsSupported :1;
140 UINT8 AtapiZipDriveBootIsSupported :1;
141 UINT8 Boot1394IsSupported :1;
142 UINT8 SmartBatteryIsSupported :1;
143 } MBCE_BIOS_RESERVED;
144
145 ///
146 /// BIOS Characteristics Extension Byte 2.
147 /// This information, available for SMBIOS version 2.3 and later, appears at offset 13h
148 /// within the BIOS Information structure.
149 ///
150 typedef struct {
151 UINT8 BiosBootSpecIsSupported :1;
152 UINT8 FunctionKeyNetworkBootIsSupported :1;
153 UINT8 TargetContentDistributionEnabled :1;
154 UINT8 UefiSpecificationSupported :1;
155 UINT8 VirtualMachineSupported :1;
156 UINT8 ExtensionByte2Reserved :3;
157 } MBCE_SYSTEM_RESERVED;
158
159 ///
160 /// BIOS Characteristics Extension Bytes.
161 ///
162 typedef struct {
163 MBCE_BIOS_RESERVED BiosReserved;
164 MBCE_SYSTEM_RESERVED SystemReserved;
165 } MISC_BIOS_CHARACTERISTICS_EXTENSION;
166
167 ///
168 /// BIOS Information (Type 0).
169 ///
170 typedef struct {
171 SMBIOS_STRUCTURE Hdr;
172 SMBIOS_TABLE_STRING Vendor;
173 SMBIOS_TABLE_STRING BiosVersion;
174 UINT16 BiosSegment;
175 SMBIOS_TABLE_STRING BiosReleaseDate;
176 UINT8 BiosSize;
177 MISC_BIOS_CHARACTERISTICS BiosCharacteristics;
178 UINT8 BIOSCharacteristicsExtensionBytes[2];
179 UINT8 SystemBiosMajorRelease;
180 UINT8 SystemBiosMinorRelease;
181 UINT8 EmbeddedControllerFirmwareMajorRelease;
182 UINT8 EmbeddedControllerFirmwareMinorRelease;
183 } SMBIOS_TABLE_TYPE0;
184
185 ///
186 /// System Wake-up Type.
187 ///
188 typedef enum {
189 SystemWakeupTypeReserved = 0x00,
190 SystemWakeupTypeOther = 0x01,
191 SystemWakeupTypeUnknown = 0x02,
192 SystemWakeupTypeApmTimer = 0x03,
193 SystemWakeupTypeModemRing = 0x04,
194 SystemWakeupTypeLanRemote = 0x05,
195 SystemWakeupTypePowerSwitch = 0x06,
196 SystemWakeupTypePciPme = 0x07,
197 SystemWakeupTypeAcPowerRestored = 0x08
198 } MISC_SYSTEM_WAKEUP_TYPE;
199
200 ///
201 /// System Information (Type 1).
202 ///
203 /// The information in this structure defines attributes of the overall system and is
204 /// intended to be associated with the Component ID group of the system's MIF.
205 /// An SMBIOS implementation is associated with a single system instance and contains
206 /// one and only one System Information (Type 1) structure.
207 ///
208 typedef struct {
209 SMBIOS_STRUCTURE Hdr;
210 SMBIOS_TABLE_STRING Manufacturer;
211 SMBIOS_TABLE_STRING ProductName;
212 SMBIOS_TABLE_STRING Version;
213 SMBIOS_TABLE_STRING SerialNumber;
214 GUID Uuid;
215 UINT8 WakeUpType; ///< The enumeration value from MISC_SYSTEM_WAKEUP_TYPE.
216 SMBIOS_TABLE_STRING SKUNumber;
217 SMBIOS_TABLE_STRING Family;
218 } SMBIOS_TABLE_TYPE1;
219
220 ///
221 /// Base Board - Feature Flags.
222 ///
223 typedef struct {
224 UINT8 Motherboard :1;
225 UINT8 RequiresDaughterCard :1;
226 UINT8 Removable :1;
227 UINT8 Replaceable :1;
228 UINT8 HotSwappable :1;
229 UINT8 Reserved :3;
230 } BASE_BOARD_FEATURE_FLAGS;
231
232 ///
233 /// Base Board - Board Type.
234 ///
235 typedef enum {
236 BaseBoardTypeUnknown = 0x1,
237 BaseBoardTypeOther = 0x2,
238 BaseBoardTypeServerBlade = 0x3,
239 BaseBoardTypeConnectivitySwitch = 0x4,
240 BaseBoardTypeSystemManagementModule = 0x5,
241 BaseBoardTypeProcessorModule = 0x6,
242 BaseBoardTypeIOModule = 0x7,
243 BaseBoardTypeMemoryModule = 0x8,
244 BaseBoardTypeDaughterBoard = 0x9,
245 BaseBoardTypeMotherBoard = 0xA,
246 BaseBoardTypeProcessorMemoryModule = 0xB,
247 BaseBoardTypeProcessorIOModule = 0xC,
248 BaseBoardTypeInterconnectBoard = 0xD
249 } BASE_BOARD_TYPE;
250
251 ///
252 /// Base Board (or Module) Information (Type 2).
253 ///
254 /// The information in this structure defines attributes of a system baseboard -
255 /// for example a motherboard, planar, or server blade or other standard system module.
256 ///
257 typedef struct {
258 SMBIOS_STRUCTURE Hdr;
259 SMBIOS_TABLE_STRING Manufacturer;
260 SMBIOS_TABLE_STRING ProductName;
261 SMBIOS_TABLE_STRING Version;
262 SMBIOS_TABLE_STRING SerialNumber;
263 SMBIOS_TABLE_STRING AssetTag;
264 BASE_BOARD_FEATURE_FLAGS FeatureFlag;
265 SMBIOS_TABLE_STRING LocationInChassis;
266 UINT16 ChassisHandle;
267 UINT8 BoardType; ///< The enumeration value from BASE_BOARD_TYPE.
268 UINT8 NumberOfContainedObjectHandles;
269 UINT16 ContainedObjectHandles[1];
270 } SMBIOS_TABLE_TYPE2;
271
272 ///
273 /// System Enclosure or Chassis Types
274 ///
275 typedef enum {
276 MiscChassisTypeOther = 0x01,
277 MiscChassisTypeUnknown = 0x02,
278 MiscChassisTypeDeskTop = 0x03,
279 MiscChassisTypeLowProfileDesktop = 0x04,
280 MiscChassisTypePizzaBox = 0x05,
281 MiscChassisTypeMiniTower = 0x06,
282 MiscChassisTypeTower = 0x07,
283 MiscChassisTypePortable = 0x08,
284 MiscChassisTypeLapTop = 0x09,
285 MiscChassisTypeNotebook = 0x0A,
286 MiscChassisTypeHandHeld = 0x0B,
287 MiscChassisTypeDockingStation = 0x0C,
288 MiscChassisTypeAllInOne = 0x0D,
289 MiscChassisTypeSubNotebook = 0x0E,
290 MiscChassisTypeSpaceSaving = 0x0F,
291 MiscChassisTypeLunchBox = 0x10,
292 MiscChassisTypeMainServerChassis = 0x11,
293 MiscChassisTypeExpansionChassis = 0x12,
294 MiscChassisTypeSubChassis = 0x13,
295 MiscChassisTypeBusExpansionChassis = 0x14,
296 MiscChassisTypePeripheralChassis = 0x15,
297 MiscChassisTypeRaidChassis = 0x16,
298 MiscChassisTypeRackMountChassis = 0x17,
299 MiscChassisTypeSealedCasePc = 0x18,
300 MiscChassisMultiSystemChassis = 0x19,
301 MiscChassisCompactPCI = 0x1A,
302 MiscChassisAdvancedTCA = 0x1B,
303 MiscChassisBlade = 0x1C,
304 MiscChassisBladeEnclosure = 0x1D
305 } MISC_CHASSIS_TYPE;
306
307 ///
308 /// System Enclosure or Chassis States .
309 ///
310 typedef enum {
311 ChassisStateOther = 0x01,
312 ChassisStateUnknown = 0x02,
313 ChassisStateSafe = 0x03,
314 ChassisStateWarning = 0x04,
315 ChassisStateCritical = 0x05,
316 ChassisStateNonRecoverable = 0x06
317 } MISC_CHASSIS_STATE;
318
319 ///
320 /// System Enclosure or Chassis Security Status.
321 ///
322 typedef enum {
323 ChassisSecurityStatusOther = 0x01,
324 ChassisSecurityStatusUnknown = 0x02,
325 ChassisSecurityStatusNone = 0x03,
326 ChassisSecurityStatusExternalInterfaceLockedOut = 0x04,
327 ChassisSecurityStatusExternalInterfaceLockedEnabled = 0x05
328 } MISC_CHASSIS_SECURITY_STATE;
329
330 ///
331 /// Contained Element record
332 ///
333 typedef struct {
334 UINT8 ContainedElementType;
335 UINT8 ContainedElementMinimum;
336 UINT8 ContainedElementMaximum;
337 } CONTAINED_ELEMENT;
338
339
340 ///
341 /// System Enclosure or Chassis (Type 3).
342 ///
343 /// The information in this structure defines attributes of the system's mechanical enclosure(s).
344 /// For example, if a system included a separate enclosure for its peripheral devices,
345 /// two structures would be returned: one for the main, system enclosure and the second for
346 /// the peripheral device enclosure. The additions to this structure in v2.1 of this specification
347 /// support the population of the CIM_Chassis class.
348 ///
349 typedef struct {
350 SMBIOS_STRUCTURE Hdr;
351 SMBIOS_TABLE_STRING Manufacturer;
352 UINT8 Type;
353 SMBIOS_TABLE_STRING Version;
354 SMBIOS_TABLE_STRING SerialNumber;
355 SMBIOS_TABLE_STRING AssetTag;
356 UINT8 BootupState; ///< The enumeration value from MISC_CHASSIS_STATE.
357 UINT8 PowerSupplyState; ///< The enumeration value from MISC_CHASSIS_STATE.
358 UINT8 ThermalState; ///< The enumeration value from MISC_CHASSIS_STATE.
359 UINT8 SecurityStatus; ///< The enumeration value from MISC_CHASSIS_SECURITY_STATE.
360 UINT8 OemDefined[4];
361 UINT8 Height;
362 UINT8 NumberofPowerCords;
363 UINT8 ContainedElementCount;
364 UINT8 ContainedElementRecordLength;
365 CONTAINED_ELEMENT ContainedElements[1];
366 } SMBIOS_TABLE_TYPE3;
367
368 ///
369 /// Processor Information - Processor Type.
370 ///
371 typedef enum {
372 ProcessorOther = 0x01,
373 ProcessorUnknown = 0x02,
374 CentralProcessor = 0x03,
375 MathProcessor = 0x04,
376 DspProcessor = 0x05,
377 VideoProcessor = 0x06
378 } PROCESSOR_TYPE_DATA;
379
380 ///
381 /// Processor Information - Processor Family.
382 ///
383 typedef enum {
384 ProcessorFamilyOther = 0x01,
385 ProcessorFamilyUnknown = 0x02,
386 ProcessorFamily8086 = 0x03,
387 ProcessorFamily80286 = 0x04,
388 ProcessorFamilyIntel386 = 0x05,
389 ProcessorFamilyIntel486 = 0x06,
390 ProcessorFamily8087 = 0x07,
391 ProcessorFamily80287 = 0x08,
392 ProcessorFamily80387 = 0x09,
393 ProcessorFamily80487 = 0x0A,
394 ProcessorFamilyPentium = 0x0B,
395 ProcessorFamilyPentiumPro = 0x0C,
396 ProcessorFamilyPentiumII = 0x0D,
397 ProcessorFamilyPentiumMMX = 0x0E,
398 ProcessorFamilyCeleron = 0x0F,
399 ProcessorFamilyPentiumIIXeon = 0x10,
400 ProcessorFamilyPentiumIII = 0x11,
401 ProcessorFamilyM1 = 0x12,
402 ProcessorFamilyM2 = 0x13,
403 ProcessorFamilyIntelCeleronM = 0x14,
404 ProcessorFamilyIntelPentium4Ht = 0x15,
405 ProcessorFamilyAmdDuron = 0x18,
406 ProcessorFamilyK5 = 0x19,
407 ProcessorFamilyK6 = 0x1A,
408 ProcessorFamilyK6_2 = 0x1B,
409 ProcessorFamilyK6_3 = 0x1C,
410 ProcessorFamilyAmdAthlon = 0x1D,
411 ProcessorFamilyAmd29000 = 0x1E,
412 ProcessorFamilyK6_2Plus = 0x1F,
413 ProcessorFamilyPowerPC = 0x20,
414 ProcessorFamilyPowerPC601 = 0x21,
415 ProcessorFamilyPowerPC603 = 0x22,
416 ProcessorFamilyPowerPC603Plus = 0x23,
417 ProcessorFamilyPowerPC604 = 0x24,
418 ProcessorFamilyPowerPC620 = 0x25,
419 ProcessorFamilyPowerPCx704 = 0x26,
420 ProcessorFamilyPowerPC750 = 0x27,
421 ProcessorFamilyIntelCoreDuo = 0x28,
422 ProcessorFamilyIntelCoreDuoMobile = 0x29,
423 ProcessorFamilyIntelCoreSoloMobile = 0x2A,
424 ProcessorFamilyIntelAtom = 0x2B,
425 ProcessorFamilyAlpha = 0x30,
426 ProcessorFamilyAlpha21064 = 0x31,
427 ProcessorFamilyAlpha21066 = 0x32,
428 ProcessorFamilyAlpha21164 = 0x33,
429 ProcessorFamilyAlpha21164PC = 0x34,
430 ProcessorFamilyAlpha21164a = 0x35,
431 ProcessorFamilyAlpha21264 = 0x36,
432 ProcessorFamilyAlpha21364 = 0x37,
433 ProcessorFamilyAmdTurionIIUltraDualCoreMobileM = 0x38,
434 ProcessorFamilyAmdTurionIIDualCoreMobileM = 0x39,
435 ProcessorFamilyAmdAthlonIIDualCoreM = 0x3A,
436 ProcessorFamilyAmdOpteron6100Series = 0x3B,
437 ProcessorFamilyAmdOpteron4100Series = 0x3C,
438 ProcessorFamilyAmdOpteron6200Series = 0x3D,
439 ProcessorFamilyAmdOpteron4200Series = 0x3E,
440 ProcessorFamilyAmdFxSeries = 0x3F,
441 ProcessorFamilyMips = 0x40,
442 ProcessorFamilyMIPSR4000 = 0x41,
443 ProcessorFamilyMIPSR4200 = 0x42,
444 ProcessorFamilyMIPSR4400 = 0x43,
445 ProcessorFamilyMIPSR4600 = 0x44,
446 ProcessorFamilyMIPSR10000 = 0x45,
447 ProcessorFamilyAmdCSeries = 0x46,
448 ProcessorFamilyAmdESeries = 0x47,
449 ProcessorFamilyAmdASeries = 0x48, ///< SMBIOS spec 2.8.0 updated the name
450 ProcessorFamilyAmdGSeries = 0x49,
451 ProcessorFamilyAmdZSeries = 0x4A,
452 ProcessorFamilyAmdRSeries = 0x4B,
453 ProcessorFamilyAmdOpteron4300 = 0x4C,
454 ProcessorFamilyAmdOpteron6300 = 0x4D,
455 ProcessorFamilyAmdOpteron3300 = 0x4E,
456 ProcessorFamilyAmdFireProSeries = 0x4F,
457 ProcessorFamilySparc = 0x50,
458 ProcessorFamilySuperSparc = 0x51,
459 ProcessorFamilymicroSparcII = 0x52,
460 ProcessorFamilymicroSparcIIep = 0x53,
461 ProcessorFamilyUltraSparc = 0x54,
462 ProcessorFamilyUltraSparcII = 0x55,
463 ProcessorFamilyUltraSparcIii = 0x56,
464 ProcessorFamilyUltraSparcIII = 0x57,
465 ProcessorFamilyUltraSparcIIIi = 0x58,
466 ProcessorFamily68040 = 0x60,
467 ProcessorFamily68xxx = 0x61,
468 ProcessorFamily68000 = 0x62,
469 ProcessorFamily68010 = 0x63,
470 ProcessorFamily68020 = 0x64,
471 ProcessorFamily68030 = 0x65,
472 ProcessorFamilyHobbit = 0x70,
473 ProcessorFamilyCrusoeTM5000 = 0x78,
474 ProcessorFamilyCrusoeTM3000 = 0x79,
475 ProcessorFamilyEfficeonTM8000 = 0x7A,
476 ProcessorFamilyWeitek = 0x80,
477 ProcessorFamilyItanium = 0x82,
478 ProcessorFamilyAmdAthlon64 = 0x83,
479 ProcessorFamilyAmdOpteron = 0x84,
480 ProcessorFamilyAmdSempron = 0x85,
481 ProcessorFamilyAmdTurion64Mobile = 0x86,
482 ProcessorFamilyDualCoreAmdOpteron = 0x87,
483 ProcessorFamilyAmdAthlon64X2DualCore = 0x88,
484 ProcessorFamilyAmdTurion64X2Mobile = 0x89,
485 ProcessorFamilyQuadCoreAmdOpteron = 0x8A,
486 ProcessorFamilyThirdGenerationAmdOpteron = 0x8B,
487 ProcessorFamilyAmdPhenomFxQuadCore = 0x8C,
488 ProcessorFamilyAmdPhenomX4QuadCore = 0x8D,
489 ProcessorFamilyAmdPhenomX2DualCore = 0x8E,
490 ProcessorFamilyAmdAthlonX2DualCore = 0x8F,
491 ProcessorFamilyPARISC = 0x90,
492 ProcessorFamilyPaRisc8500 = 0x91,
493 ProcessorFamilyPaRisc8000 = 0x92,
494 ProcessorFamilyPaRisc7300LC = 0x93,
495 ProcessorFamilyPaRisc7200 = 0x94,
496 ProcessorFamilyPaRisc7100LC = 0x95,
497 ProcessorFamilyPaRisc7100 = 0x96,
498 ProcessorFamilyV30 = 0xA0,
499 ProcessorFamilyQuadCoreIntelXeon3200Series = 0xA1,
500 ProcessorFamilyDualCoreIntelXeon3000Series = 0xA2,
501 ProcessorFamilyQuadCoreIntelXeon5300Series = 0xA3,
502 ProcessorFamilyDualCoreIntelXeon5100Series = 0xA4,
503 ProcessorFamilyDualCoreIntelXeon5000Series = 0xA5,
504 ProcessorFamilyDualCoreIntelXeonLV = 0xA6,
505 ProcessorFamilyDualCoreIntelXeonULV = 0xA7,
506 ProcessorFamilyDualCoreIntelXeon7100Series = 0xA8,
507 ProcessorFamilyQuadCoreIntelXeon5400Series = 0xA9,
508 ProcessorFamilyQuadCoreIntelXeon = 0xAA,
509 ProcessorFamilyDualCoreIntelXeon5200Series = 0xAB,
510 ProcessorFamilyDualCoreIntelXeon7200Series = 0xAC,
511 ProcessorFamilyQuadCoreIntelXeon7300Series = 0xAD,
512 ProcessorFamilyQuadCoreIntelXeon7400Series = 0xAE,
513 ProcessorFamilyMultiCoreIntelXeon7400Series = 0xAF,
514 ProcessorFamilyPentiumIIIXeon = 0xB0,
515 ProcessorFamilyPentiumIIISpeedStep = 0xB1,
516 ProcessorFamilyPentium4 = 0xB2,
517 ProcessorFamilyIntelXeon = 0xB3,
518 ProcessorFamilyAS400 = 0xB4,
519 ProcessorFamilyIntelXeonMP = 0xB5,
520 ProcessorFamilyAMDAthlonXP = 0xB6,
521 ProcessorFamilyAMDAthlonMP = 0xB7,
522 ProcessorFamilyIntelItanium2 = 0xB8,
523 ProcessorFamilyIntelPentiumM = 0xB9,
524 ProcessorFamilyIntelCeleronD = 0xBA,
525 ProcessorFamilyIntelPentiumD = 0xBB,
526 ProcessorFamilyIntelPentiumEx = 0xBC,
527 ProcessorFamilyIntelCoreSolo = 0xBD, ///< SMBIOS spec 2.6 updated this value
528 ProcessorFamilyReserved = 0xBE,
529 ProcessorFamilyIntelCore2 = 0xBF,
530 ProcessorFamilyIntelCore2Solo = 0xC0,
531 ProcessorFamilyIntelCore2Extreme = 0xC1,
532 ProcessorFamilyIntelCore2Quad = 0xC2,
533 ProcessorFamilyIntelCore2ExtremeMobile = 0xC3,
534 ProcessorFamilyIntelCore2DuoMobile = 0xC4,
535 ProcessorFamilyIntelCore2SoloMobile = 0xC5,
536 ProcessorFamilyIntelCoreI7 = 0xC6,
537 ProcessorFamilyDualCoreIntelCeleron = 0xC7,
538 ProcessorFamilyIBM390 = 0xC8,
539 ProcessorFamilyG4 = 0xC9,
540 ProcessorFamilyG5 = 0xCA,
541 ProcessorFamilyG6 = 0xCB,
542 ProcessorFamilyzArchitecture = 0xCC,
543 ProcessorFamilyIntelCoreI5 = 0xCD,
544 ProcessorFamilyIntelCoreI3 = 0xCE,
545 ProcessorFamilyViaC7M = 0xD2,
546 ProcessorFamilyViaC7D = 0xD3,
547 ProcessorFamilyViaC7 = 0xD4,
548 ProcessorFamilyViaEden = 0xD5,
549 ProcessorFamilyMultiCoreIntelXeon = 0xD6,
550 ProcessorFamilyDualCoreIntelXeon3Series = 0xD7,
551 ProcessorFamilyQuadCoreIntelXeon3Series = 0xD8,
552 ProcessorFamilyViaNano = 0xD9,
553 ProcessorFamilyDualCoreIntelXeon5Series = 0xDA,
554 ProcessorFamilyQuadCoreIntelXeon5Series = 0xDB,
555 ProcessorFamilyDualCoreIntelXeon7Series = 0xDD,
556 ProcessorFamilyQuadCoreIntelXeon7Series = 0xDE,
557 ProcessorFamilyMultiCoreIntelXeon7Series = 0xDF,
558 ProcessorFamilyMultiCoreIntelXeon3400Series = 0xE0,
559 ProcessorFamilyAmdOpteron3000Series = 0xE4,
560 ProcessorFamilyAmdSempronII = 0xE5,
561 ProcessorFamilyEmbeddedAmdOpteronQuadCore = 0xE6,
562 ProcessorFamilyAmdPhenomTripleCore = 0xE7,
563 ProcessorFamilyAmdTurionUltraDualCoreMobile = 0xE8,
564 ProcessorFamilyAmdTurionDualCoreMobile = 0xE9,
565 ProcessorFamilyAmdAthlonDualCore = 0xEA,
566 ProcessorFamilyAmdSempronSI = 0xEB,
567 ProcessorFamilyAmdPhenomII = 0xEC,
568 ProcessorFamilyAmdAthlonII = 0xED,
569 ProcessorFamilySixCoreAmdOpteron = 0xEE,
570 ProcessorFamilyAmdSempronM = 0xEF,
571 ProcessorFamilyi860 = 0xFA,
572 ProcessorFamilyi960 = 0xFB,
573 ProcessorFamilyIndicatorFamily2 = 0xFE,
574 ProcessorFamilyReserved1 = 0xFF
575 } PROCESSOR_FAMILY_DATA;
576
577 ///
578 /// Processor Information2 - Processor Family2.
579 ///
580 typedef enum {
581 ProcessorFamilySH3 = 0x0104,
582 ProcessorFamilySH4 = 0x0105,
583 ProcessorFamilyARM = 0x0118,
584 ProcessorFamilyStrongARM = 0x0119,
585 ProcessorFamily6x86 = 0x012C,
586 ProcessorFamilyMediaGX = 0x012D,
587 ProcessorFamilyMII = 0x012E,
588 ProcessorFamilyWinChip = 0x0140,
589 ProcessorFamilyDSP = 0x015E,
590 ProcessorFamilyVideoProcessor = 0x01F4
591 } PROCESSOR_FAMILY2_DATA;
592
593 ///
594 /// Processor Information - Voltage.
595 ///
596 typedef struct {
597 UINT8 ProcessorVoltageCapability5V :1;
598 UINT8 ProcessorVoltageCapability3_3V :1;
599 UINT8 ProcessorVoltageCapability2_9V :1;
600 UINT8 ProcessorVoltageCapabilityReserved :1; ///< Bit 3, must be zero.
601 UINT8 ProcessorVoltageReserved :3; ///< Bits 4-6, must be zero.
602 UINT8 ProcessorVoltageIndicateLegacy :1;
603 } PROCESSOR_VOLTAGE;
604
605 ///
606 /// Processor Information - Processor Upgrade.
607 ///
608 typedef enum {
609 ProcessorUpgradeOther = 0x01,
610 ProcessorUpgradeUnknown = 0x02,
611 ProcessorUpgradeDaughterBoard = 0x03,
612 ProcessorUpgradeZIFSocket = 0x04,
613 ProcessorUpgradePiggyBack = 0x05, ///< Replaceable.
614 ProcessorUpgradeNone = 0x06,
615 ProcessorUpgradeLIFSocket = 0x07,
616 ProcessorUpgradeSlot1 = 0x08,
617 ProcessorUpgradeSlot2 = 0x09,
618 ProcessorUpgrade370PinSocket = 0x0A,
619 ProcessorUpgradeSlotA = 0x0B,
620 ProcessorUpgradeSlotM = 0x0C,
621 ProcessorUpgradeSocket423 = 0x0D,
622 ProcessorUpgradeSocketA = 0x0E, ///< Socket 462.
623 ProcessorUpgradeSocket478 = 0x0F,
624 ProcessorUpgradeSocket754 = 0x10,
625 ProcessorUpgradeSocket940 = 0x11,
626 ProcessorUpgradeSocket939 = 0x12,
627 ProcessorUpgradeSocketmPGA604 = 0x13,
628 ProcessorUpgradeSocketLGA771 = 0x14,
629 ProcessorUpgradeSocketLGA775 = 0x15,
630 ProcessorUpgradeSocketS1 = 0x16,
631 ProcessorUpgradeAM2 = 0x17,
632 ProcessorUpgradeF1207 = 0x18,
633 ProcessorSocketLGA1366 = 0x19,
634 ProcessorUpgradeSocketG34 = 0x1A,
635 ProcessorUpgradeSocketAM3 = 0x1B,
636 ProcessorUpgradeSocketC32 = 0x1C,
637 ProcessorUpgradeSocketLGA1156 = 0x1D,
638 ProcessorUpgradeSocketLGA1567 = 0x1E,
639 ProcessorUpgradeSocketPGA988A = 0x1F,
640 ProcessorUpgradeSocketBGA1288 = 0x20,
641 ProcessorUpgradeSocketrPGA988B = 0x21,
642 ProcessorUpgradeSocketBGA1023 = 0x22,
643 ProcessorUpgradeSocketBGA1224 = 0x23,
644 ProcessorUpgradeSocketLGA1155 = 0x24, ///< SMBIOS spec 2.8.0 updated the name
645 ProcessorUpgradeSocketLGA1356 = 0x25,
646 ProcessorUpgradeSocketLGA2011 = 0x26,
647 ProcessorUpgradeSocketFS1 = 0x27,
648 ProcessorUpgradeSocketFS2 = 0x28,
649 ProcessorUpgradeSocketFM1 = 0x29,
650 ProcessorUpgradeSocketFM2 = 0x2A,
651 ProcessorUpgradeSocketLGA2011_3 = 0x2B,
652 ProcessorUpgradeSocketLGA1356_3 = 0x2C
653 } PROCESSOR_UPGRADE;
654
655 ///
656 /// Processor ID Field Description
657 ///
658 typedef struct {
659 UINT32 ProcessorSteppingId:4;
660 UINT32 ProcessorModel: 4;
661 UINT32 ProcessorFamily: 4;
662 UINT32 ProcessorType: 2;
663 UINT32 ProcessorReserved1: 2;
664 UINT32 ProcessorXModel: 4;
665 UINT32 ProcessorXFamily: 8;
666 UINT32 ProcessorReserved2: 4;
667 } PROCESSOR_SIGNATURE;
668
669 typedef struct {
670 UINT32 ProcessorFpu :1;
671 UINT32 ProcessorVme :1;
672 UINT32 ProcessorDe :1;
673 UINT32 ProcessorPse :1;
674 UINT32 ProcessorTsc :1;
675 UINT32 ProcessorMsr :1;
676 UINT32 ProcessorPae :1;
677 UINT32 ProcessorMce :1;
678 UINT32 ProcessorCx8 :1;
679 UINT32 ProcessorApic :1;
680 UINT32 ProcessorReserved1 :1;
681 UINT32 ProcessorSep :1;
682 UINT32 ProcessorMtrr :1;
683 UINT32 ProcessorPge :1;
684 UINT32 ProcessorMca :1;
685 UINT32 ProcessorCmov :1;
686 UINT32 ProcessorPat :1;
687 UINT32 ProcessorPse36 :1;
688 UINT32 ProcessorPsn :1;
689 UINT32 ProcessorClfsh :1;
690 UINT32 ProcessorReserved2 :1;
691 UINT32 ProcessorDs :1;
692 UINT32 ProcessorAcpi :1;
693 UINT32 ProcessorMmx :1;
694 UINT32 ProcessorFxsr :1;
695 UINT32 ProcessorSse :1;
696 UINT32 ProcessorSse2 :1;
697 UINT32 ProcessorSs :1;
698 UINT32 ProcessorReserved3 :1;
699 UINT32 ProcessorTm :1;
700 UINT32 ProcessorReserved4 :2;
701 } PROCESSOR_FEATURE_FLAGS;
702
703 typedef struct {
704 PROCESSOR_SIGNATURE Signature;
705 PROCESSOR_FEATURE_FLAGS FeatureFlags;
706 } PROCESSOR_ID_DATA;
707
708 ///
709 /// Processor Information (Type 4).
710 ///
711 /// The information in this structure defines the attributes of a single processor;
712 /// a separate structure instance is provided for each system processor socket/slot.
713 /// For example, a system with an IntelDX2 processor would have a single
714 /// structure instance, while a system with an IntelSX2 processor would have a structure
715 /// to describe the main CPU, and a second structure to describe the 80487 co-processor.
716 ///
717 typedef struct {
718 SMBIOS_STRUCTURE Hdr;
719 SMBIOS_TABLE_STRING Socket;
720 UINT8 ProcessorType; ///< The enumeration value from PROCESSOR_TYPE_DATA.
721 UINT8 ProcessorFamily; ///< The enumeration value from PROCESSOR_FAMILY_DATA.
722 SMBIOS_TABLE_STRING ProcessorManufacture;
723 PROCESSOR_ID_DATA ProcessorId;
724 SMBIOS_TABLE_STRING ProcessorVersion;
725 PROCESSOR_VOLTAGE Voltage;
726 UINT16 ExternalClock;
727 UINT16 MaxSpeed;
728 UINT16 CurrentSpeed;
729 UINT8 Status;
730 UINT8 ProcessorUpgrade; ///< The enumeration value from PROCESSOR_UPGRADE.
731 UINT16 L1CacheHandle;
732 UINT16 L2CacheHandle;
733 UINT16 L3CacheHandle;
734 SMBIOS_TABLE_STRING SerialNumber;
735 SMBIOS_TABLE_STRING AssetTag;
736 SMBIOS_TABLE_STRING PartNumber;
737 //
738 // Add for smbios 2.5
739 //
740 UINT8 CoreCount;
741 UINT8 EnabledCoreCount;
742 UINT8 ThreadCount;
743 UINT16 ProcessorCharacteristics;
744 //
745 // Add for smbios 2.6
746 //
747 UINT16 ProcessorFamily2;
748 } SMBIOS_TABLE_TYPE4;
749
750 ///
751 /// Memory Controller Error Detecting Method.
752 ///
753 typedef enum {
754 ErrorDetectingMethodOther = 0x01,
755 ErrorDetectingMethodUnknown = 0x02,
756 ErrorDetectingMethodNone = 0x03,
757 ErrorDetectingMethodParity = 0x04,
758 ErrorDetectingMethod32Ecc = 0x05,
759 ErrorDetectingMethod64Ecc = 0x06,
760 ErrorDetectingMethod128Ecc = 0x07,
761 ErrorDetectingMethodCrc = 0x08
762 } MEMORY_ERROR_DETECT_METHOD;
763
764 ///
765 /// Memory Controller Error Correcting Capability.
766 ///
767 typedef struct {
768 UINT8 Other :1;
769 UINT8 Unknown :1;
770 UINT8 None :1;
771 UINT8 SingleBitErrorCorrect :1;
772 UINT8 DoubleBitErrorCorrect :1;
773 UINT8 ErrorScrubbing :1;
774 UINT8 Reserved :2;
775 } MEMORY_ERROR_CORRECT_CAPABILITY;
776
777 ///
778 /// Memory Controller Information - Interleave Support.
779 ///
780 typedef enum {
781 MemoryInterleaveOther = 0x01,
782 MemoryInterleaveUnknown = 0x02,
783 MemoryInterleaveOneWay = 0x03,
784 MemoryInterleaveTwoWay = 0x04,
785 MemoryInterleaveFourWay = 0x05,
786 MemoryInterleaveEightWay = 0x06,
787 MemoryInterleaveSixteenWay = 0x07
788 } MEMORY_SUPPORT_INTERLEAVE_TYPE;
789
790 ///
791 /// Memory Controller Information - Memory Speeds.
792 ///
793 typedef struct {
794 UINT16 Other :1;
795 UINT16 Unknown :1;
796 UINT16 SeventyNs:1;
797 UINT16 SixtyNs :1;
798 UINT16 FiftyNs :1;
799 UINT16 Reserved :11;
800 } MEMORY_SPEED_TYPE;
801
802 ///
803 /// Memory Controller Information (Type 5, Obsolete).
804 ///
805 /// The information in this structure defines the attributes of the system's memory controller(s)
806 /// and the supported attributes of any memory-modules present in the sockets controlled by
807 /// this controller.
808 /// Note: This structure, and its companion Memory Module Information (Type 6, Obsolete),
809 /// are obsolete starting with version 2.1 of this specification. The Physical Memory Array (Type 16)
810 /// and Memory Device (Type 17) structures should be used instead. BIOS providers might
811 /// choose to implement both memory description types to allow existing DMI browsers
812 /// to properly display the system's memory attributes.
813 ///
814 typedef struct {
815 SMBIOS_STRUCTURE Hdr;
816 UINT8 ErrDetectMethod; ///< The enumeration value from MEMORY_ERROR_DETECT_METHOD.
817 MEMORY_ERROR_CORRECT_CAPABILITY ErrCorrectCapability;
818 UINT8 SupportInterleave; ///< The enumeration value from MEMORY_SUPPORT_INTERLEAVE_TYPE.
819 UINT8 CurrentInterleave; ///< The enumeration value from MEMORY_SUPPORT_INTERLEAVE_TYPE .
820 UINT8 MaxMemoryModuleSize;
821 MEMORY_SPEED_TYPE SupportSpeed;
822 UINT16 SupportMemoryType;
823 UINT8 MemoryModuleVoltage;
824 UINT8 AssociatedMemorySlotNum;
825 UINT16 MemoryModuleConfigHandles[1];
826 } SMBIOS_TABLE_TYPE5;
827
828 ///
829 /// Memory Module Information - Memory Types
830 ///
831 typedef struct {
832 UINT16 Other :1;
833 UINT16 Unknown :1;
834 UINT16 Standard :1;
835 UINT16 FastPageMode:1;
836 UINT16 Edo :1;
837 UINT16 Parity :1;
838 UINT16 Ecc :1;
839 UINT16 Simm :1;
840 UINT16 Dimm :1;
841 UINT16 BurstEdo :1;
842 UINT16 Sdram :1;
843 UINT16 Reserved :5;
844 } MEMORY_CURRENT_TYPE;
845
846 ///
847 /// Memory Module Information - Memory Size.
848 ///
849 typedef struct {
850 UINT8 InstalledOrEnabledSize :7; ///< Size (n), where 2**n is the size in MB.
851 UINT8 SingleOrDoubleBank :1;
852 } MEMORY_INSTALLED_ENABLED_SIZE;
853
854 ///
855 /// Memory Module Information (Type 6, Obsolete)
856 ///
857 /// One Memory Module Information structure is included for each memory-module socket
858 /// in the system. The structure describes the speed, type, size, and error status
859 /// of each system memory module. The supported attributes of each module are described
860 /// by the "owning" Memory Controller Information structure.
861 /// Note: This structure, and its companion Memory Controller Information (Type 5, Obsolete),
862 /// are obsolete starting with version 2.1 of this specification. The Physical Memory Array (Type 16)
863 /// and Memory Device (Type 17) structures should be used instead.
864 ///
865 typedef struct {
866 SMBIOS_STRUCTURE Hdr;
867 SMBIOS_TABLE_STRING SocketDesignation;
868 UINT8 BankConnections;
869 UINT8 CurrentSpeed;
870 MEMORY_CURRENT_TYPE CurrentMemoryType;
871 MEMORY_INSTALLED_ENABLED_SIZE InstalledSize;
872 MEMORY_INSTALLED_ENABLED_SIZE EnabledSize;
873 UINT8 ErrorStatus;
874 } SMBIOS_TABLE_TYPE6;
875
876 ///
877 /// Cache Information - SRAM Type.
878 ///
879 typedef struct {
880 UINT16 Other :1;
881 UINT16 Unknown :1;
882 UINT16 NonBurst :1;
883 UINT16 Burst :1;
884 UINT16 PipelineBurst :1;
885 UINT16 Synchronous :1;
886 UINT16 Asynchronous :1;
887 UINT16 Reserved :9;
888 } CACHE_SRAM_TYPE_DATA;
889
890 ///
891 /// Cache Information - Error Correction Type.
892 ///
893 typedef enum {
894 CacheErrorOther = 0x01,
895 CacheErrorUnknown = 0x02,
896 CacheErrorNone = 0x03,
897 CacheErrorParity = 0x04,
898 CacheErrorSingleBit = 0x05, ///< ECC
899 CacheErrorMultiBit = 0x06 ///< ECC
900 } CACHE_ERROR_TYPE_DATA;
901
902 ///
903 /// Cache Information - System Cache Type.
904 ///
905 typedef enum {
906 CacheTypeOther = 0x01,
907 CacheTypeUnknown = 0x02,
908 CacheTypeInstruction = 0x03,
909 CacheTypeData = 0x04,
910 CacheTypeUnified = 0x05
911 } CACHE_TYPE_DATA;
912
913 ///
914 /// Cache Information - Associativity.
915 ///
916 typedef enum {
917 CacheAssociativityOther = 0x01,
918 CacheAssociativityUnknown = 0x02,
919 CacheAssociativityDirectMapped = 0x03,
920 CacheAssociativity2Way = 0x04,
921 CacheAssociativity4Way = 0x05,
922 CacheAssociativityFully = 0x06,
923 CacheAssociativity8Way = 0x07,
924 CacheAssociativity16Way = 0x08,
925 CacheAssociativity12Way = 0x09,
926 CacheAssociativity24Way = 0x0A,
927 CacheAssociativity32Way = 0x0B,
928 CacheAssociativity48Way = 0x0C,
929 CacheAssociativity64Way = 0x0D,
930 CacheAssociativity20Way = 0x0E
931 } CACHE_ASSOCIATIVITY_DATA;
932
933 ///
934 /// Cache Information (Type 7).
935 ///
936 /// The information in this structure defines the attributes of CPU cache device in the system.
937 /// One structure is specified for each such device, whether the device is internal to
938 /// or external to the CPU module. Cache modules can be associated with a processor structure
939 /// in one or two ways, depending on the SMBIOS version.
940 ///
941 typedef struct {
942 SMBIOS_STRUCTURE Hdr;
943 SMBIOS_TABLE_STRING SocketDesignation;
944 UINT16 CacheConfiguration;
945 UINT16 MaximumCacheSize;
946 UINT16 InstalledSize;
947 CACHE_SRAM_TYPE_DATA SupportedSRAMType;
948 CACHE_SRAM_TYPE_DATA CurrentSRAMType;
949 UINT8 CacheSpeed;
950 UINT8 ErrorCorrectionType; ///< The enumeration value from CACHE_ERROR_TYPE_DATA.
951 UINT8 SystemCacheType; ///< The enumeration value from CACHE_TYPE_DATA.
952 UINT8 Associativity; ///< The enumeration value from CACHE_ASSOCIATIVITY_DATA.
953 } SMBIOS_TABLE_TYPE7;
954
955 ///
956 /// Port Connector Information - Connector Types.
957 ///
958 typedef enum {
959 PortConnectorTypeNone = 0x00,
960 PortConnectorTypeCentronics = 0x01,
961 PortConnectorTypeMiniCentronics = 0x02,
962 PortConnectorTypeProprietary = 0x03,
963 PortConnectorTypeDB25Male = 0x04,
964 PortConnectorTypeDB25Female = 0x05,
965 PortConnectorTypeDB15Male = 0x06,
966 PortConnectorTypeDB15Female = 0x07,
967 PortConnectorTypeDB9Male = 0x08,
968 PortConnectorTypeDB9Female = 0x09,
969 PortConnectorTypeRJ11 = 0x0A,
970 PortConnectorTypeRJ45 = 0x0B,
971 PortConnectorType50PinMiniScsi = 0x0C,
972 PortConnectorTypeMiniDin = 0x0D,
973 PortConnectorTypeMicroDin = 0x0E,
974 PortConnectorTypePS2 = 0x0F,
975 PortConnectorTypeInfrared = 0x10,
976 PortConnectorTypeHpHil = 0x11,
977 PortConnectorTypeUsb = 0x12,
978 PortConnectorTypeSsaScsi = 0x13,
979 PortConnectorTypeCircularDin8Male = 0x14,
980 PortConnectorTypeCircularDin8Female = 0x15,
981 PortConnectorTypeOnboardIde = 0x16,
982 PortConnectorTypeOnboardFloppy = 0x17,
983 PortConnectorType9PinDualInline = 0x18,
984 PortConnectorType25PinDualInline = 0x19,
985 PortConnectorType50PinDualInline = 0x1A,
986 PortConnectorType68PinDualInline = 0x1B,
987 PortConnectorTypeOnboardSoundInput = 0x1C,
988 PortConnectorTypeMiniCentronicsType14 = 0x1D,
989 PortConnectorTypeMiniCentronicsType26 = 0x1E,
990 PortConnectorTypeHeadPhoneMiniJack = 0x1F,
991 PortConnectorTypeBNC = 0x20,
992 PortConnectorType1394 = 0x21,
993 PortConnectorTypeSasSata = 0x22,
994 PortConnectorTypePC98 = 0xA0,
995 PortConnectorTypePC98Hireso = 0xA1,
996 PortConnectorTypePCH98 = 0xA2,
997 PortConnectorTypePC98Note = 0xA3,
998 PortConnectorTypePC98Full = 0xA4,
999 PortConnectorTypeOther = 0xFF
1000 } MISC_PORT_CONNECTOR_TYPE;
1001
1002 ///
1003 /// Port Connector Information - Port Types
1004 ///
1005 typedef enum {
1006 PortTypeNone = 0x00,
1007 PortTypeParallelXtAtCompatible = 0x01,
1008 PortTypeParallelPortPs2 = 0x02,
1009 PortTypeParallelPortEcp = 0x03,
1010 PortTypeParallelPortEpp = 0x04,
1011 PortTypeParallelPortEcpEpp = 0x05,
1012 PortTypeSerialXtAtCompatible = 0x06,
1013 PortTypeSerial16450Compatible = 0x07,
1014 PortTypeSerial16550Compatible = 0x08,
1015 PortTypeSerial16550ACompatible = 0x09,
1016 PortTypeScsi = 0x0A,
1017 PortTypeMidi = 0x0B,
1018 PortTypeJoyStick = 0x0C,
1019 PortTypeKeyboard = 0x0D,
1020 PortTypeMouse = 0x0E,
1021 PortTypeSsaScsi = 0x0F,
1022 PortTypeUsb = 0x10,
1023 PortTypeFireWire = 0x11,
1024 PortTypePcmciaTypeI = 0x12,
1025 PortTypePcmciaTypeII = 0x13,
1026 PortTypePcmciaTypeIII = 0x14,
1027 PortTypeCardBus = 0x15,
1028 PortTypeAccessBusPort = 0x16,
1029 PortTypeScsiII = 0x17,
1030 PortTypeScsiWide = 0x18,
1031 PortTypePC98 = 0x19,
1032 PortTypePC98Hireso = 0x1A,
1033 PortTypePCH98 = 0x1B,
1034 PortTypeVideoPort = 0x1C,
1035 PortTypeAudioPort = 0x1D,
1036 PortTypeModemPort = 0x1E,
1037 PortTypeNetworkPort = 0x1F,
1038 PortType8251Compatible = 0xA0,
1039 PortType8251FifoCompatible = 0xA1,
1040 PortTypeOther = 0xFF
1041 } MISC_PORT_TYPE;
1042
1043 ///
1044 /// Port Connector Information (Type 8).
1045 ///
1046 /// The information in this structure defines the attributes of a system port connector,
1047 /// e.g. parallel, serial, keyboard, or mouse ports. The port's type and connector information
1048 /// are provided. One structure is present for each port provided by the system.
1049 ///
1050 typedef struct {
1051 SMBIOS_STRUCTURE Hdr;
1052 SMBIOS_TABLE_STRING InternalReferenceDesignator;
1053 UINT8 InternalConnectorType; ///< The enumeration value from MISC_PORT_CONNECTOR_TYPE.
1054 SMBIOS_TABLE_STRING ExternalReferenceDesignator;
1055 UINT8 ExternalConnectorType; ///< The enumeration value from MISC_PORT_CONNECTOR_TYPE.
1056 UINT8 PortType; ///< The enumeration value from MISC_PORT_TYPE.
1057 } SMBIOS_TABLE_TYPE8;
1058
1059 ///
1060 /// System Slots - Slot Type
1061 ///
1062 typedef enum {
1063 SlotTypeOther = 0x01,
1064 SlotTypeUnknown = 0x02,
1065 SlotTypeIsa = 0x03,
1066 SlotTypeMca = 0x04,
1067 SlotTypeEisa = 0x05,
1068 SlotTypePci = 0x06,
1069 SlotTypePcmcia = 0x07,
1070 SlotTypeVlVesa = 0x08,
1071 SlotTypeProprietary = 0x09,
1072 SlotTypeProcessorCardSlot = 0x0A,
1073 SlotTypeProprietaryMemoryCardSlot = 0x0B,
1074 SlotTypeIORiserCardSlot = 0x0C,
1075 SlotTypeNuBus = 0x0D,
1076 SlotTypePci66MhzCapable = 0x0E,
1077 SlotTypeAgp = 0x0F,
1078 SlotTypeApg2X = 0x10,
1079 SlotTypeAgp4X = 0x11,
1080 SlotTypePciX = 0x12,
1081 SlotTypeAgp4x = 0x13,
1082 SlotTypePC98C20 = 0xA0,
1083 SlotTypePC98C24 = 0xA1,
1084 SlotTypePC98E = 0xA2,
1085 SlotTypePC98LocalBus = 0xA3,
1086 SlotTypePC98Card = 0xA4,
1087 SlotTypePciExpress = 0xA5,
1088 SlotTypePciExpressX1 = 0xA6,
1089 SlotTypePciExpressX2 = 0xA7,
1090 SlotTypePciExpressX4 = 0xA8,
1091 SlotTypePciExpressX8 = 0xA9,
1092 SlotTypePciExpressX16 = 0xAA,
1093 SlotTypePciExpressGen2 = 0xAB,
1094 SlotTypePciExpressGen2X1 = 0xAC,
1095 SlotTypePciExpressGen2X2 = 0xAD,
1096 SlotTypePciExpressGen2X4 = 0xAE,
1097 SlotTypePciExpressGen2X8 = 0xAF,
1098 SlotTypePciExpressGen2X16 = 0xB0,
1099 SlotTypePciExpressGen3 = 0xB1,
1100 SlotTypePciExpressGen3X1 = 0xB2,
1101 SlotTypePciExpressGen3X2 = 0xB3,
1102 SlotTypePciExpressGen3X4 = 0xB4,
1103 SlotTypePciExpressGen3X8 = 0xB5,
1104 SlotTypePciExpressGen3X16 = 0xB6
1105 } MISC_SLOT_TYPE;
1106
1107 ///
1108 /// System Slots - Slot Data Bus Width.
1109 ///
1110 typedef enum {
1111 SlotDataBusWidthOther = 0x01,
1112 SlotDataBusWidthUnknown = 0x02,
1113 SlotDataBusWidth8Bit = 0x03,
1114 SlotDataBusWidth16Bit = 0x04,
1115 SlotDataBusWidth32Bit = 0x05,
1116 SlotDataBusWidth64Bit = 0x06,
1117 SlotDataBusWidth128Bit = 0x07,
1118 SlotDataBusWidth1X = 0x08, ///< Or X1
1119 SlotDataBusWidth2X = 0x09, ///< Or X2
1120 SlotDataBusWidth4X = 0x0A, ///< Or X4
1121 SlotDataBusWidth8X = 0x0B, ///< Or X8
1122 SlotDataBusWidth12X = 0x0C, ///< Or X12
1123 SlotDataBusWidth16X = 0x0D, ///< Or X16
1124 SlotDataBusWidth32X = 0x0E ///< Or X32
1125 } MISC_SLOT_DATA_BUS_WIDTH;
1126
1127 ///
1128 /// System Slots - Current Usage.
1129 ///
1130 typedef enum {
1131 SlotUsageOther = 0x01,
1132 SlotUsageUnknown = 0x02,
1133 SlotUsageAvailable = 0x03,
1134 SlotUsageInUse = 0x04
1135 } MISC_SLOT_USAGE;
1136
1137 ///
1138 /// System Slots - Slot Length.
1139 ///
1140 typedef enum {
1141 SlotLengthOther = 0x01,
1142 SlotLengthUnknown = 0x02,
1143 SlotLengthShort = 0x03,
1144 SlotLengthLong = 0x04
1145 } MISC_SLOT_LENGTH;
1146
1147 ///
1148 /// System Slots - Slot Characteristics 1.
1149 ///
1150 typedef struct {
1151 UINT8 CharacteristicsUnknown :1;
1152 UINT8 Provides50Volts :1;
1153 UINT8 Provides33Volts :1;
1154 UINT8 SharedSlot :1;
1155 UINT8 PcCard16Supported :1;
1156 UINT8 CardBusSupported :1;
1157 UINT8 ZoomVideoSupported :1;
1158 UINT8 ModemRingResumeSupported:1;
1159 } MISC_SLOT_CHARACTERISTICS1;
1160 ///
1161 /// System Slots - Slot Characteristics 2.
1162 ///
1163 typedef struct {
1164 UINT8 PmeSignalSupported :1;
1165 UINT8 HotPlugDevicesSupported :1;
1166 UINT8 SmbusSignalSupported :1;
1167 UINT8 Reserved :5; ///< Set to 0.
1168 } MISC_SLOT_CHARACTERISTICS2;
1169
1170 ///
1171 /// System Slots (Type 9)
1172 ///
1173 /// The information in this structure defines the attributes of a system slot.
1174 /// One structure is provided for each slot in the system.
1175 ///
1176 ///
1177 typedef struct {
1178 SMBIOS_STRUCTURE Hdr;
1179 SMBIOS_TABLE_STRING SlotDesignation;
1180 UINT8 SlotType; ///< The enumeration value from MISC_SLOT_TYPE.
1181 UINT8 SlotDataBusWidth; ///< The enumeration value from MISC_SLOT_DATA_BUS_WIDTH.
1182 UINT8 CurrentUsage; ///< The enumeration value from MISC_SLOT_USAGE.
1183 UINT8 SlotLength; ///< The enumeration value from MISC_SLOT_LENGTH.
1184 UINT16 SlotID;
1185 MISC_SLOT_CHARACTERISTICS1 SlotCharacteristics1;
1186 MISC_SLOT_CHARACTERISTICS2 SlotCharacteristics2;
1187 //
1188 // Add for smbios 2.6
1189 //
1190 UINT16 SegmentGroupNum;
1191 UINT8 BusNum;
1192 UINT8 DevFuncNum;
1193 } SMBIOS_TABLE_TYPE9;
1194
1195 ///
1196 /// On Board Devices Information - Device Types.
1197 ///
1198 typedef enum {
1199 OnBoardDeviceTypeOther = 0x01,
1200 OnBoardDeviceTypeUnknown = 0x02,
1201 OnBoardDeviceTypeVideo = 0x03,
1202 OnBoardDeviceTypeScsiController = 0x04,
1203 OnBoardDeviceTypeEthernet = 0x05,
1204 OnBoardDeviceTypeTokenRing = 0x06,
1205 OnBoardDeviceTypeSound = 0x07,
1206 OnBoardDeviceTypePATAController = 0x08,
1207 OnBoardDeviceTypeSATAController = 0x09,
1208 OnBoardDeviceTypeSASController = 0x0A
1209 } MISC_ONBOARD_DEVICE_TYPE;
1210
1211 ///
1212 /// Device Item Entry
1213 ///
1214 typedef struct {
1215 UINT8 DeviceType; ///< Bit [6:0] - enumeration type of device from MISC_ONBOARD_DEVICE_TYPE.
1216 ///< Bit 7 - 1 : device enabled, 0 : device disabled.
1217 SMBIOS_TABLE_STRING DescriptionString;
1218 } DEVICE_STRUCT;
1219
1220 ///
1221 /// On Board Devices Information (Type 10, obsolete).
1222 ///
1223 /// Note: This structure is obsolete starting with version 2.6 specification; the Onboard Devices Extended
1224 /// Information (Type 41) structure should be used instead . BIOS providers can choose to implement both
1225 /// types to allow existing SMBIOS browsers to properly display the system's onboard devices information.
1226 /// The information in this structure defines the attributes of devices that are onboard (soldered onto)
1227 /// a system element, usually the baseboard. In general, an entry in this table implies that the BIOS
1228 /// has some level of control over the enabling of the associated device for use by the system.
1229 ///
1230 typedef struct {
1231 SMBIOS_STRUCTURE Hdr;
1232 DEVICE_STRUCT Device[1];
1233 } SMBIOS_TABLE_TYPE10;
1234
1235 ///
1236 /// OEM Strings (Type 11).
1237 /// This structure contains free form strings defined by the OEM. Examples of this are:
1238 /// Part Numbers for Reference Documents for the system, contact information for the manufacturer, etc.
1239 ///
1240 typedef struct {
1241 SMBIOS_STRUCTURE Hdr;
1242 UINT8 StringCount;
1243 } SMBIOS_TABLE_TYPE11;
1244
1245 ///
1246 /// System Configuration Options (Type 12).
1247 ///
1248 /// This structure contains information required to configure the base board's Jumpers and Switches.
1249 ///
1250 typedef struct {
1251 SMBIOS_STRUCTURE Hdr;
1252 UINT8 StringCount;
1253 } SMBIOS_TABLE_TYPE12;
1254
1255
1256 ///
1257 /// BIOS Language Information (Type 13).
1258 ///
1259 /// The information in this structure defines the installable language attributes of the BIOS.
1260 ///
1261 typedef struct {
1262 SMBIOS_STRUCTURE Hdr;
1263 UINT8 InstallableLanguages;
1264 UINT8 Flags;
1265 UINT8 Reserved[15];
1266 SMBIOS_TABLE_STRING CurrentLanguages;
1267 } SMBIOS_TABLE_TYPE13;
1268
1269 ///
1270 /// Group Item Entry
1271 ///
1272 typedef struct {
1273 UINT8 ItemType;
1274 UINT16 ItemHandle;
1275 } GROUP_STRUCT;
1276
1277 ///
1278 /// Group Associations (Type 14).
1279 ///
1280 /// The Group Associations structure is provided for OEMs who want to specify
1281 /// the arrangement or hierarchy of certain components (including other Group Associations)
1282 /// within the system.
1283 ///
1284 typedef struct {
1285 SMBIOS_STRUCTURE Hdr;
1286 SMBIOS_TABLE_STRING GroupName;
1287 GROUP_STRUCT Group[1];
1288 } SMBIOS_TABLE_TYPE14;
1289
1290 ///
1291 /// System Event Log - Event Log Types.
1292 ///
1293 typedef enum {
1294 EventLogTypeReserved = 0x00,
1295 EventLogTypeSingleBitECC = 0x01,
1296 EventLogTypeMultiBitECC = 0x02,
1297 EventLogTypeParityMemErr = 0x03,
1298 EventLogTypeBusTimeOut = 0x04,
1299 EventLogTypeIOChannelCheck = 0x05,
1300 EventLogTypeSoftwareNMI = 0x06,
1301 EventLogTypePOSTMemResize = 0x07,
1302 EventLogTypePOSTErr = 0x08,
1303 EventLogTypePCIParityErr = 0x09,
1304 EventLogTypePCISystemErr = 0x0A,
1305 EventLogTypeCPUFailure = 0x0B,
1306 EventLogTypeEISATimeOut = 0x0C,
1307 EventLogTypeMemLogDisabled = 0x0D,
1308 EventLogTypeLoggingDisabled = 0x0E,
1309 EventLogTypeSysLimitExce = 0x10,
1310 EventLogTypeAsyncHWTimer = 0x11,
1311 EventLogTypeSysConfigInfo = 0x12,
1312 EventLogTypeHDInfo = 0x13,
1313 EventLogTypeSysReconfig = 0x14,
1314 EventLogTypeUncorrectCPUErr = 0x15,
1315 EventLogTypeAreaResetAndClr = 0x16,
1316 EventLogTypeSystemBoot = 0x17,
1317 EventLogTypeUnused = 0x18, ///< 0x18 - 0x7F
1318 EventLogTypeAvailForSys = 0x80, ///< 0x80 - 0xFE
1319 EventLogTypeEndOfLog = 0xFF
1320 } EVENT_LOG_TYPE_DATA;
1321
1322 ///
1323 /// System Event Log - Variable Data Format Types.
1324 ///
1325 typedef enum {
1326 EventLogVariableNone = 0x00,
1327 EventLogVariableHandle = 0x01,
1328 EventLogVariableMutilEvent = 0x02,
1329 EventLogVariableMutilEventHandle = 0x03,
1330 EventLogVariablePOSTResultBitmap = 0x04,
1331 EventLogVariableSysManagementType = 0x05,
1332 EventLogVariableMutliEventSysManagmentType = 0x06,
1333 EventLogVariableUnused = 0x07,
1334 EventLogVariableOEMAssigned = 0x80
1335 } EVENT_LOG_VARIABLE_DATA;
1336
1337 ///
1338 /// Event Log Type Descriptors
1339 ///
1340 typedef struct {
1341 UINT8 LogType; ///< The enumeration value from EVENT_LOG_TYPE_DATA.
1342 UINT8 DataFormatType;
1343 } EVENT_LOG_TYPE;
1344
1345 ///
1346 /// System Event Log (Type 15).
1347 ///
1348 /// The presence of this structure within the SMBIOS data returned for a system indicates
1349 /// that the system supports an event log. An event log is a fixed-length area within a
1350 /// non-volatile storage element, starting with a fixed-length (and vendor-specific) header
1351 /// record, followed by one or more variable-length log records.
1352 ///
1353 typedef struct {
1354 SMBIOS_STRUCTURE Hdr;
1355 UINT16 LogAreaLength;
1356 UINT16 LogHeaderStartOffset;
1357 UINT16 LogDataStartOffset;
1358 UINT8 AccessMethod;
1359 UINT8 LogStatus;
1360 UINT32 LogChangeToken;
1361 UINT32 AccessMethodAddress;
1362 UINT8 LogHeaderFormat;
1363 UINT8 NumberOfSupportedLogTypeDescriptors;
1364 UINT8 LengthOfLogTypeDescriptor;
1365 EVENT_LOG_TYPE EventLogTypeDescriptors[1];
1366 } SMBIOS_TABLE_TYPE15;
1367
1368 ///
1369 /// Physical Memory Array - Location.
1370 ///
1371 typedef enum {
1372 MemoryArrayLocationOther = 0x01,
1373 MemoryArrayLocationUnknown = 0x02,
1374 MemoryArrayLocationSystemBoard = 0x03,
1375 MemoryArrayLocationIsaAddonCard = 0x04,
1376 MemoryArrayLocationEisaAddonCard = 0x05,
1377 MemoryArrayLocationPciAddonCard = 0x06,
1378 MemoryArrayLocationMcaAddonCard = 0x07,
1379 MemoryArrayLocationPcmciaAddonCard = 0x08,
1380 MemoryArrayLocationProprietaryAddonCard = 0x09,
1381 MemoryArrayLocationNuBus = 0x0A,
1382 MemoryArrayLocationPc98C20AddonCard = 0xA0,
1383 MemoryArrayLocationPc98C24AddonCard = 0xA1,
1384 MemoryArrayLocationPc98EAddonCard = 0xA2,
1385 MemoryArrayLocationPc98LocalBusAddonCard = 0xA3
1386 } MEMORY_ARRAY_LOCATION;
1387
1388 ///
1389 /// Physical Memory Array - Use.
1390 ///
1391 typedef enum {
1392 MemoryArrayUseOther = 0x01,
1393 MemoryArrayUseUnknown = 0x02,
1394 MemoryArrayUseSystemMemory = 0x03,
1395 MemoryArrayUseVideoMemory = 0x04,
1396 MemoryArrayUseFlashMemory = 0x05,
1397 MemoryArrayUseNonVolatileRam = 0x06,
1398 MemoryArrayUseCacheMemory = 0x07
1399 } MEMORY_ARRAY_USE;
1400
1401 ///
1402 /// Physical Memory Array - Error Correction Types.
1403 ///
1404 typedef enum {
1405 MemoryErrorCorrectionOther = 0x01,
1406 MemoryErrorCorrectionUnknown = 0x02,
1407 MemoryErrorCorrectionNone = 0x03,
1408 MemoryErrorCorrectionParity = 0x04,
1409 MemoryErrorCorrectionSingleBitEcc = 0x05,
1410 MemoryErrorCorrectionMultiBitEcc = 0x06,
1411 MemoryErrorCorrectionCrc = 0x07
1412 } MEMORY_ERROR_CORRECTION;
1413
1414 ///
1415 /// Physical Memory Array (Type 16).
1416 ///
1417 /// This structure describes a collection of memory devices that operate
1418 /// together to form a memory address space.
1419 ///
1420 typedef struct {
1421 SMBIOS_STRUCTURE Hdr;
1422 UINT8 Location; ///< The enumeration value from MEMORY_ARRAY_LOCATION.
1423 UINT8 Use; ///< The enumeration value from MEMORY_ARRAY_USE.
1424 UINT8 MemoryErrorCorrection; ///< The enumeration value from MEMORY_ERROR_CORRECTION.
1425 UINT32 MaximumCapacity;
1426 UINT16 MemoryErrorInformationHandle;
1427 UINT16 NumberOfMemoryDevices;
1428 //
1429 // Add for smbios 2.7
1430 //
1431 UINT64 ExtendedMaximumCapacity;
1432 } SMBIOS_TABLE_TYPE16;
1433
1434 ///
1435 /// Memory Device - Form Factor.
1436 ///
1437 typedef enum {
1438 MemoryFormFactorOther = 0x01,
1439 MemoryFormFactorUnknown = 0x02,
1440 MemoryFormFactorSimm = 0x03,
1441 MemoryFormFactorSip = 0x04,
1442 MemoryFormFactorChip = 0x05,
1443 MemoryFormFactorDip = 0x06,
1444 MemoryFormFactorZip = 0x07,
1445 MemoryFormFactorProprietaryCard = 0x08,
1446 MemoryFormFactorDimm = 0x09,
1447 MemoryFormFactorTsop = 0x0A,
1448 MemoryFormFactorRowOfChips = 0x0B,
1449 MemoryFormFactorRimm = 0x0C,
1450 MemoryFormFactorSodimm = 0x0D,
1451 MemoryFormFactorSrimm = 0x0E,
1452 MemoryFormFactorFbDimm = 0x0F
1453 } MEMORY_FORM_FACTOR;
1454
1455 ///
1456 /// Memory Device - Type
1457 ///
1458 typedef enum {
1459 MemoryTypeOther = 0x01,
1460 MemoryTypeUnknown = 0x02,
1461 MemoryTypeDram = 0x03,
1462 MemoryTypeEdram = 0x04,
1463 MemoryTypeVram = 0x05,
1464 MemoryTypeSram = 0x06,
1465 MemoryTypeRam = 0x07,
1466 MemoryTypeRom = 0x08,
1467 MemoryTypeFlash = 0x09,
1468 MemoryTypeEeprom = 0x0A,
1469 MemoryTypeFeprom = 0x0B,
1470 MemoryTypeEprom = 0x0C,
1471 MemoryTypeCdram = 0x0D,
1472 MemoryType3Dram = 0x0E,
1473 MemoryTypeSdram = 0x0F,
1474 MemoryTypeSgram = 0x10,
1475 MemoryTypeRdram = 0x11,
1476 MemoryTypeDdr = 0x12,
1477 MemoryTypeDdr2 = 0x13,
1478 MemoryTypeDdr2FbDimm = 0x14,
1479 MemoryTypeDdr3 = 0x18,
1480 MemoryTypeFbd2 = 0x19
1481 } MEMORY_DEVICE_TYPE;
1482
1483 typedef struct {
1484 UINT16 Reserved :1;
1485 UINT16 Other :1;
1486 UINT16 Unknown :1;
1487 UINT16 FastPaged :1;
1488 UINT16 StaticColumn :1;
1489 UINT16 PseudoStatic :1;
1490 UINT16 Rambus :1;
1491 UINT16 Synchronous :1;
1492 UINT16 Cmos :1;
1493 UINT16 Edo :1;
1494 UINT16 WindowDram :1;
1495 UINT16 CacheDram :1;
1496 UINT16 Nonvolatile :1;
1497 UINT16 Registered :1;
1498 UINT16 Unbuffered :1;
1499 UINT16 LrDimm :1;
1500 } MEMORY_DEVICE_TYPE_DETAIL;
1501
1502 ///
1503 /// Memory Device (Type 17).
1504 ///
1505 /// This structure describes a single memory device that is part of
1506 /// a larger Physical Memory Array (Type 16).
1507 /// Note: If a system includes memory-device sockets, the SMBIOS implementation
1508 /// includes a Memory Device structure instance for each slot, whether or not the
1509 /// socket is currently populated.
1510 ///
1511 typedef struct {
1512 SMBIOS_STRUCTURE Hdr;
1513 UINT16 MemoryArrayHandle;
1514 UINT16 MemoryErrorInformationHandle;
1515 UINT16 TotalWidth;
1516 UINT16 DataWidth;
1517 UINT16 Size;
1518 UINT8 FormFactor; ///< The enumeration value from MEMORY_FORM_FACTOR.
1519 UINT8 DeviceSet;
1520 SMBIOS_TABLE_STRING DeviceLocator;
1521 SMBIOS_TABLE_STRING BankLocator;
1522 UINT8 MemoryType; ///< The enumeration value from MEMORY_DEVICE_TYPE.
1523 MEMORY_DEVICE_TYPE_DETAIL TypeDetail;
1524 UINT16 Speed;
1525 SMBIOS_TABLE_STRING Manufacturer;
1526 SMBIOS_TABLE_STRING SerialNumber;
1527 SMBIOS_TABLE_STRING AssetTag;
1528 SMBIOS_TABLE_STRING PartNumber;
1529 //
1530 // Add for smbios 2.6
1531 //
1532 UINT8 Attributes;
1533 //
1534 // Add for smbios 2.7
1535 //
1536 UINT32 ExtendedSize;
1537 UINT16 ConfiguredMemoryClockSpeed;
1538 //
1539 // Add for smbios 2.8.0
1540 //
1541 UINT16 MinimumVoltage;
1542 UINT16 MaximumVoltage;
1543 UINT16 ConfiguredVoltage;
1544 } SMBIOS_TABLE_TYPE17;
1545
1546 ///
1547 /// 32-bit Memory Error Information - Error Type.
1548 ///
1549 typedef enum {
1550 MemoryErrorOther = 0x01,
1551 MemoryErrorUnknown = 0x02,
1552 MemoryErrorOk = 0x03,
1553 MemoryErrorBadRead = 0x04,
1554 MemoryErrorParity = 0x05,
1555 MemoryErrorSigleBit = 0x06,
1556 MemoryErrorDoubleBit = 0x07,
1557 MemoryErrorMultiBit = 0x08,
1558 MemoryErrorNibble = 0x09,
1559 MemoryErrorChecksum = 0x0A,
1560 MemoryErrorCrc = 0x0B,
1561 MemoryErrorCorrectSingleBit = 0x0C,
1562 MemoryErrorCorrected = 0x0D,
1563 MemoryErrorUnCorrectable = 0x0E
1564 } MEMORY_ERROR_TYPE;
1565
1566 ///
1567 /// 32-bit Memory Error Information - Error Granularity.
1568 ///
1569 typedef enum {
1570 MemoryGranularityOther = 0x01,
1571 MemoryGranularityOtherUnknown = 0x02,
1572 MemoryGranularityDeviceLevel = 0x03,
1573 MemoryGranularityMemPartitionLevel = 0x04
1574 } MEMORY_ERROR_GRANULARITY;
1575
1576 ///
1577 /// 32-bit Memory Error Information - Error Operation.
1578 ///
1579 typedef enum {
1580 MemoryErrorOperationOther = 0x01,
1581 MemoryErrorOperationUnknown = 0x02,
1582 MemoryErrorOperationRead = 0x03,
1583 MemoryErrorOperationWrite = 0x04,
1584 MemoryErrorOperationPartialWrite = 0x05
1585 } MEMORY_ERROR_OPERATION;
1586
1587 ///
1588 /// 32-bit Memory Error Information (Type 18).
1589 ///
1590 /// This structure identifies the specifics of an error that might be detected
1591 /// within a Physical Memory Array.
1592 ///
1593 typedef struct {
1594 SMBIOS_STRUCTURE Hdr;
1595 UINT8 ErrorType; ///< The enumeration value from MEMORY_ERROR_TYPE.
1596 UINT8 ErrorGranularity; ///< The enumeration value from MEMORY_ERROR_GRANULARITY.
1597 UINT8 ErrorOperation; ///< The enumeration value from MEMORY_ERROR_OPERATION.
1598 UINT32 VendorSyndrome;
1599 UINT32 MemoryArrayErrorAddress;
1600 UINT32 DeviceErrorAddress;
1601 UINT32 ErrorResolution;
1602 } SMBIOS_TABLE_TYPE18;
1603
1604 ///
1605 /// Memory Array Mapped Address (Type 19).
1606 ///
1607 /// This structure provides the address mapping for a Physical Memory Array.
1608 /// One structure is present for each contiguous address range described.
1609 ///
1610 typedef struct {
1611 SMBIOS_STRUCTURE Hdr;
1612 UINT32 StartingAddress;
1613 UINT32 EndingAddress;
1614 UINT16 MemoryArrayHandle;
1615 UINT8 PartitionWidth;
1616 //
1617 // Add for smbios 2.7
1618 //
1619 UINT64 ExtendedStartingAddress;
1620 UINT64 ExtendedEndingAddress;
1621 } SMBIOS_TABLE_TYPE19;
1622
1623 ///
1624 /// Memory Device Mapped Address (Type 20).
1625 ///
1626 /// This structure maps memory address space usually to a device-level granularity.
1627 /// One structure is present for each contiguous address range described.
1628 ///
1629 typedef struct {
1630 SMBIOS_STRUCTURE Hdr;
1631 UINT32 StartingAddress;
1632 UINT32 EndingAddress;
1633 UINT16 MemoryDeviceHandle;
1634 UINT16 MemoryArrayMappedAddressHandle;
1635 UINT8 PartitionRowPosition;
1636 UINT8 InterleavePosition;
1637 UINT8 InterleavedDataDepth;
1638 //
1639 // Add for smbios 2.7
1640 //
1641 UINT64 ExtendedStartingAddress;
1642 UINT64 ExtendedEndingAddress;
1643 } SMBIOS_TABLE_TYPE20;
1644
1645 ///
1646 /// Built-in Pointing Device - Type
1647 ///
1648 typedef enum {
1649 PointingDeviceTypeOther = 0x01,
1650 PointingDeviceTypeUnknown = 0x02,
1651 PointingDeviceTypeMouse = 0x03,
1652 PointingDeviceTypeTrackBall = 0x04,
1653 PointingDeviceTypeTrackPoint = 0x05,
1654 PointingDeviceTypeGlidePoint = 0x06,
1655 PointingDeviceTouchPad = 0x07,
1656 PointingDeviceTouchScreen = 0x08,
1657 PointingDeviceOpticalSensor = 0x09
1658 } BUILTIN_POINTING_DEVICE_TYPE;
1659
1660 ///
1661 /// Built-in Pointing Device - Interface.
1662 ///
1663 typedef enum {
1664 PointingDeviceInterfaceOther = 0x01,
1665 PointingDeviceInterfaceUnknown = 0x02,
1666 PointingDeviceInterfaceSerial = 0x03,
1667 PointingDeviceInterfacePs2 = 0x04,
1668 PointingDeviceInterfaceInfrared = 0x05,
1669 PointingDeviceInterfaceHpHil = 0x06,
1670 PointingDeviceInterfaceBusMouse = 0x07,
1671 PointingDeviceInterfaceADB = 0x08,
1672 PointingDeviceInterfaceBusMouseDB9 = 0xA0,
1673 PointingDeviceInterfaceBusMouseMicroDin = 0xA1,
1674 PointingDeviceInterfaceUsb = 0xA2
1675 } BUILTIN_POINTING_DEVICE_INTERFACE;
1676
1677 ///
1678 /// Built-in Pointing Device (Type 21).
1679 ///
1680 /// This structure describes the attributes of the built-in pointing device for the
1681 /// system. The presence of this structure does not imply that the built-in
1682 /// pointing device is active for the system's use!
1683 ///
1684 typedef struct {
1685 SMBIOS_STRUCTURE Hdr;
1686 UINT8 Type; ///< The enumeration value from BUILTIN_POINTING_DEVICE_TYPE.
1687 UINT8 Interface; ///< The enumeration value from BUILTIN_POINTING_DEVICE_INTERFACE.
1688 UINT8 NumberOfButtons;
1689 } SMBIOS_TABLE_TYPE21;
1690
1691 ///
1692 /// Portable Battery - Device Chemistry
1693 ///
1694 typedef enum {
1695 PortableBatteryDeviceChemistryOther = 0x01,
1696 PortableBatteryDeviceChemistryUnknown = 0x02,
1697 PortableBatteryDeviceChemistryLeadAcid = 0x03,
1698 PortableBatteryDeviceChemistryNickelCadmium = 0x04,
1699 PortableBatteryDeviceChemistryNickelMetalHydride = 0x05,
1700 PortableBatteryDeviceChemistryLithiumIon = 0x06,
1701 PortableBatteryDeviceChemistryZincAir = 0x07,
1702 PortableBatteryDeviceChemistryLithiumPolymer = 0x08
1703 } PORTABLE_BATTERY_DEVICE_CHEMISTRY;
1704
1705 ///
1706 /// Portable Battery (Type 22).
1707 ///
1708 /// This structure describes the attributes of the portable battery(s) for the system.
1709 /// The structure contains the static attributes for the group. Each structure describes
1710 /// a single battery pack's attributes.
1711 ///
1712 typedef struct {
1713 SMBIOS_STRUCTURE Hdr;
1714 SMBIOS_TABLE_STRING Location;
1715 SMBIOS_TABLE_STRING Manufacturer;
1716 SMBIOS_TABLE_STRING ManufactureDate;
1717 SMBIOS_TABLE_STRING SerialNumber;
1718 SMBIOS_TABLE_STRING DeviceName;
1719 UINT8 DeviceChemistry; ///< The enumeration value from PORTABLE_BATTERY_DEVICE_CHEMISTRY.
1720 UINT16 DeviceCapacity;
1721 UINT16 DesignVoltage;
1722 SMBIOS_TABLE_STRING SBDSVersionNumber;
1723 UINT8 MaximumErrorInBatteryData;
1724 UINT16 SBDSSerialNumber;
1725 UINT16 SBDSManufactureDate;
1726 SMBIOS_TABLE_STRING SBDSDeviceChemistry;
1727 UINT8 DesignCapacityMultiplier;
1728 UINT32 OEMSpecific;
1729 } SMBIOS_TABLE_TYPE22;
1730
1731 ///
1732 /// System Reset (Type 23)
1733 ///
1734 /// This structure describes whether Automatic System Reset functions enabled (Status).
1735 /// If the system has a watchdog Timer and the timer is not reset (Timer Reset)
1736 /// before the Interval elapses, an automatic system reset will occur. The system will re-boot
1737 /// according to the Boot Option. This function may repeat until the Limit is reached, at which time
1738 /// the system will re-boot according to the Boot Option at Limit.
1739 ///
1740 typedef struct {
1741 SMBIOS_STRUCTURE Hdr;
1742 UINT8 Capabilities;
1743 UINT16 ResetCount;
1744 UINT16 ResetLimit;
1745 UINT16 TimerInterval;
1746 UINT16 Timeout;
1747 } SMBIOS_TABLE_TYPE23;
1748
1749 ///
1750 /// Hardware Security (Type 24).
1751 ///
1752 /// This structure describes the system-wide hardware security settings.
1753 ///
1754 typedef struct {
1755 SMBIOS_STRUCTURE Hdr;
1756 UINT8 HardwareSecuritySettings;
1757 } SMBIOS_TABLE_TYPE24;
1758
1759 ///
1760 /// System Power Controls (Type 25).
1761 ///
1762 /// This structure describes the attributes for controlling the main power supply to the system.
1763 /// Software that interprets this structure uses the month, day, hour, minute, and second values
1764 /// to determine the number of seconds until the next power-on of the system. The presence of
1765 /// this structure implies that a timed power-on facility is available for the system.
1766 ///
1767 typedef struct {
1768 SMBIOS_STRUCTURE Hdr;
1769 UINT8 NextScheduledPowerOnMonth;
1770 UINT8 NextScheduledPowerOnDayOfMonth;
1771 UINT8 NextScheduledPowerOnHour;
1772 UINT8 NextScheduledPowerOnMinute;
1773 UINT8 NextScheduledPowerOnSecond;
1774 } SMBIOS_TABLE_TYPE25;
1775
1776 ///
1777 /// Voltage Probe - Location and Status.
1778 ///
1779 typedef struct {
1780 UINT8 VoltageProbeSite :5;
1781 UINT8 VoltageProbeStatus :3;
1782 } MISC_VOLTAGE_PROBE_LOCATION;
1783
1784 ///
1785 /// Voltage Probe (Type 26)
1786 ///
1787 /// This describes the attributes for a voltage probe in the system.
1788 /// Each structure describes a single voltage probe.
1789 ///
1790 typedef struct {
1791 SMBIOS_STRUCTURE Hdr;
1792 SMBIOS_TABLE_STRING Description;
1793 MISC_VOLTAGE_PROBE_LOCATION LocationAndStatus;
1794 UINT16 MaximumValue;
1795 UINT16 MinimumValue;
1796 UINT16 Resolution;
1797 UINT16 Tolerance;
1798 UINT16 Accuracy;
1799 UINT32 OEMDefined;
1800 UINT16 NominalValue;
1801 } SMBIOS_TABLE_TYPE26;
1802
1803 ///
1804 /// Cooling Device - Device Type and Status.
1805 ///
1806 typedef struct {
1807 UINT8 CoolingDevice :5;
1808 UINT8 CoolingDeviceStatus :3;
1809 } MISC_COOLING_DEVICE_TYPE;
1810
1811 ///
1812 /// Cooling Device (Type 27)
1813 ///
1814 /// This structure describes the attributes for a cooling device in the system.
1815 /// Each structure describes a single cooling device.
1816 ///
1817 typedef struct {
1818 SMBIOS_STRUCTURE Hdr;
1819 UINT16 TemperatureProbeHandle;
1820 MISC_COOLING_DEVICE_TYPE DeviceTypeAndStatus;
1821 UINT8 CoolingUnitGroup;
1822 UINT32 OEMDefined;
1823 UINT16 NominalSpeed;
1824 //
1825 // Add for smbios 2.7
1826 //
1827 SMBIOS_TABLE_STRING Description;
1828 } SMBIOS_TABLE_TYPE27;
1829
1830 ///
1831 /// Temperature Probe - Location and Status.
1832 ///
1833 typedef struct {
1834 UINT8 TemperatureProbeSite :5;
1835 UINT8 TemperatureProbeStatus :3;
1836 } MISC_TEMPERATURE_PROBE_LOCATION;
1837
1838 ///
1839 /// Temperature Probe (Type 28).
1840 ///
1841 /// This structure describes the attributes for a temperature probe in the system.
1842 /// Each structure describes a single temperature probe.
1843 ///
1844 typedef struct {
1845 SMBIOS_STRUCTURE Hdr;
1846 SMBIOS_TABLE_STRING Description;
1847 MISC_TEMPERATURE_PROBE_LOCATION LocationAndStatus;
1848 UINT16 MaximumValue;
1849 UINT16 MinimumValue;
1850 UINT16 Resolution;
1851 UINT16 Tolerance;
1852 UINT16 Accuracy;
1853 UINT32 OEMDefined;
1854 UINT16 NominalValue;
1855 } SMBIOS_TABLE_TYPE28;
1856
1857 ///
1858 /// Electrical Current Probe - Location and Status.
1859 ///
1860 typedef struct {
1861 UINT8 ElectricalCurrentProbeSite :5;
1862 UINT8 ElectricalCurrentProbeStatus :3;
1863 } MISC_ELECTRICAL_CURRENT_PROBE_LOCATION;
1864
1865 ///
1866 /// Electrical Current Probe (Type 29).
1867 ///
1868 /// This structure describes the attributes for an electrical current probe in the system.
1869 /// Each structure describes a single electrical current probe.
1870 ///
1871 typedef struct {
1872 SMBIOS_STRUCTURE Hdr;
1873 SMBIOS_TABLE_STRING Description;
1874 MISC_ELECTRICAL_CURRENT_PROBE_LOCATION LocationAndStatus;
1875 UINT16 MaximumValue;
1876 UINT16 MinimumValue;
1877 UINT16 Resolution;
1878 UINT16 Tolerance;
1879 UINT16 Accuracy;
1880 UINT32 OEMDefined;
1881 UINT16 NominalValue;
1882 } SMBIOS_TABLE_TYPE29;
1883
1884 ///
1885 /// Out-of-Band Remote Access (Type 30).
1886 ///
1887 /// This structure describes the attributes and policy settings of a hardware facility
1888 /// that may be used to gain remote access to a hardware system when the operating system
1889 /// is not available due to power-down status, hardware failures, or boot failures.
1890 ///
1891 typedef struct {
1892 SMBIOS_STRUCTURE Hdr;
1893 SMBIOS_TABLE_STRING ManufacturerName;
1894 UINT8 Connections;
1895 } SMBIOS_TABLE_TYPE30;
1896
1897 ///
1898 /// Boot Integrity Services (BIS) Entry Point (Type 31).
1899 ///
1900 /// Structure type 31 (decimal) is reserved for use by the Boot Integrity Services (BIS).
1901 ///
1902 typedef struct {
1903 SMBIOS_STRUCTURE Hdr;
1904 UINT8 Checksum;
1905 UINT8 Reserved1;
1906 UINT16 Reserved2;
1907 UINT32 BisEntry16;
1908 UINT32 BisEntry32;
1909 UINT64 Reserved3;
1910 UINT32 Reserved4;
1911 } SMBIOS_TABLE_TYPE31;
1912
1913 ///
1914 /// System Boot Information - System Boot Status.
1915 ///
1916 typedef enum {
1917 BootInformationStatusNoError = 0x00,
1918 BootInformationStatusNoBootableMedia = 0x01,
1919 BootInformationStatusNormalOSFailedLoading = 0x02,
1920 BootInformationStatusFirmwareDetectedFailure = 0x03,
1921 BootInformationStatusOSDetectedFailure = 0x04,
1922 BootInformationStatusUserRequestedBoot = 0x05,
1923 BootInformationStatusSystemSecurityViolation = 0x06,
1924 BootInformationStatusPreviousRequestedImage = 0x07,
1925 BootInformationStatusWatchdogTimerExpired = 0x08,
1926 BootInformationStatusStartReserved = 0x09,
1927 BootInformationStatusStartOemSpecific = 0x80,
1928 BootInformationStatusStartProductSpecific = 0xC0
1929 } MISC_BOOT_INFORMATION_STATUS_DATA_TYPE;
1930
1931 ///
1932 /// System Boot Information (Type 32).
1933 ///
1934 /// The client system firmware, e.g. BIOS, communicates the System Boot Status to the
1935 /// client's Pre-boot Execution Environment (PXE) boot image or OS-present management
1936 /// application via this structure. When used in the PXE environment, for example,
1937 /// this code identifies the reason the PXE was initiated and can be used by boot-image
1938 /// software to further automate an enterprise's PXE sessions. For example, an enterprise
1939 /// could choose to automatically download a hardware-diagnostic image to a client whose
1940 /// reason code indicated either a firmware- or operating system-detected hardware failure.
1941 ///
1942 typedef struct {
1943 SMBIOS_STRUCTURE Hdr;
1944 UINT8 Reserved[6];
1945 UINT8 BootStatus; ///< The enumeration value from MISC_BOOT_INFORMATION_STATUS_DATA_TYPE.
1946 } SMBIOS_TABLE_TYPE32;
1947
1948 ///
1949 /// 64-bit Memory Error Information (Type 33).
1950 ///
1951 /// This structure describes an error within a Physical Memory Array,
1952 /// when the error address is above 4G (0xFFFFFFFF).
1953 ///
1954 typedef struct {
1955 SMBIOS_STRUCTURE Hdr;
1956 UINT8 ErrorType; ///< The enumeration value from MEMORY_ERROR_TYPE.
1957 UINT8 ErrorGranularity; ///< The enumeration value from MEMORY_ERROR_GRANULARITY.
1958 UINT8 ErrorOperation; ///< The enumeration value from MEMORY_ERROR_OPERATION.
1959 UINT32 VendorSyndrome;
1960 UINT64 MemoryArrayErrorAddress;
1961 UINT64 DeviceErrorAddress;
1962 UINT32 ErrorResolution;
1963 } SMBIOS_TABLE_TYPE33;
1964
1965 ///
1966 /// Management Device - Type.
1967 ///
1968 typedef enum {
1969 ManagementDeviceTypeOther = 0x01,
1970 ManagementDeviceTypeUnknown = 0x02,
1971 ManagementDeviceTypeLm75 = 0x03,
1972 ManagementDeviceTypeLm78 = 0x04,
1973 ManagementDeviceTypeLm79 = 0x05,
1974 ManagementDeviceTypeLm80 = 0x06,
1975 ManagementDeviceTypeLm81 = 0x07,
1976 ManagementDeviceTypeAdm9240 = 0x08,
1977 ManagementDeviceTypeDs1780 = 0x09,
1978 ManagementDeviceTypeMaxim1617 = 0x0A,
1979 ManagementDeviceTypeGl518Sm = 0x0B,
1980 ManagementDeviceTypeW83781D = 0x0C,
1981 ManagementDeviceTypeHt82H791 = 0x0D
1982 } MISC_MANAGEMENT_DEVICE_TYPE;
1983
1984 ///
1985 /// Management Device - Address Type.
1986 ///
1987 typedef enum {
1988 ManagementDeviceAddressTypeOther = 0x01,
1989 ManagementDeviceAddressTypeUnknown = 0x02,
1990 ManagementDeviceAddressTypeIOPort = 0x03,
1991 ManagementDeviceAddressTypeMemory = 0x04,
1992 ManagementDeviceAddressTypeSmbus = 0x05
1993 } MISC_MANAGEMENT_DEVICE_ADDRESS_TYPE;
1994
1995 ///
1996 /// Management Device (Type 34).
1997 ///
1998 /// The information in this structure defines the attributes of a Management Device.
1999 /// A Management Device might control one or more fans or voltage, current, or temperature
2000 /// probes as defined by one or more Management Device Component structures.
2001 ///
2002 typedef struct {
2003 SMBIOS_STRUCTURE Hdr;
2004 SMBIOS_TABLE_STRING Description;
2005 UINT8 Type; ///< The enumeration value from MISC_MANAGEMENT_DEVICE_TYPE.
2006 UINT32 Address;
2007 UINT8 AddressType; ///< The enumeration value from MISC_MANAGEMENT_DEVICE_ADDRESS_TYPE.
2008 } SMBIOS_TABLE_TYPE34;
2009
2010 ///
2011 /// Management Device Component (Type 35)
2012 ///
2013 /// This structure associates a cooling device or environmental probe with structures
2014 /// that define the controlling hardware device and (optionally) the component's thresholds.
2015 ///
2016 typedef struct {
2017 SMBIOS_STRUCTURE Hdr;
2018 SMBIOS_TABLE_STRING Description;
2019 UINT16 ManagementDeviceHandle;
2020 UINT16 ComponentHandle;
2021 UINT16 ThresholdHandle;
2022 } SMBIOS_TABLE_TYPE35;
2023
2024 ///
2025 /// Management Device Threshold Data (Type 36).
2026 ///
2027 /// The information in this structure defines threshold information for
2028 /// a component (probe or cooling-unit) contained within a Management Device.
2029 ///
2030 typedef struct {
2031 SMBIOS_STRUCTURE Hdr;
2032 UINT16 LowerThresholdNonCritical;
2033 UINT16 UpperThresholdNonCritical;
2034 UINT16 LowerThresholdCritical;
2035 UINT16 UpperThresholdCritical;
2036 UINT16 LowerThresholdNonRecoverable;
2037 UINT16 UpperThresholdNonRecoverable;
2038 } SMBIOS_TABLE_TYPE36;
2039
2040 ///
2041 /// Memory Channel Entry.
2042 ///
2043 typedef struct {
2044 UINT8 DeviceLoad;
2045 UINT16 DeviceHandle;
2046 } MEMORY_DEVICE;
2047
2048 ///
2049 /// Memory Channel - Channel Type.
2050 ///
2051 typedef enum {
2052 MemoryChannelTypeOther = 0x01,
2053 MemoryChannelTypeUnknown = 0x02,
2054 MemoryChannelTypeRambus = 0x03,
2055 MemoryChannelTypeSyncLink = 0x04
2056 } MEMORY_CHANNEL_TYPE;
2057
2058 ///
2059 /// Memory Channel (Type 37)
2060 ///
2061 /// The information in this structure provides the correlation between a Memory Channel
2062 /// and its associated Memory Devices. Each device presents one or more loads to the channel.
2063 /// The sum of all device loads cannot exceed the channel's defined maximum.
2064 ///
2065 typedef struct {
2066 SMBIOS_STRUCTURE Hdr;
2067 UINT8 ChannelType;
2068 UINT8 MaximumChannelLoad;
2069 UINT8 MemoryDeviceCount;
2070 MEMORY_DEVICE MemoryDevice[1];
2071 } SMBIOS_TABLE_TYPE37;
2072
2073 ///
2074 /// IPMI Device Information - BMC Interface Type
2075 ///
2076 typedef enum {
2077 IPMIDeviceInfoInterfaceTypeUnknown = 0x00,
2078 IPMIDeviceInfoInterfaceTypeKCS = 0x01, ///< The Keyboard Controller Style.
2079 IPMIDeviceInfoInterfaceTypeSMIC = 0x02, ///< The Server Management Interface Chip.
2080 IPMIDeviceInfoInterfaceTypeBT = 0x03, ///< The Block Transfer
2081 IPMIDeviceInfoInterfaceTypeReserved = 0x04
2082 } BMC_INTERFACE_TYPE;
2083
2084 ///
2085 /// IPMI Device Information (Type 38).
2086 ///
2087 /// The information in this structure defines the attributes of an
2088 /// Intelligent Platform Management Interface (IPMI) Baseboard Management Controller (BMC).
2089 ///
2090 /// The Type 42 structure can also be used to describe a physical management controller
2091 /// host interface and one or more protocols that share that interface. If IPMI is not
2092 /// shared with other protocols, either the Type 38 or Type 42 structures can be used.
2093 /// Providing Type 38 is recommended for backward compatibility.
2094 ///
2095 typedef struct {
2096 SMBIOS_STRUCTURE Hdr;
2097 UINT8 InterfaceType; ///< The enumeration value from BMC_INTERFACE_TYPE.
2098 UINT8 IPMISpecificationRevision;
2099 UINT8 I2CSlaveAddress;
2100 UINT8 NVStorageDeviceAddress;
2101 UINT64 BaseAddress;
2102 UINT8 BaseAddressModifier_InterruptInfo;
2103 UINT8 InterruptNumber;
2104 } SMBIOS_TABLE_TYPE38;
2105
2106 ///
2107 /// System Power Supply - Power Supply Characteristics.
2108 ///
2109 typedef struct {
2110 UINT16 PowerSupplyHotReplaceable:1;
2111 UINT16 PowerSupplyPresent :1;
2112 UINT16 PowerSupplyUnplugged :1;
2113 UINT16 InputVoltageRangeSwitch :4;
2114 UINT16 PowerSupplyStatus :3;
2115 UINT16 PowerSupplyType :4;
2116 UINT16 Reserved :2;
2117 } SYS_POWER_SUPPLY_CHARACTERISTICS;
2118
2119 ///
2120 /// System Power Supply (Type 39).
2121 ///
2122 /// This structure identifies attributes of a system power supply. One instance
2123 /// of this record is present for each possible power supply in a system.
2124 ///
2125 typedef struct {
2126 SMBIOS_STRUCTURE Hdr;
2127 UINT8 PowerUnitGroup;
2128 SMBIOS_TABLE_STRING Location;
2129 SMBIOS_TABLE_STRING DeviceName;
2130 SMBIOS_TABLE_STRING Manufacturer;
2131 SMBIOS_TABLE_STRING SerialNumber;
2132 SMBIOS_TABLE_STRING AssetTagNumber;
2133 SMBIOS_TABLE_STRING ModelPartNumber;
2134 SMBIOS_TABLE_STRING RevisionLevel;
2135 UINT16 MaxPowerCapacity;
2136 SYS_POWER_SUPPLY_CHARACTERISTICS PowerSupplyCharacteristics;
2137 UINT16 InputVoltageProbeHandle;
2138 UINT16 CoolingDeviceHandle;
2139 UINT16 InputCurrentProbeHandle;
2140 } SMBIOS_TABLE_TYPE39;
2141
2142 ///
2143 /// Additional Information Entry Format.
2144 ///
2145 typedef struct {
2146 UINT8 EntryLength;
2147 UINT16 ReferencedHandle;
2148 UINT8 ReferencedOffset;
2149 SMBIOS_TABLE_STRING EntryString;
2150 UINT8 Value[1];
2151 }ADDITIONAL_INFORMATION_ENTRY;
2152
2153 ///
2154 /// Additional Information (Type 40).
2155 ///
2156 /// This structure is intended to provide additional information for handling unspecified
2157 /// enumerated values and interim field updates in another structure.
2158 ///
2159 typedef struct {
2160 SMBIOS_STRUCTURE Hdr;
2161 UINT8 NumberOfAdditionalInformationEntries;
2162 ADDITIONAL_INFORMATION_ENTRY AdditionalInfoEntries[1];
2163 } SMBIOS_TABLE_TYPE40;
2164
2165 ///
2166 /// Onboard Devices Extended Information - Onboard Device Types.
2167 ///
2168 typedef enum{
2169 OnBoardDeviceExtendedTypeOther = 0x01,
2170 OnBoardDeviceExtendedTypeUnknown = 0x02,
2171 OnBoardDeviceExtendedTypeVideo = 0x03,
2172 OnBoardDeviceExtendedTypeScsiController = 0x04,
2173 OnBoardDeviceExtendedTypeEthernet = 0x05,
2174 OnBoardDeviceExtendedTypeTokenRing = 0x06,
2175 OnBoardDeviceExtendedTypeSound = 0x07,
2176 OnBoardDeviceExtendedTypePATAController = 0x08,
2177 OnBoardDeviceExtendedTypeSATAController = 0x09,
2178 OnBoardDeviceExtendedTypeSASController = 0x0A
2179 } ONBOARD_DEVICE_EXTENDED_INFO_TYPE;
2180
2181 ///
2182 /// Onboard Devices Extended Information (Type 41).
2183 ///
2184 /// The information in this structure defines the attributes of devices that
2185 /// are onboard (soldered onto) a system element, usually the baseboard.
2186 /// In general, an entry in this table implies that the BIOS has some level of
2187 /// control over the enabling of the associated device for use by the system.
2188 ///
2189 typedef struct {
2190 SMBIOS_STRUCTURE Hdr;
2191 SMBIOS_TABLE_STRING ReferenceDesignation;
2192 UINT8 DeviceType; ///< The enumeration value from ONBOARD_DEVICE_EXTENDED_INFO_TYPE
2193 UINT8 DeviceTypeInstance;
2194 UINT16 SegmentGroupNum;
2195 UINT8 BusNum;
2196 UINT8 DevFuncNum;
2197 } SMBIOS_TABLE_TYPE41;
2198
2199 ///
2200 /// Management Controller Host Interface (Type 42).
2201 ///
2202 /// The information in this structure defines the attributes of a Management
2203 /// Controller Host Interface that is not discoverable by "Plug and Play" mechanisms.
2204 ///
2205 /// Type 42 should be used for management controller host interfaces that use protocols
2206 /// other than IPMI or that use multiple protocols on a single host interface type.
2207 ///
2208 /// This structure should also be provided if IPMI is shared with other protocols
2209 /// over the same interface hardware. If IPMI is not shared with other protocols,
2210 /// either the Type 38 or Type 42 structures can be used. Providing Type 38 is
2211 /// recommended for backward compatibility. The structures are not required to
2212 /// be mutually exclusive. Type 38 and Type 42 structures may be implemented
2213 /// simultaneously to provide backward compatibility with IPMI applications or drivers
2214 /// that do not yet recognize the Type 42 structure.
2215 ///
2216 typedef struct {
2217 SMBIOS_STRUCTURE Hdr;
2218 UINT8 InterfaceType;
2219 UINT8 MCHostInterfaceData[1]; ///< This field has a minimum of four bytes
2220 } SMBIOS_TABLE_TYPE42;
2221
2222 ///
2223 /// Inactive (Type 126)
2224 ///
2225 typedef struct {
2226 SMBIOS_STRUCTURE Hdr;
2227 } SMBIOS_TABLE_TYPE126;
2228
2229 ///
2230 /// End-of-Table (Type 127)
2231 ///
2232 typedef struct {
2233 SMBIOS_STRUCTURE Hdr;
2234 } SMBIOS_TABLE_TYPE127;
2235
2236 ///
2237 /// Union of all the possible SMBIOS record types.
2238 ///
2239 typedef union {
2240 SMBIOS_STRUCTURE *Hdr;
2241 SMBIOS_TABLE_TYPE0 *Type0;
2242 SMBIOS_TABLE_TYPE1 *Type1;
2243 SMBIOS_TABLE_TYPE2 *Type2;
2244 SMBIOS_TABLE_TYPE3 *Type3;
2245 SMBIOS_TABLE_TYPE4 *Type4;
2246 SMBIOS_TABLE_TYPE5 *Type5;
2247 SMBIOS_TABLE_TYPE6 *Type6;
2248 SMBIOS_TABLE_TYPE7 *Type7;
2249 SMBIOS_TABLE_TYPE8 *Type8;
2250 SMBIOS_TABLE_TYPE9 *Type9;
2251 SMBIOS_TABLE_TYPE10 *Type10;
2252 SMBIOS_TABLE_TYPE11 *Type11;
2253 SMBIOS_TABLE_TYPE12 *Type12;
2254 SMBIOS_TABLE_TYPE13 *Type13;
2255 SMBIOS_TABLE_TYPE14 *Type14;
2256 SMBIOS_TABLE_TYPE15 *Type15;
2257 SMBIOS_TABLE_TYPE16 *Type16;
2258 SMBIOS_TABLE_TYPE17 *Type17;
2259 SMBIOS_TABLE_TYPE18 *Type18;
2260 SMBIOS_TABLE_TYPE19 *Type19;
2261 SMBIOS_TABLE_TYPE20 *Type20;
2262 SMBIOS_TABLE_TYPE21 *Type21;
2263 SMBIOS_TABLE_TYPE22 *Type22;
2264 SMBIOS_TABLE_TYPE23 *Type23;
2265 SMBIOS_TABLE_TYPE24 *Type24;
2266 SMBIOS_TABLE_TYPE25 *Type25;
2267 SMBIOS_TABLE_TYPE26 *Type26;
2268 SMBIOS_TABLE_TYPE27 *Type27;
2269 SMBIOS_TABLE_TYPE28 *Type28;
2270 SMBIOS_TABLE_TYPE29 *Type29;
2271 SMBIOS_TABLE_TYPE30 *Type30;
2272 SMBIOS_TABLE_TYPE31 *Type31;
2273 SMBIOS_TABLE_TYPE32 *Type32;
2274 SMBIOS_TABLE_TYPE33 *Type33;
2275 SMBIOS_TABLE_TYPE34 *Type34;
2276 SMBIOS_TABLE_TYPE35 *Type35;
2277 SMBIOS_TABLE_TYPE36 *Type36;
2278 SMBIOS_TABLE_TYPE37 *Type37;
2279 SMBIOS_TABLE_TYPE38 *Type38;
2280 SMBIOS_TABLE_TYPE39 *Type39;
2281 SMBIOS_TABLE_TYPE40 *Type40;
2282 SMBIOS_TABLE_TYPE41 *Type41;
2283 SMBIOS_TABLE_TYPE42 *Type42;
2284 SMBIOS_TABLE_TYPE126 *Type126;
2285 SMBIOS_TABLE_TYPE127 *Type127;
2286 UINT8 *Raw;
2287 } SMBIOS_STRUCTURE_POINTER;
2288
2289 #pragma pack()
2290
2291 #endif