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