]> 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 cfb664cf162c4505061c61e88fca82f35e9b79f4..ce0ca23f0297c327b3d2c2a765a22df27132e80d 100644 (file)
 #ifndef _DATAHUB_RECORDS_H_\r
 #define _DATAHUB_RECORDS_H_\r
 \r
-#include <PiPei.h>\r
-#include <Protocol/DevicePath.h>\r
-#include <Protocol/FrameworkHii.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
@@ -118,6 +121,11 @@ typedef struct _FLOOPY_CONN_DEVICE_PATH {
   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
@@ -132,43 +140,139 @@ typedef union _EFI_MISC_PORT_DEVICE_PATH {
 \r
 #pragma pack()\r
 \r
-//\r
-// String Token Definition\r
-//\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
-typedef struct {\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
+///\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
 // EXP data\r
 //\r
-\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
-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
 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
@@ -187,11 +291,17 @@ typedef struct {
   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
@@ -228,13 +338,35 @@ typedef struct {
   UINT32                            ProcessorReserved4: 2;\r
 } EFI_PROCESSOR_FEATURE_FLAGS;\r
 \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
@@ -244,78 +376,218 @@ 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
+///\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
@@ -324,19 +596,32 @@ typedef enum {
   EfiProcessorIpfPalBMicrocode = 3\r
 } EFI_PROCESSOR_MICROCODE_TYPE;\r
 \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
@@ -366,24 +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
+///\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
+///\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
@@ -411,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
@@ -445,6 +799,11 @@ typedef struct {
 #define EFI_CACHE_SUBCLASS_VERSION    0x00010000\r
 \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
@@ -487,10 +846,14 @@ 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
+///\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
@@ -542,19 +905,23 @@ 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
@@ -572,12 +939,41 @@ typedef enum _EFI_MEMORY_REGION_TYPE {
   EfiMemoryRegionNvs                = 0x04\r
 } EFI_MEMORY_REGION_TYPE;\r
 \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
@@ -621,11 +1017,40 @@ typedef enum _EFI_MEMORY_ERROR_CORRECTION {
   EfiMemoryErrorCorrectionCrc                 = 0x07\r
 } EFI_MEMORY_ERROR_CORRECTION;\r
 \r
-typedef struct {\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
@@ -647,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
@@ -669,7 +1098,15 @@ 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
@@ -697,49 +1134,166 @@ 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
+///\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
+///\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
+///\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
@@ -757,25 +1311,71 @@ typedef enum _EFI_MEMORY_CHANNEL_TYPE {
   EfiMemoryChannelTypeSyncLink                = 4\r
 } EFI_MEMORY_CHANNEL_TYPE;\r
 \r
-typedef struct {\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
+///\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
+///\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
@@ -787,6 +1387,11 @@ typedef enum {
   EfiErrorDetectingMethodCrc     = 8\r
 } EFI_MEMORY_ERROR_DETECT_METHOD_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                             Other                 :1;\r
   UINT8                             Unknown               :1;\r
@@ -797,6 +1402,11 @@ typedef struct {
   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
@@ -807,6 +1417,11 @@ typedef enum {
   EfiMemoryInterleaveSixteenWay = 7\r
 } EFI_MEMORY_SUPPORT_INTERLEAVE_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
   UINT16                            Other    :1;\r
   UINT16                            Unknown  :1;\r
@@ -816,6 +1431,11 @@ typedef struct {
   UINT16                            Reserved :11;\r
 } EFI_MEMORY_SPEED_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
   UINT16                            Other       :1;\r
   UINT16                            Unknown     :1;\r
@@ -831,13 +1451,26 @@ typedef struct {
   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                             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
@@ -852,11 +1485,38 @@ typedef struct {
   UINT16                              *MemoryModuleConfigHandles;\r
 } EFI_MEMORY_CONTROLLER_INFORMATION;\r
 \r
-//\r
-//  Memory. Error Information - SMBIOS Type 18\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
+  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
+  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
+///\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
@@ -873,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
@@ -888,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
@@ -899,11 +1571,20 @@ typedef struct {
   UINT32                              DeviceErrorResolution;\r
 } EFI_MEMORY_32BIT_ERROR_INFORMATION;\r
 \r
-//\r
-//  Memory. Error Information - SMBIOS Type 33\r
-//\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
@@ -914,6 +1595,11 @@ typedef struct {
   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
@@ -1010,9 +1696,29 @@ typedef struct {
   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
@@ -1040,7 +1746,17 @@ typedef struct {
   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
@@ -1122,6 +1838,11 @@ typedef enum {
 } EFI_MISC_CHASSIS_TYPE;\r
 \r
 typedef struct {\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
@@ -1145,8 +1866,9 @@ typedef enum {
 } 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
@@ -1291,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
@@ -1376,6 +2108,11 @@ typedef struct {
 \r
 typedef struct {\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
@@ -1483,13 +2220,24 @@ 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
 // Portable Battery - SMBIOS Type 22\r
 //\r
-#define EFI_MISC_PORTABLE_BATTERY_RECORD_NUMBER    0x00000010\r
-\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
@@ -1501,6 +2249,12 @@ typedef enum {
   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
@@ -1522,6 +2276,7 @@ typedef struct {
   BOOLEAN                           Valid; // Is entry valid - Temporary\r
 } EFI_MISC_PORTABLE_BATTERY;\r
 \r
+\r
 //\r
 // Misc. Reset Capabilities - SMBIOS Type 23\r
 //\r
@@ -1556,6 +2311,12 @@ typedef struct {
 //\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
@@ -1564,11 +2325,11 @@ 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
@@ -1728,6 +2489,11 @@ typedef struct {
 //\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
@@ -1744,6 +2510,11 @@ typedef enum {
 } 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
@@ -1795,6 +2566,11 @@ typedef struct {
   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
@@ -1826,9 +2602,13 @@ typedef struct {
 \r
 #define EFI_MISC_IPMI_INTERFACE_TYPE_RECORD_NUMBER    0x0000001D\r
 \r
-//\r
-//System Power supply Record - SMBIOS Type 39\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
@@ -1837,29 +2617,39 @@ typedef struct {
   UINT16                            PowerSupplyStatus        :3;\r
   UINT16                            PowerSupplyType          :4;\r
   UINT16                            Reserved                 :2;\r
-} POWER_SUPPLY_CHARACTERISTICS;\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
-  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_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
 \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
@@ -1867,16 +2657,31 @@ typedef struct {
 } SMBIOS_STRUCTURE_HDR;\r
 \r
 typedef struct {\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
-//  Misc. System Event Log  - SMBIOS Type 15\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
@@ -1902,11 +2707,19 @@ typedef struct {
 #define ACCESS_MEMORY_MAPPED                  0x03\r
 #define ACCESS_GPNV                           0x04\r
 \r
-//\r
-//Management Device Threshold Data Record - SMBIOS Type 36\r
-//\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
+///\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
@@ -1927,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
@@ -1946,6 +2759,11 @@ typedef EFI_MISC_REMOTE_ACCESS_MANUFACTURER_DESCRIPTION_DATA
 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
@@ -1962,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
@@ -1983,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_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