]> git.proxmox.com Git - mirror_edk2.git/blobdiff - IntelFrameworkPkg/Include/Framework/DataHubRecords.h
roll back the change on the naming of DataHubRecords.h for backward compatibility.
[mirror_edk2.git] / IntelFrameworkPkg / Include / Framework / DataHubRecords.h
index 474cf85748cad3461259f201c846a92b7586d2b8..ce0ca23f0297c327b3d2c2a765a22df27132e80d 100644 (file)
 #ifndef _DATAHUB_RECORDS_H_\r
 #define _DATAHUB_RECORDS_H_\r
 \r
-#include <PiPei.h>\r
-#include <Protocol/DevicePath.h>\r
+#include <Framework/FrameworkInternalFormRepresentation.h>\r
 \r
+///\r
+/// Inconsistent with specification here:  \r
+/// In MiscSubclass spec 0.9, the value is 0x0100.\r
+/// Keep it unchanged from the perspective of binary consistency.\r
+///\r
 #define EFI_PROCESSOR_SUBCLASS_VERSION    0x00010000\r
 \r
 #pragma pack(1)\r
 \r
 typedef struct _USB_PORT_DEVICE_PATH {\r
-  ACPI_HID_DEVICE_PATH      PciRootBridgeDevicePath;\r
-  PCI_DEVICE_PATH           PciBusDevicePath;\r
-  EFI_DEVICE_PATH_PROTOCOL  EndDevicePath;\r
+  ACPI_HID_DEVICE_PATH              PciRootBridgeDevicePath;\r
+  PCI_DEVICE_PATH                   PciBusDevicePath;\r
+  EFI_DEVICE_PATH_PROTOCOL          EndDevicePath;\r
 } USB_PORT_DEVICE_PATH;\r
 \r
 //\r
 // IDE\r
 //\r
 typedef struct _IDE_DEVICE_PATH {\r
-  ACPI_HID_DEVICE_PATH      PciRootBridgeDevicePath;\r
-  PCI_DEVICE_PATH           PciBusDevicePath;\r
-  EFI_DEVICE_PATH_PROTOCOL  EndDevicePath;\r
+  ACPI_HID_DEVICE_PATH              PciRootBridgeDevicePath;\r
+  PCI_DEVICE_PATH                   PciBusDevicePath;\r
+  EFI_DEVICE_PATH_PROTOCOL          EndDevicePath;\r
 } IDE_DEVICE_PATH;\r
 \r
 //\r
 // RMC Connector\r
 //\r
 typedef struct _RMC_CONN_DEVICE_PATH {\r
-  ACPI_HID_DEVICE_PATH      PciRootBridgeDevicePath;\r
-  PCI_DEVICE_PATH           PciBridgeDevicePath;\r
-  PCI_DEVICE_PATH           PciBusDevicePath;\r
-  EFI_DEVICE_PATH_PROTOCOL  EndDevicePath;\r
+  ACPI_HID_DEVICE_PATH              PciRootBridgeDevicePath;\r
+  PCI_DEVICE_PATH                   PciBridgeDevicePath;\r
+  PCI_DEVICE_PATH                   PciBusDevicePath;\r
+  EFI_DEVICE_PATH_PROTOCOL          EndDevicePath;\r
 } RMC_CONN_DEVICE_PATH;\r
 \r
 //\r
 // RIDE\r
 //\r
 typedef struct _RIDE_DEVICE_PATH {\r
-  ACPI_HID_DEVICE_PATH      PciRootBridgeDevicePath;\r
-  PCI_DEVICE_PATH           PciBridgeDevicePath;\r
-  PCI_DEVICE_PATH           PciBusDevicePath;\r
-  EFI_DEVICE_PATH_PROTOCOL  EndDevicePath;\r
+  ACPI_HID_DEVICE_PATH              PciRootBridgeDevicePath;\r
+  PCI_DEVICE_PATH                   PciBridgeDevicePath;\r
+  PCI_DEVICE_PATH                   PciBusDevicePath;\r
+  EFI_DEVICE_PATH_PROTOCOL          EndDevicePath;\r
 } RIDE_DEVICE_PATH;\r
 \r
 //\r
 // Gigabit NIC\r
 //\r
 typedef struct _GB_NIC_DEVICE_PATH {\r
-  ACPI_HID_DEVICE_PATH      PciRootBridgeDevicePath;\r
-  PCI_DEVICE_PATH           PciBridgeDevicePath;\r
-  PCI_DEVICE_PATH           PciXBridgeDevicePath;\r
-  PCI_DEVICE_PATH           PciXBusDevicePath;\r
-  EFI_DEVICE_PATH_PROTOCOL  EndDevicePath;\r
+  ACPI_HID_DEVICE_PATH              PciRootBridgeDevicePath;\r
+  PCI_DEVICE_PATH                   PciBridgeDevicePath;\r
+  PCI_DEVICE_PATH                   PciXBridgeDevicePath;\r
+  PCI_DEVICE_PATH                   PciXBusDevicePath;\r
+  EFI_DEVICE_PATH_PROTOCOL          EndDevicePath;\r
 } GB_NIC_DEVICE_PATH;\r
 \r
 //\r
 // P/S2 Connector\r
 //\r
 typedef struct _PS2_CONN_DEVICE_PATH {\r
-  ACPI_HID_DEVICE_PATH      PciRootBridgeDevicePath;\r
-  PCI_DEVICE_PATH           LpcBridgeDevicePath;\r
-  ACPI_HID_DEVICE_PATH      LpcBusDevicePath;\r
-  EFI_DEVICE_PATH_PROTOCOL  EndDevicePath;\r
+  ACPI_HID_DEVICE_PATH              PciRootBridgeDevicePath;\r
+  PCI_DEVICE_PATH                   LpcBridgeDevicePath;\r
+  ACPI_HID_DEVICE_PATH              LpcBusDevicePath;\r
+  EFI_DEVICE_PATH_PROTOCOL          EndDevicePath;\r
 } PS2_CONN_DEVICE_PATH;\r
 \r
 //\r
 // Serial Port Connector\r
 //\r
 typedef struct _SERIAL_CONN_DEVICE_PATH {\r
-  ACPI_HID_DEVICE_PATH      PciRootBridgeDevicePath;\r
-  PCI_DEVICE_PATH           LpcBridgeDevicePath;\r
-  ACPI_HID_DEVICE_PATH      LpcBusDevicePath;\r
-  EFI_DEVICE_PATH_PROTOCOL  EndDevicePath;\r
+  ACPI_HID_DEVICE_PATH              PciRootBridgeDevicePath;\r
+  PCI_DEVICE_PATH                   LpcBridgeDevicePath;\r
+  ACPI_HID_DEVICE_PATH              LpcBusDevicePath;\r
+  EFI_DEVICE_PATH_PROTOCOL          EndDevicePath;\r
 } SERIAL_CONN_DEVICE_PATH;\r
 \r
 //\r
 // Parallel Port Connector\r
 //\r
 typedef struct _PARALLEL_CONN_DEVICE_PATH {\r
-  ACPI_HID_DEVICE_PATH      PciRootBridgeDevicePath;\r
-  PCI_DEVICE_PATH           LpcBridgeDevicePath;\r
-  ACPI_HID_DEVICE_PATH      LpcBusDevicePath;\r
-  EFI_DEVICE_PATH_PROTOCOL  EndDevicePath;\r
+  ACPI_HID_DEVICE_PATH              PciRootBridgeDevicePath;\r
+  PCI_DEVICE_PATH                   LpcBridgeDevicePath;\r
+  ACPI_HID_DEVICE_PATH              LpcBusDevicePath;\r
+  EFI_DEVICE_PATH_PROTOCOL          EndDevicePath;\r
 } PARALLEL_CONN_DEVICE_PATH;\r
 \r
 //\r
 // Floopy Connector\r
 //\r
 typedef struct _FLOOPY_CONN_DEVICE_PATH {\r
-  ACPI_HID_DEVICE_PATH      PciRootBridgeDevicePath;\r
-  PCI_DEVICE_PATH           LpcBridgeDevicePath;\r
-  ACPI_HID_DEVICE_PATH      LpcBusDevicePath;\r
-  EFI_DEVICE_PATH_PROTOCOL  EndDevicePath;\r
+  ACPI_HID_DEVICE_PATH              PciRootBridgeDevicePath;\r
+  PCI_DEVICE_PATH                   LpcBridgeDevicePath;\r
+  ACPI_HID_DEVICE_PATH              LpcBusDevicePath;\r
+  EFI_DEVICE_PATH_PROTOCOL          EndDevicePath;\r
 } FLOOPY_CONN_DEVICE_PATH;\r
 \r
+///\r
+/// Inconsistent with specification here:  \r
+/// In MiscSubclass spec 0.9, this data structure and corrsponding fields are NOT defined.\r
+/// It's implementation-specific to simplify the code logic.\r
+///\r
 typedef union _EFI_MISC_PORT_DEVICE_PATH {\r
-  USB_PORT_DEVICE_PATH      UsbDevicePath;\r
-  IDE_DEVICE_PATH           IdeDevicePath;\r
-  RMC_CONN_DEVICE_PATH      RmcConnDevicePath;\r
-  RIDE_DEVICE_PATH          RideDevicePath;\r
-  GB_NIC_DEVICE_PATH        GbNicDevicePath;\r
-  PS2_CONN_DEVICE_PATH      Ps2ConnDevicePath;\r
-  SERIAL_CONN_DEVICE_PATH   SerialConnDevicePath;\r
-  PARALLEL_CONN_DEVICE_PATH ParallelConnDevicePath;\r
-  FLOOPY_CONN_DEVICE_PATH   FloppyConnDevicePath;\r
+  USB_PORT_DEVICE_PATH              UsbDevicePath;\r
+  IDE_DEVICE_PATH                   IdeDevicePath;\r
+  RMC_CONN_DEVICE_PATH              RmcConnDevicePath;\r
+  RIDE_DEVICE_PATH                  RideDevicePath;\r
+  GB_NIC_DEVICE_PATH                GbNicDevicePath;\r
+  PS2_CONN_DEVICE_PATH              Ps2ConnDevicePath;\r
+  SERIAL_CONN_DEVICE_PATH           SerialConnDevicePath;\r
+  PARALLEL_CONN_DEVICE_PATH         ParallelConnDevicePath;\r
+  FLOOPY_CONN_DEVICE_PATH           FloppyConnDevicePath;\r
 } EFI_MISC_PORT_DEVICE_PATH;\r
 \r
 #pragma pack()\r
 \r
-//\r
-// String Token Definition\r
-//\r
-#define EFI_STRING_TOKEN    UINT16\r
-\r
-typedef struct {\r
-  UINT32    Version;\r
-  UINT32    HeaderSize;\r
-  UINT16    Instance;\r
-  UINT16    SubInstance;\r
-  UINT32    RecordType;\r
+///\r
+/// String Token Definition\r
+///\r
+/// Inconsistent with specification here:  \r
+/// The macro isn't defined by any spec.\r
+/// Keep it unchanged for backward compatibility.\r
+///\r
+#define EFI_STRING_TOKEN          UINT16\r
+\r
+///\r
+/// Each data record that is a member of some subclass starts with a standard \r
+/// header of type EFI_SUBCLASS_TYPE1_HEADER.\r
+/// This header is only a guideline and applicable only to a data \r
+/// subclass that is producing SMBIOS data records. A subclass can start with a \r
+/// different header if needed. \r
+///\r
+typedef struct {\r
+  ///\r
+  /// The version of the specification to which a specific subclass data record adheres. \r
+  ///\r
+  UINT32                            Version;\r
+  ///\r
+  /// The size in bytes of this data class header. \r
+  ///\r
+  UINT32                            HeaderSize;\r
+  ///\r
+  /// The instance number of the subclass with the same ProducerName. This number is \r
+  /// applicable in cases where multiple subclass instances that were produced by the same \r
+  /// driver exist in the system. This entry is 1 based; 0 means Reserved and -1 means Not \r
+  /// Applicable. All data consumer drivers should be able to handle all the possible values \r
+  /// of Instance, including Not Applicable and Reserved. \r
+  ///\r
+  UINT16                            Instance;\r
+  ///\r
+  /// The instance number of the RecordType for the same Instance. This number is \r
+  /// applicable in cases where multiple instances of the RecordType exist for a specific \r
+  /// Instance. This entry is 1 based; 0 means Reserved and -1 means Not Applicable. \r
+  /// All data consumer drivers should be able to handle all the possible values of \r
+  /// SubInstance, including Not Applicable and Reserved. \r
+  ///\r
+  UINT16                            SubInstance;\r
+  ///\r
+  /// The record number for the data record being specified. The numbering scheme and \r
+  /// definition is defined in the specific subclass specification. \r
+  ///\r
+  UINT32                            RecordType;\r
 } EFI_SUBCLASS_TYPE1_HEADER;\r
 \r
-typedef struct {\r
-  EFI_GUID    ProducerName;\r
-  UINT16      Instance;\r
-  UINT16      SubInstance;\r
+///\r
+/// This structure is used to link data records in the same subclasses. A data record is \r
+/// defined as a link to another data record in the same subclass using this structure. \r
+///\r
+typedef struct {\r
+  ///\r
+  /// An EFI_GUID that identifies the component that produced this data record. Type \r
+  /// EFI_GUID is defined in InstallProtocolInterface() in the EFI 1.10 Specification. \r
+  ///\r
+  EFI_GUID                          ProducerName;\r
+  ///\r
+  /// The instance number of the subclass with the same ProducerName. This number is \r
+  /// applicable in cases where multiple subclass instances that were produced by the same \r
+  /// driver exist in the system. This entry is 1 based; 0 means Reserved and -1 means Not \r
+  /// Applicable. All data consumer drivers should be able to handle all the possible values \r
+  /// of Instance, including Not Applicable and Reserved. \r
+  ///\r
+  UINT16                            Instance;\r
+  /// The instance number of the RecordType for the same Instance. This number is \r
+  /// applicable in cases where multiple instances of the RecordType exist for a specific \r
+  /// Instance. This entry is 1 based; 0 means Reserved and -1 means Not Applicable. \r
+  /// All data consumer drivers should be able to handle all the possible values of \r
+  /// SubInstance, including Not Applicable and Reserved.   \r
+  UINT16                            SubInstance;\r
 } EFI_INTER_LINK_DATA;\r
 \r
-\r
 //\r
 // EXP data\r
 //\r
-\r
-typedef struct {\r
-  UINT16    Value;\r
-  UINT16    Exponent;\r
+///\r
+/// This macro provides a calculation for base-10 representations. Value and Exponent are each \r
+/// INT16. It is signed to cover negative values and is 16 bits wide (15 bits for data and 1 bit\r
+/// for the sign).  \r
+///\r
+typedef struct {\r
+  ///\r
+  /// The INT16 number by which to multiply the base-10 representation. \r
+  ///\r
+  UINT16                            Value;\r
+  ///\r
+  /// The INT16 number by which to raise the base-10 calculation. \r
+  ///\r
+  UINT16                            Exponent;\r
 } EFI_EXP_BASE2_DATA;\r
 \r
-\r
-typedef struct {\r
-  UINT16    Value;\r
-  UINT16    Exponent;\r
+///\r
+/// This macro provides a calculation for base-2 representations. Value and Exponent are each \r
+/// INT16. It is 16 bits wide and is unsigned to mean nonnegative values.  \r
+///\r
+typedef struct {\r
+  ///\r
+  /// The INT16 number by which to multiply the base-2 representation.\r
+  ///\r
+  INT16                            Value;\r
+  ///\r
+  /// The INT16 number by which to raise the base-2 calculation. \r
+  ///\r
+  INT16                            Exponent;\r
 } EFI_EXP_BASE10_DATA;\r
 \r
-typedef EFI_EXP_BASE10_DATA   EFI_PROCESSOR_MAX_CORE_FREQUENCY_DATA;\r
-\r
-typedef EFI_EXP_BASE10_DATA   EFI_PROCESSOR_MAX_FSB_FREQUENCY_DATA;\r
-\r
-typedef EFI_EXP_BASE10_DATA   EFI_PROCESSOR_CORE_FREQUENCY_DATA;\r
-\r
-typedef EFI_EXP_BASE10_DATA  *EFI_PROCESSOR_CORE_FREQUENCY_LIST_DATA;\r
-\r
-typedef EFI_EXP_BASE10_DATA  *EFI_PROCESSOR_FSB_FREQUENCY_LIST_DATA;\r
-\r
-typedef EFI_EXP_BASE10_DATA   EFI_PROCESSOR_FSB_FREQUENCY_DATA;\r
-\r
-typedef STRING_REF            EFI_PROCESSOR_VERSION_DATA;\r
-\r
-typedef STRING_REF            EFI_PROCESSOR_MANUFACTURER_DATA;\r
-\r
-typedef STRING_REF            EFI_PROCESSOR_SERIAL_NUMBER_DATA;\r
-\r
-typedef STRING_REF            EFI_PROCESSOR_ASSET_TAG_DATA;\r
-\r
-typedef struct {\r
-  UINT32  ProcessorSteppingId:4;\r
-  UINT32  ProcessorModel:     4;\r
-  UINT32  ProcessorFamily:    4;\r
-  UINT32  ProcessorType:      2;\r
-  UINT32  ProcessorReserved1: 2;\r
-  UINT32  ProcessorXModel:    4;\r
-  UINT32  ProcessorXFamily:   8;\r
-  UINT32  ProcessorReserved2: 4;\r
+typedef EFI_EXP_BASE10_DATA        EFI_PROCESSOR_MAX_CORE_FREQUENCY_DATA;\r
+typedef EFI_EXP_BASE10_DATA        EFI_PROCESSOR_MAX_FSB_FREQUENCY_DATA;\r
+typedef EFI_EXP_BASE10_DATA        EFI_PROCESSOR_CORE_FREQUENCY_DATA;\r
+\r
+///\r
+/// This data record refers to the list of frequencies that the processor core supports. The list of \r
+/// supported frequencies is determined by the firmware based on hardware capabilities--for example, \r
+/// it could be a common subset of all processors and the chipset. The unit of measurement of this data \r
+/// record is in Hertz. For asynchronous processors, the content of this data record is zero.  \r
+/// The list is terminated by -1 in the Value field of the last element. A Value field of zero means \r
+/// that the processor/driver supports automatic frequency selection. \r
+///\r
+/// Inconsistent with specification here:  \r
+/// According to MiscSubclass 0.9 spec, it should be a pointer since it refers to a list of frequencies.\r
+///\r
+typedef EFI_EXP_BASE10_DATA        *EFI_PROCESSOR_CORE_FREQUENCY_LIST_DATA;\r
+\r
+///\r
+/// This data record refers to the list of supported frequencies of the processor external bus. The list of \r
+/// supported frequencies is determined by the firmware based on hardware capabilities--for example, \r
+/// it could be a common subset of all processors and the chipset. The unit of measurement of this data \r
+/// record is in Hertz. For asynchronous processors, the content of this data record is NULL.  \r
+/// The list is terminated by -1 in the Value field of the last element. A Value field of zero means \r
+/// that the processor/driver supports automatic frequency selection. \r
+///\r
+typedef EFI_EXP_BASE10_DATA        *EFI_PROCESSOR_FSB_FREQUENCY_LIST_DATA;\r
+typedef EFI_EXP_BASE10_DATA        EFI_PROCESSOR_FSB_FREQUENCY_DATA;\r
+typedef STRING_REF                 EFI_PROCESSOR_VERSION_DATA;\r
+typedef STRING_REF                 EFI_PROCESSOR_MANUFACTURER_DATA;\r
+typedef STRING_REF                 EFI_PROCESSOR_SERIAL_NUMBER_DATA;\r
+typedef STRING_REF                 EFI_PROCESSOR_ASSET_TAG_DATA;\r
+\r
+typedef struct {\r
+  UINT32                            ProcessorSteppingId:4;\r
+  UINT32                            ProcessorModel:     4;\r
+  UINT32                            ProcessorFamily:    4;\r
+  UINT32                            ProcessorType:      2;\r
+  UINT32                            ProcessorReserved1: 2;\r
+  UINT32                            ProcessorXModel:    4;\r
+  UINT32                            ProcessorXFamily:   8;\r
+  UINT32                            ProcessorReserved2: 4;\r
 } EFI_PROCESSOR_SIGNATURE;\r
 \r
+\r
+///\r
+/// Inconsistent with specification here:  \r
+/// The name of third field in ProcSubClass spec0.9 is LogicalProcessorCount.\r
+/// Keep it unchanged for backward compatibility.\r
+///\r
 typedef struct {\r
-  UINT32  ProcessorBrandIndex :8;\r
-  UINT32  ProcessorClflush    :8;\r
-  UINT32  ProcessorReserved   :8;\r
-  UINT32  ProcessorDfltApicId :8;\r
+  UINT32                            ProcessorBrandIndex    :8;\r
+  UINT32                            ProcessorClflush       :8;\r
+  UINT32                            ProcessorReserved      :8;\r
+  UINT32                            ProcessorDfltApicId    :8;\r
 } EFI_PROCESSOR_MISC_INFO;\r
 \r
 typedef struct {\r
-  UINT32  ProcessorFpu:       1;\r
-  UINT32  ProcessorVme:       1;\r
-  UINT32  ProcessorDe:        1;\r
-  UINT32  ProcessorPse:       1;\r
-  UINT32  ProcessorTsc:       1;\r
-  UINT32  ProcessorMsr:       1;\r
-  UINT32  ProcessorPae:       1;\r
-  UINT32  ProcessorMce:       1;\r
-  UINT32  ProcessorCx8:       1;\r
-  UINT32  ProcessorApic:      1;\r
-  UINT32  ProcessorReserved1: 1;\r
-  UINT32  ProcessorSep:       1;\r
-  UINT32  ProcessorMtrr:      1;\r
-  UINT32  ProcessorPge:       1;\r
-  UINT32  ProcessorMca:       1;\r
-  UINT32  ProcessorCmov:      1;\r
-  UINT32  ProcessorPat:       1;\r
-  UINT32  ProcessorPse36:     1;\r
-  UINT32  ProcessorPsn:       1;\r
-  UINT32  ProcessorClfsh:     1;\r
-  UINT32  ProcessorReserved2: 1;\r
-  UINT32  ProcessorDs:        1;\r
-  UINT32  ProcessorAcpi:      1;\r
-  UINT32  ProcessorMmx:       1;\r
-  UINT32  ProcessorFxsr:      1;\r
-  UINT32  ProcessorSse:       1;\r
-  UINT32  ProcessorSse2:      1;\r
-  UINT32  ProcessorSs:        1;\r
-  UINT32  ProcessorReserved3: 1;\r
-  UINT32  ProcessorTm:        1;\r
-  UINT32  ProcessorReserved4: 2;\r
+  UINT32                            ProcessorFpu:       1;\r
+  UINT32                            ProcessorVme:       1;\r
+  UINT32                            ProcessorDe:        1;\r
+  UINT32                            ProcessorPse:       1;\r
+  UINT32                            ProcessorTsc:       1;\r
+  UINT32                            ProcessorMsr:       1;\r
+  UINT32                            ProcessorPae:       1;\r
+  UINT32                            ProcessorMce:       1;\r
+  UINT32                            ProcessorCx8:       1;\r
+  UINT32                            ProcessorApic:      1;\r
+  UINT32                            ProcessorReserved1: 1;\r
+  UINT32                            ProcessorSep:       1;\r
+  UINT32                            ProcessorMtrr:      1;\r
+  UINT32                            ProcessorPge:       1;\r
+  UINT32                            ProcessorMca:       1;\r
+  UINT32                            ProcessorCmov:      1;\r
+  UINT32                            ProcessorPat:       1;\r
+  UINT32                            ProcessorPse36:     1;\r
+  UINT32                            ProcessorPsn:       1;\r
+  UINT32                            ProcessorClfsh:     1;\r
+  UINT32                            ProcessorReserved2: 1;\r
+  UINT32                            ProcessorDs:        1;\r
+  UINT32                            ProcessorAcpi:      1;\r
+  UINT32                            ProcessorMmx:       1;\r
+  UINT32                            ProcessorFxsr:      1;\r
+  UINT32                            ProcessorSse:       1;\r
+  UINT32                            ProcessorSse2:      1;\r
+  UINT32                            ProcessorSs:        1;\r
+  UINT32                            ProcessorReserved3: 1;\r
+  UINT32                            ProcessorTm:        1;\r
+  UINT32                            ProcessorReserved4: 2;\r
 } EFI_PROCESSOR_FEATURE_FLAGS;\r
 \r
-typedef struct {\r
-  EFI_PROCESSOR_SIGNATURE     Signature;\r
-  EFI_PROCESSOR_MISC_INFO     MiscInfo;\r
-  UINT32                      Reserved;\r
-  EFI_PROCESSOR_FEATURE_FLAGS FeatureFlags;\r
+///\r
+/// This data record refers to the unique ID that identifies a set of processors. This data record is 16 \r
+/// bytes in length. The data in this structure is processor specific and reserved values can be defined \r
+/// for future use. The consumer of this data should not make any assumption and should use this data \r
+/// with respect to the processor family defined in the Family record number.  \r
+///\r
+typedef struct {\r
+  ///\r
+  /// Identifies the processor.\r
+  ///\r
+  EFI_PROCESSOR_SIGNATURE           Signature;\r
+  ///\r
+  /// Provides additional processor information. \r
+  ///\r
+  EFI_PROCESSOR_MISC_INFO           MiscInfo;\r
+  ///\r
+  /// Reserved for future use. \r
+  ///\r
+  UINT32                            Reserved;\r
+  ///\r
+  /// Provides additional processor information. \r
+  ///\r
+  EFI_PROCESSOR_FEATURE_FLAGS       FeatureFlags;\r
 } EFI_PROCESSOR_ID_DATA;\r
 \r
+///\r
+/// This data record refers to the general classification of the processor. This data record is 4 bytes in \r
+/// length. \r
+///\r
 typedef enum {\r
   EfiProcessorOther    = 1,\r
   EfiProcessorUnknown  = 2,\r
@@ -254,82 +376,219 @@ typedef enum {
   EfiVideoProcessor    = 6\r
 } EFI_PROCESSOR_TYPE_DATA;\r
 \r
+///\r
+/// This data record refers to the family of the processor as defined by the DMTF.  \r
+/// This data record is 4 bytes in length. \r
+///\r
 typedef enum {\r
-  EfiProcessorFamilyOther               = 1,\r
-  EfiProcessorFamilyUnknown             = 2,\r
-  EfiProcessorFamily8086                = 3,\r
-  EfiProcessorFamily80286               = 4,\r
-  EfiProcessorFamilyIntel386            = 5,\r
-  EfiProcessorFamilyIntel486            = 6,\r
-  EfiProcessorFamily8087                = 7,\r
-  EfiProcessorFamily80287               = 8,\r
-  EfiProcessorFamily80387               = 9,\r
-  EfiProcessorFamily80487               = 0x0A,\r
-  EfiProcessorFamilyPentium             = 0x0B,\r
-  EfiProcessorFamilyPentiumPro          = 0x0C,\r
-  EfiProcessorFamilyPentiumII           = 0x0D,\r
-  EfiProcessorFamilyPentiumMMX          = 0x0E,\r
-  EfiProcessorFamilyCeleron             = 0x0F,\r
-  EfiProcessorFamilyPentiumIIXeon       = 0x10,\r
-  EfiProcessorFamilyPentiumIII          = 0x11,\r
-  EfiProcessorFamilyM1                  = 0x12,\r
-  EfiProcessorFamilyM1Reserved1         = 0x13,\r
-  EfiProcessorFamilyM1Reserved2         = 0x14,\r
-  EfiProcessorFamilyM1Reserved3         = 0x15,\r
-  EfiProcessorFamilyM1Reserved4         = 0x16,\r
-  EfiProcessorFamilyM1Reserved5         = 0x17,\r
-  EfiProcessorFamilyM1Reserved6         = 0x18,\r
-  EfiProcessorFamilyK5                  = 0x19,\r
-  EfiProcessorFamilyK5Reserved1         = 0x1A,\r
-  EfiProcessorFamilyK5Reserved2         = 0x1B,\r
-  EfiProcessorFamilyK5Reserved3         = 0x1C,\r
-  EfiProcessorFamilyK5Reserved4         = 0x1D,\r
-  EfiProcessorFamilyK5Reserved5         = 0x1E,\r
-  EfiProcessorFamilyK5Reserved6         = 0x1F,\r
-  EfiProcessorFamilyPowerPC             = 0x20,\r
-  EfiProcessorFamilyPowerPC601          = 0x21,\r
-  EfiProcessorFamilyPowerPC603          = 0x22,\r
-  EfiProcessorFamilyPowerPC603Plus      = 0x23,\r
-  EfiProcessorFamilyPowerPC604          = 0x24,\r
-  EfiProcessorFamilyAlpha2              = 0x30,\r
-  EfiProcessorFamilyMips                = 0x40,\r
-  EfiProcessorFamilySparc               = 0x50,\r
-  EfiProcessorFamily68040               = 0x60,\r
-  EfiProcessorFamily68xxx               = 0x61,\r
-  EfiProcessorFamily68000               = 0x62,\r
-  EfiProcessorFamily68010               = 0x63,\r
-  EfiProcessorFamily68020               = 0x64,\r
-  EfiProcessorFamily68030               = 0x65,\r
-  EfiProcessorFamilyHobbit              = 0x70,\r
-  EfiProcessorFamilyWeitek              = 0x80,\r
-  EfiProcessorFamilyPARISC              = 0x90,\r
-  EfiProcessorFamilyV30                 = 0xA0,\r
-  EfiProcessorFamilyPentiumIIIXeon      = 0xB0,\r
-  EfiProcessorFamilyPentiumIIISpeedStep = 0xB1,\r
-  EfiProcessorFamilyPentium4            = 0xB2,\r
-  EfiProcessorFamilyIntelXeon           = 0xB3,\r
-  EfiProcessorFamilyAS400               = 0xB4,\r
-  EfiProcessorFamilyIntelXeonMP         = 0xB5,\r
-  EfiProcessorFamilyAMDAthlonXP         = 0xB6,\r
-  EfiProcessorFamilyAMDAthlonMP         = 0xB7,\r
-  EfiProcessorFamilyIntelPentiumM       = 0xB9,\r
-  EfiProcessorFamilyIntelCeleronD       = 0xBA,\r
-  EfiProcessorFamilyIntelPentiumD       = 0xBB,\r
-  EfiProcessorFamilyIntelPentiumEx      = 0xBC,\r
-  EfiProcessorFamilyIBM390              = 0xC8,\r
-  EfiProcessorFamilyG4                  = 0xC9,\r
-  EfiProcessorFamilyG5                  = 0xCA,\r
-  EfiProcessorFamilyi860                = 0xFA,\r
-  EfiProcessorFamilyi960                = 0xFB\r
+  EfiProcessorFamilyOther                  = 0x01, \r
+  EfiProcessorFamilyUnknown                = 0x02,\r
+  EfiProcessorFamily8086                   = 0x03, \r
+  EfiProcessorFamily80286                  = 0x04,\r
+  EfiProcessorFamilyIntel386               = 0x05, \r
+  EfiProcessorFamilyIntel486               = 0x06,\r
+  EfiProcessorFamily8087                   = 0x07,\r
+  EfiProcessorFamily80287                  = 0x08,\r
+  EfiProcessorFamily80387                  = 0x09, \r
+  EfiProcessorFamily80487                  = 0x0A,\r
+  EfiProcessorFamilyPentium                = 0x0B, \r
+  EfiProcessorFamilyPentiumPro             = 0x0C,\r
+  EfiProcessorFamilyPentiumII              = 0x0D,\r
+  EfiProcessorFamilyPentiumMMX             = 0x0E,\r
+  EfiProcessorFamilyCeleron                = 0x0F,\r
+  EfiProcessorFamilyPentiumIIXeon          = 0x10,\r
+  EfiProcessorFamilyPentiumIII             = 0x11, \r
+  EfiProcessorFamilyM1                     = 0x12,\r
+  EfiProcessorFamilyM2                     = 0x13,\r
+  EfiProcessorFamilyM1Reserved2            = 0x14,\r
+  EfiProcessorFamilyM1Reserved3            = 0x15,\r
+  EfiProcessorFamilyM1Reserved4            = 0x16,\r
+  EfiProcessorFamilyM1Reserved5            = 0x17,\r
+  EfiProcessorFamilyAmdDuron               = 0x18,\r
+  EfiProcessorFamilyK5                     = 0x19, \r
+  EfiProcessorFamilyK6                     = 0x1A,\r
+  EfiProcessorFamilyK6_2                   = 0x1B,\r
+  EfiProcessorFamilyK6_3                   = 0x1C,\r
+  EfiProcessorFamilyAmdAthlon              = 0x1D,\r
+  EfiProcessorFamilyAmd29000               = 0x1E,\r
+  EfiProcessorFamilyK6_2Plus               = 0x1F,\r
+  EfiProcessorFamilyPowerPC                = 0x20,\r
+  EfiProcessorFamilyPowerPC601             = 0x21,\r
+  EfiProcessorFamilyPowerPC603             = 0x22,\r
+  EfiProcessorFamilyPowerPC603Plus         = 0x23,\r
+  EfiProcessorFamilyPowerPC604             = 0x24,\r
+  EfiProcessorFamilyPowerPC620             = 0x25,\r
+  EfiProcessorFamilyPowerPCx704            = 0x26,\r
+  EfiProcessorFamilyPowerPC750             = 0x27,\r
+  EfiProcessorFamilyAlpha3                 = 0x30,\r
+  EfiProcessorFamilyAlpha21064             = 0x31,\r
+  EfiProcessorFamilyAlpha21066             = 0x32,\r
+  EfiProcessorFamilyAlpha21164             = 0x33,\r
+  EfiProcessorFamilyAlpha21164PC           = 0x34,\r
+  EfiProcessorFamilyAlpha21164a            = 0x35,\r
+  EfiProcessorFamilyAlpha21264             = 0x36,\r
+  EfiProcessorFamilyAlpha21364             = 0x37,\r
+  EfiProcessorFamilyMips                   = 0x40,\r
+  EfiProcessorFamilyMIPSR4000              = 0x41,\r
+  EfiProcessorFamilyMIPSR4200              = 0x42,\r
+  EfiProcessorFamilyMIPSR4400              = 0x43,\r
+  EfiProcessorFamilyMIPSR4600              = 0x44,\r
+  EfiProcessorFamilyMIPSR10000             = 0x45,\r
+  EfiProcessorFamilySparc                  = 0x50,\r
+  EfiProcessorFamilySuperSparc             = 0x51,\r
+  EfiProcessorFamilymicroSparcII           = 0x52,\r
+  EfiProcessorFamilymicroSparcIIep         = 0x53,\r
+  EfiProcessorFamilyUltraSparc             = 0x54,\r
+  EfiProcessorFamilyUltraSparcII           = 0x55,\r
+  EfiProcessorFamilyUltraSparcIIi          = 0x56,\r
+  EfiProcessorFamilyUltraSparcIII          = 0x57,\r
+  ///\r
+  /// Inconsistent with specification here:  \r
+  /// This field in ProcSubClass spec 0.9 is defined as EfiProcessorFamilyUltraSparcIIi.\r
+  /// Change it to EfiProcessorFamilyUltraSparcIIIi to avoid build break.\r
+  ///\r
+  EfiProcessorFamilyUltraSparcIIIi         = 0x58,\r
+  EfiProcessorFamily68040                  = 0x60,\r
+  EfiProcessorFamily68xxx                  = 0x61,\r
+  EfiProcessorFamily68000                  = 0x62,\r
+  EfiProcessorFamily68010                  = 0x63,\r
+  EfiProcessorFamily68020                  = 0x64,\r
+  EfiProcessorFamily68030                  = 0x65,\r
+  EfiProcessorFamilyHobbit                 = 0x70,\r
+  EfiProcessorFamilyCrusoeTM5000           = 0x78,\r
+  EfiProcessorFamilyCrusoeTM3000           = 0x79,\r
+  EfiProcessorFamilyEfficeonTM8000         = 0x7A,\r
+  EfiProcessorFamilyWeitek                 = 0x80,\r
+  EfiProcessorFamilyItanium                = 0x82,\r
+  EfiProcessorFamilyAmdAthlon64            = 0x83,\r
+  EfiProcessorFamilyAmdOpteron             = 0x84,\r
+  EfiProcessorFamilyAmdSempron             = 0x85,\r
+  EfiProcessorFamilyAmdTurion64Mobile      = 0x86,\r
+  EfiProcessorFamilyDualCoreAmdOpteron     = 0x87,\r
+  EfiProcessorFamilyAmdAthlon64X2DualCore  = 0x88,\r
+  EfiProcessorFamilyAmdTurion64X2Mobile    = 0x89,\r
+  EfiProcessorFamilyPARISC                 = 0x90,\r
+  EfiProcessorFamilyPaRisc8500             = 0x91,\r
+  EfiProcessorFamilyPaRisc8000             = 0x92,\r
+  EfiProcessorFamilyPaRisc7300LC           = 0x93,\r
+  EfiProcessorFamilyPaRisc7200             = 0x94,\r
+  EfiProcessorFamilyPaRisc7100LC           = 0x95,\r
+  EfiProcessorFamilyPaRisc7100             = 0x96,\r
+  EfiProcessorFamilyV30                    = 0xA0,\r
+  EfiProcessorFamilyPentiumIIIXeon         = 0xB0,\r
+  EfiProcessorFamilyPentiumIIISpeedStep    = 0xB1,\r
+  EfiProcessorFamilyPentium4               = 0xB2,\r
+  EfiProcessorFamilyIntelXeon              = 0xB3,\r
+  EfiProcessorFamilyAS400                  = 0xB4,\r
+  EfiProcessorFamilyIntelXeonMP            = 0xB5,\r
+  EfiProcessorFamilyAMDAthlonXP            = 0xB6,\r
+  EfiProcessorFamilyAMDAthlonMP            = 0xB7,\r
+  EfiProcessorFamilyIntelItanium2          = 0xB8,\r
+  ///\r
+  /// Inconsistent with specification here:  \r
+  /// This field is NOT defined in ProcSubClass spec0.9. It's introduced for SMBIOS2.6 spec.\r
+  ///\r
+  EfiProcessorFamilyIntelPentiumM          = 0xB9,\r
+  ///\r
+  /// Inconsistent with specification here:  \r
+  /// This field is NOT defined in ProcSubClass spec0.9. It's introduced for SMBIOS2.6 spec.\r
+  ///\r
+  EfiProcessorFamilyIntelCeleronD          = 0xBA,\r
+  ///\r
+  /// Inconsistent with specification here:  \r
+  /// This field is NOT defined in ProcSubClass spec0.9. It's introduced for SMBIOS2.6 spec.\r
+  ///\r
+  EfiProcessorFamilyIntelPentiumD          = 0xBB,\r
+  ///\r
+  /// Inconsistent with specification here:  \r
+  /// This field is NOT defined in ProcSubClass spec0.9. It's introduced for SMBIOS2.6 spec.\r
+  ///\r
+  EfiProcessorFamilyIntelPentiumEx         = 0xBC,\r
+  ///\r
+  /// Inconsistent with specification here:  \r
+  /// This field is NOT defined in ProcSubClass spec0.9. It's introduced for SMBIOS2.6 spec.\r
+  ///\r
+  EfiProcessorFamilyIntelCoreSolo          = 0xBD,  \r
+  ///\r
+  /// Inconsistent with specification here:  \r
+  /// This field is NOT defined in ProcSubClass spec0.9. It's introduced for SMBIOS2.6 spec.\r
+  ///\r
+  EfiProcessorFamilyReserved               = 0xBE,  \r
+  ///\r
+  /// Inconsistent with specification here:  \r
+  /// This field is NOT defined in ProcSubClass spec0.9. It's introduced for SMBIOS2.6 spec.\r
+  ///\r
+  EfiProcessorFamilyIntelCore2             = 0xBF,\r
+  EfiProcessorFamilyIBM390                 = 0xC8,\r
+  EfiProcessorFamilyG4                     = 0xC9,\r
+  EfiProcessorFamilyG5                     = 0xCA,\r
+  ///\r
+  /// Inconsistent with specification here:  \r
+  /// This field is NOT defined in ProcSubClass spec0.9. It's introduced for SMBIOS2.6 spec.\r
+  ///\r
+  EfiProcessorFamilyG6                     = 0xCB,\r
+  ///\r
+  /// Inconsistent with specification here:  \r
+  /// This field is NOT defined in ProcSubClass spec0.9. It's introduced for SMBIOS2.6 spec.\r
+  ///\r
+  EfiProcessorFamilyzArchitectur           = 0xCC,\r
+  ///\r
+  /// Inconsistent with specification here:  \r
+  /// This field is NOT defined in ProcSubClass spec0.9. It's introduced for SMBIOS2.6 spec.\r
+  ///\r
+  EfiProcessorFamilyViaC7M                 = 0xD2,\r
+  ///\r
+  /// Inconsistent with specification here:  \r
+  /// This field is NOT defined in ProcSubClass spec0.9. It's introduced for SMBIOS2.6 spec.\r
+  ///\r
+  EfiProcessorFamilyViaC7D                 = 0xD3,\r
+  ///\r
+  /// Inconsistent with specification here:  \r
+  /// This field is NOT defined in ProcSubClass spec0.9. It's introduced for SMBIOS2.6 spec.\r
+  ///\r
+  EfiProcessorFamilyViaC7                  = 0xD4,\r
+  ///\r
+  /// Inconsistent with specification here:  \r
+  /// This field is NOT defined in ProcSubClass spec0.9. It's introduced for SMBIOS2.6 spec.\r
+  ///\r
+  EfiProcessorFamilyViaEden                = 0xD5,\r
+  EfiProcessorFamilyi860                   = 0xFA,\r
+  EfiProcessorFamilyi960                   = 0xFB,\r
+  ///\r
+  /// Inconsistent with specification here:  \r
+  /// This field is NOT defined in ProcSubClass spec0.9. It's introduced for SMBIOS2.6 spec.\r
+  ///\r
+  EfiProcessorFamilyIndicatorFamily2       = 0xFE,\r
+  ///\r
+  /// Inconsistent with specification here:  \r
+  /// This field is NOT defined in ProcSubClass spec0.9. It's introduced for SMBIOS2.6 spec.\r
+  ///\r
+  EfiProcessorFamilyReserved1              = 0xFF\r
 } EFI_PROCESSOR_FAMILY_DATA;\r
 \r
-typedef EFI_EXP_BASE10_DATA EFI_PROCESSOR_VOLTAGE_DATA;\r
-\r
-typedef EFI_PHYSICAL_ADDRESS EFI_PROCESSOR_APIC_BASE_ADDRESS_DATA;\r
-\r
-typedef UINT32 EFI_PROCESSOR_APIC_ID_DATA;\r
-\r
-typedef UINT32 EFI_PROCESSOR_APIC_VERSION_NUMBER_DATA;\r
+///\r
+/// This data record refers to the core voltage of the processor being defined. The unit of measurement \r
+/// of this data record is in volts.  \r
+///\r
+typedef EFI_EXP_BASE10_DATA         EFI_PROCESSOR_VOLTAGE_DATA;\r
+\r
+///\r
+/// This data record refers to the base address of the APIC of the processor being defined. This data \r
+/// record is a physical address location. \r
+///\r
+typedef EFI_PHYSICAL_ADDRESS        EFI_PROCESSOR_APIC_BASE_ADDRESS_DATA;\r
+\r
+///\r
+/// This data record refers to the ID of the APIC of the processor being defined. This data record is a \r
+/// 4-byte entry.  \r
+///\r
+typedef UINT32                      EFI_PROCESSOR_APIC_ID_DATA;\r
+\r
+///\r
+/// This data record refers to the version number of the APIC of the processor being defined. This data \r
+/// record is a 4-byte entry. \r
+///\r
+typedef UINT32                      EFI_PROCESSOR_APIC_VERSION_NUMBER_DATA;\r
 \r
 typedef enum {\r
   EfiProcessorIa32Microcode    = 1,\r
@@ -337,19 +596,32 @@ typedef enum {
   EfiProcessorIpfPalBMicrocode = 3\r
 } EFI_PROCESSOR_MICROCODE_TYPE;\r
 \r
-typedef struct {\r
-  EFI_PROCESSOR_MICROCODE_TYPE  ProcessorMicrocodeType;\r
-  UINT32                        ProcessorMicrocodeRevisionNumber;\r
+///\r
+/// This data record refers to the revision of the processor microcode that is loaded in the processor. \r
+/// This data record is a 4-byte entry. \r
+///\r
+typedef struct {\r
+  ///\r
+  /// Identifies what type of microcode the data is. \r
+  /// \r
+  EFI_PROCESSOR_MICROCODE_TYPE      ProcessorMicrocodeType;\r
+  ///\r
+  /// Indicates the revision number of this microcode. \r
+  ///\r
+  UINT32                            ProcessorMicrocodeRevisionNumber;\r
 } EFI_PROCESSOR_MICROCODE_REVISION_DATA;\r
 \r
-typedef struct {\r
-  UINT32      CpuStatus                 :3;\r
-  UINT32      Reserved1                 :3;\r
-  UINT32      SocketPopulated           :1;\r
-  UINT32      Reserved2                 :1;\r
-  UINT32      ApicEnable                :1;\r
-  UINT32      BootApplicationProcessor  :1;\r
-  UINT32      Reserved3                 :22;\r
+///\r
+/// This data record refers to the status of the processor.\r
+///\r
+typedef struct {\r
+  UINT32       CpuStatus                 :3; ///> Indicates the status of the processor. \r
+  UINT32       Reserved1                 :3; ///> Reserved for future use. Should be set to zero.  \r
+  UINT32       SocketPopulated           :1; ///> Indicates if the processor is socketed or not. \r
+  UINT32       Reserved2                 :1; ///> Reserved for future use. Should be set to zero. \r
+  UINT32       ApicEnable                :1; ///> Indicates if the APIC is enabled or not. \r
+  UINT32       BootApplicationProcessor  :1; ///> Indicates if this processor is the boot processor. \r
+  UINT32       Reserved3                 :22;///> Reserved for future use. Should be set to zero. \r
 } EFI_PROCESSOR_STATUS_DATA;\r
 \r
 typedef enum {\r
@@ -379,26 +651,88 @@ typedef enum {
   EfiProcessorSocket478              = 0xF,\r
   EfiProcessorSocket754              = 0x10,\r
   EfiProcessorSocket940              = 0x11,\r
+  ///\r
+  /// Inconsistent with specification here:  \r
+  /// This field is NOT defined in ProcSubClass spec0.9. It's introduced for SMBIOS2.6 spec.\r
+  ///\r
   EfiProcessorSocket939              = 0x12,\r
+  ///\r
+  /// Inconsistent with specification here:  \r
+  /// This field is NOT defined in ProcSubClass spec0.9. It's introduced for SMBIOS2.6 spec.\r
+  ///\r
   EfiProcessorSocketmPGA604          = 0x13,\r
+  ///\r
+  /// Inconsistent with specification here:  \r
+  /// This field is NOT defined in ProcSubClass spec0.9. It's introduced for SMBIOS2.6 spec.\r
+  ///\r
   EfiProcessorSocketLGA771           = 0x14,\r
+  ///\r
+  /// Inconsistent with specification here:  \r
+  /// This field is NOT defined in ProcSubClass spec0.9. It's introduced for SMBIOS2.6 spec.\r
+  ///\r
   EfiProcessorSocketLGA775           = 0x15\r
 \r
 } EFI_PROCESSOR_SOCKET_TYPE_DATA;\r
 \r
-typedef STRING_REF EFI_PROCESSOR_SOCKET_NAME_DATA;\r
-\r
-typedef EFI_INTER_LINK_DATA EFI_CACHE_ASSOCIATION_DATA;\r
-\r
+typedef STRING_REF                  EFI_PROCESSOR_SOCKET_NAME_DATA;\r
+\r
+///\r
+/// Inconsistent with specification here:  \r
+/// In MiscSubclass spec 0.9, the naming is EFI_PROCESSOR_CACHE_ASSOCIATION_DATA.\r
+/// Keep it unchanged for backward compatibilty.\r
+///\r
+typedef EFI_INTER_LINK_DATA         EFI_CACHE_ASSOCIATION_DATA;\r
+\r
+///\r
+/// This data record refers to the health status of the processor. \r
+///\r
+/// Inconsistent with specification here:  \r
+/// In MiscSubclass spec 0.9, the naming is EFI_PROCESSOR_HEALTH_STATUS_DATA.\r
+/// Keep it unchanged for backward compatibilty.\r
+///\r
 typedef enum {\r
   EfiProcessorHealthy        = 1,\r
   EfiProcessorPerfRestricted = 2,\r
-  EfiProcessorFuncRestricted = 3\r
+  EfiProcessorFuncRestricted = 3 \r
 } EFI_PROCESSOR_HEALTH_STATUS;\r
 \r
-typedef UINTN   EFI_PROCESSOR_PACKAGE_NUMBER_DATA;\r
-\r
-\r
+///\r
+/// This data record refers to the package number of this processor. Multiple logical processors can \r
+/// exist in a system and each logical processor can be correlated to the physical processor using this \r
+/// record type. \r
+///\r
+typedef UINTN                       EFI_PROCESSOR_PACKAGE_NUMBER_DATA;\r
+\r
+///\r
+/// Inconsistent with specification here:\r
+/// In ProcSubclass spec 0.9, the enumeration type data structure is NOT defined.\r
+/// The equivalent in spec is \r
+///      #define EFI_PROCESSOR_FREQUENCY_RECORD_NUMBER           0x00000001\r
+///      #define EFI_PROCESSOR_BUS_FREQUENCY_RECORD_NUMBER       0x00000002\r
+///      #define EFI_PROCESSOR_VERSION_RECORD_NUMBER             0x00000003\r
+///      #define EFI_PROCESSOR_MANUFACTURER_RECORD_NUMBER        0x00000004\r
+///      #define EFI_PROCESSOR_SERIAL_NUMBER_RECORD_NUMBER       0x00000005\r
+///      #define EFI_PROCESSOR_ID_RECORD_NUMBER                  0x00000006\r
+///      #define EFI_PROCESSOR_TYPE_RECORD_NUMBER                0x00000007\r
+///      #define EFI_PROCESSOR_FAMILY_RECORD_NUMBER              0x00000008\r
+///      #define EFI_PROCESSOR_VOLTAGE_RECORD_NUMBER             0x00000009\r
+///      #define EFI_PROCESSOR_APIC_BASE_ADDRESS_RECORD_NUMBER   0x0000000A\r
+///      #define EFI_PROCESSOR_APIC_ID_RECORD_NUMBER             0x0000000B\r
+///      #define EFI_PROCESSOR_APIC_VER_NUMBER_RECORD_NUMBER     0x0000000C\r
+///      #define EFI_PROCESSOR_MICROCODE_REVISION_RECORD_NUMBER  0x0000000D\r
+///      #define EFI_PROCESSOR_STATUS_RECORD_NUMBER              0x0000000E\r
+///      #define EFI_PROCESSOR_SOCKET_TYPE_RECORD_NUMBER         0x0000000F\r
+///      #define EFI_PROCESSOR_SOCKET_NAME_RECORD_NUMBER         0x00000010\r
+///      #define EFI_PROCESSOR_CACHE_ASSOCIATION_RECORD_NUMBER   0x00000011\r
+///      #define EFI_PROCESSOR_MAX_FREQUENCY_RECORD_NUMBER       0x00000012\r
+///      #define EFI_PROCESSOR_ASSET_TAG_RECORD_NUMBER           0x00000013\r
+///      #define EFI_PROCESSOR_MAX_FSB_FREQUENCY_RECORD_NUMBER   0x00000014\r
+///      #define EFI_PROCESSOR_PACKAGE_NUMBER_RECORD_NUMBER      0x00000015\r
+///      #define EFI_PROCESSOR_FREQUENCY_LIST_RECORD_NUMBER      0x00000016\r
+///      #define EFI_PROCESSOR_FSB_FREQUENCY_LIST_RECORD_NUMBER  0x00000017\r
+///      #define EFI_PROCESSOR_HEALTH_STATUS_RECORD_NUMBER       0x00000018\r
+///\r
+/// Keep the definition unchanged for backward compatibility.\r
 typedef enum {\r
   ProcessorCoreFrequencyRecordType     = 1,\r
   ProcessorFsbFrequencyRecordType      = 2,\r
@@ -426,6 +760,11 @@ typedef enum {
   ProcessorHealthStatusRecordType      = 24\r
 } EFI_CPU_VARIABLE_RECORD_TYPE;\r
 \r
+///\r
+/// Inconsistent with specification here:  \r
+/// In ProcSubclass spec 0.9, the union type data structure is NOT defined.\r
+/// It's implementation-specific to simplify the code logic.\r
+///\r
 typedef union {\r
   EFI_PROCESSOR_CORE_FREQUENCY_LIST_DATA  ProcessorCoreFrequencyList;\r
   EFI_PROCESSOR_FSB_FREQUENCY_LIST_DATA   ProcessorFsbFrequencyList;\r
@@ -453,32 +792,34 @@ typedef union {
 } EFI_CPU_VARIABLE_RECORD;\r
 \r
 typedef struct {\r
-  EFI_SUBCLASS_TYPE1_HEADER      DataRecordHeader;\r
-  EFI_CPU_VARIABLE_RECORD        VariableRecord;\r
+  EFI_SUBCLASS_TYPE1_HEADER         DataRecordHeader;\r
+  EFI_CPU_VARIABLE_RECORD           VariableRecord;\r
 } EFI_CPU_DATA_RECORD;\r
 \r
 #define EFI_CACHE_SUBCLASS_VERSION    0x00010000\r
 \r
-typedef EFI_EXP_BASE2_DATA  EFI_CACHE_SIZE_DATA;\r
-\r
-typedef EFI_EXP_BASE2_DATA  EFI_MAXIMUM_CACHE_SIZE_DATA;\r
-\r
-typedef EFI_EXP_BASE10_DATA EFI_CACHE_SPEED_DATA;\r
-\r
-typedef STRING_REF          EFI_CACHE_SOCKET_DATA;\r
-\r
-typedef struct {\r
-  UINT32  Other         :1;\r
-  UINT32  Unknown       :1;\r
-  UINT32  NonBurst      :1;\r
-  UINT32  Burst         :1;\r
-  UINT32  PipelineBurst :1;\r
-  UINT32  Asynchronous  :1;\r
-  UINT32  Synchronous   :1;\r
-  UINT32  Reserved      :25;\r
+typedef EFI_EXP_BASE2_DATA          EFI_CACHE_SIZE_DATA;\r
+///\r
+/// Inconsistent with specification here:  \r
+/// In MiscSubclass spec 0.9, the naming is EFI_CACHE_MAXIMUM_SIZE_DATA.\r
+/// Keep it unchanged for backward compatibilty.\r
+///\r
+typedef EFI_EXP_BASE2_DATA          EFI_MAXIMUM_CACHE_SIZE_DATA;\r
+typedef EFI_EXP_BASE10_DATA         EFI_CACHE_SPEED_DATA;\r
+typedef STRING_REF                  EFI_CACHE_SOCKET_DATA;\r
+\r
+typedef struct {\r
+  UINT32                            Other         :1;\r
+  UINT32                            Unknown       :1;\r
+  UINT32                            NonBurst      :1;\r
+  UINT32                            Burst         :1;\r
+  UINT32                            PipelineBurst :1;\r
+  UINT32                            Asynchronous  :1;\r
+  UINT32                            Synchronous   :1;\r
+  UINT32                            Reserved      :25;\r
 } EFI_CACHE_SRAM_TYPE_DATA;\r
 \r
-typedef EFI_CACHE_SRAM_TYPE_DATA EFI_CACHE_SRAM_INSTALL_DATA;\r
+typedef EFI_CACHE_SRAM_TYPE_DATA    EFI_CACHE_SRAM_INSTALL_DATA;\r
 \r
 typedef enum {\r
   EfiCacheErrorOther     = 1,\r
@@ -505,25 +846,29 @@ typedef enum {
   EfiCacheAssociativity4Way         = 5,\r
   EfiCacheAssociativityFully        = 6,\r
   EfiCacheAssociativity8Way         = 7,\r
-  EfiCacheAssociativity16Way        = 8,\r
-  EfiCacheAssociativity24Way        = 9\r
+  EfiCacheAssociativity16Way        = 8\r
 } EFI_CACHE_ASSOCIATIVITY_DATA;\r
 \r
-typedef struct {\r
-  UINT32    Level           :3;\r
-  UINT32    Socketed        :1;\r
-  UINT32    Reserved2       :1;\r
-  UINT32    Location        :2;\r
-  UINT32    Enable          :1;\r
-  UINT32    OperationalMode :2;\r
-  UINT32    Reserved1       :22;\r
+///\r
+/// Inconsistent with specification here:  \r
+/// In CacheSubclass 0.9 spec. It defines the field type as UINT16.\r
+/// In fact, it should be UINT32 type since it refers to a 32bit width data.\r
+///\r
+typedef struct {\r
+  UINT32                            Level           :3;\r
+  UINT32                            Socketed        :1;\r
+  UINT32                            Reserved2       :1;\r
+  UINT32                            Location        :2;\r
+  UINT32                            Enable          :1;\r
+  UINT32                            OperationalMode :2;\r
+  UINT32                            Reserved1       :22;\r
 } EFI_CACHE_CONFIGURATION_DATA;\r
 \r
-#define EFI_CACHE_L1      1\r
-#define EFI_CACHE_L2      2\r
-#define EFI_CACHE_L3      3\r
-#define EFI_CACHE_L4      4\r
-#define EFI_CACHE_LMAX    EFI_CACHE_L4\r
+#define EFI_CACHE_L1            1\r
+#define EFI_CACHE_L2            2\r
+#define EFI_CACHE_L3            3\r
+#define EFI_CACHE_L4            4\r
+#define EFI_CACHE_LMAX          EFI_CACHE_L4\r
 \r
 #define EFI_CACHE_SOCKETED      1\r
 #define EFI_CACHE_NOT_SOCKETED  0\r
@@ -535,8 +880,8 @@ typedef enum {
   EfiCacheUnknown  = 3\r
 } EFI_CACHE_LOCATION;\r
 \r
-#define EFI_CACHE_ENABLED    1\r
-#define EFI_CACHE_DISABLED   0\r
+#define EFI_CACHE_ENABLED       1\r
+#define EFI_CACHE_DISABLED      0\r
 \r
 typedef enum {\r
   EfiCacheWriteThrough = 0,\r
@@ -560,49 +905,80 @@ typedef enum {
   CacheConfigRecordType            = 10\r
 } EFI_CACHE_VARIABLE_RECORD_TYPE;\r
 \r
-\r
+///\r
+/// Inconsistent with specification here:  \r
+/// In CacheSubclass spec0.9, the union type data structure is NOT defined.\r
+/// It's implementation-specific to simplify the code logic.\r
+///\r
 typedef union {\r
-  EFI_CACHE_SIZE_DATA             CacheSize;\r
-  EFI_MAXIMUM_CACHE_SIZE_DATA     MaximumCacheSize;\r
-  EFI_CACHE_SPEED_DATA            CacheSpeed;\r
-  EFI_CACHE_SOCKET_DATA           CacheSocket;\r
-  EFI_CACHE_SRAM_TYPE_DATA        CacheSramType;\r
-  EFI_CACHE_SRAM_TYPE_DATA        CacheInstalledSramType;\r
-  EFI_CACHE_ERROR_TYPE_DATA       CacheErrorType;\r
-  EFI_CACHE_TYPE_DATA             CacheType;\r
-  EFI_CACHE_ASSOCIATIVITY_DATA    CacheAssociativity;\r
-  EFI_CACHE_CONFIGURATION_DATA    CacheConfig;\r
-  EFI_CACHE_ASSOCIATION_DATA      CacheAssociation;\r
+  EFI_CACHE_SIZE_DATA                         CacheSize;\r
+  EFI_MAXIMUM_CACHE_SIZE_DATA                 MaximumCacheSize;\r
+  EFI_CACHE_SPEED_DATA                        CacheSpeed;\r
+  EFI_CACHE_SOCKET_DATA                       CacheSocket;\r
+  EFI_CACHE_SRAM_TYPE_DATA                    CacheSramType;\r
+  EFI_CACHE_SRAM_TYPE_DATA                    CacheInstalledSramType;\r
+  EFI_CACHE_ERROR_TYPE_DATA                   CacheErrorType;\r
+  EFI_CACHE_TYPE_DATA                         CacheType;\r
+  EFI_CACHE_ASSOCIATIVITY_DATA                CacheAssociativity;\r
+  EFI_CACHE_CONFIGURATION_DATA                CacheConfig;\r
+  EFI_CACHE_ASSOCIATION_DATA                  CacheAssociation;\r
 } EFI_CACHE_VARIABLE_RECORD;\r
 \r
 typedef struct {\r
-   EFI_SUBCLASS_TYPE1_HEADER      DataRecordHeader;\r
-   EFI_CACHE_VARIABLE_RECORD      VariableRecord;\r
+   EFI_SUBCLASS_TYPE1_HEADER        DataRecordHeader;\r
+   EFI_CACHE_VARIABLE_RECORD        VariableRecord;\r
 } EFI_CACHE_DATA_RECORD;\r
 \r
 #define EFI_MEMORY_SUBCLASS_VERSION     0x0100\r
-\r
-\r
-#define EFI_MEMORY_SIZE_RECORD_NUMBER                 0x00000001\r
+#define EFI_MEMORY_SIZE_RECORD_NUMBER   0x00000001\r
 \r
 typedef enum _EFI_MEMORY_REGION_TYPE {\r
-  EfiMemoryRegionMemory                       = 0x01,\r
-  EfiMemoryRegionReserved                     = 0x02,\r
-  EfiMemoryRegionAcpi                         = 0x03,\r
-  EfiMemoryRegionNvs                          = 0x04\r
+  EfiMemoryRegionMemory             = 0x01,\r
+  EfiMemoryRegionReserved           = 0x02,\r
+  EfiMemoryRegionAcpi               = 0x03,\r
+  EfiMemoryRegionNvs                = 0x04\r
 } EFI_MEMORY_REGION_TYPE;\r
 \r
-typedef struct {\r
-  UINT32                      ProcessorNumber;\r
-  UINT16                      StartBusNumber;\r
-  UINT16                      EndBusNumber;\r
-  EFI_MEMORY_REGION_TYPE      MemoryRegionType;\r
-  EFI_EXP_BASE2_DATA          MemorySize;\r
-  EFI_PHYSICAL_ADDRESS        MemoryStartAddress;\r
+///\r
+/// This data record refers to the size of a memory region. The regions that are \r
+/// described can refer to physical memory, memory-mapped I/O, or reserved BIOS memory regions. \r
+/// The unit of measurement of this data record is in bytes.  \r
+///\r
+typedef struct {\r
+  ///\r
+  /// A zero-based value that indicates which processor(s) can access the memory region. \r
+  /// A value of 0xFFFF indicates the region is accessible by all processors. \r
+  ///\r
+  UINT32                            ProcessorNumber;\r
+  ///\r
+  /// A zero-based value that indicates the starting bus that can access the memory region.  \r
+  ///\r
+  UINT16                            StartBusNumber;\r
+  ///\r
+  /// A zero-based value that indicates the ending bus that can access the memory region. \r
+  /// A value of 0xFF for a PCI system indicates the region is accessible by all buses and \r
+  /// is global in scope. An example of the EndBusNumber not being 0xFF is a system \r
+  /// with two or more peer-to-host PCI bridges. \r
+  ///\r
+  UINT16                            EndBusNumber;\r
+  ///\r
+  /// The type of memory region from the operating system's point of view. \r
+  /// MemoryRegionType values are equivalent to the legacy INT 15 AX = E820 BIOS \r
+  /// command values. \r
+  ///\r
+  EFI_MEMORY_REGION_TYPE            MemoryRegionType;\r
+  ///\r
+  /// The size of the memory region in bytes. \r
+  ///\r
+  EFI_EXP_BASE2_DATA                MemorySize;\r
+  ///\r
+  /// The starting physical address of the memory region. \r
+  ///\r
+  EFI_PHYSICAL_ADDRESS              MemoryStartAddress;\r
 } EFI_MEMORY_SIZE_DATA;\r
 \r
 \r
-#define EFI_MEMORY_ARRAY_LOCATION_RECORD_NUMBER       0x00000002\r
+#define EFI_MEMORY_ARRAY_LOCATION_RECORD_NUMBER    0x00000002\r
 \r
 typedef enum _EFI_MEMORY_ARRAY_LOCATION {\r
   EfiMemoryArrayLocationOther                 = 0x01,\r
@@ -628,7 +1004,7 @@ typedef enum _EFI_MEMORY_ARRAY_USE {
   EfiMemoryArrayUseVideoMemory                = 0x04,\r
   EfiMemoryArrayUseFlashMemory                = 0x05,\r
   EfiMemoryArrayUseNonVolatileRam             = 0x06,\r
-  EfiMemoryArrayUseCacheMemory                = 0x07,\r
+  EfiMemoryArrayUseCacheMemory                = 0x07\r
 } EFI_MEMORY_ARRAY_USE;\r
 \r
 typedef enum _EFI_MEMORY_ERROR_CORRECTION {\r
@@ -638,19 +1014,48 @@ typedef enum _EFI_MEMORY_ERROR_CORRECTION {
   EfiMemoryErrorCorrectionParity              = 0x04,\r
   EfiMemoryErrorCorrectionSingleBitEcc        = 0x05,\r
   EfiMemoryErrorCorrectionMultiBitEcc         = 0x06,\r
-  EfiMemoryErrorCorrectionCrc                 = 0x07,\r
+  EfiMemoryErrorCorrectionCrc                 = 0x07\r
 } EFI_MEMORY_ERROR_CORRECTION;\r
 \r
-typedef struct {\r
-  EFI_MEMORY_ARRAY_LOCATION   MemoryArrayLocation;\r
-  EFI_MEMORY_ARRAY_USE        MemoryArrayUse;\r
-  EFI_MEMORY_ERROR_CORRECTION MemoryErrorCorrection;\r
-  EFI_EXP_BASE2_DATA          MaximumMemoryCapacity;\r
-  UINT16                      NumberMemoryDevices;\r
+///\r
+/// This data record refers to the physical memory array. This data record is a structure.  \r
+/// The type definition structure for EFI_MEMORY_ARRAY_LOCATION_DATA is in SMBIOS 2.3.4: \r
+/// - Table 3.3.17.1, Type 16, Offset 0x4 \r
+/// - Table 3.3.17.2, Type 16, Offset 0x5 \r
+/// - Table 3.3.17.3, Type 16, with the following offsets: \r
+///     -- Offset 0x6 \r
+///     -- Offset 0x7 \r
+///     -- Offset 0xB \r
+///     -- Offset 0xD \r
+/// \r
+typedef struct {\r
+  ///\r
+  /// The physical location of the memory array. \r
+  ///\r
+  EFI_MEMORY_ARRAY_LOCATION         MemoryArrayLocation;\r
+  ///\r
+  /// The memory array usage.\r
+  ///\r
+  EFI_MEMORY_ARRAY_USE              MemoryArrayUse;\r
+  ///\r
+  /// The primary error correction or detection supported by this memory array.\r
+  ///\r
+  EFI_MEMORY_ERROR_CORRECTION       MemoryErrorCorrection;\r
+  ///\r
+  /// The maximum memory capacity size in kilobytes. If capacity is unknown, then \r
+  /// values of MaximumMemoryCapacity.Value = 0x00 and \r
+  /// MaximumMemoryCapacity.Exponent = 0x8000 are used.\r
+  ///\r
+  EFI_EXP_BASE2_DATA                MaximumMemoryCapacity;\r
+  ///\r
+  /// The number of memory slots or sockets that are available for memory devices  \r
+  /// in this array.    \r
+  ///\r
+  UINT16                            NumberMemoryDevices;\r
 } EFI_MEMORY_ARRAY_LOCATION_DATA;\r
 \r
 \r
-#define EFI_MEMORY_ARRAY_LINK_RECORD_NUMBER           0x00000003\r
+#define EFI_MEMORY_ARRAY_LINK_RECORD_NUMBER    0x00000003\r
 \r
 typedef enum _EFI_MEMORY_FORM_FACTOR {\r
   EfiMemoryFormFactorOther                    = 0x01,\r
@@ -667,6 +1072,10 @@ typedef enum _EFI_MEMORY_FORM_FACTOR {
   EfiMemoryFormFactorRimm                     = 0x0C,\r
   EfiMemoryFormFactorSodimm                   = 0x0D,\r
   EfiMemoryFormFactorSrimm                    = 0x0E,\r
+  ///\r
+  /// Inconsistent with specification here:  \r
+  /// This field is NOT defined in MemSubClass spec0.9. It's introduced for SMBIOS2.6 spec.\r
+  ///\r
   EfiMemoryFormFactorFbDimm                   = 0x0F\r
 } EFI_MEMORY_FORM_FACTOR;\r
 \r
@@ -689,25 +1098,33 @@ typedef enum _EFI_MEMORY_ARRAY_TYPE {
   EfiMemoryTypeSgram                          = 0x10,\r
   EfiMemoryTypeRdram                          = 0x11,\r
   EfiMemoryTypeDdr                            = 0x12,\r
+  ///\r
+  /// Inconsistent with specification here:  \r
+  /// This field is NOT defined in MemSubClass spec0.9. It's introduced for SMBIOS2.6 spec.\r
+  ///\r
   EfiMemoryTypeDdr2                           = 0x13,\r
+  ///\r
+  /// Inconsistent with specification here:  \r
+  /// This field is NOT defined in MemSubClass spec0.9. It's introduced for SMBIOS2.6 spec.\r
+  ///\r
   EfiMemoryTypeDdr2FbDimm                     = 0x14\r
 } EFI_MEMORY_ARRAY_TYPE;\r
 \r
 typedef struct {\r
-  UINT32                      Reserved        :1;\r
-  UINT32                      Other           :1;\r
-  UINT32                      Unknown         :1;\r
-  UINT32                      FastPaged       :1;\r
-  UINT32                      StaticColumn    :1;\r
-  UINT32                      PseudoStatic    :1;\r
-  UINT32                      Rambus          :1;\r
-  UINT32                      Synchronous     :1;\r
-  UINT32                      Cmos            :1;\r
-  UINT32                      Edo             :1;\r
-  UINT32                      WindowDram      :1;\r
-  UINT32                      CacheDram       :1;\r
-  UINT32                      Nonvolatile     :1;\r
-  UINT32                      Reserved1       :19;\r
+  UINT32                            Reserved        :1;\r
+  UINT32                            Other           :1;\r
+  UINT32                            Unknown         :1;\r
+  UINT32                            FastPaged       :1;\r
+  UINT32                            StaticColumn    :1;\r
+  UINT32                            PseudoStatic    :1;\r
+  UINT32                            Rambus          :1;\r
+  UINT32                            Synchronous     :1;\r
+  UINT32                            Cmos            :1;\r
+  UINT32                            Edo             :1;\r
+  UINT32                            WindowDram      :1;\r
+  UINT32                            CacheDram       :1;\r
+  UINT32                            Nonvolatile     :1;\r
+  UINT32                            Reserved1       :19;\r
 } EFI_MEMORY_TYPE_DETAIL;\r
 \r
 typedef enum {\r
@@ -717,50 +1134,167 @@ typedef enum {
   EfiMemoryStateError        = 3,\r
   EfiMemoryStateAbsent       = 4,\r
   EfiMemoryStateDisabled     = 5,\r
+  ///\r
+  /// Inconsistent with specification here:  \r
+  /// This field is NOT defined in MemSubClass spec0.9. It's introduced for SMBIOS2.6 spec.\r
+  ///\r
   EfiMemoryStatePartial      = 6\r
 } EFI_MEMORY_STATE;\r
 \r
-typedef struct {\r
-  STRING_REF                  MemoryDeviceLocator;\r
-  STRING_REF                  MemoryBankLocator;\r
-  STRING_REF                  MemoryManufacturer;\r
-  STRING_REF                  MemorySerialNumber;\r
-  STRING_REF                  MemoryAssetTag;\r
-  STRING_REF                  MemoryPartNumber;\r
-  EFI_INTER_LINK_DATA         MemoryArrayLink;\r
-  EFI_INTER_LINK_DATA         MemorySubArrayLink;\r
-  UINT16                      MemoryTotalWidth;\r
-  UINT16                      MemoryDataWidth;\r
-  EFI_EXP_BASE2_DATA          MemoryDeviceSize;\r
-  EFI_MEMORY_FORM_FACTOR      MemoryFormFactor;\r
-  UINT8                       MemoryDeviceSet;\r
-  EFI_MEMORY_ARRAY_TYPE       MemoryType;\r
-  EFI_MEMORY_TYPE_DETAIL      MemoryTypeDetail;\r
-  EFI_EXP_BASE10_DATA         MemorySpeed;\r
-  EFI_MEMORY_STATE            MemoryState;\r
+///\r
+/// This data record describes a memory device. This data record is a structure. \r
+/// The type definition structure for EFI_MEMORY_ARRAY_LINK_DATA is in SMBIOS 2.3.4.\r
+///\r
+typedef struct {\r
+  ///\r
+  /// A string that identifies the physically labeled socket or board position where the \r
+  /// memory device is located.\r
+  ///\r
+  STRING_REF                        MemoryDeviceLocator;\r
+  ///\r
+  /// A string denoting the physically labeled bank where the memory device is located. \r
+  ///\r
+  STRING_REF                        MemoryBankLocator;\r
+  ///\r
+  /// A string denoting the memory manufacturer.  \r
+  ///  \r
+  STRING_REF                        MemoryManufacturer;\r
+  ///\r
+  /// A string denoting the serial number of the memory device.  \r
+  ///\r
+  STRING_REF                        MemorySerialNumber;\r
+  ///\r
+  /// The asset tag of the memory device. \r
+  ///\r
+  STRING_REF                        MemoryAssetTag;\r
+  ///\r
+  /// A string denoting the part number of the memory device.  \r
+  ///\r
+  STRING_REF                        MemoryPartNumber;\r
+  ///\r
+  /// A link to a memory array structure set. \r
+  ///\r
+  EFI_INTER_LINK_DATA               MemoryArrayLink;\r
+  ///\r
+  /// A link to a memory array structure set.\r
+  ///\r
+  EFI_INTER_LINK_DATA               MemorySubArrayLink;\r
+  ///\r
+  /// The total width in bits of this memory device. If there are no error correcting bits, \r
+  /// then the total width equals the data width. If the width is unknown, then set the field \r
+  /// to 0xFFFF. \r
+  ///\r
+  UINT16                            MemoryTotalWidth;\r
+  ///\r
+  /// The data width in bits of the memory device. A data width of 0x00 and a total width \r
+  /// of 0x08 indicate that the device is used solely for error correction. \r
+  ///\r
+  UINT16                            MemoryDataWidth;\r
+  ///\r
+  /// The size in bytes of the memory device. A value of 0x00 denotes that no device is \r
+  /// installed, while a value of all Fs denotes that the size is not known.\r
+  ///\r
+  EFI_EXP_BASE2_DATA                MemoryDeviceSize;\r
+  ///\r
+  /// The form factor of the memory device. \r
+  ///\r
+  EFI_MEMORY_FORM_FACTOR            MemoryFormFactor;\r
+  ///\r
+  /// A memory device set that must be populated with all devices of the same type and \r
+  /// size. A value of 0x00 indicates that the device is not part of any set. A value of 0xFF \r
+  /// indicates that the attribute is unknown. Any other value denotes the set number. \r
+  ///\r
+  UINT8                             MemoryDeviceSet;\r
+  ///\r
+  /// The memory type in the socket. \r
+  ///\r
+  EFI_MEMORY_ARRAY_TYPE             MemoryType;\r
+  ///\r
+  /// The memory type details. \r
+  ///\r
+  EFI_MEMORY_TYPE_DETAIL            MemoryTypeDetail;\r
+  ///\r
+  /// The memory speed in megahertz (MHz). A value of 0x00 denotes that \r
+  /// the speed is unknown.\r
+       /// Inconsistent with specification here:  \r
+       /// In MemSubclass spec 0.9, the naming is MemoryTypeSpeed.\r
+       /// Keep it unchanged for backward compatibilty.\r
+       ///\r
+  EFI_EXP_BASE10_DATA               MemorySpeed;\r
+  ///\r
+  /// The memory state. \r
+  ///\r
+  EFI_MEMORY_STATE                  MemoryState;\r
 } EFI_MEMORY_ARRAY_LINK_DATA;\r
 \r
 \r
-#define EFI_MEMORY_ARRAY_START_ADDRESS_RECORD_NUMBER  0x00000004\r
-\r
-typedef struct {\r
-  EFI_PHYSICAL_ADDRESS        MemoryArrayStartAddress;\r
-  EFI_PHYSICAL_ADDRESS        MemoryArrayEndAddress;\r
-  EFI_INTER_LINK_DATA         PhysicalMemoryArrayLink;\r
-  UINT16                      MemoryArrayPartitionWidth;\r
+#define EFI_MEMORY_ARRAY_START_ADDRESS_RECORD_NUMBER    0x00000004\r
+\r
+///\r
+/// This data record refers to a specified physical memory array associated with \r
+/// a given memory range. \r
+/// \r
+typedef struct {\r
+  ///\r
+  /// The starting physical address in bytes of memory mapped to a specified physical \r
+  /// memory array. \r
+  ///\r
+  EFI_PHYSICAL_ADDRESS              MemoryArrayStartAddress;\r
+  ///\r
+  /// The last physical address in bytes of memory mapped to a specified physical memory \r
+  /// array.  \r
+  ///\r
+  EFI_PHYSICAL_ADDRESS              MemoryArrayEndAddress;\r
+  ///\r
+  /// See Physical Memory Array (Type 16) for physical memory array structures.\r
+  ///\r
+  EFI_INTER_LINK_DATA               PhysicalMemoryArrayLink;\r
+  ///\r
+  /// The number of memory devices that form a single row of memory for the address \r
+  /// partition.  \r
+  ///\r
+  UINT16                            MemoryArrayPartitionWidth;\r
 } EFI_MEMORY_ARRAY_START_ADDRESS_DATA;\r
 \r
 \r
-#define EFI_MEMORY_DEVICE_START_ADDRESS_RECORD_NUMBER 0x00000005\r
-\r
-typedef struct {\r
-  EFI_PHYSICAL_ADDRESS        MemoryDeviceStartAddress;\r
-  EFI_PHYSICAL_ADDRESS        MemoryDeviceEndAddress;\r
-  EFI_INTER_LINK_DATA         PhysicalMemoryDeviceLink;\r
-  EFI_INTER_LINK_DATA         PhysicalMemoryArrayLink;\r
-  UINT8                       MemoryDevicePartitionRowPosition;\r
-  UINT8                       MemoryDeviceInterleavePosition;\r
-  UINT8                       MemoryDeviceInterleaveDataDepth;\r
+#define EFI_MEMORY_DEVICE_START_ADDRESS_RECORD_NUMBER    0x00000005\r
+\r
+///\r
+/// This data record refers to a physical memory device that is associated with \r
+/// a given memory range.\r
+/// \r
+typedef struct {\r
+  ///\r
+  /// The starting physical address that is associated with the device. \r
+  ///\r
+  EFI_PHYSICAL_ADDRESS              MemoryDeviceStartAddress;\r
+  ///\r
+  /// The ending physical address that is associated with the device. \r
+  ///\r
+  EFI_PHYSICAL_ADDRESS              MemoryDeviceEndAddress;\r
+  ///\r
+  /// A link to the memory device data structure. \r
+  ///\r
+  EFI_INTER_LINK_DATA               PhysicalMemoryDeviceLink;\r
+  /// \r
+  /// A link to the memory array data structure. \r
+  ///\r
+  EFI_INTER_LINK_DATA               PhysicalMemoryArrayLink;\r
+  ///\r
+  /// The position of the memory device in a row. A value of 0x00 is reserved and a value \r
+  /// of 0xFF indicates that the position is unknown. \r
+  ///\r
+  UINT8                             MemoryDevicePartitionRowPosition;\r
+  ///\r
+  /// The position of the device in an interleave. \r
+  ///\r
+  UINT8                             MemoryDeviceInterleavePosition;\r
+  ///\r
+  /// The maximum number of consecutive rows from the device that are accessed in a \r
+  /// single interleave transfer. A value of 0x00 indicates that the device is not interleaved \r
+  /// and a value of 0xFF indicates that the interleave configuration is unknown. \r
+  ///\r
+  UINT8                             MemoryDeviceInterleaveDataDepth;\r
 } EFI_MEMORY_DEVICE_START_ADDRESS_DATA;\r
 \r
 \r
@@ -768,7 +1302,7 @@ typedef struct {
 //  Memory. Channel Device Type -  SMBIOS Type 37\r
 //\r
 \r
-#define EFI_MEMORY_CHANNEL_TYPE_RECORD_NUMBER         0x00000006\r
+#define EFI_MEMORY_CHANNEL_TYPE_RECORD_NUMBER    0x00000006\r
 \r
 typedef enum _EFI_MEMORY_CHANNEL_TYPE {\r
   EfiMemoryChannelTypeOther                   = 1,\r
@@ -777,25 +1311,71 @@ typedef enum _EFI_MEMORY_CHANNEL_TYPE {
   EfiMemoryChannelTypeSyncLink                = 4\r
 } EFI_MEMORY_CHANNEL_TYPE;\r
 \r
-typedef struct {\r
-  EFI_MEMORY_CHANNEL_TYPE     MemoryChannelType;\r
-  UINT8                       MemoryChannelMaximumLoad;\r
-  UINT8                       MemoryChannelDeviceCount;\r
+///\r
+/// This data record refers the type of memory that is associated with the channel. This data record is a \r
+/// structure. \r
+/// The type definition structure for EFI_MEMORY_CHANNEL_TYPE_DATA is in SMBIOS 2.3.4, \r
+/// Table 3.3.38, Type 37, with the following offsets: \r
+///   - Offset 0x4 \r
+///   - Offset 0x5 \r
+///   - Offset 0x6\r
+/// \r
+typedef struct {\r
+  ///\r
+  /// The type of memory that is associated with the channel. \r
+  /// \r
+  EFI_MEMORY_CHANNEL_TYPE           MemoryChannelType;\r
+  ///\r
+  /// The maximum load that is supported by the channel.\r
+  ///\r
+  UINT8                             MemoryChannelMaximumLoad;\r
+  ///\r
+  /// The number of memory devices on this channel. \r
+  ///\r
+  UINT8                             MemoryChannelDeviceCount;\r
 } EFI_MEMORY_CHANNEL_TYPE_DATA;\r
 \r
-#define EFI_MEMORY_CHANNEL_DEVICE_RECORD_NUMBER       0x00000007\r
-\r
-typedef struct {\r
-  UINT8                       DeviceId;\r
-  EFI_INTER_LINK_DATA         DeviceLink;\r
-  UINT8                       MemoryChannelDeviceLoad;\r
+#define EFI_MEMORY_CHANNEL_DEVICE_RECORD_NUMBER    0x00000007\r
+\r
+///\r
+/// This data record refers to the memory device that is associated with the memory channel. This data \r
+/// record is a structure. \r
+/// The type definition structure for EFI_MEMORY_CHANNEL_DEVICE_DATA is in SMBIOS 2.3.4, \r
+/// Table 3.3.38, Type 37, with the following offsets:  \r
+///   - Offset 0x7 \r
+///   - Offset 0x8\r
+///\r
+typedef struct {\r
+  ///\r
+  /// A number between one and MemoryChannelDeviceCount plus an arbitrary base.  \r
+  /// \r
+  UINT8                             DeviceId;\r
+  ///\r
+  /// The Link of the associated memory device. See Memory Device (Type 17) for \r
+  /// memory devices. \r
+  ///\r
+  EFI_INTER_LINK_DATA               DeviceLink;\r
+  ///\r
+  /// The number of load units that this device consumes. \r
+  ///\r
+  UINT8                             MemoryChannelDeviceLoad;\r
 } EFI_MEMORY_CHANNEL_DEVICE_DATA;\r
 \r
 //\r
 //  Memory. Controller Information - SMBIOS Type 5\r
 //\r
-#define EFI_MEMORY_CONTROLLER_INFORMATION_RECORD_NUMBER 0x00000008\r
-\r
+///\r
+/// Inconsistent with specification here:  \r
+/// In MemSubclass spec 0.9, the following data structures are NOT defined.\r
+/// It's introduced for SmBios 2.6 type 5.\r
+///\r
+#define EFI_MEMORY_CONTROLLER_INFORMATION_RECORD_NUMBER    0x00000008\r
+\r
+///\r
+/// Inconsistent with specification here:  \r
+/// In MemSubclass spec 0.9, the following data structures are NOT defined.\r
+/// It's introduced for SmBios 2.6 type 5.\r
+///\r
 typedef enum {  \r
   EfiErrorDetectingMethodOther   = 1,\r
   EfiErrorDetectingMethodUnknown = 2,\r
@@ -807,16 +1387,26 @@ typedef enum {
   EfiErrorDetectingMethodCrc     = 8\r
 } EFI_MEMORY_ERROR_DETECT_METHOD_TYPE;\r
 \r
-typedef struct {\r
-  UINT8  Other                 :1;\r
-  UINT8  Unknown               :1;\r
-  UINT8  None                  :1;\r
-  UINT8  SingleBitErrorCorrect :1;\r
-  UINT8  DoubleBitErrorCorrect :1;\r
-  UINT8  ErrorScrubbing        :1;\r
-  UINT8  Reserved              :2;\r
+///\r
+/// Inconsistent with specification here:  \r
+/// In MemSubclass spec 0.9, the following data structures are NOT defined.\r
+/// It's introduced for SmBios 2.6 type 5.\r
+///\r
+typedef struct {\r
+  UINT8                             Other                 :1;\r
+  UINT8                             Unknown               :1;\r
+  UINT8                             None                  :1;\r
+  UINT8                             SingleBitErrorCorrect :1;\r
+  UINT8                             DoubleBitErrorCorrect :1;\r
+  UINT8                             ErrorScrubbing        :1;\r
+  UINT8                             Reserved              :2;\r
 } EFI_MEMORY_ERROR_CORRECT_CAPABILITY;\r
 \r
+///\r
+/// Inconsistent with specification here:  \r
+/// In MemSubclass spec 0.9, the following data structures are NOT defined.\r
+/// It's introduced for SmBios 2.6 type 5.\r
+///\r
 typedef enum {  \r
   EfiMemoryInterleaveOther      = 1,\r
   EfiMemoryInterleaveUnknown    = 2,\r
@@ -827,37 +1417,79 @@ typedef enum {
   EfiMemoryInterleaveSixteenWay = 7\r
 } EFI_MEMORY_SUPPORT_INTERLEAVE_TYPE;\r
 \r
-typedef struct {\r
-  UINT16  Other                 :1;\r
-  UINT16  Unknown               :1;\r
-  UINT16  SeventyNs             :1;\r
-  UINT16  SixtyNs               :1;\r
-  UINT16  FiftyNs               :1;\r
-  UINT16  Reserved              :11;\r
+///\r
+/// Inconsistent with specification here:  \r
+/// In MemSubclass spec 0.9, the following data structures are NOT defined.\r
+/// It's introduced for SmBios 2.6 type 5.\r
+///\r
+typedef struct {\r
+  UINT16                            Other    :1;\r
+  UINT16                            Unknown  :1;\r
+  UINT16                            SeventyNs:1;\r
+  UINT16                            SixtyNs  :1;\r
+  UINT16                            FiftyNs  :1;\r
+  UINT16                            Reserved :11;\r
 } EFI_MEMORY_SPEED_TYPE;\r
 \r
-typedef struct {\r
-  UINT16  Other                 :1;\r
-  UINT16  Unknown               :1;\r
-  UINT16  Standard              :1;\r
-  UINT16  FastPageMode          :1;\r
-  UINT16  EDO                   :1;\r
-  UINT16  Parity                :1;\r
-  UINT16  ECC                   :1;\r
-  UINT16  SIMM                  :1;\r
-  UINT16  DIMM                  :1;\r
-  UINT16  BurstEdo              :1;\r
-  UINT16  SDRAM                 :1;\r
-  UINT16  Reserved              :5;\r
+///\r
+/// Inconsistent with specification here:  \r
+/// In MemSubclass spec 0.9, the following data structures are NOT defined.\r
+/// It's introduced for SmBios 2.6 type 5.\r
+///\r
+typedef struct {\r
+  UINT16                            Other       :1;\r
+  UINT16                            Unknown     :1;\r
+  UINT16                            Standard    :1;\r
+  UINT16                            FastPageMode:1;\r
+  UINT16                            EDO         :1;\r
+  UINT16                            Parity      :1;\r
+  UINT16                            ECC         :1;\r
+  UINT16                            SIMM        :1;\r
+  UINT16                            DIMM        :1;\r
+  UINT16                            BurstEdo    :1;\r
+  UINT16                            SDRAM       :1;\r
+  UINT16                            Reserved    :5;\r
 } EFI_MEMORY_SUPPORTED_TYPE;\r
 \r
+///\r
+/// Inconsistent with specification here:  \r
+/// In MemSubclass spec 0.9, the following data structures are NOT defined.\r
+/// It's introduced for SmBios 2.6 type 5.\r
+///\r
 typedef struct {\r
-  UINT8  Five                  :1;\r
-  UINT8  There                 :1;\r
-  UINT8  Two                   :1;\r
-  UINT8  Reserved              :5;\r
+  UINT8                             Five    :1;\r
+  UINT8                             Three   :1;\r
+  UINT8                             Two     :1;\r
+  UINT8                             Reserved:5;\r
 } EFI_MEMORY_MODULE_VOLTAGE_TYPE;\r
 \r
+///\r
+/// EFI_MEMORY_CONTROLLER_INFORMATION is obsolete\r
+/// Use EFI_MEMORY_CONTROLLER_INFORMATION_DATA instead\r
+///\r
+/// Inconsistent with specification here:  \r
+/// In MemSubclass spec 0.9, the following data structures are NOT defined.\r
+/// It's introduced for SmBios 2.6 type 5.\r
+///\r
+typedef struct {\r
+  EFI_MEMORY_ERROR_DETECT_METHOD_TYPE ErrorDetectingMethod;\r
+  EFI_MEMORY_ERROR_CORRECT_CAPABILITY ErrorCorrectingCapability;\r
+  EFI_MEMORY_SUPPORT_INTERLEAVE_TYPE  MemorySupportedInterleave;\r
+  EFI_MEMORY_SUPPORT_INTERLEAVE_TYPE  MemoryCurrentInterleave;\r
+  UINT8                               MaxMemoryModuleSize;\r
+  EFI_MEMORY_SPEED_TYPE               MemorySpeedType;\r
+  EFI_MEMORY_SUPPORTED_TYPE           MemorySupportedType;\r
+  EFI_MEMORY_MODULE_VOLTAGE_TYPE      MemoryModuleVoltage;\r
+  UINT8                               NumberofMemorySlot;\r
+  EFI_MEMORY_ERROR_CORRECT_CAPABILITY EnabledCorrectingCapability;\r
+  UINT16                              *MemoryModuleConfigHandles;\r
+} EFI_MEMORY_CONTROLLER_INFORMATION;\r
+\r
+///\r
+/// Inconsistent with specification here:  \r
+/// In MemSubclass spec 0.9, the following data structures are NOT defined.\r
+/// It's introduced for SmBios 2.6 type 5.\r
+///\r
 typedef struct {\r
   EFI_MEMORY_ERROR_DETECT_METHOD_TYPE   ErrorDetectingMethod;\r
   EFI_MEMORY_ERROR_CORRECT_CAPABILITY   ErrorCorrectingCapability;\r
@@ -869,14 +1501,22 @@ typedef struct {
   EFI_MEMORY_MODULE_VOLTAGE_TYPE        MemoryModuleVoltage;\r
   UINT8                                 NumberofMemorySlot;\r
   EFI_MEMORY_ERROR_CORRECT_CAPABILITY   EnabledCorrectingCapability;\r
-  UINT16                                *MemoryModuleConfigHandles;\r
-} EFI_MEMORY_CONTROLLER_INFORMATION;\r
-\r
-//\r
-//  Memory. Error Information - SMBIOS Type 18\r
-//\r
-#define EFI_MEMORY_32BIT_ERROR_INFORMATION_RECORD_NUMBER 0x00000009\r
-\r
+  EFI_INTER_LINK_DATA                   MemoryModuleConfig[1];\r
+} EFI_MEMORY_CONTROLLER_INFORMATION_DATA;\r
+\r
+///\r
+/// Memory. Error Information - SMBIOS Type 18\r
+///\r
+/// Inconsistent with specification here:  \r
+/// In MemSubclass spec 0.9, the following data structures are NOT defined.\r
+/// It's introduced for SmBios 2.6 type 18.\r
+///\r
+#define EFI_MEMORY_32BIT_ERROR_INFORMATION_RECORD_NUMBER    0x00000009\r
+///\r
+/// Inconsistent with specification here:  \r
+/// In MemSubclass spec 0.9, the following data structures are NOT defined.\r
+/// It's introduced for SmBios 2.6 type 18.\r
+///\r
 typedef enum {  \r
   EfiMemoryErrorOther             = 1,\r
   EfiMemoryErrorUnknown           = 2,\r
@@ -893,14 +1533,22 @@ typedef enum {
   EfiMemoryErrorCorrected         = 13,\r
   EfiMemoryErrorUnCorrectable     = 14\r
 } EFI_MEMORY_ERROR_TYPE;\r
-\r
+///\r
+/// Inconsistent with specification here:  \r
+/// In MemSubclass spec 0.9, the following data structures are NOT defined.\r
+/// It's introduced for SmBios 2.6 type 18.\r
+///\r
 typedef enum {  \r
   EfiMemoryGranularityOther               = 1,\r
   EfiMemoryGranularityOtherUnknown        = 2,\r
   EfiMemoryGranularityDeviceLevel         = 3,\r
   EfiMemoryGranularityMemPartitionLevel   = 4\r
 } EFI_MEMORY_ERROR_GRANULARITY_TYPE;\r
-\r
+///\r
+/// Inconsistent with specification here:  \r
+/// In MemSubclass spec 0.9, the following data structures are NOT defined.\r
+/// It's introduced for SmBios 2.6 type 18.\r
+///\r
 typedef enum {  \r
   EfiMemoryErrorOperationOther            = 1,\r
   EfiMemoryErrorOperationUnknown          = 2,\r
@@ -908,7 +1556,11 @@ typedef enum {
   EfiMemoryErrorOperationWrite            = 4,\r
   EfiMemoryErrorOperationPartialWrite     = 5\r
 } EFI_MEMORY_ERROR_OPERATION_TYPE;\r
-\r
+///\r
+/// Inconsistent with specification here:  \r
+/// In MemSubclass spec 0.9, the following data structures are NOT defined.\r
+/// It's introduced for SmBios 2.6 type 18.\r
+///\r
 typedef struct {\r
   EFI_MEMORY_ERROR_TYPE               MemoryErrorType;\r
   EFI_MEMORY_ERROR_GRANULARITY_TYPE   MemoryErrorGranularity;\r
@@ -919,131 +1571,161 @@ typedef struct {
   UINT32                              DeviceErrorResolution;\r
 } EFI_MEMORY_32BIT_ERROR_INFORMATION;\r
 \r
-//\r
-//  Memory. Error Information - SMBIOS Type 33\r
-//\r
-#define EFI_MEMORY_64BIT_ERROR_INFORMATION_RECORD_NUMBER 0x0000000A\r
-\r
-typedef struct {\r
-  EFI_MEMORY_ERROR_TYPE               MemoryErrorType;\r
-  EFI_MEMORY_ERROR_GRANULARITY_TYPE   MemoryErrorGranularity;\r
-  EFI_MEMORY_ERROR_OPERATION_TYPE     MemoryErrorOperation;\r
-  UINT32                              VendorSyndrome;\r
-  UINT64                              MemoryArrayErrorAddress;\r
-  UINT64                              DeviceErrorAddress;\r
-  UINT32                              DeviceErrorResolution;\r
+///\r
+/// Memory. Error Information - SMBIOS Type 33\r
+///\r
+/// Inconsistent with specification here:  \r
+/// In MemSubclass spec 0.9, the following data structures are NOT defined.\r
+/// It's introduced for SmBios 2.6 type 33.\r
+///\r
+#define EFI_MEMORY_64BIT_ERROR_INFORMATION_RECORD_NUMBER    0x0000000A\r
+\r
+///\r
+/// Inconsistent with specification here:  \r
+/// In MemSubclass spec 0.9, the following data structures are NOT defined.\r
+/// It's introduced for SmBios 2.6 type 33.\r
+///\r
+typedef struct {\r
+  EFI_MEMORY_ERROR_TYPE             MemoryErrorType;\r
+  EFI_MEMORY_ERROR_GRANULARITY_TYPE MemoryErrorGranularity;\r
+  EFI_MEMORY_ERROR_OPERATION_TYPE   MemoryErrorOperation;\r
+  UINT32                            VendorSyndrome;\r
+  UINT64                            MemoryArrayErrorAddress;\r
+  UINT64                            DeviceErrorAddress;\r
+  UINT32                            DeviceErrorResolution;\r
 } EFI_MEMORY_64BIT_ERROR_INFORMATION;\r
 \r
+///\r
+/// Inconsistent with specification here:  \r
+/// In MemSubclass spec 0.9, the following data structures are NOT defined.\r
+/// It is implementation-specific to simplify the code logic.\r
+///\r
 typedef union _EFI_MEMORY_SUBCLASS_RECORDS {\r
-  EFI_MEMORY_SIZE_DATA                  SizeData;\r
-  EFI_MEMORY_ARRAY_LOCATION_DATA        ArrayLocationData;\r
-  EFI_MEMORY_ARRAY_LINK_DATA            ArrayLink;\r
-  EFI_MEMORY_ARRAY_START_ADDRESS_DATA   ArrayStartAddress;\r
-  EFI_MEMORY_DEVICE_START_ADDRESS_DATA  DeviceStartAddress;\r
-  EFI_MEMORY_CHANNEL_TYPE_DATA          ChannelTypeData;\r
-  EFI_MEMORY_CHANNEL_DEVICE_DATA        ChannelDeviceData;\r
-  EFI_MEMORY_CONTROLLER_INFORMATION     MemoryControllerInfo;\r
-  EFI_MEMORY_32BIT_ERROR_INFORMATION    Memory32bitErrorInfo;\r
-  EFI_MEMORY_64BIT_ERROR_INFORMATION    Memory64bitErrorInfo;\r
+  EFI_MEMORY_SIZE_DATA                 SizeData;\r
+  EFI_MEMORY_ARRAY_LOCATION_DATA       ArrayLocationData;\r
+  EFI_MEMORY_ARRAY_LINK_DATA           ArrayLink;\r
+  EFI_MEMORY_ARRAY_START_ADDRESS_DATA  ArrayStartAddress;\r
+  EFI_MEMORY_DEVICE_START_ADDRESS_DATA DeviceStartAddress;\r
+  EFI_MEMORY_CHANNEL_TYPE_DATA         ChannelTypeData;\r
+  EFI_MEMORY_CHANNEL_DEVICE_DATA       ChannelDeviceData;\r
+  EFI_MEMORY_CONTROLLER_INFORMATION    MemoryControllerInfo;\r
+  EFI_MEMORY_32BIT_ERROR_INFORMATION   Memory32bitErrorInfo;\r
+  EFI_MEMORY_64BIT_ERROR_INFORMATION   Memory64bitErrorInfo;\r
 } EFI_MEMORY_SUBCLASS_RECORDS;\r
 \r
 typedef struct {\r
-  EFI_SUBCLASS_TYPE1_HEADER             Header;\r
-  EFI_MEMORY_SUBCLASS_RECORDS           Record;\r
+  EFI_SUBCLASS_TYPE1_HEADER         Header;\r
+  EFI_MEMORY_SUBCLASS_RECORDS       Record;\r
 } EFI_MEMORY_SUBCLASS_DRIVER_DATA;\r
 \r
 #define EFI_MISC_SUBCLASS_VERSION     0x0100\r
 \r
 #pragma pack(1)\r
-//\r
-//////////////////////////////////////////////////////////////////////////////\r
+\r
 //\r
 // Last PCI Bus Number\r
 //\r
-#define EFI_MISC_LAST_PCI_BUS_RECORD_NUMBER  0x00000001\r
+#define EFI_MISC_LAST_PCI_BUS_RECORD_NUMBER    0x00000001\r
 \r
 typedef struct {\r
-  UINT8   LastPciBus;\r
+  UINT8                             LastPciBus;\r
 } EFI_MISC_LAST_PCI_BUS_DATA;\r
 \r
-//\r
-//////////////////////////////////////////////////////////////////////////////\r
 //\r
 // Misc. BIOS Vendor - SMBIOS Type 0\r
 //\r
-#define EFI_MISC_BIOS_VENDOR_RECORD_NUMBER  0x00000002\r
-\r
-typedef struct {\r
-  UINT64  Reserved1                         :2;\r
-  UINT64  Unknown                           :1;\r
-  UINT64  BiosCharacteristicsNotSupported   :1;\r
-  UINT64  IsaIsSupported                    :1;\r
-  UINT64  McaIsSupported                    :1;\r
-  UINT64  EisaIsSupported                   :1;\r
-  UINT64  PciIsSupported                    :1;\r
-  UINT64  PcmciaIsSupported                 :1;\r
-  UINT64  PlugAndPlayIsSupported            :1;\r
-  UINT64  ApmIsSupported                    :1;\r
-  UINT64  BiosIsUpgradable                  :1;\r
-  UINT64  BiosShadowingAllowed              :1;\r
-  UINT64  VlVesaIsSupported                 :1;\r
-  UINT64  EscdSupportIsAvailable            :1;\r
-  UINT64  BootFromCdIsSupported             :1;\r
-  UINT64  SelectableBootIsSupported         :1;\r
-  UINT64  RomBiosIsSocketed                 :1;\r
-  UINT64  BootFromPcmciaIsSupported         :1;\r
-  UINT64  EDDSpecificationIsSupported       :1;\r
-  UINT64  JapaneseNecFloppyIsSupported      :1;\r
-  UINT64  JapaneseToshibaFloppyIsSupported  :1;\r
-  UINT64  Floppy525_360IsSupported          :1;\r
-  UINT64  Floppy525_12IsSupported           :1;\r
-  UINT64  Floppy35_720IsSupported           :1;\r
-  UINT64  Floppy35_288IsSupported           :1;\r
-  UINT64  PrintScreenIsSupported            :1;\r
-  UINT64  Keyboard8042IsSupported           :1;\r
-  UINT64  SerialIsSupported                 :1;\r
-  UINT64  PrinterIsSupported                :1;\r
-  UINT64  CgaMonoIsSupported                :1;\r
-  UINT64  NecPc98                           :1;\r
-  UINT64  AcpiIsSupported                   :1;\r
-  UINT64  UsbLegacyIsSupported              :1;\r
-  UINT64  AgpIsSupported                    :1;\r
-  UINT64  I20BootIsSupported                :1;\r
-  UINT64  Ls120BootIsSupported              :1;\r
-  UINT64  AtapiZipDriveBootIsSupported      :1;\r
-  UINT64  Boot1394IsSupported               :1;\r
-  UINT64  SmartBatteryIsSupported           :1;\r
-  UINT64  BiosBootSpecIsSupported           :1;\r
-  UINT64  FunctionKeyNetworkBootIsSupported :1;\r
-  UINT64  Reserved                          :22;\r
+#define EFI_MISC_BIOS_VENDOR_RECORD_NUMBER    0x00000002\r
+\r
+typedef struct {\r
+  UINT64                            Reserved1                         :2;\r
+  UINT64                            Unknown                           :1;\r
+  UINT64                            BiosCharacteristicsNotSupported   :1;\r
+  UINT64                            IsaIsSupported                    :1;\r
+  UINT64                            McaIsSupported                    :1;\r
+  UINT64                            EisaIsSupported                   :1;\r
+  UINT64                            PciIsSupported                    :1;\r
+  UINT64                            PcmciaIsSupported                 :1;\r
+  UINT64                            PlugAndPlayIsSupported            :1;\r
+  UINT64                            ApmIsSupported                    :1;\r
+  UINT64                            BiosIsUpgradable                  :1;\r
+  UINT64                            BiosShadowingAllowed              :1;\r
+  UINT64                            VlVesaIsSupported                 :1;\r
+  UINT64                            EscdSupportIsAvailable            :1;\r
+  UINT64                            BootFromCdIsSupported             :1;\r
+  UINT64                            SelectableBootIsSupported         :1;\r
+  UINT64                            RomBiosIsSocketed                 :1;\r
+  UINT64                            BootFromPcmciaIsSupported         :1;\r
+  UINT64                            EDDSpecificationIsSupported       :1;\r
+  UINT64                            JapaneseNecFloppyIsSupported      :1;\r
+  UINT64                            JapaneseToshibaFloppyIsSupported  :1;\r
+  UINT64                            Floppy525_360IsSupported          :1;\r
+  UINT64                            Floppy525_12IsSupported           :1;\r
+  UINT64                            Floppy35_720IsSupported           :1;\r
+  UINT64                            Floppy35_288IsSupported           :1;\r
+  UINT64                            PrintScreenIsSupported            :1;\r
+  UINT64                            Keyboard8042IsSupported           :1;\r
+  UINT64                            SerialIsSupported                 :1;\r
+  UINT64                            PrinterIsSupported                :1;\r
+  UINT64                            CgaMonoIsSupported                :1;\r
+  UINT64                            NecPc98                           :1;\r
+  UINT64                            AcpiIsSupported                   :1;\r
+  UINT64                            UsbLegacyIsSupported              :1;\r
+  UINT64                            AgpIsSupported                    :1;\r
+  UINT64                            I20BootIsSupported                :1;\r
+  UINT64                            Ls120BootIsSupported              :1;\r
+  UINT64                            AtapiZipDriveBootIsSupported      :1;\r
+  UINT64                            Boot1394IsSupported               :1;\r
+  UINT64                            SmartBatteryIsSupported           :1;\r
+  UINT64                            BiosBootSpecIsSupported           :1;\r
+  UINT64                            FunctionKeyNetworkBootIsSupported :1;\r
+  UINT64                            Reserved                          :22;\r
 } EFI_MISC_BIOS_CHARACTERISTICS;\r
 \r
 typedef struct {\r
-  UINT64  BiosReserved                      :16;\r
-  UINT64  SystemReserved                    :16;\r
-  UINT64  Reserved                          :32;\r
+  UINT64                            BiosReserved  :16;\r
+  UINT64                            SystemReserved:16;\r
+  UINT64                            Reserved      :32;\r
 } EFI_MISC_BIOS_CHARACTERISTICS_EXTENSION;\r
 \r
 typedef struct {\r
-  STRING_REF                      BiosVendor;\r
-  STRING_REF                      BiosVersion;\r
-  STRING_REF                      BiosReleaseDate;\r
-  EFI_PHYSICAL_ADDRESS            BiosStartingAddress;\r
-  EFI_EXP_BASE2_DATA              BiosPhysicalDeviceSize;\r
-  EFI_MISC_BIOS_CHARACTERISTICS   BiosCharacteristics1;\r
-  EFI_MISC_BIOS_CHARACTERISTICS_EXTENSION  BiosCharacteristics2;\r
-  UINT8                           BiosMajorRelease;\r
-  UINT8                           BiosMinorRelease;\r
-  UINT8                           BiosEmbeddedFirmwareMajorRelease;\r
-  UINT8                           BiosEmbeddedFirmwareMinorRelease;\r
+  STRING_REF                        BiosVendor;\r
+  STRING_REF                        BiosVersion;\r
+  STRING_REF                        BiosReleaseDate;\r
+  EFI_PHYSICAL_ADDRESS              BiosStartingAddress;\r
+  EFI_EXP_BASE2_DATA                BiosPhysicalDeviceSize;\r
+  EFI_MISC_BIOS_CHARACTERISTICS     BiosCharacteristics1;\r
+  EFI_MISC_BIOS_CHARACTERISTICS_EXTENSION  \r
+                                    BiosCharacteristics2;\r
+  ///\r
+  /// Inconsistent with specification here:  \r
+  /// In MiscSubclass spec 0.9, this data structure and corrsponding fields are NOT defined.\r
+  /// It's introduced for SmBios 2.6 spec type 0.\r
+  ///\r
+  UINT8                             BiosMajorRelease;\r
+  ///\r
+  /// Inconsistent with specification here:  \r
+  /// In MiscSubclass spec 0.9, this data structure and corrsponding fields are NOT defined.\r
+  /// It's introduced for SmBios 2.6 spec type 0.\r
+  ///\r
+  UINT8                             BiosMinorRelease;\r
+  ///\r
+  /// Inconsistent with specification here:  \r
+  /// In MiscSubclass spec 0.9, this data structure and corrsponding fields are NOT defined.\r
+  /// It's introduced for SmBios 2.6 spec type 0.\r
+  ///\r
+  UINT8                             BiosEmbeddedFirmwareMajorRelease;\r
+  ///\r
+  /// Inconsistent with specification here:  \r
+  /// In MiscSubclass spec 0.9, this data structure and corrsponding fields are NOT defined.\r
+  /// It's introduced for SmBios 2.6 spec type 0.\r
+  ///\r
+  UINT8                             BiosEmbeddedFirmwareMinorRelease;\r
 } EFI_MISC_BIOS_VENDOR_DATA;\r
 \r
-//\r
-//////////////////////////////////////////////////////////////////////////////\r
 //\r
 // Misc. System Manufacturer - SMBIOS Type 1\r
 //\r
-#define EFI_MISC_SYSTEM_MANUFACTURER_RECORD_NUMBER 0x00000003\r
+#define EFI_MISC_SYSTEM_MANUFACTURER_RECORD_NUMBER    0x00000003\r
 \r
 typedef enum {\r
   EfiSystemWakeupTypeReserved        = 0,\r
@@ -1054,34 +1736,42 @@ typedef enum {
   EfiSystemWakeupTypeLanRemote       = 5,\r
   EfiSystemWakeupTypePowerSwitch     = 6,\r
   EfiSystemWakeupTypePciPme          = 7,\r
-  EfiSystemWakeupTypeAcPowerRestored = 8,\r
+  EfiSystemWakeupTypeAcPowerRestored = 8\r
 } EFI_MISC_SYSTEM_WAKEUP_TYPE;\r
 \r
 typedef struct {\r
-  STRING_REF                      SystemManufacturer;\r
-  STRING_REF                      SystemProductName;\r
-  STRING_REF                      SystemVersion;\r
-  STRING_REF                      SystemSerialNumber;\r
-  EFI_GUID                        SystemUuid;\r
-  EFI_MISC_SYSTEM_WAKEUP_TYPE     SystemWakeupType;\r
-  STRING_REF                      SystemSKUNumber;\r
-  STRING_REF                      SystemFamily;\r
+  STRING_REF                        SystemManufacturer;\r
+  STRING_REF                        SystemProductName;\r
+  STRING_REF                        SystemVersion;\r
+  STRING_REF                        SystemSerialNumber;\r
+  EFI_GUID                          SystemUuid;\r
+  EFI_MISC_SYSTEM_WAKEUP_TYPE       SystemWakeupType;\r
+  ///\r
+  /// Inconsistent with specification here:  \r
+  /// In MiscSubclass spec 0.9, this data structure and corrsponding fields are NOT defined.\r
+  /// It's introduced for SmBios 2.6 spec type 1.\r
+  ///\r
+  STRING_REF                        SystemSKUNumber;\r
+  ///\r
+  /// Inconsistent with specification here:  \r
+  /// In MiscSubclass spec 0.9, this data structure and corrsponding fields are NOT defined.\r
+  /// It's introduced for SmBios 2.6 spec type 1.\r
+  ///\r
+  STRING_REF                        SystemFamily;\r
 } EFI_MISC_SYSTEM_MANUFACTURER_DATA;\r
 \r
-//\r
-//////////////////////////////////////////////////////////////////////////////\r
 //\r
 // Misc. Base Board Manufacturer - SMBIOS Type 2\r
 //\r
-#define EFI_MISC_BASE_BOARD_MANUFACTURER_RECORD_NUMBER 0x00000004\r
+#define EFI_MISC_BASE_BOARD_MANUFACTURER_RECORD_NUMBER    0x00000004\r
 \r
 typedef struct {\r
-  UINT32  Motherboard           :1;\r
-  UINT32  RequiresDaughterCard  :1;\r
-  UINT32  Removable             :1;\r
-  UINT32  Replaceable           :1;\r
-  UINT32  HotSwappable          :1;\r
-  UINT32  Reserved              :27;\r
+  UINT32                            Motherboard           :1;\r
+  UINT32                            RequiresDaughterCard  :1;\r
+  UINT32                            Removable             :1;\r
+  UINT32                            Replaceable           :1;\r
+  UINT32                            HotSwappable          :1;\r
+  UINT32                            Reserved              :27;\r
 } EFI_BASE_BOARD_FEATURE_FLAGS;\r
 \r
 typedef enum {\r
@@ -1097,29 +1787,27 @@ typedef enum {
   EfiBaseBoardTypeMotherBoard            = 0xA,\r
   EfiBaseBoardTypeProcessorMemoryModule  = 0xB,\r
   EfiBaseBoardTypeProcessorIOModule      = 0xC,\r
-  EfiBaseBoardTypeInterconnectBoard      = 0xD,\r
+  EfiBaseBoardTypeInterconnectBoard      = 0xD\r
 } EFI_BASE_BOARD_TYPE;\r
 \r
 typedef struct {\r
-  STRING_REF                      BaseBoardManufacturer;\r
-  STRING_REF                      BaseBoardProductName;\r
-  STRING_REF                      BaseBoardVersion;\r
-  STRING_REF                      BaseBoardSerialNumber;\r
-  STRING_REF                      BaseBoardAssetTag;\r
-  STRING_REF                      BaseBoardChassisLocation;\r
-  EFI_BASE_BOARD_FEATURE_FLAGS    BaseBoardFeatureFlags;\r
-  EFI_BASE_BOARD_TYPE             BaseBoardType;\r
-  EFI_INTER_LINK_DATA             BaseBoardChassisLink;\r
-  UINT32                          BaseBoardNumberLinks;\r
-  EFI_INTER_LINK_DATA             LinkN;\r
+  STRING_REF                        BaseBoardManufacturer;\r
+  STRING_REF                        BaseBoardProductName;\r
+  STRING_REF                        BaseBoardVersion;\r
+  STRING_REF                        BaseBoardSerialNumber;\r
+  STRING_REF                        BaseBoardAssetTag;\r
+  STRING_REF                        BaseBoardChassisLocation;\r
+  EFI_BASE_BOARD_FEATURE_FLAGS      BaseBoardFeatureFlags;\r
+  EFI_BASE_BOARD_TYPE               BaseBoardType;\r
+  EFI_INTER_LINK_DATA               BaseBoardChassisLink;\r
+  UINT32                            BaseBoardNumberLinks;\r
+  EFI_INTER_LINK_DATA               LinkN;\r
 } EFI_MISC_BASE_BOARD_MANUFACTURER_DATA;\r
 \r
-//\r
-//////////////////////////////////////////////////////////////////////////////\r
 //\r
 // Misc. System/Chassis Enclosure - SMBIOS Type 3\r
 //\r
-#define EFI_MISC_CHASSIS_MANUFACTURER_RECORD_NUMBER  0x00000005\r
+#define EFI_MISC_CHASSIS_MANUFACTURER_RECORD_NUMBER    0x00000005\r
 \r
 typedef enum {\r
   EfiMiscChassisTypeOther               = 0x1,\r
@@ -1146,13 +1834,18 @@ typedef enum {
   EfiMiscChassisTypeRaidChassis         = 0x16,\r
   EfiMiscChassisTypeRackMountChassis    = 0x17,\r
   EfiMiscChassisTypeSealedCasePc        = 0x18,\r
-  EfiMiscChassisMultiSystemChassis      = 0x19,\r
+  EfiMiscChassisMultiSystemChassis      = 0x19\r
 } EFI_MISC_CHASSIS_TYPE;\r
 \r
 typedef struct {\r
-  UINT32  ChassisType       :16;\r
-  UINT32  ChassisLockPresent:1;\r
-  UINT32  Reserved          :15;\r
+  ///\r
+  /// Inconsistent with specification here:  \r
+  /// In MiscSubclass 0.9 spec. It have a wrong field name "EFI_MISC_CHASSIS_TYPE".\r
+  /// Change it to "ChassisType" to pass build.\r
+  ///\r
+  UINT32                            ChassisType       :16;\r
+  UINT32                            ChassisLockPresent:1;\r
+  UINT32                            Reserved          :15;\r
 } EFI_MISC_CHASSIS_STATUS;\r
 \r
 typedef enum {\r
@@ -1161,7 +1854,7 @@ typedef enum {
   EfiChassisStateSafe            = 0x03,\r
   EfiChassisStateWarning         = 0x04,\r
   EfiChassisStateCritical        = 0x05,\r
-  EfiChassisStateNonRecoverable  = 0x06,\r
+  EfiChassisStateNonRecoverable  = 0x06\r
 } EFI_MISC_CHASSIS_STATE;\r
 \r
 typedef enum {\r
@@ -1169,46 +1862,45 @@ typedef enum {
   EfiChassisSecurityStatusUnknown                        = 0x02,\r
   EfiChassisSecurityStatusNone                           = 0x03,\r
   EfiChassisSecurityStatusExternalInterfaceLockedOut     = 0x04,\r
-  EfiChassisSecurityStatusExternalInterfaceLockedEnabled = 0x05,\r
+  EfiChassisSecurityStatusExternalInterfaceLockedEnabled = 0x05\r
 } EFI_MISC_CHASSIS_SECURITY_STATE;\r
 \r
 typedef struct {\r
-  UINT32  RecordType  :1;\r
-  UINT32  Reserved    :24;\r
+  UINT32                            RecordType :1;\r
+  UINT32                            Type       :7;\r
+  UINT32                            Reserved   :24;\r
 } EFI_MISC_ELEMENT_TYPE;\r
 \r
 typedef struct {\r
-  EFI_MISC_ELEMENT_TYPE   ChassisElementType;\r
-  EFI_INTER_LINK_DATA     ChassisElementStructure;\r
-  EFI_BASE_BOARD_TYPE     ChassisBaseBoard;\r
-  UINT32                  ChassisElementMinimum;\r
-  UINT32                  ChassisElementMaximum;\r
+  EFI_MISC_ELEMENT_TYPE             ChassisElementType;\r
+  EFI_INTER_LINK_DATA               ChassisElementStructure;\r
+  EFI_BASE_BOARD_TYPE               ChassisBaseBoard;\r
+  UINT32                            ChassisElementMinimum;\r
+  UINT32                            ChassisElementMaximum;\r
 } EFI_MISC_ELEMENTS;\r
 \r
 typedef struct {\r
-  STRING_REF                      ChassisManufacturer;\r
-  STRING_REF                      ChassisVersion;\r
-  STRING_REF                      ChassisSerialNumber;\r
-  STRING_REF                      ChassisAssetTag;\r
-  EFI_MISC_CHASSIS_STATUS         ChassisType;\r
-  EFI_MISC_CHASSIS_STATE          ChassisBootupState;\r
-  EFI_MISC_CHASSIS_STATE          ChassisPowerSupplyState;\r
-  EFI_MISC_CHASSIS_STATE          ChassisThermalState;\r
-  EFI_MISC_CHASSIS_SECURITY_STATE ChassisSecurityState;\r
-  UINT32                          ChassisOemDefined;\r
-  UINT32                          ChassisHeight;\r
-  UINT32                          ChassisNumberPowerCords;\r
-  UINT32                          ChassisElementCount;\r
-  UINT32                          ChassisElementRecordLength;//\r
-  EFI_MISC_ELEMENTS               ChassisElements;\r
+  STRING_REF                        ChassisManufacturer;\r
+  STRING_REF                        ChassisVersion;\r
+  STRING_REF                        ChassisSerialNumber;\r
+  STRING_REF                        ChassisAssetTag;\r
+  EFI_MISC_CHASSIS_STATUS           ChassisType;\r
+  EFI_MISC_CHASSIS_STATE            ChassisBootupState;\r
+  EFI_MISC_CHASSIS_STATE            ChassisPowerSupplyState;\r
+  EFI_MISC_CHASSIS_STATE            ChassisThermalState;\r
+  EFI_MISC_CHASSIS_SECURITY_STATE   ChassisSecurityState;\r
+  UINT32                            ChassisOemDefined;\r
+  UINT32                            ChassisHeight;\r
+  UINT32                            ChassisNumberPowerCords;\r
+  UINT32                            ChassisElementCount;\r
+  UINT32                            ChassisElementRecordLength;\r
+  EFI_MISC_ELEMENTS                 ChassisElements;\r
 } EFI_MISC_CHASSIS_MANUFACTURER_DATA;\r
 \r
-//\r
-//////////////////////////////////////////////////////////////////////////////\r
 //\r
 // Misc. Port Connector Information - SMBIOS Type 8\r
 //\r
-#define EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_RECORD_NUMBER 0x00000006\r
+#define EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_RECORD_NUMBER    0x00000006\r
 \r
 typedef enum {\r
   EfiPortConnectorTypeNone                   = 0x00,\r
@@ -1250,7 +1942,7 @@ typedef enum {
   EfiPortConnectorTypePCH98                  = 0xA2,\r
   EfiPortConnectorTypePC98Note               = 0xA3,\r
   EfiPortConnectorTypePC98Full               = 0xA4,\r
-  EfiPortConnectorTypeOther                  = 0xFF,\r
+  EfiPortConnectorTypeOther                  = 0xFF\r
 } EFI_MISC_PORT_CONNECTOR_TYPE;\r
 \r
 typedef enum {\r
@@ -1288,24 +1980,22 @@ typedef enum {
   EfiPortTypeNetworkPort               = 0x1F,\r
   EfiPortType8251Compatible            = 0xA0,\r
   EfiPortType8251FifoCompatible        = 0xA1,\r
-  EfiPortTypeOther                     = 0xFF,\r
+  EfiPortTypeOther                     = 0xFF\r
 } EFI_MISC_PORT_TYPE;\r
 \r
 typedef struct {\r
-  STRING_REF                    PortInternalConnectorDesignator;\r
-  STRING_REF                    PortExternalConnectorDesignator;\r
-  EFI_MISC_PORT_CONNECTOR_TYPE  PortInternalConnectorType;\r
-  EFI_MISC_PORT_CONNECTOR_TYPE  PortExternalConnectorType;\r
-  EFI_MISC_PORT_TYPE            PortType;\r
-  EFI_MISC_PORT_DEVICE_PATH     PortPath;\r
+  STRING_REF                        PortInternalConnectorDesignator;\r
+  STRING_REF                        PortExternalConnectorDesignator;\r
+  EFI_MISC_PORT_CONNECTOR_TYPE      PortInternalConnectorType;\r
+  EFI_MISC_PORT_CONNECTOR_TYPE      PortExternalConnectorType;\r
+  EFI_MISC_PORT_TYPE                PortType;\r
+  EFI_MISC_PORT_DEVICE_PATH         PortPath;\r
 } EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA;\r
 \r
-//\r
-//////////////////////////////////////////////////////////////////////////////\r
 //\r
 // Misc. System Slots - SMBIOS Type 9\r
 //\r
-#define EFI_MISC_SYSTEM_SLOT_DESIGNATION_RECORD_NUMBER 0x00000007\r
+#define EFI_MISC_SYSTEM_SLOT_DESIGNATION_RECORD_NUMBER    0x00000007\r
 \r
 typedef enum {\r
   EfiSlotTypeOther                        = 0x01,\r
@@ -1323,15 +2013,25 @@ typedef enum {
   EfiSlotTypeNuBus                        = 0x0D,\r
   EfiSlotTypePci66MhzCapable              = 0x0E,\r
   EfiSlotTypeAgp                          = 0x0F,\r
-  EfiSlotTypeApg2X                        = 0x10,\r
+  ///\r
+  /// Inconsistent with specification here:  \r
+  /// In MiscSubclass spec 0.9, its naming should be EfiSlotTypeAgp2X\r
+  /// rather than EfiSlotTypeApg2X.\r
+  ///\r
+  EfiSlotTypeAgp2X                        = 0x10,\r
   EfiSlotTypeAgp4X                        = 0x11,\r
   EfiSlotTypePciX                         = 0x12,\r
-  EfiSlotTypeAgp4x                        = 0x13,\r
+  EfiSlotTypeAgp8x                        = 0x13,\r
   EfiSlotTypePC98C20                      = 0xA0,\r
   EfiSlotTypePC98C24                      = 0xA1,\r
   EfiSlotTypePC98E                        = 0xA2,\r
   EfiSlotTypePC98LocalBus                 = 0xA3,\r
   EfiSlotTypePC98Card                     = 0xA4,\r
+  ///\r
+  /// Inconsistent with specification here:  \r
+  /// In MiscSubclass spec 0.9, this field isn't defined.\r
+  /// It's introduced for SmBios 2.6 spec type 9.\r
+  ///\r
   EfiSlotTypePciExpress                   = 0xA5\r
 } EFI_MISC_SLOT_TYPE;\r
 \r
@@ -1342,14 +2042,14 @@ typedef enum {
   EfiSlotDataBusWidth16Bit      = 0x04,\r
   EfiSlotDataBusWidth32Bit      = 0x05,\r
   EfiSlotDataBusWidth64Bit      = 0x06,\r
-  EfiSlotDataBusWidth128Bit     = 0x07,\r
+  EfiSlotDataBusWidth128Bit     = 0x07\r
 } EFI_MISC_SLOT_DATA_BUS_WIDTH;\r
 \r
 typedef enum {\r
   EfiSlotUsageOther     = 1,\r
   EfiSlotUsageUnknown   = 2,\r
   EfiSlotUsageAvailable = 3,\r
-  EfiSlotUsageInUse     = 4,\r
+  EfiSlotUsageInUse     = 4\r
 } EFI_MISC_SLOT_USAGE;\r
 \r
 typedef enum {\r
@@ -1360,37 +2060,35 @@ typedef enum {
 } EFI_MISC_SLOT_LENGTH;\r
 \r
 typedef struct {\r
-  UINT32  CharacteristicsUnknown  :1;\r
-  UINT32  Provides50Volts         :1;\r
-  UINT32  Provides33Volts         :1;\r
-  UINT32  SharedSlot              :1;\r
-  UINT32  PcCard16Supported       :1;\r
-  UINT32  CardBusSupported        :1;\r
-  UINT32  ZoomVideoSupported      :1;\r
-  UINT32  ModemRingResumeSupported:1;\r
-  UINT32  PmeSignalSupported      :1;\r
-  UINT32  HotPlugDevicesSupported :1;\r
-  UINT32  SmbusSignalSupported    :1;\r
-  UINT32  Reserved                :21;\r
+  UINT32                            CharacteristicsUnknown  :1;\r
+  UINT32                            Provides50Volts         :1;\r
+  UINT32                            Provides33Volts         :1;\r
+  UINT32                            SharedSlot              :1;\r
+  UINT32                            PcCard16Supported       :1;\r
+  UINT32                            CardBusSupported        :1;\r
+  UINT32                            ZoomVideoSupported      :1;\r
+  UINT32                            ModemRingResumeSupported:1;\r
+  UINT32                            PmeSignalSupported      :1;\r
+  UINT32                            HotPlugDevicesSupported :1;\r
+  UINT32                            SmbusSignalSupported    :1;\r
+  UINT32                            Reserved                :21;\r
 } EFI_MISC_SLOT_CHARACTERISTICS;\r
 \r
 typedef struct {\r
-  STRING_REF                    SlotDesignation;\r
-  EFI_MISC_SLOT_TYPE            SlotType;\r
-  EFI_MISC_SLOT_DATA_BUS_WIDTH  SlotDataBusWidth;\r
-  EFI_MISC_SLOT_USAGE           SlotUsage;\r
-  EFI_MISC_SLOT_LENGTH          SlotLength;\r
-  UINT16                        SlotId;\r
-  EFI_MISC_SLOT_CHARACTERISTICS SlotCharacteristics;\r
-  EFI_DEVICE_PATH_PROTOCOL      SlotDevicePath;\r
+  STRING_REF                        SlotDesignation;\r
+  EFI_MISC_SLOT_TYPE                SlotType;\r
+  EFI_MISC_SLOT_DATA_BUS_WIDTH      SlotDataBusWidth;\r
+  EFI_MISC_SLOT_USAGE               SlotUsage;\r
+  EFI_MISC_SLOT_LENGTH              SlotLength;\r
+  UINT16                            SlotId;\r
+  EFI_MISC_SLOT_CHARACTERISTICS     SlotCharacteristics;\r
+  EFI_DEVICE_PATH_PROTOCOL          SlotDevicePath;\r
 } EFI_MISC_SYSTEM_SLOT_DESIGNATION_DATA;\r
 \r
-//\r
-//////////////////////////////////////////////////////////////////////////////\r
 //\r
 // Misc. Onboard Device - SMBIOS Type 10\r
 //\r
-#define EFI_MISC_ONBOARD_DEVICE_RECORD_NUMBER 0x00000008\r
+#define EFI_MISC_ONBOARD_DEVICE_RECORD_NUMBER    0x00000008\r
 \r
 typedef enum {\r
   EfiOnBoardDeviceTypeOther          = 1,\r
@@ -1399,106 +2097,97 @@ typedef enum {
   EfiOnBoardDeviceTypeScsiController = 4,\r
   EfiOnBoardDeviceTypeEthernet       = 5,\r
   EfiOnBoardDeviceTypeTokenRing      = 6,\r
-  EfiOnBoardDeviceTypeSound          = 7,\r
+  EfiOnBoardDeviceTypeSound          = 7\r
 } EFI_MISC_ONBOARD_DEVICE_TYPE;\r
 \r
 typedef struct {\r
-  UINT32  DeviceType    :16;\r
-  UINT32  DeviceEnabled :1;\r
-  UINT32  Reserved      :15;\r
+  UINT32                            DeviceType    :16;\r
+  UINT32                            DeviceEnabled :1;\r
+  UINT32                            Reserved      :15;\r
 } EFI_MISC_ONBOARD_DEVICE_STATUS;\r
 \r
 typedef struct {\r
-  STRING_REF                           OnBoardDeviceDescription;\r
-  EFI_MISC_ONBOARD_DEVICE_STATUS       OnBoardDeviceStatus;\r
-  EFI_DEVICE_PATH_PROTOCOL             OnBoardDevicePath;\r
+  STRING_REF                        OnBoardDeviceDescription;\r
+  ///\r
+  /// Inconsistent with specification here:  \r
+  /// In MiscSubclass spec 0.9, the naming is OnBoardDeviceType.\r
+  /// Keep it unchanged for backward compatibilty.\r
+  ///\r
+  EFI_MISC_ONBOARD_DEVICE_STATUS    OnBoardDeviceStatus;\r
+  EFI_DEVICE_PATH_PROTOCOL          OnBoardDevicePath;\r
 } EFI_MISC_ONBOARD_DEVICE_DATA;\r
 \r
-//\r
-//////////////////////////////////////////////////////////////////////////////\r
 //\r
 // Misc. BIOS Language Information - SMBIOS Type 11\r
 //\r
-#define EFI_MISC_OEM_STRING_RECORD_NUMBER 0x00000009\r
+#define EFI_MISC_OEM_STRING_RECORD_NUMBER    0x00000009\r
 \r
 typedef struct {\r
-  STRING_REF                          OemStringRef[1];\r
+  STRING_REF                        OemStringRef[1];\r
 } EFI_MISC_OEM_STRING_DATA;\r
 \r
-//\r
-//////////////////////////////////////////////////////////////////////////////\r
 //\r
 // Misc. System Options - SMBIOS Type 12\r
 //\r
 typedef struct {\r
-  STRING_REF                          SystemOptionStringRef[1];\r
+  STRING_REF                        SystemOptionStringRef[1];\r
 } EFI_MISC_SYSTEM_OPTION_STRING_DATA;\r
 \r
-#define EFI_MISC_SYSTEM_OPTION_STRING_RECORD_NUMBER 0x0000000A\r
+#define EFI_MISC_SYSTEM_OPTION_STRING_RECORD_NUMBER    0x0000000A\r
 \r
-//\r
-//////////////////////////////////////////////////////////////////////////////\r
 //\r
 // Misc. Number of Installable Languages - SMBIOS Type 13\r
 //\r
-#define EFI_MISC_NUMBER_OF_INSTALLABLE_LANGUAGES_RECORD_NUMBER 0x0000000B\r
+#define EFI_MISC_NUMBER_OF_INSTALLABLE_LANGUAGES_RECORD_NUMBER    0x0000000B\r
 \r
 typedef struct {\r
-  UINT32                              AbbreviatedLanguageFormat :1;\r
-  UINT32                              Reserved                  :31;\r
+  UINT32                            AbbreviatedLanguageFormat :1;\r
+  UINT32                            Reserved                  :31;\r
 } EFI_MISC_LANGUAGE_FLAGS;\r
 \r
 typedef struct {\r
-  UINT16                              NumberOfInstallableLanguages;\r
-  EFI_MISC_LANGUAGE_FLAGS             LanguageFlags;\r
-  UINT16                              CurrentLanguageNumber;\r
+  UINT16                            NumberOfInstallableLanguages;\r
+  EFI_MISC_LANGUAGE_FLAGS           LanguageFlags;\r
+  UINT16                            CurrentLanguageNumber;\r
 } EFI_MISC_NUMBER_OF_INSTALLABLE_LANGUAGES_DATA;\r
 \r
-//\r
-//////////////////////////////////////////////////////////////////////////////\r
 //\r
 // Misc. System Language String\r
 //\r
-#define EFI_MISC_SYSTEM_LANGUAGE_STRING_RECORD_NUMBER 0x0000000C\r
+#define EFI_MISC_SYSTEM_LANGUAGE_STRING_RECORD_NUMBER    0x0000000C\r
 \r
 typedef struct {\r
-  UINT16                              LanguageId;\r
-  STRING_REF                          SystemLanguageString;\r
+  UINT16                            LanguageId;\r
+  STRING_REF                        SystemLanguageString;\r
 } EFI_MISC_SYSTEM_LANGUAGE_STRING_DATA;\r
 \r
-//\r
-//////////////////////////////////////////////////////////////////////////////\r
 //\r
 // Group Associations - SMBIOS Type 14\r
 //\r
-#define EFI_MISC_GROUP_NAME_RECORD_NUMBER          0x0000000D\r
+#define EFI_MISC_GROUP_NAME_RECORD_NUMBER    0x0000000D\r
 \r
 typedef struct {\r
-  STRING_REF               GroupName;\r
-  UINT16                   NumberGroupItems;\r
-  UINT16                   GroupId;\r
+  STRING_REF                        GroupName;\r
+  UINT16                            NumberGroupItems;\r
+  UINT16                            GroupId;\r
 } EFI_MISC_GROUP_NAME_DATA;\r
 \r
-//\r
-//////////////////////////////////////////////////////////////////////////////\r
 //\r
 // Group Item Set Element\r
 //\r
-#define EFI_MISC_GROUP_ITEM_SET_RECORD_NUMBER      0x0000000E\r
+#define EFI_MISC_GROUP_ITEM_SET_RECORD_NUMBER    0x0000000E\r
 \r
 typedef struct {\r
-  EFI_GUID                 SubClass;\r
-  EFI_INTER_LINK_DATA      GroupLink;\r
-  UINT16                   GroupId;\r
-  UINT16                   GroupElementId;\r
+  EFI_GUID                          SubClass;\r
+  EFI_INTER_LINK_DATA               GroupLink;\r
+  UINT16                            GroupId;\r
+  UINT16                            GroupElementId;\r
 } EFI_MISC_GROUP_ITEM_SET_DATA;\r
 \r
-//\r
-//////////////////////////////////////////////////////////////////////////////\r
 //\r
 //  Misc. Pointing Device Type - SMBIOS Type 21\r
 //\r
-#define EFI_MISC_POINTING_DEVICE_TYPE_RECORD_NUMBER 0x0000000F\r
+#define EFI_MISC_POINTING_DEVICE_TYPE_RECORD_NUMBER    0x0000000F\r
 \r
 typedef enum {\r
   EfiPointingDeviceTypeOther         = 0x01,\r
@@ -1509,7 +2198,7 @@ typedef enum {
   EfiPointingDeviceTypeGlidePoint    = 0x06,\r
   EfiPointingDeviceTouchPad          = 0x07,\r
   EfiPointingDeviceTouchScreen       = 0x08,\r
-  EfiPointingDeviceOpticalSensor     = 0x09,\r
+  EfiPointingDeviceOpticalSensor     = 0x09\r
 } EFI_MISC_POINTING_DEVICE_TYPE;\r
 \r
 typedef enum {\r
@@ -1523,7 +2212,7 @@ typedef enum {
   EfiPointingDeviceInterfaceADB                = 0x08,\r
   EfiPointingDeviceInterfaceBusMouseDB9        = 0xA0,\r
   EfiPointingDeviceInterfaceBusMouseMicroDin   = 0xA1,\r
-  EfiPointingDeviceInterfaceUsb                = 0xA2,\r
+  EfiPointingDeviceInterfaceUsb                = 0xA2\r
 } EFI_MISC_POINTING_DEVICE_INTERFACE;\r
 \r
 typedef struct {\r
@@ -1531,64 +2220,74 @@ typedef struct {
   EFI_MISC_POINTING_DEVICE_INTERFACE  PointingDeviceInterface;\r
   UINT16                              NumberPointingDeviceButtons;\r
   EFI_DEVICE_PATH_PROTOCOL            PointingDevicePath;\r
-} EFI_MISC_PORTING_DEVICE_TYPE_DATA;\r
+} EFI_MISC_POINTING_DEVICE_TYPE_DATA;\r
 \r
-//\r
-//////////////////////////////////////////////////////////////////////////////\r
 //\r
 // Portable Battery - SMBIOS Type 22\r
 //\r
-#define EFI_MISC_BATTERY_LOCATION_RECORD_NUMBER  0x00000010\r
+///\r
+/// Inconsistent with specification here:  \r
+/// In MiscSubclass spec 0.9, the naming is EFI_MISC_BATTERY_LOCATION_RECORD_NUMBER.\r
+/// Keep it unchanged for backward compatibilty.\r
+///\r
+#define EFI_MISC_PORTABLE_BATTERY_RECORD_NUMBER   0x00000010\r
+\r
+///\r
+/// Inconsistent with specification here:  \r
+/// In MiscSubclass spec 0.9, the structure name is EFI_MISC_BATTERY_DEVICE_CHEMISTRY.\r
+/// And all field namings are also different with spec.\r
+/// Keep it unchanged for backward compatibilty.\r
+///\r
+typedef enum {  \r
+  EfiPortableBatteryDeviceChemistryOther = 1,\r
+  EfiPortableBatteryDeviceChemistryUnknown = 2,\r
+  EfiPortableBatteryDeviceChemistryLeadAcid = 3,\r
+  EfiPortableBatteryDeviceChemistryNickelCadmium = 4,\r
+  EfiPortableBatteryDeviceChemistryNickelMetalHydride = 5,\r
+  EfiPortableBatteryDeviceChemistryLithiumIon = 6,\r
+  EfiPortableBatteryDeviceChemistryZincAir = 7,\r
+  EfiPortableBatteryDeviceChemistryLithiumPolymer = 8\r
+} EFI_MISC_PORTABLE_BATTERY_DEVICE_CHEMISTRY;\r
+\r
+///\r
+/// Inconsistent with specification here:  \r
+/// In MiscSubclass spec 0.9, the structure name is EFI_MISC_BATTERY_LOCATION_DATA.\r
+/// And the name and the order of the fields are also different with spec.\r
+/// Keep it unchanged for backward compatibilty.\r
+///\r
+typedef struct {\r
+  STRING_REF                        Location;\r
+  STRING_REF                        Manufacturer;\r
+  STRING_REF                        ManufactureDate;\r
+  STRING_REF                        SerialNumber;\r
+  STRING_REF                        DeviceName;\r
+  EFI_MISC_PORTABLE_BATTERY_DEVICE_CHEMISTRY  \r
+                                    DeviceChemistry;\r
+  UINT16                            DesignCapacity;\r
+  UINT16                            DesignVoltage;\r
+  STRING_REF                        SBDSVersionNumber;\r
+  UINT8                             MaximumError;\r
+  UINT16                            SBDSSerialNumber;\r
+  UINT16                            SBDSManufactureDate;\r
+  STRING_REF                        SBDSDeviceChemistry;\r
+  UINT8                             DesignCapacityMultiplier;\r
+  UINT32                            OEMSpecific;  \r
+  UINT8                             BatteryNumber; // Temporary   \r
+  BOOLEAN                           Valid; // Is entry valid - Temporary\r
+} EFI_MISC_PORTABLE_BATTERY;\r
 \r
-typedef enum {\r
-  EfiBatteryDeviceChemistryTypeOther               = 0x01,\r
-  EfiBatteryDeviceChemistryTypeUnknown             = 0x02,\r
-  EfiBatteryDeviceChemistryTypeLeadAcid            = 0x03,\r
-  EfiBatteryDeviceChemistryTypeNickelCadmium       = 0x04,\r
-  EfiBatteryDeviceChemistryTypeNickelMetalHydride  = 0x05,\r
-  EfiBatteryDeviceChemistryTypeLithiumIon          = 0x06,\r
-  EfiBatteryDeviceChemistryTypeZincAir             = 0x07,\r
-  EfiBatteryDeviceChemistryTypeLithiumPolymer      = 0x08,\r
-} EFI_MISC_BATTERY_DEVICE_CHEMISTRY;\r
 \r
-typedef struct  {\r
-  UINT32 Date              :5;\r
-  UINT32 Month             :4;\r
-  UINT32 Year              :7;\r
-  UINT32 Reserved          :16;\r
-} EFI_MISC_BATTERY_SBDS_MANUFACTURE_DATE;\r
-\r
-typedef struct {\r
-  STRING_REF                         BatteryLocation;\r
-  STRING_REF                         BatteryManufacturer;\r
-  STRING_REF                         BatteryManufactureDate;\r
-  STRING_REF                         BatterySerialNumber;\r
-  STRING_REF                         BatteryDeviceName;\r
-  STRING_REF                         BatterySbdsVersionNumber;\r
-  STRING_REF                         BatterySbdsDeviceChemistry;\r
-  EFI_MISC_BATTERY_DEVICE_CHEMISTRY  BatteryDeviceChemistry;\r
-  EFI_EXP_BASE10_DATA                BatteryDesignCapacity;\r
-  EFI_EXP_BASE10_DATA                BatteryDesignVoltage;\r
-  UINT16                             BatteryMaximumError;\r
-  UINT16                             BatterySbdsSerialNumber;\r
-  EFI_MISC_BATTERY_SBDS_MANUFACTURE_DATE\r
-                                     BatterySbdsManufacturingDate;\r
-  UINT32                             BatteryOemSpecific;\r
-} EFI_MISC_BATTERY_LOCATION_DATA;\r
-\r
-//\r
-//////////////////////////////////////////////////////////////////////////////\r
 //\r
 // Misc. Reset Capabilities - SMBIOS Type 23\r
 //\r
-#define EFI_MISC_RESET_CAPABILITIES_RECORD_NUMBER 0x00000011\r
+#define EFI_MISC_RESET_CAPABILITIES_RECORD_NUMBER    0x00000011\r
 \r
 typedef struct {\r
-  UINT32  Status              :1;\r
-  UINT32  BootOption          :2;\r
-  UINT32  BootOptionOnLimit   :2;\r
-  UINT32  WatchdogTimerPresent:1;\r
-  UINT32  Reserved            :26;\r
+  UINT32                            Status              :1;\r
+  UINT32                            BootOption          :2;\r
+  UINT32                            BootOptionOnLimit   :2;\r
+  UINT32                            WatchdogTimerPresent:1;\r
+  UINT32                            Reserved            :26;\r
 } EFI_MISC_RESET_CAPABILITIES_TYPE;\r
 \r
 typedef struct {\r
@@ -1600,20 +2299,24 @@ typedef struct {
 } EFI_MISC_RESET_CAPABILITIES;\r
 \r
 typedef struct {\r
-    EFI_MISC_RESET_CAPABILITIES   ResetCapabilities;\r
-    UINT16                        ResetCount;\r
-    UINT16                        ResetLimit;\r
-    UINT16                        ResetTimerInterval;\r
-    UINT16                        ResetTimeout;\r
+    EFI_MISC_RESET_CAPABILITIES     ResetCapabilities;\r
+    UINT16                          ResetCount;\r
+    UINT16                          ResetLimit;\r
+    UINT16                          ResetTimerInterval;\r
+    UINT16                          ResetTimeout;\r
 } EFI_MISC_RESET_CAPABILITIES_DATA;\r
 \r
-//\r
-//////////////////////////////////////////////////////////////////////////////\r
 //\r
 // Misc. Hardware Security - SMBIOS Type 24\r
 //\r
-#define EFI_MISC_HARDWARE_SECURITY_SETTINGS_DATA_RECORD_NUMBER 0x00000012\r
+#define EFI_MISC_HARDWARE_SECURITY_SETTINGS_DATA_RECORD_NUMBER    0x00000012\r
 \r
+///\r
+/// Inconsistent with specification here:  \r
+/// In MiscSubclass spec 0.9, it only mention the possible value of each field in\r
+/// EFI_MISC_HARDWARE_SECURITY_SETTINGS. \r
+/// It's implementation-specific to simplify the code logic.\r
+///\r
 typedef enum {\r
   EfiHardwareSecurityStatusDisabled       = 0,\r
   EfiHardwareSecurityStatusEnabled        = 1,\r
@@ -1622,186 +2325,175 @@ typedef enum {
 } EFI_MISC_HARDWARE_SECURITY_STATUS;\r
 \r
 typedef struct {\r
-  EFI_MISC_HARDWARE_SECURITY_STATUS   FrontPanelResetStatus       :2;\r
-  EFI_MISC_HARDWARE_SECURITY_STATUS   AdministratorPasswordStatus :2;\r
-  EFI_MISC_HARDWARE_SECURITY_STATUS   KeyboardPasswordStatus      :2;\r
-  EFI_MISC_HARDWARE_SECURITY_STATUS   PowerOnPasswordStatus       :2;\r
-  EFI_MISC_HARDWARE_SECURITY_STATUS   Reserved                    :24;\r
+  UINT32 FrontPanelResetStatus       :2;\r
+  UINT32 AdministratorPasswordStatus :2;\r
+  UINT32 KeyboardPasswordStatus      :2;\r
+  UINT32 PowerOnPasswordStatus       :2;\r
+  UINT32 Reserved                    :24;\r
 } EFI_MISC_HARDWARE_SECURITY_SETTINGS;\r
 \r
 typedef struct {\r
   EFI_MISC_HARDWARE_SECURITY_SETTINGS HardwareSecuritySettings;\r
 } EFI_MISC_HARDWARE_SECURITY_SETTINGS_DATA;\r
 \r
-//\r
-//////////////////////////////////////////////////////////////////////////////\r
 //\r
 // System Power Controls - SMBIOS Type 25\r
 //\r
-#define EFI_MISC_SCHEDULED_POWER_ON_MONTH_RECORD_NUMBER  0x00000013\r
+#define EFI_MISC_SCHEDULED_POWER_ON_MONTH_RECORD_NUMBER    0x00000013\r
 \r
 typedef struct {\r
-  UINT16             ScheduledPoweronMonth;\r
-  UINT16             ScheduledPoweronDayOfMonth;\r
-  UINT16             ScheduledPoweronHour;\r
-  UINT16             ScheduledPoweronMinute;\r
-  UINT16             ScheduledPoweronSecond;\r
+  UINT16                            ScheduledPoweronMonth;\r
+  UINT16                            ScheduledPoweronDayOfMonth;\r
+  UINT16                            ScheduledPoweronHour;\r
+  UINT16                            ScheduledPoweronMinute;\r
+  UINT16                            ScheduledPoweronSecond;\r
 } EFI_MISC_SCHEDULED_POWER_ON_MONTH_DATA;\r
 \r
-//\r
-//////////////////////////////////////////////////////////////////////////////\r
 //\r
 // Voltage Probe - SMBIOS Type 26\r
 //\r
-#define EFI_MISC_VOLTAGE_PROBE_DESCRIPTION_RECORD_NUMBER  0x00000014\r
+#define EFI_MISC_VOLTAGE_PROBE_DESCRIPTION_RECORD_NUMBER    0x00000014\r
 \r
 typedef struct {\r
-  UINT32 VoltageProbeSite        :5;\r
-  UINT32 VoltageProbeStatus      :3;\r
-  UINT32 Reserved                :24;\r
+  UINT32                            VoltageProbeSite        :5;\r
+  UINT32                            VoltageProbeStatus      :3;\r
+  UINT32                            Reserved                :24;\r
 } EFI_MISC_VOLTAGE_PROBE_LOCATION;\r
 \r
 typedef struct {\r
-  STRING_REF                      VoltageProbeDescription;\r
-  EFI_MISC_VOLTAGE_PROBE_LOCATION VoltageProbeLocation;\r
-  EFI_EXP_BASE10_DATA             VoltageProbeMaximumValue;\r
-  EFI_EXP_BASE10_DATA             VoltageProbeMinimumValue;\r
-  EFI_EXP_BASE10_DATA             VoltageProbeResolution;\r
-  EFI_EXP_BASE10_DATA             VoltageProbeTolerance;\r
-  EFI_EXP_BASE10_DATA             VoltageProbeAccuracy;\r
-  EFI_EXP_BASE10_DATA             VoltageProbeNominalValue;\r
-  EFI_EXP_BASE10_DATA             MDLowerNoncriticalThreshold;\r
-  EFI_EXP_BASE10_DATA             MDUpperNoncriticalThreshold;\r
-  EFI_EXP_BASE10_DATA             MDLowerCriticalThreshold;\r
-  EFI_EXP_BASE10_DATA             MDUpperCriticalThreshold;\r
-  EFI_EXP_BASE10_DATA             MDLowerNonrecoverableThreshold;\r
-  EFI_EXP_BASE10_DATA             MDUpperNonrecoverableThreshold;\r
-  UINT32                          VoltageProbeOemDefined;\r
+  STRING_REF                        VoltageProbeDescription;\r
+  EFI_MISC_VOLTAGE_PROBE_LOCATION   VoltageProbeLocation;\r
+  EFI_EXP_BASE10_DATA               VoltageProbeMaximumValue;\r
+  EFI_EXP_BASE10_DATA               VoltageProbeMinimumValue;\r
+  EFI_EXP_BASE10_DATA               VoltageProbeResolution;\r
+  EFI_EXP_BASE10_DATA               VoltageProbeTolerance;\r
+  EFI_EXP_BASE10_DATA               VoltageProbeAccuracy;\r
+  EFI_EXP_BASE10_DATA               VoltageProbeNominalValue;\r
+  EFI_EXP_BASE10_DATA               MDLowerNoncriticalThreshold;\r
+  EFI_EXP_BASE10_DATA               MDUpperNoncriticalThreshold;\r
+  EFI_EXP_BASE10_DATA               MDLowerCriticalThreshold;\r
+  EFI_EXP_BASE10_DATA               MDUpperCriticalThreshold;\r
+  EFI_EXP_BASE10_DATA               MDLowerNonrecoverableThreshold;\r
+  EFI_EXP_BASE10_DATA               MDUpperNonrecoverableThreshold;\r
+  UINT32                            VoltageProbeOemDefined;\r
 } EFI_MISC_VOLTAGE_PROBE_DESCRIPTION_DATA;\r
 \r
-//\r
-//////////////////////////////////////////////////////////////////////////////\r
 //\r
 // Cooling Device - SMBIOS Type 27\r
 //\r
-#define EFI_MISC_COOLING_DEVICE_TEMP_LINK_RECORD_NUMBER   0x00000015\r
+#define EFI_MISC_COOLING_DEVICE_TEMP_LINK_RECORD_NUMBER    0x00000015\r
 \r
 typedef struct {\r
-  UINT32 CoolingDevice                 :5;\r
-  UINT32 CoolingDeviceStatus           :3;\r
-  UINT32 Reserved                      :24;\r
+  UINT32                            CoolingDevice       :5;\r
+  UINT32                            CoolingDeviceStatus :3;\r
+  UINT32                            Reserved            :24;\r
 } EFI_MISC_COOLING_DEVICE_TYPE;\r
 \r
 typedef struct {\r
-  EFI_MISC_COOLING_DEVICE_TYPE   CoolingDeviceType;\r
-  EFI_INTER_LINK_DATA            CoolingDeviceTemperatureLink;\r
-  UINT16                         CoolingDeviceUnitGroup;\r
-  EFI_EXP_BASE10_DATA            CoolingDeviceNominalSpeed;\r
-  UINT32                         CoolingDeviceOemDefined;\r
+  EFI_MISC_COOLING_DEVICE_TYPE      CoolingDeviceType;\r
+  EFI_INTER_LINK_DATA               CoolingDeviceTemperatureLink;\r
+  UINT16                            CoolingDeviceUnitGroup;\r
+  EFI_EXP_BASE10_DATA               CoolingDeviceNominalSpeed;\r
+  UINT32                            CoolingDeviceOemDefined;\r
 } EFI_MISC_COOLING_DEVICE_TEMP_LINK_DATA;\r
 \r
-//\r
-//////////////////////////////////////////////////////////////////////////////\r
 //\r
 // Temperature Probe - SMBIOS Type 28\r
 //\r
-#define EFI_MISC_TEMPERATURE_PROBE_DESCRIPTION_RECORD_NUMBER   0x00000016\r
+#define EFI_MISC_TEMPERATURE_PROBE_DESCRIPTION_RECORD_NUMBER    0x00000016\r
 \r
 typedef struct {\r
-  UINT32 TemperatureProbeSite          :5;\r
-  UINT32 TemperatureProbeStatus        :3;\r
-  UINT32 Reserved                      :24;\r
+  UINT32                            TemperatureProbeSite   :5;\r
+  UINT32                            TemperatureProbeStatus :3;\r
+  UINT32                            Reserved               :24;\r
 } EFI_MISC_TEMPERATURE_PROBE_LOCATION;\r
 \r
 typedef struct {\r
-  STRING_REF               TemperatureProbeDescription;\r
+  STRING_REF                        TemperatureProbeDescription;\r
   EFI_MISC_TEMPERATURE_PROBE_LOCATION\r
-                           TemperatureProbeLocation;\r
-  EFI_EXP_BASE10_DATA      TemperatureProbeMaximumValue;\r
-  EFI_EXP_BASE10_DATA      TemperatureProbeMinimumValue;\r
-  EFI_EXP_BASE10_DATA      TemperatureProbeResolution;\r
-  EFI_EXP_BASE10_DATA      TemperatureProbeTolerance;\r
-  EFI_EXP_BASE10_DATA      TemperatureProbeAccuracy;\r
-  EFI_EXP_BASE10_DATA      TemperatureProbeNominalValue;\r
-  EFI_EXP_BASE10_DATA      MDLowerNoncriticalThreshold;\r
-  EFI_EXP_BASE10_DATA      MDUpperNoncriticalThreshold;\r
-  EFI_EXP_BASE10_DATA      MDLowerCriticalThreshold;\r
-  EFI_EXP_BASE10_DATA      MDUpperCriticalThreshold;\r
-  EFI_EXP_BASE10_DATA      MDLowerNonrecoverableThreshold;\r
-  EFI_EXP_BASE10_DATA      MDUpperNonrecoverableThreshold;\r
-  UINT32                   TemperatureProbeOemDefined;\r
+                                    TemperatureProbeLocation;\r
+  EFI_EXP_BASE10_DATA               TemperatureProbeMaximumValue;\r
+  EFI_EXP_BASE10_DATA               TemperatureProbeMinimumValue;\r
+  EFI_EXP_BASE10_DATA               TemperatureProbeResolution;\r
+  EFI_EXP_BASE10_DATA               TemperatureProbeTolerance;\r
+  EFI_EXP_BASE10_DATA               TemperatureProbeAccuracy;\r
+  EFI_EXP_BASE10_DATA               TemperatureProbeNominalValue;\r
+  EFI_EXP_BASE10_DATA               MDLowerNoncriticalThreshold;\r
+  EFI_EXP_BASE10_DATA               MDUpperNoncriticalThreshold;\r
+  EFI_EXP_BASE10_DATA               MDLowerCriticalThreshold;\r
+  EFI_EXP_BASE10_DATA               MDUpperCriticalThreshold;\r
+  EFI_EXP_BASE10_DATA               MDLowerNonrecoverableThreshold;\r
+  EFI_EXP_BASE10_DATA               MDUpperNonrecoverableThreshold;\r
+  UINT32                            TemperatureProbeOemDefined;\r
 } EFI_MISC_TEMPERATURE_PROBE_DESCRIPTION_DATA;\r
 \r
-//\r
-//////////////////////////////////////////////////////////////////////////////\r
 //\r
 // Electrical Current Probe - SMBIOS Type 29\r
 //\r
 \r
-#define EFI_MISC_ELECTRICAL_CURRENT_PROBE_DESCRIPTION_RECORD_NUMBER  0x00000017\r
+#define EFI_MISC_ELECTRICAL_CURRENT_PROBE_DESCRIPTION_RECORD_NUMBER    0x00000017\r
 \r
 typedef struct {\r
-  UINT32 ElectricalCurrentProbeSite    :5;\r
-  UINT32 ElectricalCurrentProbeStatus  :3;\r
-  UINT32 Reserved                      :24;\r
+  UINT32                            ElectricalCurrentProbeSite    :5;\r
+  UINT32                            ElectricalCurrentProbeStatus  :3;\r
+  UINT32                            Reserved                      :24;\r
 } EFI_MISC_ELECTRICAL_CURRENT_PROBE_LOCATION;\r
 \r
 typedef struct {\r
-  STRING_REF               ElectricalCurrentProbeDescription;\r
+  STRING_REF                        ElectricalCurrentProbeDescription;\r
   EFI_MISC_ELECTRICAL_CURRENT_PROBE_LOCATION\r
-                           ElectricalCurrentProbeLocation;\r
-  EFI_EXP_BASE10_DATA      ElectricalCurrentProbeMaximumValue;\r
-  EFI_EXP_BASE10_DATA      ElectricalCurrentProbeMinimumValue;\r
-  EFI_EXP_BASE10_DATA      ElectricalCurrentProbeResolution;\r
-  EFI_EXP_BASE10_DATA      ElectricalCurrentProbeTolerance;\r
-  EFI_EXP_BASE10_DATA      ElectricalCurrentProbeAccuracy;\r
-  EFI_EXP_BASE10_DATA      ElectricalCurrentProbeNominalValue;\r
-  EFI_EXP_BASE10_DATA      MDLowerNoncriticalThreshold;\r
-  EFI_EXP_BASE10_DATA      MDUpperNoncriticalThreshold;\r
-  EFI_EXP_BASE10_DATA      MDLowerCriticalThreshold;\r
-  EFI_EXP_BASE10_DATA      MDUpperCriticalThreshold;\r
-  EFI_EXP_BASE10_DATA      MDLowerNonrecoverableThreshold;\r
-  EFI_EXP_BASE10_DATA      MDUpperNonrecoverableThreshold;\r
-  UINT32                   ElectricalCurrentProbeOemDefined;\r
+                                    ElectricalCurrentProbeLocation;\r
+  EFI_EXP_BASE10_DATA               ElectricalCurrentProbeMaximumValue;\r
+  EFI_EXP_BASE10_DATA               ElectricalCurrentProbeMinimumValue;\r
+  EFI_EXP_BASE10_DATA               ElectricalCurrentProbeResolution;\r
+  EFI_EXP_BASE10_DATA               ElectricalCurrentProbeTolerance;\r
+  EFI_EXP_BASE10_DATA               ElectricalCurrentProbeAccuracy;\r
+  EFI_EXP_BASE10_DATA               ElectricalCurrentProbeNominalValue;\r
+  EFI_EXP_BASE10_DATA               MDLowerNoncriticalThreshold;\r
+  EFI_EXP_BASE10_DATA               MDUpperNoncriticalThreshold;\r
+  EFI_EXP_BASE10_DATA               MDLowerCriticalThreshold;\r
+  EFI_EXP_BASE10_DATA               MDUpperCriticalThreshold;\r
+  EFI_EXP_BASE10_DATA               MDLowerNonrecoverableThreshold;\r
+  EFI_EXP_BASE10_DATA               MDUpperNonrecoverableThreshold;\r
+  UINT32                            ElectricalCurrentProbeOemDefined;\r
 } EFI_MISC_ELECTRICAL_CURRENT_PROBE_DESCRIPTION_DATA;\r
 \r
-//\r
-//////////////////////////////////////////////////////////////////////////////\r
 //\r
 // Out-of-Band Remote Access - SMBIOS Type 30\r
 //\r
 \r
-#define EFI_MISC_REMOTE_ACCESS_MANUFACTURER_DESCRIPTION_RECORD_NUMBER  0x00000018\r
+#define EFI_MISC_REMOTE_ACCESS_MANUFACTURER_DESCRIPTION_RECORD_NUMBER    0x00000018\r
 \r
 typedef struct  {\r
-  UINT32 InboundConnectionEnabled            :1;\r
-  UINT32 OutboundConnectionEnabled           :1;\r
-  UINT32 Reserved                            :30;\r
+  UINT32                            InboundConnectionEnabled  :1;\r
+  UINT32                            OutboundConnectionEnabled :1;\r
+  UINT32                            Reserved                  :30;\r
 } EFI_MISC_REMOTE_ACCESS_CONNECTIONS;\r
 \r
 typedef struct {\r
-  STRING_REF                             RemoteAccessManufacturerNameDescription;\r
-  EFI_MISC_REMOTE_ACCESS_CONNECTIONS     RemoteAccessConnections;\r
+  STRING_REF                         RemoteAccessManufacturerNameDescription;\r
+  EFI_MISC_REMOTE_ACCESS_CONNECTIONS RemoteAccessConnections;\r
 } EFI_MISC_REMOTE_ACCESS_MANUFACTURER_DESCRIPTION_DATA;\r
 \r
-//\r
-//////////////////////////////////////////////////////////////////////////////\r
 //\r
 // Misc. BIS Entry Point - SMBIOS Type 31\r
 //\r
-#define EFI_MISC_BIS_ENTRY_POINT_RECORD_NUMBER          0x00000019\r
+#define EFI_MISC_BIS_ENTRY_POINT_RECORD_NUMBER    0x00000019\r
 \r
 typedef struct {\r
-  EFI_PHYSICAL_ADDRESS       BisEntryPoint;\r
+  EFI_PHYSICAL_ADDRESS              BisEntryPoint;\r
 } EFI_MISC_BIS_ENTRY_POINT_DATA;\r
 \r
-//\r
-//////////////////////////////////////////////////////////////////////////////\r
 //\r
 // Misc. Boot Information - SMBIOS Type 32\r
 //\r
-#define EFI_MISC_BOOT_INFORMATION_STATUS_RECORD_NUMBER  0x0000001A\r
+#define EFI_MISC_BOOT_INFORMATION_STATUS_RECORD_NUMBER    0x0000001A\r
 \r
+///\r
+/// Inconsistent with specification here:  \r
+/// In MiscSubclass spec 0.9, the structure name is EFI_MISC_BOOT_INFORMATION_STATUS_TYPE.\r
+/// Keep it unchanged for backward compatibilty.\r
+///\r
 typedef enum {\r
   EfiBootInformationStatusNoError                  = 0x00,\r
   EfiBootInformationStatusNoBootableMedia          = 0x01,\r
@@ -1814,20 +2506,23 @@ typedef enum {
   EfiBootInformationStatusWatchdogTimerExpired     = 0x08,\r
   EfiBootInformationStatusStartReserved            = 0x09,\r
   EfiBootInformationStatusStartOemSpecific         = 0x80,\r
-  EfiBootInformationStatusStartProductSpecific     = 0xC0,\r
+  EfiBootInformationStatusStartProductSpecific     = 0xC0\r
 } EFI_MISC_BOOT_INFORMATION_STATUS_DATA_TYPE;\r
 \r
 typedef struct {\r
+  ///\r
+  /// Inconsistent with specification here:  \r
+  /// In MiscSubclass spec 0.9, the field name is EFI_MISC_BOOT_INFORMATION_STATUS_TYPE.\r
+  /// Keep it unchanged for backward compatibilty.\r
+  ///\r
   EFI_MISC_BOOT_INFORMATION_STATUS_DATA_TYPE BootInformationStatus;\r
   UINT8                                      BootInformationData[9];\r
 } EFI_MISC_BOOT_INFORMATION_STATUS_DATA;\r
 \r
-//\r
-//////////////////////////////////////////////////////////////////////////////\r
 //\r
 // Management Device - SMBIOS Type 34\r
 //\r
-#define EFI_MISC_MANAGEMENT_DEVICE_DESCRIPTION_RECORD_NUMBER   0x0000001B\r
+#define EFI_MISC_MANAGEMENT_DEVICE_DESCRIPTION_RECORD_NUMBER    0x0000001B\r
 \r
 typedef enum {\r
   EfiManagementDeviceTypeOther      = 0x01,\r
@@ -1842,7 +2537,7 @@ typedef enum {
   EfiManagementDeviceTypeMaxim1617  = 0x0A,\r
   EfiManagementDeviceTypeGl518Sm    = 0x0B,\r
   EfiManagementDeviceTypeW83781D    = 0x0C,\r
-  EfiManagementDeviceTypeHt82H791   = 0x0D,\r
+  EfiManagementDeviceTypeHt82H791   = 0x0D\r
 } EFI_MISC_MANAGEMENT_DEVICE_TYPE;\r
 \r
 typedef enum {\r
@@ -1854,30 +2549,31 @@ typedef enum {
 } EFI_MISC_MANAGEMENT_DEVICE_ADDRESS_TYPE;\r
 \r
 typedef struct {\r
-  STRING_REF                       ManagementDeviceDescription;\r
-  EFI_MISC_MANAGEMENT_DEVICE_TYPE  ManagementDeviceType;\r
-  UINTN                            ManagementDeviceAddress;\r
+  STRING_REF                        ManagementDeviceDescription;\r
+  EFI_MISC_MANAGEMENT_DEVICE_TYPE   ManagementDeviceType;\r
+  UINTN                             ManagementDeviceAddress;\r
   EFI_MISC_MANAGEMENT_DEVICE_ADDRESS_TYPE\r
-                                   ManagementDeviceAddressType;\r
+                                    ManagementDeviceAddressType;\r
 } EFI_MISC_MANAGEMENT_DEVICE_DESCRIPTION_DATA;\r
 \r
-//\r
-//////////////////////////////////////////////////////////////////////////////\r
 //\r
 // Management Device Component - SMBIOS Type 35\r
 //\r
 \r
-#define EFI_MISC_MANAGEMENT_DEVICE_COMPONENT_DESCRIPTION_RECORD_NUMBER  0x0000001C\r
+#define EFI_MISC_MANAGEMENT_DEVICE_COMPONENT_DESCRIPTION_RECORD_NUMBER    0x0000001C\r
 \r
 typedef struct {\r
-  STRING_REF               ManagementDeviceComponentDescription;\r
-  EFI_INTER_LINK_DATA      ManagementDeviceLink;\r
-  EFI_INTER_LINK_DATA      ManagementDeviceComponentLink;\r
-  EFI_INTER_LINK_DATA      ManagementDeviceThresholdLink;\r
+  STRING_REF                        ManagementDeviceComponentDescription;\r
+  EFI_INTER_LINK_DATA               ManagementDeviceLink;\r
+  EFI_INTER_LINK_DATA               ManagementDeviceComponentLink;\r
+  ///\r
+  /// Inconsistent with specification here:  \r
+  /// In MiscSubclass spec 0.9, this field is NOT defined.\r
+  /// It's introduced for SmBios 2.6 spec type 35.\r
+  ///\r
+  EFI_INTER_LINK_DATA               ManagementDeviceThresholdLink;\r
 } EFI_MISC_MANAGEMENT_DEVICE_COMPONENT_DESCRIPTION_DATA;\r
 \r
-//\r
-//////////////////////////////////////////////////////////////////////////////\r
 //\r
 // IPMI Data Record - SMBIOS Type 38\r
 //\r
@@ -1885,95 +2581,118 @@ typedef enum {
   EfiIpmiOther = 0,\r
   EfiIpmiKcs   = 1,\r
   EfiIpmiSmic  = 2,\r
-  EfiIpmiBt    = 3,\r
+  EfiIpmiBt    = 3\r
 } EFI_MISC_IPMI_INTERFACE_TYPE;\r
 \r
 typedef struct {\r
-  UINT16  IpmiSpecLeastSignificantDigit:4;\r
-  UINT16  IpmiSpecMostSignificantDigit: 4;\r
-  UINT16  Reserved:                     8;\r
+  UINT16                            IpmiSpecLeastSignificantDigit:4;\r
+  UINT16                            IpmiSpecMostSignificantDigit: 4;\r
+  UINT16                            Reserved:                     8;\r
 } EFI_MISC_IPMI_SPECIFICATION_REVISION;\r
 \r
 typedef struct {\r
-  EFI_MISC_IPMI_INTERFACE_TYPE          IpmiInterfaceType;\r
-  EFI_MISC_IPMI_SPECIFICATION_REVISION  IpmiSpecificationRevision;\r
-  UINT16                                IpmiI2CSlaveAddress;\r
-  UINT16                                IpmiNvDeviceAddress;\r
-  UINT64                                IpmiBaseAddress;\r
-  EFI_DEVICE_PATH_PROTOCOL              IpmiDevicePath;\r
+  EFI_MISC_IPMI_INTERFACE_TYPE      IpmiInterfaceType;\r
+  EFI_MISC_IPMI_SPECIFICATION_REVISION  \r
+                                    IpmiSpecificationRevision;\r
+  UINT16                            IpmiI2CSlaveAddress;\r
+  UINT16                            IpmiNvDeviceAddress;\r
+  UINT64                            IpmiBaseAddress;\r
+  EFI_DEVICE_PATH_PROTOCOL          IpmiDevicePath;\r
 } EFI_MISC_IPMI_INTERFACE_TYPE_DATA;\r
 \r
-#define EFI_MISC_IPMI_INTERFACE_TYPE_RECORD_NUMBER  0x0000001D\r
-\r
-//\r
-//////////////////////////////////////////////////////////////////////////////\r
-//\r
-//System Power supply Record - SMBIOS Type 39\r
-//\r
-typedef struct {\r
-  UINT16  PowerSupplyHotReplaceable  :1;\r
-  UINT16  PowerSupplyPresent         :1;\r
-  UINT16  PowerSupplyUnplugged       :1;\r
-  UINT16  InputVoltageRangeSwitch    :4;\r
-  UINT16  PowerSupplyStatus          :3;\r
-  UINT16  PowerSupplyType            :4;\r
-  UINT16  Reserved                   :2;\r
-} POWER_SUPPLY_CHARACTERISTICS;\r
-\r
-typedef struct {\r
-  UINT8                           PowerUnitGroup;\r
-  STRING_REF                      PowerSupplyLocation;\r
-  STRING_REF                      PowerSupplyDeviceName;\r
-  STRING_REF                      PowerSupplyManufacturer;\r
-  STRING_REF                      PowerSupplySerialNumber;\r
-  STRING_REF                      PowerSupplyAssetTagNumber;\r
-  STRING_REF                      PowerSupplyModelPartNumber;\r
-  STRING_REF                      PowerSupplyRevisionLevel;\r
-  UINT16                          PowerSupplyMaxPowerCapacity;\r
-  POWER_SUPPLY_CHARACTERISTICS    PowerSupplyCharacteristics;\r
-  EFI_INTER_LINK_DATA             PowerSupplyInputVoltageProbeLink;\r
-  EFI_INTER_LINK_DATA             PowerSupplyCoolingDeviceLink;\r
-  EFI_INTER_LINK_DATA             PowerSupplyInputCurrentProbeLink;\r
+#define EFI_MISC_IPMI_INTERFACE_TYPE_RECORD_NUMBER    0x0000001D\r
+\r
+///\r
+/// System Power supply Record - SMBIOS Type 39\r
+///\r
+/// Inconsistent with specification here:  \r
+/// In MiscSubclass spec 0.9, the type of all fields are UINT32.\r
+/// Keep it unchanged for backward compatibilty.\r
+///\r
+typedef struct {\r
+  UINT16                            PowerSupplyHotReplaceable:1;\r
+  UINT16                            PowerSupplyPresent       :1;\r
+  UINT16                            PowerSupplyUnplugged     :1;\r
+  UINT16                            InputVoltageRangeSwitch  :4;\r
+  UINT16                            PowerSupplyStatus        :3;\r
+  UINT16                            PowerSupplyType          :4;\r
+  UINT16                            Reserved                 :2;\r
+} EFI_MISC_POWER_SUPPLY_CHARACTERISTICS;\r
+\r
+///\r
+/// Inconsistent with specification here:  \r
+/// In MiscSubclass spec 0.9, the field name is EFI_MISC_POWER_SUPPLY_UNIT_GROUP_DATA.\r
+/// Keep it unchanged for backward compatibilty.\r
+///\r
+typedef struct {\r
+  UINT16                                 PowerUnitGroup;\r
+  STRING_REF                             PowerSupplyLocation;\r
+  STRING_REF                             PowerSupplyDeviceName;\r
+  STRING_REF                             PowerSupplyManufacturer;\r
+  STRING_REF                             PowerSupplySerialNumber;\r
+  STRING_REF                             PowerSupplyAssetTagNumber;\r
+  STRING_REF                             PowerSupplyModelPartNumber;\r
+  STRING_REF                             PowerSupplyRevisionLevel;\r
+  UINT16                                 PowerSupplyMaxPowerCapacity;\r
+  EFI_MISC_POWER_SUPPLY_CHARACTERISTICS  PowerSupplyCharacteristics;\r
+  EFI_INTER_LINK_DATA                    PowerSupplyInputVoltageProbeLink;\r
+  EFI_INTER_LINK_DATA                    PowerSupplyCoolingDeviceLink;\r
+  EFI_INTER_LINK_DATA                    PowerSupplyInputCurrentProbeLink;\r
 } EFI_MISC_SYSTEM_POWER_SUPPLY_DATA;\r
 \r
-#define EFI_MISC_SYSTEM_POWER_SUPPLY_RECORD_NUMBER 0x0000001E\r
+#define EFI_MISC_SYSTEM_POWER_SUPPLY_RECORD_NUMBER    0x0000001E\r
 \r
-//\r
-//////////////////////////////////////////////////////////////////////////////\r
-//\r
-// OEM Data Record - SMBIOS Type 0x80-0xFF\r
-//\r
+///\r
+/// OEM Data Record - SMBIOS Type 0x80-0xFF\r
+///\r
+/// Inconsistent with specification here:  \r
+/// In MiscSubclass spec 0.9, the structure name is EFI_SMBIOS_STRUCTURE_HDR.\r
+/// Due to this structure is commonly used by vendor to construct SmBios type 0x80~0xFF table,\r
+/// Keep it unchanged for backward compatibilty.\r
+///\r
 typedef struct {\r
-  UINT8       Type;\r
-  UINT8       Length;\r
-  UINT16      Handle;\r
+  UINT8                             Type;\r
+  UINT8                             Length;\r
+  UINT16                            Handle;\r
 } SMBIOS_STRUCTURE_HDR;\r
 \r
 typedef struct {\r
-  SMBIOS_STRUCTURE_HDR          Header;\r
-  UINT8                         RawData[1];\r
+  ///\r
+  /// Inconsistent with specification here:  \r
+  /// In MiscSubclass spec 0.9, the field name is EFI_SMBIOS_STRUCTURE_HDR.\r
+  /// Keep it unchanged for backward compatibilty.\r
+  ///\r
+  SMBIOS_STRUCTURE_HDR              Header;\r
+  UINT8                             RawData[1];\r
 } EFI_MISC_SMBIOS_STRUCT_ENCAPSULATION_DATA;\r
 \r
-#define EFI_MISC_SMBIOS_STRUCT_ENCAP_RECORD_NUMBER  0x0000001F\r
-\r
-//\r
-//////////////////////////////////////////////////////////////////////////////\r
-//\r
-//  Misc. System Event Log  - SMBIOS Type 15\r
-//\r
-#define EFI_MISC_SYSTEM_EVENT_LOG_RECORD_NUMBER 0x00000020\r
-typedef struct {\r
-  //SMBIOS_STRUCTURE_HDR  Header;\r
-  UINT16                LogAreaLength;\r
-  UINT16                LogHeaderStartOffset;\r
-  UINT16                LogDataStartOffset;\r
-  UINT8                 AccessMethod;\r
-  UINT8                 LogStatus;\r
-  UINT32                LogChangeToken;\r
-  UINT32                AccessMethodAddress;\r
-  UINT8                 LogHeaderFormat;\r
-  UINT8                 NumberOfSupportedLogType;\r
-  UINT8                 LengthOfLogDescriptor;\r
+#define EFI_MISC_SMBIOS_STRUCT_ENCAP_RECORD_NUMBER    0x0000001F\r
+\r
+///\r
+/// Misc. System Event Log  - SMBIOS Type 15\r
+///\r
+/// Inconsistent with specification here:  \r
+/// In MiscSubclass spec 0.9, the following data structures are NOT defined.\r
+/// It's introduced for SmBios 2.6 spec type 15.\r
+///\r
+#define EFI_MISC_SYSTEM_EVENT_LOG_RECORD_NUMBER    0x00000020\r
+\r
+///\r
+/// Inconsistent with specification here:  \r
+/// In MiscSubclass spec 0.9, the following data structures are NOT defined.\r
+/// It's introduced for SmBios 2.6 spec type 15.\r
+///\r
+typedef struct {\r
+  UINT16                            LogAreaLength;\r
+  UINT16                            LogHeaderStartOffset;\r
+  UINT16                            LogDataStartOffset;\r
+  UINT8                             AccessMethod;\r
+  UINT8                             LogStatus;\r
+  UINT32                            LogChangeToken;\r
+  UINT32                            AccessMethodAddress;\r
+  UINT8                             LogHeaderFormat;\r
+  UINT8                             NumberOfSupportedLogType;\r
+  UINT8                             LengthOfLogDescriptor;\r
 } EFI_MISC_SYSTEM_EVENT_LOG_DATA;\r
 \r
 //\r
@@ -1988,20 +2707,26 @@ typedef struct {
 #define ACCESS_MEMORY_MAPPED                  0x03\r
 #define ACCESS_GPNV                           0x04\r
 \r
-//\r
-//////////////////////////////////////////////////////////////////////////////\r
-//\r
-//Management Device Threshold Data Record - SMBIOS Type 36\r
-//\r
-#define EFI_MISC_MANAGEMENT_DEVICE_THRESHOLD_RECORD_NUMBER  0x00000021\r
-\r
-typedef struct {\r
-  UINT16                          LowerThresNonCritical;\r
-  UINT16                          UpperThresNonCritical;\r
-  UINT16                          LowerThresCritical;\r
-  UINT16                          UpperThresCritical;\r
-  UINT16                          LowerThresNonRecover;\r
-  UINT16                          UpperThresNonRecover;\r
+///\r
+/// Management Device Threshold Data Record - SMBIOS Type 36\r
+///\r
+/// Inconsistent with specification here:  \r
+/// In MiscSubclass spec 0.9, the following data structures are NOT defined.\r
+/// It's introduced for SmBios 2.6 spec type 36.\r
+///\r
+#define EFI_MISC_MANAGEMENT_DEVICE_THRESHOLD_RECORD_NUMBER    0x00000021\r
+///\r
+/// Inconsistent with specification here:  \r
+/// In MiscSubclass spec 0.9, the following data structures are NOT defined.\r
+/// It's introduced for SmBios 2.6 spec type 36.\r
+///\r
+typedef struct {\r
+  UINT16                            LowerThresNonCritical;\r
+  UINT16                            UpperThresNonCritical;\r
+  UINT16                            LowerThresCritical;\r
+  UINT16                            UpperThresCritical;\r
+  UINT16                            LowerThresNonRecover;\r
+  UINT16                            UpperThresNonRecover;\r
 } EFI_MISC_MANAGEMENT_DEVICE_THRESHOLD;\r
 \r
 //\r
@@ -2015,7 +2740,7 @@ typedef EFI_MISC_CHASSIS_MANUFACTURER_DATA                EFI_MISC_CHASSIS_MANUF
 typedef EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA  EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR;\r
 typedef EFI_MISC_SYSTEM_SLOT_DESIGNATION_DATA             EFI_MISC_SYSTEM_SLOT_DESIGNATION;\r
 typedef EFI_MISC_ONBOARD_DEVICE_DATA                      EFI_MISC_ONBOARD_DEVICE;\r
-typedef EFI_MISC_PORTING_DEVICE_TYPE_DATA                 EFI_MISC_ONBOARD_DEVICE_TYPE_DATA;\r
+typedef EFI_MISC_POINTING_DEVICE_TYPE_DATA                EFI_MISC_ONBOARD_DEVICE_TYPE_DATA;\r
 typedef EFI_MISC_OEM_STRING_DATA                          EFI_MISC_OEM_STRING;\r
 typedef EFI_MISC_SYSTEM_OPTION_STRING_DATA                EFI_MISC_SYSTEM_OPTION_STRING;\r
 typedef EFI_MISC_NUMBER_OF_INSTALLABLE_LANGUAGES_DATA     EFI_MISC_NUMBER_OF_INSTALLABLE_LANGUAGES;\r
@@ -2025,7 +2750,20 @@ typedef EFI_MISC_BIS_ENTRY_POINT_DATA                     EFI_MISC_BIS_ENTRY_POI
 typedef EFI_MISC_BOOT_INFORMATION_STATUS_DATA             EFI_MISC_BOOT_INFORMATION_STATUS;\r
 typedef EFI_MISC_SYSTEM_POWER_SUPPLY_DATA                 EFI_MISC_SYSTEM_POWER_SUPPLY;\r
 typedef EFI_MISC_SMBIOS_STRUCT_ENCAPSULATION_DATA         EFI_MISC_SMBIOS_STRUCT_ENCAPSULATION;\r
-\r
+typedef EFI_MISC_SCHEDULED_POWER_ON_MONTH_DATA            EFI_MISC_SCHEDULED_POWER_ON_MONTH;\r
+typedef EFI_MISC_VOLTAGE_PROBE_DESCRIPTION_DATA           EFI_MISC_VOLTAGE_PROBE_DESCRIPTION;\r
+typedef EFI_MISC_COOLING_DEVICE_TEMP_LINK_DATA            EFI_MISC_COOLING_DEVICE_TEMP_LINK;\r
+typedef EFI_MISC_TEMPERATURE_PROBE_DESCRIPTION_DATA       EFI_MISC_TEMPERATURE_PROBE_DESCRIPTION;\r
+typedef EFI_MISC_REMOTE_ACCESS_MANUFACTURER_DESCRIPTION_DATA \r
+                                                          EFI_MISC_REMOTE_ACCESS_MANUFACTURER_DESCRIPTION;\r
+typedef EFI_MISC_MANAGEMENT_DEVICE_DESCRIPTION_DATA       EFI_MISC_MANAGEMENT_DEVICE_DESCRIPTION;\r
+typedef EFI_MISC_ELECTRICAL_CURRENT_PROBE_DESCRIPTION_DATA EFI_MISC_ELECTRICAL_CURRENT_PROBE_DESCRIPTION;\r
+\r
+///\r
+/// Inconsistent with specification here:  \r
+/// In MemSubclass spec 0.9, the following data structures are NOT defined.\r
+/// It is implementation-specific to simplify the code logic.\r
+///\r
 typedef union {\r
   EFI_MISC_LAST_PCI_BUS_DATA                         LastPciBus;\r
   EFI_MISC_BIOS_VENDOR_DATA                          MiscBiosVendor;\r
@@ -2042,7 +2780,7 @@ typedef union {
   EFI_MISC_SYSTEM_EVENT_LOG_DATA                     MiscSystemEventLog;\r
   EFI_MISC_GROUP_NAME_DATA                           MiscGroupNameData;\r
   EFI_MISC_GROUP_ITEM_SET_DATA                       MiscGroupItemSetData;\r
-  EFI_MISC_PORTING_DEVICE_TYPE_DATA                  MiscPortingDeviceTypeData;\r
+  EFI_MISC_POINTING_DEVICE_TYPE_DATA                 MiscPointingDeviceTypeData;\r
   EFI_MISC_RESET_CAPABILITIES_DATA                   MiscResetCapablilitiesData;\r
   EFI_MISC_HARDWARE_SECURITY_SETTINGS_DATA           MiscHardwareSecuritySettingsData;\r
   EFI_MISC_SCHEDULED_POWER_ON_MONTH_DATA             MiscScheduledPowerOnMonthData;\r
@@ -2063,21 +2801,28 @@ typedef union {
   EFI_MISC_MANAGEMENT_DEVICE_THRESHOLD               MiscManagementDeviceThreshold;\r
 } EFI_MISC_SUBCLASS_RECORDS;\r
 \r
-//\r
-//\r
-//\r
+///\r
+/// Inconsistent with specification here:  \r
+/// In MemSubclass spec 0.9, the following data structures are NOT defined.\r
+/// It is implementation-specific to simplify the code logic.\r
+///\r
 typedef struct {\r
-  EFI_SUBCLASS_TYPE1_HEADER       Header;\r
-  EFI_MISC_SUBCLASS_RECORDS       Record;\r
+  EFI_SUBCLASS_TYPE1_HEADER         Header;\r
+  EFI_MISC_SUBCLASS_RECORDS         Record;\r
 } EFI_MISC_SUBCLASS_DRIVER_DATA;\r
-\r
 #pragma pack()\r
 \r
-//\r
-// Sub Class Header type1\r
-//\r
-\r
+///\r
+/// Inconsistent with specification here:  \r
+/// In DataHubSubclass spec 0.9 page 16, the following symbol is NOT defined.\r
+/// But value is meaningful, 0 means Reserved.\r
+///\r
 #define EFI_SUBCLASS_INSTANCE_RESERVED       0\r
-#define EFI_SUBCLASS_INSTANCE_NON_APPLICABLE 0xFFFF  //16 bit\r
+///\r
+/// Inconsistent with specification here:  \r
+/// In DataHubSubclass spec 0.9 page 16, the following symbol is NOT defined.\r
+/// But value is meaningful, -1 means Not Applicable.\r
+///\r
+#define EFI_SUBCLASS_INSTANCE_NON_APPLICABLE 0xFFFF\r
 \r
 #endif\r