]> git.proxmox.com Git - mirror_edk2.git/blobdiff - IntelFrameworkPkg/Include/Framework/DataHubRecords.h
Add definition on SmmStatusCodeProtocol to comply the SMMCIS spec to fix the bug...
[mirror_edk2.git] / IntelFrameworkPkg / Include / Framework / DataHubRecords.h
index 951eb6e94f8e35243d97d989b020a996ddfeec25..b1157bafd375f416b5e6979572ca46a6b5aecadb 100644 (file)
@@ -28,7 +28,7 @@
 #include <Protocol/DevicePath.h>\r
 #include <Protocol/FrameworkHii.h>\r
 \r
-#define EFI_PROCESSOR_SUBCLASS_VERSION    0x00010000\r
+#define EFI_PROCESSOR_SUBCLASS_VERSION    0x0100\r
 \r
 #pragma pack(1)\r
 \r
@@ -118,6 +118,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 spec0.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
@@ -131,12 +136,6 @@ typedef union _EFI_MISC_PORT_DEVICE_PATH {
 } EFI_MISC_PORT_DEVICE_PATH;\r
 \r
 #pragma pack()\r
-\r
-//\r
-// String Token Definition\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
@@ -229,11 +228,11 @@ typedef struct {
   ///\r
   /// The INT16 number by which to multiply the base-2 representation.\r
   ///\r
-  UINT16                            Value;\r
+  INT16                            Value;\r
   ///\r
   /// The INT16 number by which to raise the base-2 calculation. \r
   ///\r
-  UINT16                            Exponent;\r
+  INT16                            Exponent;\r
 } EFI_EXP_BASE10_DATA;\r
 \r
 typedef EFI_EXP_BASE10_DATA        EFI_PROCESSOR_MAX_CORE_FREQUENCY_DATA;\r
@@ -248,6 +247,9 @@ typedef EFI_EXP_BASE10_DATA        EFI_PROCESSOR_CORE_FREQUENCY_DATA;
 /// 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
+/// It's a typo of 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
@@ -277,10 +279,10 @@ typedef struct {
 } EFI_PROCESSOR_SIGNATURE;\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                            LogicalProcessorCount  :8;\r
+  UINT32                            ProcessorDfltApicId    :8;\r
 } EFI_PROCESSOR_MISC_INFO;\r
 \r
 typedef struct {\r
@@ -421,6 +423,10 @@ typedef enum {
   EfiProcessorFamilyUltraSparcII           = 0x55,\r
   EfiProcessorFamilyUltraSparcIIi          = 0x56,\r
   EfiProcessorFamilyUltraSparcIII          = 0x57,\r
+  ///\r
+  /// Inconsistent with specification here:  \r
+  /// This field in ProcSubClass spec0.9 is defined as EfiProcessorFamilyUltraSparcIIi, it's a typo.\r
+  ///\r
   EfiProcessorFamilyUltraSparcIIIi         = 0x58,\r
   EfiProcessorFamily68040                  = 0x60,\r
   EfiProcessorFamily68xxx                  = 0x61,\r
@@ -458,25 +464,85 @@ typedef enum {
   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
-  EfiProcessorFamilyIntelCoreSolo          = 0xBD,  ///< SMBIOS spec 2.6 correct this value\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
+  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
@@ -565,15 +631,31 @@ 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
-typedef EFI_INTER_LINK_DATA         EFI_CACHE_ASSOCIATION_DATA;\r
+typedef EFI_INTER_LINK_DATA         EFI_PROCESSOR_CACHE_ASSOCIATION_DATA;\r
 \r
 ///\r
 /// This data record refers to the health status of the processor. \r
@@ -582,7 +664,7 @@ typedef enum {
   EfiProcessorHealthy        = 1,\r
   EfiProcessorPerfRestricted = 2,\r
   EfiProcessorFuncRestricted = 3 \r
-} EFI_PROCESSOR_HEALTH_STATUS;\r
+} EFI_PROCESSOR_HEALTH_STATUS_DATA;\r
 \r
 ///\r
 /// This data record refers to the package number of this processor. Multiple logical processors can \r
@@ -591,33 +673,36 @@ typedef enum {
 ///\r
 typedef UINTN                       EFI_PROCESSOR_PACKAGE_NUMBER_DATA;\r
 \r
-typedef enum {\r
-  ProcessorCoreFrequencyRecordType     = 1,\r
-  ProcessorFsbFrequencyRecordType      = 2,\r
-  ProcessorVersionRecordType           = 3,\r
-  ProcessorManufacturerRecordType      = 4,\r
-  ProcessorSerialNumberRecordType      = 5,\r
-  ProcessorIdRecordType                = 6,\r
-  ProcessorTypeRecordType              = 7,\r
-  ProcessorFamilyRecordType            = 8,\r
-  ProcessorVoltageRecordType           = 9,\r
-  ProcessorApicBaseAddressRecordType   = 10,\r
-  ProcessorApicIdRecordType            = 11,\r
-  ProcessorApicVersionNumberRecordType = 12,\r
-  CpuUcodeRevisionDataRecordType       = 13,\r
-  ProcessorStatusRecordType            = 14,\r
-  ProcessorSocketTypeRecordType        = 15,\r
-  ProcessorSocketNameRecordType        = 16,\r
-  CacheAssociationRecordType           = 17,\r
-  ProcessorMaxCoreFrequencyRecordType  = 18,\r
-  ProcessorAssetTagRecordType          = 19,\r
-  ProcessorMaxFsbFrequencyRecordType   = 20,\r
-  ProcessorPackageNumberRecordType     = 21,\r
-  ProcessorCoreFrequencyListRecordType = 22,\r
-  ProcessorFsbFrequencyListRecordType  = 23,\r
-  ProcessorHealthStatusRecordType      = 24\r
-} EFI_CPU_VARIABLE_RECORD_TYPE;\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
+///\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
@@ -640,7 +725,7 @@ typedef union {
   EFI_PROCESSOR_SOCKET_TYPE_DATA          ProcessorSocketType;\r
   EFI_PROCESSOR_SOCKET_NAME_DATA          ProcessorSocketName;\r
   EFI_PROCESSOR_ASSET_TAG_DATA            ProcessorAssetTag;\r
-  EFI_PROCESSOR_HEALTH_STATUS             ProcessorHealthStatus;\r
+  EFI_PROCESSOR_HEALTH_STATUS_DATA        ProcessorHealthStatus;\r
   EFI_PROCESSOR_PACKAGE_NUMBER_DATA       ProcessorPackageNumber;\r
 } EFI_CPU_VARIABLE_RECORD;\r
 \r
@@ -652,7 +737,7 @@ typedef struct {
 #define EFI_CACHE_SUBCLASS_VERSION    0x00010000\r
 \r
 typedef EFI_EXP_BASE2_DATA          EFI_CACHE_SIZE_DATA;\r
-typedef EFI_EXP_BASE2_DATA          EFI_MAXIMUM_CACHE_SIZE_DATA;\r
+typedef EFI_EXP_BASE2_DATA          EFI_CACHE_MAXIMUM_SIZE_DATA;\r
 typedef EFI_EXP_BASE10_DATA         EFI_CACHE_SPEED_DATA;\r
 typedef STRING_REF                  EFI_CACHE_SOCKET_DATA;\r
 \r
@@ -694,10 +779,13 @@ 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
+/// It's a typo of CacheSubclass 0.9 spec. 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
@@ -749,19 +837,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_CACHE_MAXIMUM_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_PROCESSOR_CACHE_ASSOCIATION_DATA        CacheAssociation;\r
 } EFI_CACHE_VARIABLE_RECORD;\r
 \r
 typedef struct {\r
@@ -802,7 +894,7 @@ typedef struct {
   ///\r
   UINT16                            EndBusNumber;\r
   ///\r
-  /// The type of memory region from the operating system\92s point of view. \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
@@ -912,6 +1004,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
@@ -934,7 +1030,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
@@ -962,6 +1066,10 @@ 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
@@ -1041,7 +1149,7 @@ typedef struct {
   /// The memory speed in megahertz (MHz). A value of 0x00 denotes that \r
   /// the speed is unknown.\r
   ///\r
-  EFI_EXP_BASE10_DATA               MemorySpeed;\r
+  EFI_EXP_BASE10_DATA               MemoryTypeSpeed;\r
   ///\r
   /// The memory state. \r
   ///\r
@@ -1185,8 +1293,18 @@ typedef struct {
 //\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
@@ -1198,6 +1316,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
@@ -1208,6 +1331,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
@@ -1218,6 +1346,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
@@ -1227,6 +1360,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
@@ -1242,6 +1380,11 @@ 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                             Three   :1;\r
@@ -1249,10 +1392,14 @@ typedef struct {
   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
+///\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
@@ -1267,6 +1414,11 @@ typedef struct {
   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
@@ -1281,11 +1433,19 @@ typedef struct {
   EFI_INTER_LINK_DATA                   MemoryModuleConfig[1];\r
 } EFI_MEMORY_CONTROLLER_INFORMATION_DATA;\r
 \r
-//\r
-//  Memory. Error Information - SMBIOS Type 18\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
@@ -1302,14 +1462,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
@@ -1317,7 +1485,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
@@ -1328,11 +1500,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
@@ -1343,6 +1524,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
@@ -1363,8 +1549,6 @@ typedef struct {
 \r
 #define EFI_MISC_SUBCLASS_VERSION     0x0100\r
 \r
-#pragma pack(1)\r
-\r
 //\r
 // Last PCI Bus Number\r
 //\r
@@ -1439,9 +1623,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
@@ -1469,7 +1673,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
@@ -1551,6 +1765,11 @@ typedef enum {
 } EFI_MISC_CHASSIS_TYPE;\r
 \r
 typedef struct {\r
+  ///\r
+  /// Inconsistent with specification here:  \r
+  /// It's a typo of MiscSubclass 0.9 spec. It should be a variable\r
+  /// name "ChassisType" rather than a type "EFI_MISC_CHASSIS_TYPE".\r
+  ///\r
   UINT32                            ChassisType       :16;\r
   UINT32                            ChassisLockPresent:1;\r
   UINT32                            Reserved          :15;\r
@@ -1721,15 +1940,30 @@ 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, there is a typo on this field.\r
+  /// Its naming should be EfiSlotTypeAgp2X rather than EfiSlotTypeApg2X.\r
+  ///\r
+  EfiSlotTypeAgp2X                        = 0x10,\r
   EfiSlotTypeAgp4X                        = 0x11,\r
   EfiSlotTypePciX                         = 0x12,\r
-  EfiSlotTypeAgp4x                        = 0x13,\r
+  ///\r
+  /// Inconsistent with specification here:  \r
+  /// In MiscSubclass spec 0.9, there is a typo on this field.\r
+  /// Its naming should be EfiSlotTypeAgp8X rather than EfiSlotTypeAgp8x.\r
+  ///\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
@@ -1806,7 +2040,7 @@ typedef struct {
 \r
 typedef struct {\r
   STRING_REF                        OnBoardDeviceDescription;\r
-  EFI_MISC_ONBOARD_DEVICE_STATUS    OnBoardDeviceStatus;\r
+  EFI_MISC_ONBOARD_DEVICE_STATUS    OnBoardDeviceType;\r
   EFI_DEVICE_PATH_PROTOCOL          OnBoardDevicePath;\r
 } EFI_MISC_ONBOARD_DEVICE_DATA;\r
 \r
@@ -1913,44 +2147,48 @@ 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
+#define EFI_MISC_BATTERY_LOCATION_RECORD_NUMBER    0x00000010\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
-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
+typedef enum {\r
+  EfiBatteryDeviceChemistryTypeOther = 1, \r
+  EfiBatteryDeviceChemistryTypeUnknown = 2, \r
+  EfiBatteryDeviceChemistryTypeLeadAcid = 3, \r
+  EfiBatteryDeviceChemistryTypeNickelCadmium = 4, \r
+  EfiBatteryDeviceChemistryTypeNickelMetalHydride = 5, \r
+  EfiBatteryDeviceChemistryTypeLithiumIon = 6, \r
+  EfiBatteryDeviceChemistryTypeZincAir = 7, \r
+  EfiBatteryDeviceChemistryTypeLithiumPolymer = 8\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
 // Misc. Reset Capabilities - SMBIOS Type 23\r
@@ -1986,6 +2224,12 @@ typedef struct {
 //\r
 #define EFI_MISC_HARDWARE_SECURITY_SETTINGS_DATA_RECORD_NUMBER    0x00000012\r
 \r
+///\r
+/// Inconsistent with specification here:  \r
+/// In MiscSubclass spec0.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
@@ -1994,11 +2238,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
@@ -2171,10 +2415,10 @@ typedef enum {
   EfiBootInformationStatusStartReserved            = 0x09,\r
   EfiBootInformationStatusStartOemSpecific         = 0x80,\r
   EfiBootInformationStatusStartProductSpecific     = 0xC0\r
-} EFI_MISC_BOOT_INFORMATION_STATUS_DATA_TYPE;\r
+} EFI_MISC_BOOT_INFORMATION_STATUS_TYPE;\r
 \r
 typedef struct {\r
-  EFI_MISC_BOOT_INFORMATION_STATUS_DATA_TYPE BootInformationStatus;\r
+  EFI_MISC_BOOT_INFORMATION_STATUS_TYPE      BootInformationStatus;\r
   UINT8                                      BootInformationData[9];\r
 } EFI_MISC_BOOT_INFORMATION_STATUS_DATA;\r
 \r
@@ -2225,6 +2469,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 spec0.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
@@ -2260,30 +2509,30 @@ typedef struct {
 //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
-  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_SYSTEM_POWER_SUPPLY_DATA;\r
+  UINT32                            PowerSupplyHotReplaceable:1;\r
+  UINT32                            PowerSupplyPresent       :1;\r
+  UINT32                            PowerSupplyUnplugged     :1;\r
+  UINT32                            InputVoltageRangeSwitch  :4;\r
+  UINT32                            PowerSupplyStatus        :3;\r
+  UINT32                            PowerSupplyType          :4;\r
+  UINT32                            Reserved                 :18;\r
+} EFI_MISC_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
+  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_POWER_SUPPLY_UNIT_GROUP_DATA;\r
 \r
 #define EFI_MISC_SYSTEM_POWER_SUPPLY_RECORD_NUMBER    0x0000001E\r
 \r
@@ -2294,19 +2543,29 @@ typedef struct {
   UINT8                             Type;\r
   UINT8                             Length;\r
   UINT16                            Handle;\r
-} SMBIOS_STRUCTURE_HDR;\r
+} EFI_SMBIOS_STRUCTURE_HDR;\r
 \r
 typedef struct {\r
-  SMBIOS_STRUCTURE_HDR              Header;\r
+  EFI_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 spec0.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 spec0.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
@@ -2332,11 +2591,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 spec0.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 spec0.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
@@ -2357,7 +2624,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
@@ -2365,7 +2632,7 @@ typedef EFI_MISC_SYSTEM_LANGUAGE_STRING_DATA              EFI_MISC_SYSTEM_LANGUA
 typedef EFI_MISC_SYSTEM_EVENT_LOG_DATA                    EFI_MISC_SYSTEM_EVENT_LOG;\r
 typedef EFI_MISC_BIS_ENTRY_POINT_DATA                     EFI_MISC_BIS_ENTRY_POINT;\r
 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_POWER_SUPPLY_UNIT_GROUP_DATA             EFI_MISC_SYSTEM_POWER_SUPPLY;\r
 typedef EFI_MISC_SMBIOS_STRUCT_ENCAPSULATION_DATA         EFI_MISC_SMBIOS_STRUCT_ENCAPSULATION;\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
@@ -2376,6 +2643,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
@@ -2392,7 +2664,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
@@ -2408,26 +2680,30 @@ typedef union {
   EFI_MISC_MANAGEMENT_DEVICE_COMPONENT_DESCRIPTION_DATA\r
                                                      MiscmangementDeviceComponentDescriptionData;\r
   EFI_MISC_IPMI_INTERFACE_TYPE_DATA                  MiscIpmiInterfaceTypeData;\r
-  EFI_MISC_SYSTEM_POWER_SUPPLY_DATA                  MiscPowerSupplyInfo;\r
+  EFI_MISC_POWER_SUPPLY_UNIT_GROUP_DATA              MiscPowerSupplyInfo;\r
   EFI_MISC_SMBIOS_STRUCT_ENCAPSULATION_DATA          MiscSmbiosStructEncapsulation;\r
   EFI_MISC_MANAGEMENT_DEVICE_THRESHOLD               MiscManagementDeviceThreshold;\r
 } EFI_MISC_SUBCLASS_RECORDS;\r
 \r
-//\r
-//\r
-//\r
+///\r
+/// Sub Class Header type1\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