| ## | |
| # This file is used to document mismatches between Intel Platform Innovation Framework specification | |
| # (http://www.intel.com/technology/framework/spec.htm) and data structures defind at IntelFrameworkPkg | |
| # package in EdkII Open Source Project (https://github.com/tianocore/edk2/tree/master/IntelFrameworkPkg) | |
| ## | |
| ## | |
| # The general consideration about keeping the mismatches in EdkII: | |
| # 1. Some definitions defined in Framework specification may bring a little complexity on implementation. EdkII | |
| # makes changes on them from the view of code development. | |
| # 2. Some definitions are NOT defined in Framework specification, but introduced in Edk. EdkII chooses to keep | |
| # them for backward-compatibility. | |
| # 3. The name of some definitions are NOT consistent with Framework specification. If the name doesn't bring | |
| # misunderstanding literally, EdkII chooses to keep them for backward-compatibility. | |
| # 4. Some defintitions don't exactly match Framework specification, some new field members are introduced in EdkII | |
| # to reflect the latest industry standard. | |
| # | |
| # Note: | |
| # The IntelFrameworkPkg contains Framework specification contents that were not adopted by UEFI/PI, and names may be | |
| # changed (such as adding "FRAMEWORK_") to avoid name collisions with approved UEFI/PI specifications. | |
| ## | |
| ## | |
| # Mismatch with Intel Platform Innovation Framework for DataHubSubclass Specification (Version 0.90) | |
| ## | |
| 1. Guid/DataHubRecords.h | |
| #define EFI_STRING_TOKEN UINT16 | |
| This macro named "EFI_STRING_TOKEN" is *NOT* defined in Framework specification. Keeping this inconsistency | |
| for backward compatibility. | |
| 2. Guid/DataHubRecords.h | |
| #pragma pack(1) | |
| typedef struct { | |
| UINT8 LastPciBus; | |
| } EFI_MISC_LAST_PCI_BUS_DATA; | |
| ... | |
| typedef struct { | |
| EFI_SUBCLASS_TYPE1_HEADER Header; | |
| EFI_MISC_SUBCLASS_RECORDS Record; | |
| } EFI_MISC_SUBCLASS_DRIVER_DATA; | |
| #pragma pack() | |
| Section "Alignment" in DataHubSubclass specification say "Fields in a data hub record should be aligned at their | |
| natural boundaries". But in EdkII, the data structures above are packed. | |
| Keeping this inconsistency for backward compatibility. | |
| 3. Guid/DataHubRecords.h | |
| #define EFI_SUBCLASS_INSTANCE_RESERVED 0 | |
| #define EFI_SUBCLASS_INSTANCE_NON_APPLICABLE 0xFFFF | |
| The symbols above are *NOT* defined in DataHubSubclass specification. But the values are defined and are meaningful. | |
| According to DataHubSubclass spec, value 0 means Reserved and -1 means Not Applicable. EdkII introduces these macros | |
| to faciliate user development. | |
| ## | |
| # Mismatch with Intel Platform Innovation Framework for CacheSubclass Specification (Version 0.90) | |
| ## | |
| 1. Guid/DataHubRecords.h | |
| typedef EFI_EXP_BASE2_DATA EFI_MAXIMUM_CACHE_SIZE_DATA; | |
| The definition named "EFI_MAXIMUM_CACHE_SIZE_DATA" is *NOT* consistent with CacheSubclass specification, in which | |
| the name should be EFI_CACHE_MAXIMUM_SIZE_DATA. Keeping this inconsistency for backward compatibility. | |
| 2. Guid/DataHubRecords.h | |
| typedef struct { | |
| UINT32 Level :3; | |
| UINT32 Socketed :1; | |
| UINT32 Reserved2 :1; | |
| UINT32 Location :2; | |
| UINT32 Enable :1; | |
| UINT32 OperationalMode :2; | |
| UINT32 Reserved1 :22; | |
| } EFI_CACHE_CONFIGURATION_DATA; | |
| The field type of the definition is *NOT* consistent with CacheSubclass specification. Specification defines | |
| them as UINT16, which is incorrect and should be UINT32 because the total width of bit-fields is 32bits width. | |
| 3. Guid/DataHubRecords.h | |
| typedef enum { | |
| CacheSizeRecordType = 1, | |
| MaximumSizeCacheRecordType = 2, | |
| CacheSpeedRecordType = 3, | |
| CacheSocketRecordType = 4, | |
| CacheSramTypeRecordType = 5, | |
| CacheInstalledSramTypeRecordType = 6, | |
| CacheErrorTypeRecordType = 7, | |
| CacheTypeRecordType = 8, | |
| CacheAssociativityRecordType = 9, | |
| CacheConfigRecordType = 10 | |
| } EFI_CACHE_VARIABLE_RECORD_TYPE; | |
| The data structure and all enumeration fields are *NOT* defined in CacheSubclass specification, which only | |
| defines the following macros to specify the record number of the data record: | |
| #define EFI_CACHE_SIZE_RECORD_NUMBER 0x00000001 | |
| #define EFI_CACHE_MAXIMUM_SIZE_RECORD_NUMBER 0x00000002 | |
| #define EFI_CACHE_SPEED_RECORD_NUMBER 0x00000003 | |
| #define EFI_CACHE_SOCKET_RECORD_NUMBER 0x00000004 | |
| #define EFI_CACHE_SRAM_SUPPORT_RECORD_NUMBER 0x00000005 | |
| #define EFI_CACHE_SRAM_INSTALL_RECORD_NUMBER 0x00000006 | |
| #define EFI_CACHE_ERROR_SUPPORT_RECORD_NUMBER 0x00000007 | |
| #define EFI_CACHE_TYPE_RECORD_NUMBER 0x00000008 | |
| #define EFI_CACHE_ASSOCIATIVITY_RECORD_NUMBER 0x00000009 | |
| #define EFI_CACHE_CONFIGURATION_RECORD_NUMBER 0x0000000A | |
| Keeping this inconsistency for backward compatibility. | |
| 4. Guid/DataHubRecords.h | |
| typedef union { | |
| EFI_CACHE_SIZE_DATA CacheSize; | |
| ... | |
| EFI_CACHE_ASSOCIATION_DATA CacheAssociation; | |
| } EFI_CACHE_VARIABLE_RECORD; | |
| typedef struct { | |
| EFI_SUBCLASS_TYPE1_HEADER DataRecordHeader; | |
| EFI_CACHE_VARIABLE_RECORD VariableRecord; | |
| } EFI_CACHE_DATA_RECORD; | |
| The definitions above are *NOT* defined in CacheSubclass specification. EdkII introduces them to simplify the | |
| code logic. Therefore developer doesn't need to allocate memory dynamically to construct variable length data record. | |
| Keeping this inconsistency for backward compatibility. | |
| ## | |
| # Mismatch with Intel Platform Innovation Framework for ProcSubclass Specification (Version 0.90) | |
| ## | |
| 1. Guid/DataHubRecords.h | |
| #define EFI_PROCESSOR_SUBCLASS_VERSION 0x00010000 | |
| The value of the definition is *NOT* consistent with ProcSubclass specification, in which the value is 0x0100. | |
| Keeping this inconsistency from the perspective of binary consistency. | |
| 2. Guid/DataHubRecords.h | |
| typedef struct { | |
| UINT32 ProcessorBrandIndex :8; | |
| UINT32 ProcessorClflush :8; | |
| UINT32 ProcessorReserved :8; | |
| UINT32 ProcessorDfltApicId :8; | |
| } EFI_PROCESSOR_MISC_INFO; | |
| The definition is *NOT* consistent with ProcSubclass specification, in which the name of third field is defined | |
| as "LogicalProcessorCount" rather than "ProcessorReserved". | |
| Keeping this inconsistency for backward compatibility. | |
| 3. Guid/DataHubRecords.h | |
| typedef enum { | |
| ... | |
| EfiProcessorFamilyUltraSparcIIIi = 0x58, | |
| ... | |
| EfiProcessorFamilyIntelPentiumM = 0xB9, | |
| EfiProcessorFamilyIntelCeleronD = 0xBA, | |
| EfiProcessorFamilyIntelPentiumD = 0xBB, | |
| EfiProcessorFamilyIntelPentiumEx = 0xBC, | |
| EfiProcessorFamilyIntelCoreSolo = 0xBD, | |
| EfiProcessorFamilyReserved = 0xBE, | |
| EfiProcessorFamilyIntelCore2 = 0xBF, | |
| ... | |
| EfiProcessorFamilyG6 = 0xCB, | |
| EfiProcessorFamilyzArchitectur = 0xCC, | |
| EfiProcessorFamilyViaC7M = 0xD2, | |
| EfiProcessorFamilyViaC7D = 0xD3, | |
| EfiProcessorFamilyViaC7 = 0xD4, | |
| EfiProcessorFamilyViaEden = 0xD5, | |
| ... | |
| EfiProcessorFamilyIndicatorFamily2 = 0xFE, | |
| EfiProcessorFamilyReserved1 = 0xFF | |
| } EFI_PROCESSOR_FAMILY_DATA; | |
| a. In ProcSubclass specification 0.9, the field name whose value equals to 0x58 is "EfiProcessorFamilyUltraSparcIIi". | |
| Due to the name has been defined in previous field, changing it to "EfiProcessorFamilyUltraSparcIIIi" to avoid | |
| build break. | |
| b. The other fields listed here are *NOT* defined in ProcSubclass specification 0.9. They are introduced to | |
| support new processor family (type 4) defined in SmBios 2.6 specification. | |
| Keeping this inconsistency to reflect the latest industry standard. | |
| 4. Guid/DataHubRecords.h | |
| typedef enum { | |
| ... | |
| EfiProcessorSocket939 = 0x12, | |
| EfiProcessorSocketmPGA604 = 0x13, | |
| EfiProcessorSocketLGA771 = 0x14, | |
| EfiProcessorSocketLGA775 = 0x15 | |
| } EFI_PROCESSOR_SOCKET_TYPE_DATA; | |
| The fields listed here are *NOT* defined in ProcSubclass specification 0.9. They are introduced to support | |
| new processor upgrade (type 4 offset 19h) defined in SmBios 2.6 specification. | |
| Keeping this inconsistency to reflect the latest industry standard. | |
| 5. Guid/DataHubRecords.h | |
| typedef EFI_INTER_LINK_DATA EFI_CACHE_ASSOCIATION_DATA; | |
| The definition name "EFI_CACHE_ASSOCIATION_DATA" is *NOT* consistent with ProcSubclass specification 0.9, in which | |
| the name should be "EFI_PROCESSOR_CACHE_ASSOCIATION_DATA". Keeping this inconsistency for backward compatibility. | |
| 6. Guid/DataHubRecords.h | |
| typedef enum { | |
| EfiProcessorHealthy = 1, | |
| EfiProcessorPerfRestricted = 2, | |
| EfiProcessorFuncRestricted = 3 | |
| } EFI_PROCESSOR_HEALTH_STATUS; | |
| The structure name "EFI_PROCESSOR_HEALTH_STATUS" is *NOT* consistent with ProcSubclass specification 0.9, in which | |
| the name should be "EFI_PROCESSOR_HEALTH_STATUS_DATA". Keeping this inconsistency for backward compatibility. | |
| 7. Guid/DataHubRecords.h | |
| typedef enum { | |
| ProcessorCoreFrequencyRecordType = 1, | |
| ProcessorFsbFrequencyRecordType = 2, | |
| ProcessorVersionRecordType = 3, | |
| ProcessorManufacturerRecordType = 4, | |
| ProcessorSerialNumberRecordType = 5, | |
| ProcessorIdRecordType = 6, | |
| ProcessorTypeRecordType = 7, | |
| ProcessorFamilyRecordType = 8, | |
| ProcessorVoltageRecordType = 9, | |
| ProcessorApicBaseAddressRecordType = 10, | |
| ProcessorApicIdRecordType = 11, | |
| ProcessorApicVersionNumberRecordType = 12, | |
| CpuUcodeRevisionDataRecordType = 13, | |
| ProcessorStatusRecordType = 14, | |
| ProcessorSocketTypeRecordType = 15, | |
| ProcessorSocketNameRecordType = 16, | |
| CacheAssociationRecordType = 17, | |
| ProcessorMaxCoreFrequencyRecordType = 18, | |
| ProcessorAssetTagRecordType = 19, | |
| ProcessorMaxFsbFrequencyRecordType = 20, | |
| ProcessorPackageNumberRecordType = 21, | |
| ProcessorCoreFrequencyListRecordType = 22, | |
| ProcessorFsbFrequencyListRecordType = 23, | |
| ProcessorHealthStatusRecordType = 24, | |
| ProcessorCoreCountRecordType = 25, | |
| ProcessorEnabledCoreCountRecordType = 26, | |
| ProcessorThreadCountRecordType = 27, | |
| ProcessorCharacteristicsRecordType = 28, | |
| ProcessorFamily2RecordType = 29, | |
| ProcessorPartNumberRecordType = 30, | |
| } EFI_CPU_VARIABLE_RECORD_TYPE; | |
| The enumeration fields from ProcessorCoreFrequencyRecordType to ProcessorHealthStatusRecordType are *NOT* defined | |
| in ProcSubclass specification 0.9, which only defines the following macros to specify the record number of the data record: | |
| #define EFI_PROCESSOR_FREQUENCY_RECORD_NUMBER 0x00000001 | |
| #define EFI_PROCESSOR_BUS_FREQUENCY_RECORD_NUMBER 0x00000002 | |
| #define EFI_PROCESSOR_VERSION_RECORD_NUMBER 0x00000003 | |
| #define EFI_PROCESSOR_MANUFACTURER_RECORD_NUMBER 0x00000004 | |
| #define EFI_PROCESSOR_SERIAL_NUMBER_RECORD_NUMBER 0x00000005 | |
| #define EFI_PROCESSOR_ID_RECORD_NUMBER 0x00000006 | |
| #define EFI_PROCESSOR_TYPE_RECORD_NUMBER 0x00000007 | |
| #define EFI_PROCESSOR_FAMILY_RECORD_NUMBER 0x00000008 | |
| #define EFI_PROCESSOR_VOLTAGE_RECORD_NUMBER 0x00000009 | |
| #define EFI_PROCESSOR_APIC_BASE_ADDRESS_RECORD_NUMBER 0x0000000A | |
| #define EFI_PROCESSOR_APIC_ID_RECORD_NUMBER 0x0000000B | |
| #define EFI_PROCESSOR_APIC_VER_NUMBER_RECORD_NUMBER 0x0000000C | |
| #define EFI_PROCESSOR_MICROCODE_REVISION_RECORD_NUMBER 0x0000000D | |
| #define EFI_PROCESSOR_STATUS_RECORD_NUMBER 0x0000000E | |
| #define EFI_PROCESSOR_SOCKET_TYPE_RECORD_NUMBER 0x0000000F | |
| #define EFI_PROCESSOR_SOCKET_NAME_RECORD_NUMBER 0x00000010 | |
| #define EFI_PROCESSOR_CACHE_ASSOCIATION_RECORD_NUMBER 0x00000011 | |
| #define EFI_PROCESSOR_MAX_FREQUENCY_RECORD_NUMBER 0x00000012 | |
| #define EFI_PROCESSOR_ASSET_TAG_RECORD_NUMBER 0x00000013 | |
| #define EFI_PROCESSOR_MAX_FSB_FREQUENCY_RECORD_NUMBER 0x00000014 | |
| #define EFI_PROCESSOR_PACKAGE_NUMBER_RECORD_NUMBER 0x00000015 | |
| #define EFI_PROCESSOR_FREQUENCY_LIST_RECORD_NUMBER 0x00000016 | |
| #define EFI_PROCESSOR_FSB_FREQUENCY_LIST_RECORD_NUMBER 0x00000017 | |
| #define EFI_PROCESSOR_HEALTH_STATUS_RECORD_NUMBER 0x00000018 | |
| Keeping this inconsistency for backward compatibility. | |
| The enumeration fields from ProcessorCoreCountRecordType to ProcessorPartNumberRecordType are *NOT* defined | |
| in ProcSubclass specification 0.9. | |
| They are introduced to support new fields for type 4 defined in SmBios 2.6 specification. | |
| Keeping this inconsistency to reflect the latest industry standard. | |
| 8. Guid/DataHubRecords.h | |
| typedef union { | |
| EFI_PROCESSOR_CORE_FREQUENCY_LIST_DATA ProcessorCoreFrequencyList; | |
| ... | |
| EFI_PROCESSOR_FAMILY2_DATA ProcessorFamily2; | |
| } EFI_CPU_VARIABLE_RECORD; | |
| typedef struct { | |
| EFI_SUBCLASS_TYPE1_HEADER DataRecordHeader; | |
| EFI_CPU_VARIABLE_RECORD VariableRecord; | |
| } EFI_CPU_DATA_RECORD; | |
| The definitions above are *NOT* defined in ProcSubclass specification 0.9. EdkII introduces them to simplify the | |
| code logic. Therefore developer doesn't need to allocate memory dynamically to construct variable length data record. | |
| Keeping this inconsistency for backward compatibility. | |
| 9. Guid/DataHubRecords.h | |
| typedef STRING_REF EFI_PROCESSOR_PART_NUMBER_DATA; | |
| typedef enum { | |
| EfiProcessorFamilySh3 = 0x104, | |
| EfiProcessorFamilySh4 = 0x105, | |
| EfiProcessorFamilyArm = 0x118, | |
| EfiProcessorFamilyStrongArm = 0x119, | |
| EfiProcessorFamily6x86 = 0x12C, | |
| EfiProcessorFamilyMediaGx = 0x12D, | |
| EfiProcessorFamilyMii = 0x12E, | |
| EfiProcessorFamilyWinChip = 0x140, | |
| EfiProcessorFamilyDsp = 0x15E, | |
| EfiProcessorFamilyVideo = 0x1F4 | |
| } EFI_PROCESSOR_FAMILY2_DATA; | |
| typedef UINT8 EFI_PROCESSOR_CORE_COUNT_DATA; | |
| typedef UINT8 EFI_PROCESSOR_ENABLED_CORE_COUNT_DATA; | |
| typedef UINT8 EFI_PROCESSOR_THREAD_COUNT_DATA; | |
| typedef struct { | |
| UINT16 Reserved :1; | |
| UINT16 Unknown :1; | |
| UINT16 Capable64Bit :1; | |
| UINT16 Reserved2 :13; | |
| } EFI_PROCESSOR_CHARACTERISTICS_DATA; | |
| The fields listed here are *NOT* defined in ProcSubclass specification 0.9. They are introduced to support | |
| new fields for type 4 defined in SmBios 2.6 specification. | |
| Keeping this inconsistency to reflect the latest industry standard. | |
| ## | |
| # Mismatch with Intel Platform Innovation Framework for MemSubclass Specification (Version 0.90) | |
| ## | |
| 1. Guid/DataHubRecords.h | |
| typedef enum _EFI_MEMORY_FORM_FACTOR { | |
| ... | |
| EfiMemoryFormFactorFbDimm = 0x0F | |
| } EFI_MEMORY_FORM_FACTOR; | |
| typedef enum _EFI_MEMORY_ARRAY_TYPE { | |
| ... | |
| EfiMemoryTypeDdr2 = 0x13, | |
| EfiMemoryTypeDdr2FbDimm = 0x14 | |
| } EFI_MEMORY_ARRAY_TYPE; | |
| typedef enum { | |
| ... | |
| EfiMemoryStatePartial = 6 | |
| } EFI_MEMORY_STATE; | |
| The fields listed above are *NOT* defined in MemSubclass specification 0.9. They are introduced to support | |
| new memory device (type 17) defined in SmBios 2.6 specification. | |
| Keeping this inconsistency to reflect the latest industry standard. | |
| 2. Guid/DataHubRecords.h | |
| typedef struct { | |
| ... | |
| EFI_EXP_BASE10_DATA MemorySpeed; | |
| ... | |
| } EFI_MEMORY_ARRAY_LINK_DATA; | |
| The field name "MemorySpeed" in the definition above is *NOT* consistent with MemSubclass specification 0.9, | |
| in which it is defined as MemoryTypeSpeed. Keeping this inconsistency for backward compatibility. | |
| 3. Guid/DataHubRecords.h | |
| #define EFI_MEMORY_CONTROLLER_INFORMATION_RECORD_NUMBER 0x00000008 | |
| typedef enum { | |
| EfiErrorDetectingMethodOther = 1, | |
| EfiErrorDetectingMethodUnknown = 2, | |
| EfiErrorDetectingMethodNone = 3, | |
| EfiErrorDetectingMethodParity = 4, | |
| EfiErrorDetectingMethod32Ecc = 5, | |
| EfiErrorDetectingMethod64Ecc = 6, | |
| EfiErrorDetectingMethod128Ecc = 7, | |
| EfiErrorDetectingMethodCrc = 8 | |
| } EFI_MEMORY_ERROR_DETECT_METHOD_TYPE; | |
| typedef struct { | |
| UINT8 Other :1; | |
| UINT8 Unknown :1; | |
| UINT8 None :1; | |
| UINT8 SingleBitErrorCorrect :1; | |
| UINT8 DoubleBitErrorCorrect :1; | |
| UINT8 ErrorScrubbing :1; | |
| UINT8 Reserved :2; | |
| } EFI_MEMORY_ERROR_CORRECT_CAPABILITY; | |
| typedef enum { | |
| EfiMemoryInterleaveOther = 1, | |
| EfiMemoryInterleaveUnknown = 2, | |
| EfiMemoryInterleaveOneWay = 3, | |
| EfiMemoryInterleaveTwoWay = 4, | |
| EfiMemoryInterleaveFourWay = 5, | |
| EfiMemoryInterleaveEightWay = 6, | |
| EfiMemoryInterleaveSixteenWay = 7 | |
| } EFI_MEMORY_SUPPORT_INTERLEAVE_TYPE; | |
| typedef struct { | |
| UINT16 Other :1; | |
| UINT16 Unknown :1; | |
| UINT16 SeventyNs:1; | |
| UINT16 SixtyNs :1; | |
| UINT16 FiftyNs :1; | |
| UINT16 Reserved :11; | |
| } EFI_MEMORY_SPEED_TYPE; | |
| typedef struct { | |
| UINT16 Other :1; | |
| UINT16 Unknown :1; | |
| UINT16 Standard :1; | |
| UINT16 FastPageMode:1; | |
| UINT16 EDO :1; | |
| UINT16 Parity :1; | |
| UINT16 ECC :1; | |
| UINT16 SIMM :1; | |
| UINT16 DIMM :1; | |
| UINT16 BurstEdo :1; | |
| UINT16 SDRAM :1; | |
| UINT16 Reserved :5; | |
| } EFI_MEMORY_SUPPORTED_TYPE; | |
| typedef struct { | |
| UINT8 Five :1; | |
| UINT8 Three :1; | |
| UINT8 Two :1; | |
| UINT8 Reserved:5; | |
| } EFI_MEMORY_MODULE_VOLTAGE_TYPE; | |
| typedef struct { | |
| EFI_MEMORY_ERROR_DETECT_METHOD_TYPE ErrorDetectingMethod; | |
| EFI_MEMORY_ERROR_CORRECT_CAPABILITY ErrorCorrectingCapability; | |
| EFI_MEMORY_SUPPORT_INTERLEAVE_TYPE MemorySupportedInterleave; | |
| EFI_MEMORY_SUPPORT_INTERLEAVE_TYPE MemoryCurrentInterleave; | |
| UINT8 MaxMemoryModuleSize; | |
| EFI_MEMORY_SPEED_TYPE MemorySpeedType; | |
| EFI_MEMORY_SUPPORTED_TYPE MemorySupportedType; | |
| EFI_MEMORY_MODULE_VOLTAGE_TYPE MemoryModuleVoltage; | |
| UINT8 NumberofMemorySlot; | |
| EFI_MEMORY_ERROR_CORRECT_CAPABILITY EnabledCorrectingCapability; | |
| UINT16 *MemoryModuleConfigHandles; | |
| } EFI_MEMORY_CONTROLLER_INFORMATION; | |
| typedef struct { | |
| EFI_MEMORY_ERROR_DETECT_METHOD_TYPE ErrorDetectingMethod; | |
| EFI_MEMORY_ERROR_CORRECT_CAPABILITY ErrorCorrectingCapability; | |
| EFI_MEMORY_SUPPORT_INTERLEAVE_TYPE MemorySupportedInterleave; | |
| EFI_MEMORY_SUPPORT_INTERLEAVE_TYPE MemoryCurrentInterleave; | |
| UINT8 MaxMemoryModuleSize; | |
| EFI_MEMORY_SPEED_TYPE MemorySpeedType; | |
| EFI_MEMORY_SUPPORTED_TYPE MemorySupportedType; | |
| EFI_MEMORY_MODULE_VOLTAGE_TYPE MemoryModuleVoltage; | |
| UINT8 NumberofMemorySlot; | |
| EFI_MEMORY_ERROR_CORRECT_CAPABILITY EnabledCorrectingCapability; | |
| EFI_INTER_LINK_DATA MemoryModuleConfig[1]; | |
| } EFI_MEMORY_CONTROLLER_INFORMATION_DATA; | |
| The definitions above are *NOT* defined in MemSubclass specification 0.9. They are introduced to support | |
| new memory controller information (type 5) defined in SmBios 2.6 specification. | |
| Keeping this inconsistency to reflect the latest industry standard. | |
| 4. Guid/DataHubRecords.h | |
| #define EFI_MEMORY_32BIT_ERROR_INFORMATION_RECORD_NUMBER 0x00000009 | |
| typedef enum { | |
| EfiMemoryErrorOther = 1, | |
| EfiMemoryErrorUnknown = 2, | |
| EfiMemoryErrorOk = 3, | |
| EfiMemoryErrorBadRead = 4, | |
| EfiMemoryErrorParity = 5, | |
| EfiMemoryErrorSigleBit = 6, | |
| EfiMemoryErrorDoubleBit = 7, | |
| EfiMemoryErrorMultiBit = 8, | |
| EfiMemoryErrorNibble = 9, | |
| EfiMemoryErrorChecksum = 10, | |
| EfiMemoryErrorCrc = 11, | |
| EfiMemoryErrorCorrectSingleBit = 12, | |
| EfiMemoryErrorCorrected = 13, | |
| EfiMemoryErrorUnCorrectable = 14 | |
| } EFI_MEMORY_ERROR_TYPE; | |
| typedef enum { | |
| EfiMemoryGranularityOther = 1, | |
| EfiMemoryGranularityOtherUnknown = 2, | |
| EfiMemoryGranularityDeviceLevel = 3, | |
| EfiMemoryGranularityMemPartitionLevel = 4 | |
| } EFI_MEMORY_ERROR_GRANULARITY_TYPE; | |
| typedef enum { | |
| EfiMemoryErrorOperationOther = 1, | |
| EfiMemoryErrorOperationUnknown = 2, | |
| EfiMemoryErrorOperationRead = 3, | |
| EfiMemoryErrorOperationWrite = 4, | |
| EfiMemoryErrorOperationPartialWrite = 5 | |
| } EFI_MEMORY_ERROR_OPERATION_TYPE; | |
| typedef struct { | |
| EFI_MEMORY_ERROR_TYPE MemoryErrorType; | |
| EFI_MEMORY_ERROR_GRANULARITY_TYPE MemoryErrorGranularity; | |
| EFI_MEMORY_ERROR_OPERATION_TYPE MemoryErrorOperation; | |
| UINT32 VendorSyndrome; | |
| UINT32 MemoryArrayErrorAddress; | |
| UINT32 DeviceErrorAddress; | |
| UINT32 DeviceErrorResolution; | |
| } EFI_MEMORY_32BIT_ERROR_INFORMATION; | |
| The definitions above are *NOT* defined in MemSubclass specification 0.9. They are introduced to support | |
| new 32-bit memory error information (type 18) defined in SmBios 2.6 specification. | |
| Keeping this inconsistency to reflect the latest industry standard. | |
| 5. Guid/DataHubRecords.h | |
| #define EFI_MEMORY_64BIT_ERROR_INFORMATION_RECORD_NUMBER 0x0000000A | |
| typedef struct { | |
| EFI_MEMORY_ERROR_TYPE MemoryErrorType; | |
| EFI_MEMORY_ERROR_GRANULARITY_TYPE MemoryErrorGranularity; | |
| EFI_MEMORY_ERROR_OPERATION_TYPE MemoryErrorOperation; | |
| UINT32 VendorSyndrome; | |
| UINT64 MemoryArrayErrorAddress; | |
| UINT64 DeviceErrorAddress; | |
| UINT32 DeviceErrorResolution; | |
| } EFI_MEMORY_64BIT_ERROR_INFORMATION; | |
| The definitions above are *NOT* defined in MemSubclass specification 0.9. They are introduced to support | |
| new 64-bit memory error information (type 33) defined in SmBios 2.6 specification. | |
| Keeping this inconsistency to reflect the latest industry standard. | |
| 6. Guid/DataHubRecords.h | |
| typedef union _EFI_MEMORY_SUBCLASS_RECORDS { | |
| EFI_MEMORY_SIZE_DATA SizeData; | |
| ... | |
| EFI_MEMORY_64BIT_ERROR_INFORMATION Memory64bitErrorInfo; | |
| } EFI_MEMORY_SUBCLASS_RECORDS; | |
| typedef struct { | |
| EFI_SUBCLASS_TYPE1_HEADER Header; | |
| EFI_MEMORY_SUBCLASS_RECORDS Record; | |
| } EFI_MEMORY_SUBCLASS_DRIVER_DATA; | |
| The definitions above are *NOT* defined in MemSubclass specification 0.9. EdkII introduces them to simplify the | |
| code logic. Therefore developer doesn't need to allocate memory dynamically to construct variable length data record. | |
| Keeping this inconsistency for backward compatibility. | |
| ## | |
| # Mismatch with Intel Platform Innovation Framework for MiscSubclass Specification (Version 0.90) | |
| ## | |
| 1. Guid/DataHubRecords.h | |
| #pragma pack(1) | |
| typedef struct _USB_PORT_DEVICE_PATH { | |
| ACPI_HID_DEVICE_PATH PciRootBridgeDevicePath; | |
| PCI_DEVICE_PATH PciBusDevicePath; | |
| EFI_DEVICE_PATH_PROTOCOL EndDevicePath; | |
| } USB_PORT_DEVICE_PATH; | |
| typedef struct _IDE_DEVICE_PATH { | |
| ACPI_HID_DEVICE_PATH PciRootBridgeDevicePath; | |
| PCI_DEVICE_PATH PciBusDevicePath; | |
| EFI_DEVICE_PATH_PROTOCOL EndDevicePath; | |
| } IDE_DEVICE_PATH; | |
| typedef struct _RMC_CONN_DEVICE_PATH { | |
| ACPI_HID_DEVICE_PATH PciRootBridgeDevicePath; | |
| PCI_DEVICE_PATH PciBridgeDevicePath; | |
| PCI_DEVICE_PATH PciBusDevicePath; | |
| EFI_DEVICE_PATH_PROTOCOL EndDevicePath; | |
| } RMC_CONN_DEVICE_PATH; | |
| typedef struct _RIDE_DEVICE_PATH { | |
| ACPI_HID_DEVICE_PATH PciRootBridgeDevicePath; | |
| PCI_DEVICE_PATH PciBridgeDevicePath; | |
| PCI_DEVICE_PATH PciBusDevicePath; | |
| EFI_DEVICE_PATH_PROTOCOL EndDevicePath; | |
| } RIDE_DEVICE_PATH; | |
| typedef struct _GB_NIC_DEVICE_PATH { | |
| ACPI_HID_DEVICE_PATH PciRootBridgeDevicePath; | |
| PCI_DEVICE_PATH PciBridgeDevicePath; | |
| PCI_DEVICE_PATH PciXBridgeDevicePath; | |
| PCI_DEVICE_PATH PciXBusDevicePath; | |
| EFI_DEVICE_PATH_PROTOCOL EndDevicePath; | |
| } GB_NIC_DEVICE_PATH; | |
| typedef struct _PS2_CONN_DEVICE_PATH { | |
| ACPI_HID_DEVICE_PATH PciRootBridgeDevicePath; | |
| PCI_DEVICE_PATH LpcBridgeDevicePath; | |
| ACPI_HID_DEVICE_PATH LpcBusDevicePath; | |
| EFI_DEVICE_PATH_PROTOCOL EndDevicePath; | |
| } PS2_CONN_DEVICE_PATH; | |
| typedef struct _SERIAL_CONN_DEVICE_PATH { | |
| ACPI_HID_DEVICE_PATH PciRootBridgeDevicePath; | |
| PCI_DEVICE_PATH LpcBridgeDevicePath; | |
| ACPI_HID_DEVICE_PATH LpcBusDevicePath; | |
| EFI_DEVICE_PATH_PROTOCOL EndDevicePath; | |
| } SERIAL_CONN_DEVICE_PATH; | |
| typedef struct _PARALLEL_CONN_DEVICE_PATH { | |
| ACPI_HID_DEVICE_PATH PciRootBridgeDevicePath; | |
| PCI_DEVICE_PATH LpcBridgeDevicePath; | |
| ACPI_HID_DEVICE_PATH LpcBusDevicePath; | |
| EFI_DEVICE_PATH_PROTOCOL EndDevicePath; | |
| } PARALLEL_CONN_DEVICE_PATH; | |
| typedef struct _FLOOPY_CONN_DEVICE_PATH { | |
| ACPI_HID_DEVICE_PATH PciRootBridgeDevicePath; | |
| PCI_DEVICE_PATH LpcBridgeDevicePath; | |
| ACPI_HID_DEVICE_PATH LpcBusDevicePath; | |
| EFI_DEVICE_PATH_PROTOCOL EndDevicePath; | |
| } FLOOPY_CONN_DEVICE_PATH; | |
| typedef union _EFI_MISC_PORT_DEVICE_PATH { | |
| USB_PORT_DEVICE_PATH UsbDevicePath; | |
| IDE_DEVICE_PATH IdeDevicePath; | |
| RMC_CONN_DEVICE_PATH RmcConnDevicePath; | |
| RIDE_DEVICE_PATH RideDevicePath; | |
| GB_NIC_DEVICE_PATH GbNicDevicePath; | |
| PS2_CONN_DEVICE_PATH Ps2ConnDevicePath; | |
| SERIAL_CONN_DEVICE_PATH SerialConnDevicePath; | |
| PARALLEL_CONN_DEVICE_PATH ParallelConnDevicePath; | |
| FLOOPY_CONN_DEVICE_PATH FloppyConnDevicePath; | |
| } EFI_MISC_PORT_DEVICE_PATH; | |
| #pragma pack() | |
| a. The definitions above are *NOT* defined in MiscSubclass specifications 0.9. EdkII introduces them to simplify the | |
| code logic. Therefore developer doesn't need to allocate memory dynamically to construct variable length device | |
| path for various device. | |
| Keeping this inconsistency for backward compatibility. | |
| b. The definitions above are packed. This way violates the rule of alignment defined in DataHubSubclass specification. | |
| Section "Alignment" in DataHubSubclass specification say "Fields in a data hub record should be aligned at their | |
| natural boundaries". Keeping this inconsistency for backward compatibility. | |
| 2. Guid/DataHubRecords.h | |
| typedef struct { | |
| ... | |
| EFI_MISC_PORT_DEVICE_PATH PortPath; | |
| } EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA; | |
| The definition is *NOT* consistent with MiscSubclass specification, in which the type of last field is defined as | |
| "EFI_DEVICE_PATH_PROTOCOL". The definition in Specification may bring a little complexity on implementation. User | |
| have to allocate variable length memory to contain device path info and free them finially. | |
| EdkII introduced an union type named EFI_MISC_PORT_DEVICE_PATH to avoid the logic above. | |
| 3. Guid/DataHubRecords.h | |
| typedef struct { | |
| ... | |
| UINT8 BiosMajorRelease; | |
| UINT8 BiosMinorRelease; | |
| UINT8 BiosEmbeddedFirmwareMajorRelease; | |
| UINT8 BiosEmbeddedFirmwareMinorRelease; | |
| } EFI_MISC_BIOS_VENDOR_DATA; | |
| The fields listed above are *NOT* defined in MiscSubclass specification 0.9. They are introduced to support | |
| new bios information (type 0) defined in SmBios 2.6 specification. | |
| Keeping this inconsistency to reflect the latest industry standard. | |
| 4. Guid/DataHubRecords.h | |
| typedef struct { | |
| ... | |
| STRING_REF SystemSKUNumber; | |
| STRING_REF SystemFamily; | |
| } EFI_MISC_SYSTEM_MANUFACTURER_DATA; | |
| The fields listed above are *NOT* defined in MiscSubclass specification 0.9. They are introduced to support | |
| new system information (type 1) defined in SmBios 2.6 specification. | |
| Keeping this inconsistency to reflect the latest industry standard. | |
| 5. Guid/DataHubRecords.h | |
| typedef struct { | |
| ... | |
| EFI_INTER_LINK_DATA ManagementDeviceThresholdLink; | |
| UINT8 ComponentType; | |
| } EFI_MISC_MANAGEMENT_DEVICE_COMPONENT_DESCRIPTION_DATA; | |
| a. The field "ManagementDeviceThresholdLink" above is *NOT* defined in MiscSubclass specification 0.9. It is introduced to support | |
| new management device component (type 35) defined in SmBios 2.6 specification. | |
| Keeping this inconsistency to reflect the latest industry standard. | |
| b. The field "ComponentType" above is *NOT* defined in MiscSubclass specifications 0.9. It's implementation-specific to simplify the code logic. | |
| Keeping this inconsistency for backward compatibility. | |
| 6. Guid/DataHubRecords.h | |
| typedef struct { | |
| UINT32 ChassisType :16; | |
| UINT32 ChassisLockPresent:1; | |
| UINT32 Reserved :15; | |
| } EFI_MISC_CHASSIS_STATUS; | |
| The definition is *NOT* consistent with MiscSubclass specification 0.9, in which the first field is assigned a wrong field | |
| name "EFI_MISC_CHASSIS_TYPE". Due to EFI_MISC_CHASSIS_TYPE has been declared as a data type, it can not be used as a | |
| field name again. EdkII changes its name to "ChassisType" to pass build. | |
| 7. Guid/DataHubRecords.h | |
| typedef enum { | |
| ... | |
| EfiSlotTypeAgp2X = 0x10, | |
| ... | |
| EfiSlotTypePciExpress = 0xA5, | |
| EfiSlotTypePciExpressX1 = 0xA6, | |
| EfiSlotTypePciExpressX2 = 0xA7, | |
| EfiSlotTypePciExpressX4 = 0xA8, | |
| EfiSlotTypePciExpressX8 = 0xA9, | |
| EfiSlotTypePciExpressX16 = 0xAA | |
| } EFI_MISC_SLOT_TYPE; | |
| a. The field name "EfiSlotTypeAgp2X" is *NOT* consistent with MiscSubclass specification 0.9, in which it is named | |
| "EfiSlotTypeApg2X". | |
| From its literal sense, this field represents a AGP type display card, so it should be named as "EfiSlotTypeAgp2X". | |
| b. The enumeration fields from "EfiSlotTypePciExpress" to "EfiSlotTypePciExpressX16" are *NOT* defined in MiscSubclass specification 0.9. | |
| They are introduced to support new system slots (type 9) defined in SmBios 2.6 specification. | |
| Keeping this inconsistency to reflect the latest industry standard. | |
| 8. Guid/DataHubRecords.h | |
| typedef struct { | |
| ... | |
| EFI_MISC_ONBOARD_DEVICE_STATUS OnBoardDeviceStatus; | |
| ... | |
| } EFI_MISC_ONBOARD_DEVICE_DATA; | |
| The definition is *NOT* consistent with MiscSubclass specification 0.9, in which the field "OnBoardDeviceStatus" is | |
| named as "OnBoardDeviceType". Keeping this inconsistency for backward compatibility. | |
| 9. Guid/DataHubRecords.h | |
| #define EFI_MISC_PORTABLE_BATTERY_RECORD_NUMBER 0x00000010 | |
| The name of the definition is *NOT* consistent with MiscSubclass specification 0.9, in which it is defined as | |
| "EFI_MISC_BATTERY_LOCATION_RECORD_NUMBER". Keeping this inconsistency for backward compatibility. | |
| 10. Guid/DataHubRecords.h | |
| typedef enum { | |
| EfiPortableBatteryDeviceChemistryOther = 1, | |
| EfiPortableBatteryDeviceChemistryUnknown = 2, | |
| EfiPortableBatteryDeviceChemistryLeadAcid = 3, | |
| EfiPortableBatteryDeviceChemistryNickelCadmium = 4, | |
| EfiPortableBatteryDeviceChemistryNickelMetalHydride = 5, | |
| EfiPortableBatteryDeviceChemistryLithiumIon = 6, | |
| EfiPortableBatteryDeviceChemistryZincAir = 7, | |
| EfiPortableBatteryDeviceChemistryLithiumPolymer = 8 | |
| } EFI_MISC_PORTABLE_BATTERY_DEVICE_CHEMISTRY; | |
| The name of the definition is *NOT* consistent with MiscSubclass specification, in which it is defined as | |
| "EFI_MISC_BATTERY_DEVICE_CHEMISTRY". And all field names have a redundant "Portable" string compared with MisSubclass | |
| specification 0.9. | |
| Keeping this inconsistency for backward compatibility. | |
| 11. Guid/DataHubRecords.h | |
| typedef struct { | |
| STRING_REF Location; | |
| STRING_REF Manufacturer; | |
| STRING_REF ManufactureDate; | |
| STRING_REF SerialNumber; | |
| STRING_REF DeviceName; | |
| EFI_MISC_PORTABLE_BATTERY_DEVICE_CHEMISTRY DeviceChemistry; | |
| UINT16 DesignCapacity; | |
| UINT16 DesignVoltage; | |
| STRING_REF SBDSVersionNumber; | |
| UINT8 MaximumError; | |
| UINT16 SBDSSerialNumber; | |
| UINT16 SBDSManufactureDate; | |
| STRING_REF SBDSDeviceChemistry; | |
| UINT8 DesignCapacityMultiplier; | |
| UINT32 OEMSpecific; | |
| UINT8 BatteryNumber; | |
| BOOLEAN Valid; | |
| } EFI_MISC_PORTABLE_BATTERY; | |
| The definition is *NOT* consistent with MiscSubclass specification 0.9, in which the structure name is defined as | |
| "EFI_MISC_BATTERY_LOCATION_DATA". Moreover, the name and the order of all fields are also different with MiscSubclass | |
| specification 0.9. Keeping this inconsistency for backward compatibility. | |
| 12. Guid/DataHubRecords.h | |
| typedef enum { | |
| ... | |
| } EFI_MISC_BOOT_INFORMATION_STATUS_DATA_TYPE; | |
| The name of the definition is *NOT* consistent with MiscSubclass specification 0.9, in which it is defined as | |
| "EFI_MISC_BOOT_INFORMATION_STATUS_TYPE". Keeping this inconsistency for backward compatibility. | |
| 13. Guid/DataHubRecords.h | |
| typedef struct { | |
| EFI_MISC_BOOT_INFORMATION_STATUS_DATA_TYPE BootInformationStatus; | |
| ... | |
| } EFI_MISC_BOOT_INFORMATION_STATUS_DATA; | |
| The definition is *NOT* consistent with MiscSubclass specification 0.9, in which the type of the first field is | |
| "EFI_MISC_BOOT_INFORMATION_STATUS_TYPE". Keeping this inconsistency for backward compatibility. | |
| 14. Guid/DataHubRecords.h | |
| typedef struct { | |
| ... | |
| } EFI_MISC_SYSTEM_POWER_SUPPLY_DATA; | |
| The name of the definition is *NOT* consistent with MiscSubclass specification 0.9, in which it is defined as | |
| "EFI_MISC_POWER_SUPPLY_UNIT_GROUP_DATA". Keeping this inconsistency for backward compatibility. | |
| 15. Guid/DataHubRecords.h | |
| typedef struct { | |
| ... | |
| } SMBIOS_STRUCTURE_HDR; | |
| The name of the definition is *NOT* consistent with MiscSubclass specification 0.9, in which the structure name | |
| is defined as "EFI_SMBIOS_STRUCTURE_HDR". Due to this structure is commonly used by vendor to construct SmBios | |
| type 0x80~0xFF table, Keeping this inconsistency for backward compatibility. | |
| 16. Guid/DataHubRecords.h | |
| typedef struct { | |
| SMBIOS_STRUCTURE_HDR Header; | |
| ... | |
| } EFI_MISC_SMBIOS_STRUCT_ENCAPSULATION_DATA; | |
| The definition is *NOT* consistent with MiscSubclass specification 0.9, in which the type of the first field is | |
| "EFI_SMBIOS_STRUCTURE_HDR". Keeping this inconsistency for backward compatibility. | |
| 17. Guid/DataHubRecords.h | |
| typedef struct { | |
| UINT16 PowerSupplyHotReplaceable:1; | |
| UINT16 PowerSupplyPresent :1; | |
| UINT16 PowerSupplyUnplugged :1; | |
| UINT16 InputVoltageRangeSwitch :4; | |
| UINT16 PowerSupplyStatus :3; | |
| UINT16 PowerSupplyType :4; | |
| UINT16 Reserved :2; | |
| } EFI_MISC_POWER_SUPPLY_CHARACTERISTICS; | |
| all field type in the definition are *NOT* consistent with MiscSubclass specification 0.9, in which it is defined as | |
| "UINT32" and the total width of bit-fields is 32bits width. | |
| Keeping this inconsistency for backward compatibility. | |
| 18. Guid/DataHubRecords.h | |
| #define EFI_MISC_SYSTEM_EVENT_LOG_RECORD_NUMBER 0x00000020 | |
| typedef struct { | |
| UINT16 LogAreaLength; | |
| UINT16 LogHeaderStartOffset; | |
| UINT16 LogDataStartOffset; | |
| UINT8 AccessMethod; | |
| UINT8 LogStatus; | |
| UINT32 LogChangeToken; | |
| UINT32 AccessMethodAddress; | |
| UINT8 LogHeaderFormat; | |
| UINT8 NumberOfSupportedLogType; | |
| UINT8 LengthOfLogDescriptor; | |
| } EFI_MISC_SYSTEM_EVENT_LOG_DATA; | |
| #define ACCESS_INDEXIO_1INDEX8BIT_DATA8BIT 0x00 | |
| #define ACCESS_INDEXIO_2INDEX8BIT_DATA8BIT 0X01 | |
| #define ACCESS_INDEXIO_1INDEX16BIT_DATA8BIT 0X02 | |
| #define ACCESS_MEMORY_MAPPED 0x03 | |
| #define ACCESS_GPNV 0x04 | |
| The definitions listed above are *NOT* defined in MiscSubclass specification 0.9. It is introduced to support | |
| new system event log (type 15) defined in SmBios 2.6 specification. | |
| Keeping this inconsistency to reflect the latest industry standard. | |
| 19. Guid/DataHubRecords.h | |
| #define EFI_MISC_MANAGEMENT_DEVICE_THRESHOLD_RECORD_NUMBER 0x00000021 | |
| typedef struct { | |
| UINT16 LowerThresNonCritical; | |
| UINT16 UpperThresNonCritical; | |
| UINT16 LowerThresCritical; | |
| UINT16 UpperThresCritical; | |
| UINT16 LowerThresNonRecover; | |
| UINT16 UpperThresNonRecover; | |
| } EFI_MISC_MANAGEMENT_DEVICE_THRESHOLD; | |
| The definitions listed above are *NOT* defined in MiscSubclass specification 0.9. It is introduced to support | |
| new management device threshold data (type 36) defined in SmBios 2.6 specification. | |
| Keeping this inconsistency to reflect the latest industry standard. | |
| 20. Guid/DataHubRecords.h | |
| typedef union { | |
| EFI_MISC_LAST_PCI_BUS_DATA LastPciBus; | |
| ... | |
| EFI_MISC_MANAGEMENT_DEVICE_THRESHOLD MiscManagementDeviceThreshold; | |
| } EFI_MISC_SUBCLASS_RECORDS; | |
| typedef struct { | |
| EFI_SUBCLASS_TYPE1_HEADER Header; | |
| EFI_MISC_SUBCLASS_RECORDS Record; | |
| } EFI_MISC_SUBCLASS_DRIVER_DATA; | |
| The definitions above are *NOT* defined in MemSubclass specification 0.9. EdkII introduces them to simplify the | |
| code logic. Therefore developer doesn't need to allocate memory dynamically to construct variable length data record. | |
| Keeping this inconsistency for backward compatibility. | |
| 21. Guid/DataHubRecords.h | |
| typedef struct { | |
| EFI_MISC_COOLING_DEVICE_TYPE CoolingDeviceType; | |
| EFI_INTER_LINK_DATA CoolingDeviceTemperatureLink; | |
| UINT8 CoolingDeviceUnitGroup; | |
| UINT16 CoolingDeviceNominalSpeed; | |
| UINT32 CoolingDeviceOemDefined; | |
| } EFI_MISC_COOLING_DEVICE_TEMP_LINK_DATA; | |
| The "CoolingDeviceUnitGroup" field and "CoolingDeviceNominalSpeed" field are *NOT* consistent with | |
| MiscSubclass specification 0.9. These fields are aligned with SMBIOS 2.6 specification. And user can easily | |
| assign any value to CoolingDeviceNominalSpeed. | |
| 22. Guid/DataHubRecords.h | |
| typedef enum { | |
| ... | |
| EfiSlotDataBusWidth1xOrx1 = 0x8, | |
| EfiSlotDataBusWidth2xOrx2 = 0x9, | |
| EfiSlotDataBusWidth4xOrx4 = 0xA, | |
| EfiSlotDataBusWidth8xOrx8 = 0xB, | |
| EfiSlotDataBusWidth12xOrx12 = 0xC, | |
| EfiSlotDataBusWidth16xOrx16 = 0xD, | |
| EfiSlotDataBusWidth32xOrx32 = 0xE | |
| } EFI_MISC_SLOT_DATA_BUS_WIDTH; | |
| The enumeration fields from "EfiSlotDataBusWidth1xOrx1" to "EfiSlotDataBusWidth32xOrx32" are *NOT* defined in MiscSubclass specification 0.9. | |
| They are introduced to support new system slots (type 9) defined in SmBios 2.6 specification. | |
| Keeping this inconsistency to reflect the latest industry standard. | |
| 23. Guid/DataHubRecords.h | |
| typedef struct { | |
| ... | |
| UINT16 TemperatureProbeMaximumValue; | |
| UINT16 TemperatureProbeMinimumValue; | |
| UINT16 TemperatureProbeResolution; | |
| UINT16 TemperatureProbeTolerance; | |
| UINT16 TemperatureProbeAccuracy; | |
| UINT16 TemperatureProbeNominalValue; | |
| UINT16 MDLowerNoncriticalThreshold; | |
| UINT16 MDUpperNoncriticalThreshold; | |
| UINT16 MDLowerCriticalThreshold; | |
| UINT16 MDUpperCriticalThreshold; | |
| UINT16 MDLowerNonrecoverableThreshold; | |
| UINT16 MDUpperNonrecoverableThreshold; | |
| ... | |
| } EFI_MISC_TEMPERATURE_PROBE_DESCRIPTION_DATA; | |
| The structure fields from "TemperatureProbeMaximumValue" to "MDUpperNonrecoverableThreshold" are *NOT* consistent with MiscSubclass specification 0.9. | |
| The specification defines the fields type as EFI_EXP_BASE10_DATA. In fact, they should be UINT16 type because they refer to 16bit width data. | |
| Keeping this inconsistency for backward compatibility. | |
| 24. Guid/DataHubRecords.h | |
| #define EFI_MISC_IPMI_INTERFACE_TYPE_DATA_RECORD_NUMBER EFI_MISC_IPMI_INTERFACE_TYPE_RECORD_NUMBER | |
| The definition above is *NOT* defined in MiscSubclass specifications 0.9. It's defined for backward compatibility. | |
| ## | |
| # Mismatch with Intel Platform Innovation Framework for Status Codes Specification (Version 0.92) | |
| ## | |
| 1. Include/Framework/StatusCode.h | |
| #define EFI_IOB_ATA_BUS_SMART_ENABLE (EFI_SUBCLASS_SPECIFIC | 0x00000000) | |
| #define EFI_IOB_ATA_BUS_SMART_DISABLE (EFI_SUBCLASS_SPECIFIC | 0x00000001) | |
| #define EFI_IOB_ATA_BUS_SMART_OVERTHRESHOLD (EFI_SUBCLASS_SPECIFIC | 0x00000002) | |
| #define EFI_IOB_ATA_BUS_SMART_UNDERTHRESHOLD (EFI_SUBCLASS_SPECIFIC | 0x00000003) | |
| #define EFI_IOB_ATA_BUS_SMART_NOTSUPPORTED (EFI_SUBCLASS_SPECIFIC | 0x00000000) | |
| #define EFI_IOB_ATA_BUS_SMART_DISABLED (EFI_SUBCLASS_SPECIFIC | 0x00000001) | |
| #define EFI_SW_DXE_BS_PC_BEGIN_CONNECTING_DRIVERS (EFI_SUBCLASS_SPECIFIC | 0x00000005) | |
| #define EFI_SW_DXE_BS_PC_VERIFYING_PASSWORD (EFI_SUBCLASS_SPECIFIC | 0x00000006) | |
| #define EFI_SW_DXE_RT_PC_S0 (EFI_SUBCLASS_SPECIFIC | 0x00000000) | |
| #define EFI_SW_DXE_RT_PC_S1 (EFI_SUBCLASS_SPECIFIC | 0x00000001) | |
| #define EFI_SW_DXE_RT_PC_S2 (EFI_SUBCLASS_SPECIFIC | 0x00000002) | |
| #define EFI_SW_DXE_RT_PC_S3 (EFI_SUBCLASS_SPECIFIC | 0x00000003) | |
| #define EFI_SW_DXE_RT_PC_S4 (EFI_SUBCLASS_SPECIFIC | 0x00000004) | |
| #define EFI_SW_DXE_RT_PC_S5 (EFI_SUBCLASS_SPECIFIC | 0x00000005) | |
| #define EFI_SW_CSM_LEGACY_ROM_INIT (EFI_SUBCLASS_SPECIFIC | 0x00000000) | |
| The definitions above are *NOT* defined in Framework StatusCodes specification 0.92. But these subclass-specific error code | |
| operations are needed for EdkII implementation. | |
| Keeping this inconsistency for backward compatibility. | |
| 2. Include/Framework/StatusCode.h | |
| typedef union { | |
| CHAR8 *Ascii; | |
| CHAR16 *Unicode; | |
| ... | |
| } EFI_STATUS_CODE_STRING; | |
| The definition is *NOT* consistent with Framework SatausCodes specification 0.92, in which the first field is defined as "CHAR8 Ascii[]" | |
| and the second field is defined as "CHAR16 Unicode[]". Keeping this inconsistency for backward compatibility. | |
| 3. Include/Framework/StatusCode.h | |
| #define EFI_SW_EC_X64_DIVIDE_ERROR EXCEPT_X64_DIVIDE_ERROR | |
| #define EFI_SW_EC_X64_DEBUG EXCEPT_X64_DEBUG | |
| #define EFI_SW_EC_X64_NMI EXCEPT_X64_NMI | |
| #define EFI_SW_EC_X64_BREAKPOINT EXCEPT_X64_BREAKPOINT | |
| #define EFI_SW_EC_X64_OVERFLOW EXCEPT_X64_OVERFLOW | |
| #define EFI_SW_EC_X64_BOUND EXCEPT_X64_BOUND | |
| #define EFI_SW_EC_X64_INVALID_OPCODE EXCEPT_X64_INVALID_OPCODE | |
| #define EFI_SW_EC_X64_DOUBLE_FAULT EXCEPT_X64_DOUBLE_FAULT | |
| #define EFI_SW_EC_X64_INVALID_TSS EXCEPT_X64_INVALID_TSS | |
| #define EFI_SW_EC_X64_SEG_NOT_PRESENT EXCEPT_X64_SEG_NOT_PRESENT | |
| #define EFI_SW_EC_X64_STACK_FAULT EXCEPT_X64_STACK_FAULT | |
| #define EFI_SW_EC_X64_GP_FAULT EXCEPT_X64_GP_FAULT | |
| #define EFI_SW_EC_X64_PAGE_FAULT EXCEPT_X64_PAGE_FAULT | |
| #define EFI_SW_EC_X64_FP_ERROR EXCEPT_X64_FP_ERROR | |
| #define EFI_SW_EC_X64_ALIGNMENT_CHECK EXCEPT_X64_ALIGNMENT_CHECK | |
| #define EFI_SW_EC_X64_MACHINE_CHECK EXCEPT_X64_MACHINE_CHECK | |
| #define EFI_SW_EC_X64_SIMD EXCEPT_X64_SIMD | |
| The definitions are *NOT* defined in Framework StatusCodes specification 0.92, in which IA32 and IPF exception subclass error code definitions | |
| are defined but omit the corresponding definitions for X64. EdkII introduce these definitions for implementation. | |
| ## | |
| # Mismatch with Intel Platform Innovation Framework for EFI Boot Script Specification (Version 0.91) | |
| ## | |
| 1. Include/Protocol/BootScriptSave.h | |
| #define EFI_BOOT_SCRIPT_SAVE_PROTOCOL_GUID \ | |
| { \ | |
| 0x470e1529, 0xb79e, 0x4e32, {0xa0, 0xfe, 0x6a, 0x15, 0x6d, 0x29, 0xf9, 0xb2 } \ | |
| } | |
| The macro name "EFI_BOOT_SCRIPT_SAVE_PROTOCOL_GUID" is *NOT* consistent with Framework BootScript specification 0.91, | |
| in which it's defined as "EFI_BOOT_SCRIPT_SAVE_GUID". Keeping this inconsistency for backward compatibility. | |
| 2. Include/Protocol/BootScriptSave.h | |
| EFI_STATUS | |
| EFI_BOOTSERVICE | |
| (EFIAPI *EFI_BOOT_SCRIPT_WRITE) ( | |
| IN EFI_BOOT_SCRIPT_SAVE_PROTOCOL *This, | |
| ... | |
| ); | |
| The first parameter's type is *NOT* consistent with Framework BootScript specification 0.91, in which it's defined as | |
| "struct _EFI_BOOT_SCRIPT_SAVE_PROTOCOL". Keeping this inconsistency for backward compatibility. | |
| 3. Include/Framework/BootScript.h | |
| #define EFI_BOOT_SCRIPT_MEM_POLL_OPCODE 0x09 | |
| #define EFI_BOOT_SCRIPT_INFORMATION_OPCODE 0x0A | |
| #define EFI_BOOT_SCRIPT_PCI_CONFIG2_WRITE_OPCODE 0x0B | |
| #define EFI_BOOT_SCRIPT_PCI_CONFIG2_READ_WRITE_OPCODE 0x0C | |
| #define EFI_BOOT_SCRIPT_DISPATCH_2_OPCODE 0x0D | |
| The OPCODEs above are not defined in Framework BootScript Specification 0.91, but adopted by PI 1.0 Spec. And they | |
| are needed for EdkII implementation. | |
| 4. Include/Framework/BootScript.h | |
| #define EFI_BOOT_SCRIPT_TABLE_OPCODE 0xAA | |
| #define EFI_BOOT_SCRIPT_TERMINATE_OPCODE 0xFF | |
| The two OPCODEs are *NOT* defined in Framework BootScript specification 0.91. EdkII introduces them to indicate the start | |
| or end of the boot script table. | |
| Keeping this inconsistency for backward compatibility. | |
| 5. Include/Protocol/BootScriptSave.h | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EFI_BOOT_SCRIPT_CLOSE_TABLE) ( | |
| IN EFI_BOOT_SCRIPT_SAVE_PROTOCOL *This, | |
| ... | |
| ); | |
| The first parameter's type is *NOT* consistent with BootScript specification, in which it's defined as | |
| "struct _EFI_BOOT_SCRIPT_SAVE_PROTOCOL". Keeping this inconsistency for backward compatibility. | |
| 6. Include/Include/BootScriptExecuter.h | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EFI_PEI_BOOT_SCRIPT_EXECUTE)( | |
| IN EFI_PEI_SERVICES **PeiServices, | |
| IN EFI_PEI_BOOT_SCRIPT_EXECUTER_PPI *This, | |
| ... | |
| ); | |
| The second parameter's type is *NOT* consistent with BootScript specification, in which it's defined as | |
| "struct _EFI_PEI_BOOT_SCRIPT_EXECUTER_PPI". Keeping this inconsistency for backward compatibility. | |
| ## | |
| # Mismatch with Intel Platform Innovation Framework for EFI DXE CIS (Version 0.91) | |
| ## | |
| 1. Include/Framework/DxeCis.h | |
| EFI_STATUS_CODE_ARCH_PROTOCOL is removed. | |
| EdkII doesn't provide EFI_STATUS_CODE_ARCH_PROTOCOL definition due to ReportStatusCode() field has been | |
| removed from EFI Runtime Service Table of PI specification. EFI_STATUS_CODE_ARCH_PROTOCOL is *NOT* required, | |
| and is replaced with EFI_STATUS_CODE_RUNTIME_PROTOCOL. | |
| ## | |
| # Mismatch with Intel Platform Innovation Framework for EFI Firmware Volume Specification (Version 0.9) | |
| ## | |
| 1. Include/Framework/FirmwareVolumeImageFormat.h | |
| #define EFI_AGGREGATE_AUTH_STATUS_ALL 0x00000f | |
| #define EFI_LOCAL_AUTH_STATUS_ALL 0x0f0000 | |
| The two macros are *NOT* defined in Framework FV specification 0.9. EdkII introduces them as a mask to calculate the | |
| value of authentication status. | |
| ## | |
| # Mismatch with Intel Platform Innovation Framework for EFI Human Interface Infrastructure Specification (Version 0.92) | |
| ## | |
| 1. Include/Protocol/FrameworkHii.h | |
| #define EFI_HII_PROTOCOL_GUID \ | |
| { \ | |
| 0xd7ad636e, 0xb997, 0x459b, {0xbf, 0x3f, 0x88, 0x46, 0x89, 0x79, 0x80, 0xe1} \ | |
| } | |
| The Framework HII specification 0.92 changed part of HII interfaces but did not update the protocol GUID. | |
| This change should cause a change of GUID in both of code and HII spec. EdkII updates the GUID in code, | |
| but the Framework HII specification 0.92 is not updated. This is a known issue. | |
| 2. Include/Protocol/FrameworkHii.h | |
| typedef struct { | |
| ... | |
| EFI_HANDLE COBExportHandle; | |
| } EFI_HII_HANDLE_PACK; | |
| The last field "COBExportHandle" of EFI_HII_HANDLE_PACK is *NOT* defined in the Framework HII specification | |
| 0.92. Keeping this inconsistency for backward compatibility. | |
| 3. Include/Protocol/FrameworkHii.h | |
| typedef struct { | |
| UINTN NumberOfPackages; | |
| EFI_GUID *GuidId; | |
| } EFI_HII_PACKAGES; | |
| The definition is *NOT* consistent with Framework HII specification 0.92, in which a field "HandlePack" is defined. | |
| EdkII changes the EFI_HII_PACKAGES to contain various number of packages of different types just after the structure | |
| as inline data, which will bring the flexibility on development. | |
| 4. Include/Protocol/FrameworkHii.h | |
| struct _EFI_HII_PROTOCOL { | |
| ... | |
| EFI_HII_RESET_STRINGS ResetStrings; | |
| ... | |
| }; | |
| The field listed above is *NOT* defined in Framework HII specification 0.92. EdkII adds this field to provide | |
| an ability of removing any new strings that were added after the initial string export for this handle. | |
| 5. Include/Protocol/FrameworkHii.h | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EFI_HII_GLYPH_TO_BLT)( | |
| ... | |
| IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL Foreground, | |
| IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL Background, | |
| ... | |
| IN OUT EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer | |
| ); | |
| The type of the parameters listed above are *NOT* consistent with Framework HII specification 0.92, in which | |
| the type of these parameters is EFI_UGA_PIXEL. Here the definition uses the EFI_GRAPHICS_OUTPUT_BLT_PIXEL which | |
| defined in UEFI2.1 spec. Keeping this inconsistency for backward compatibility. | |
| 6. Include/Protocol/FrameworkHii.h | |
| typedef struct { | |
| FRAMEWORK_EFI_IFR_OP_HEADER Header; | |
| UINT8 Flags; | |
| } EFI_IFR_SUPPRESS; | |
| typedef struct { | |
| FRAMEWORK_EFI_IFR_OP_HEADER Header; | |
| UINT8 Flags; | |
| } EFI_IFR_GRAY_OUT; | |
| typedef struct { | |
| FRAMEWORK_EFI_IFR_OP_HEADER Header; | |
| STRING_REF Popup; | |
| UINT8 Flags; | |
| } EFI_IFR_INCONSISTENT; | |
| typedef struct { | |
| FRAMEWORK_EFI_IFR_OP_HEADER Header; | |
| UINT16 QuestionId; | |
| UINT8 Width; | |
| UINT16 Value; | |
| } FRAMEWORK_EFI_IFR_EQ_ID_VAL; | |
| typedef struct { | |
| FRAMEWORK_EFI_IFR_OP_HEADER Header; | |
| UINT16 QuestionId; | |
| UINT8 Width; | |
| UINT16 ListLength; | |
| UINT16 ValueList[1]; | |
| } FRAMEWORK_EFI_IFR_EQ_ID_LIST; | |
| typedef struct { | |
| FRAMEWORK_EFI_IFR_OP_HEADER Header; | |
| UINT16 QuestionId1; | |
| UINT8 Width; | |
| UINT16 QuestionId2; | |
| } FRAMEWORK_EFI_IFR_EQ_ID_ID; | |
| typedef struct { | |
| FRAMEWORK_EFI_IFR_OP_HEADER Header; | |
| UINT16 VariableId; | |
| UINT16 Value; | |
| } EFI_IFR_EQ_VAR_VAL; | |
| The defintions are not complied with Framework HII spec 0.92. Keeping the inconsistent for implementation needed. | |
| 7. Include/Protocol/FrameworkFormCallback.h | |
| #define RESET_REQUIRED 1 | |
| #define EXIT_REQUIRED 2 | |
| #define SAVE_REQUIRED 4 | |
| #define NV_CHANGED 8 | |
| #define NV_NOT_CHANGED 16 | |
| These macros are *NOT* defined in the Framework HII specification 0.92. These Flags are introduced to describe | |
| the standard behavior of the browser after the callback. | |
| Keeping this inconsistency for backward compatibility. | |
| 8. Include/Protocol/FrameworkFormCallback.h | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EFI_NV_WRITE)( | |
| ... | |
| IN UINT32 Attributes, | |
| ... | |
| ); | |
| The definition is *NOT* consistent with Framework HII specification 0.92, in which the type of Attributes | |
| parameter is defined as "UINT32 *". EdkII changes the type of Attributes from UINT32 * to UINT32 because | |
| the input paramter is not necessary to use pointer date type. | |
| ## | |
| # Mismatch with Intel Platform Innovation Framework for PEI CIS Specification (Version 0.91) | |
| ## | |
| 1. Include/Ppi/ReadOnlyVariable.h | |
| #define EFI_VARIABLE_READ_ONLY 0x00000008 | |
| In Framework PeiCis specification 0.91, neither the macro or its value is defined. | |
| Keeping this inconsistency for backward compatibility. | |
| 2. Include/Ppi/FindFv.h | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EFI_PEI_FIND_FV_FINDFV)( | |
| IN EFI_PEI_FIND_FV_PPI *This, | |
| IN EFI_PEI_SERVICES **PeiServices, | |
| IN UINT8 *FvNumber, | |
| IN OUT EFI_FIRMWARE_VOLUME_HEADER **FVAddress | |
| ); | |
| The definition is *NOT* consistent with Framework PeiCis specification 0.91. Compared with spec, the order | |
| of the first and second parameters is reversed. Keeping this inconsistency for backward compatibility. | |
| ## | |
| # Mismatch with Intel Platform Innovation Framework for EFI SMM CIS (Version 0.91) | |
| ## | |
| 1. Include/Guid/SmramMemoryReserve.h | |
| typedef struct { | |
| UINT32 NumberOfSmmReservedRegions; | |
| ... | |
| } EFI_SMRAM_HOB_DESCRIPTOR_BLOCK; | |
| 1) The name of the definition is *NOT* consistent with Framework SmmCis specification 0.91, in which it's | |
| defined as "EFI_HOB_SMRAM_DESCRIPTOR_BLOCK" rather than "EFI_SMRAM_HOB_DESCRIPTOR_BLOCK". | |
| Keeping this inconsistency for backward compatibility. | |
| 2) The definition of NumberOfSmmReservedRegions is *NOT* consistent with Framework SmmCis specification 0.91, | |
| in which the type of this field is defined as UINTN. However, HOBs are supposed to be CPU neutral, so UINTN | |
| is incorrect and UINT32 should be used. | |
| 2. Include/Guid/SmramMemoryReserve.h | |
| typedef enum { | |
| ... | |
| IchnIoTrap3, | |
| IchnIoTrap2, | |
| IchnIoTrap1, | |
| IchnIoTrap0, | |
| IchnPciExpress, | |
| IchnMonitor, | |
| IchnSpi, | |
| IchnQRT, | |
| IchnGpioUnlock, | |
| ... | |
| } EFI_SMM_ICHN_SMI_TYPE; | |
| The enumeration fields listed above are *NOT* defined in Framework SmmCis specification 0.91. EdkII introduces | |
| these fields to support new SMI types. | |
| 3. Include/Framework/SmmCis.h | |
| typedef union { | |
| /// | |
| /// The processor save-state information for IA-32 processors. | |
| /// | |
| EFI_SMI_CPU_SAVE_STATE Ia32SaveState; | |
| /// | |
| /// Note: Inconsistency with the Framework SMM CIS spec - Itanium save state not included. | |
| /// | |
| /// The processor save-state information for Itanium processors. | |
| /// | |
| /// EFI_PMI_SYSTEM_CONTEXT ItaniumSaveState; | |
| } EFI_SMM_CPU_SAVE_STATE; | |
| ## | |
| # Mismatch with Intel Platform Innovation Framework for EFI S3 Resume Boot Path Specification (Version 0.9) | |
| ## | |
| 1. Include/Protocol/AcpiS3Save.h | |
| typedef | |
| EFI_STATUS | |
| EFI_BOOTSERVICE | |
| (EFIAPI *EFI_ACPI_GET_LEGACY_MEMORY_SIZE) ( | |
| IN EFI_ACPI_S3_SAVE_PROTOCOL *This, | |
| OUT UINTN *Size | |
| ); | |
| The first parameter's type is *NOT* consistent with Framework S3Resume specification, in which it's defined as | |
| "struct _EFI_ACPI_S3_SAVE_PROTOCOL". Keeping this inconsistency for backward compatibility. | |
| 2. Include/Protocol/AcpiS3Save.h | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EFI_ACPI_S3_SAVE) ( | |
| IN EFI_ACPI_S3_SAVE_PROTOCOL *This, | |
| IN VOID *LegacyMemoryAddress | |
| ); | |
| The first parameter's type is *NOT* consistent with Framework S3Resume specification, in which it's defined as | |
| "struct _EFI_ACPI_S3_SAVE_PROTOCOL". Also the EFI_BOOTSERVICE modifier is removed from the function declaration. | |
| 3. Include/Protocol/AcpiS3Save.h | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EFI_ACPI_GET_LEGACY_MEMORY_SIZE)( | |
| IN EFI_ACPI_S3_SAVE_PROTOCOL *This, | |
| OUT UINTN *Size | |
| ); | |
| The first parameter's type is *NOT* consistent with Framework S3Resume specification, in which it's defined as | |
| "struct _EFI_ACPI_S3_SAVE_PROTOCOL". Also the EFI_BOOTSERVICE modifier is removed from the function declaration. | |
| ## | |
| # Mismatch with Intel Platform Innovation Framework for EFI ACPI Specification (Version 0.91) | |
| ## | |
| 1. Include/Protocol/AcpiSupport.h | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EFI_ACPI_GET_ACPI_TABLE)( | |
| ... | |
| ); | |
| The function modifier is *NOT* consistent with Framework Acpi specification. The EFI_BOOTSERVICE modifier | |
| is removed from the function declaration. | |
| 2. Include/Protocol/AcpiSupport.h | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EFI_ACPI_SET_ACPI_TABLE)( | |
| ... | |
| ); | |
| The function modifier is *NOT* consistent with Framework Acpi specification. The EFI_BOOTSERVICE modifier | |
| is removed from the function declaration. | |
| 3. Include/Protocol/AcpiSupport.h | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EFI_ACPI_PUBLISH_TABLES)( | |
| ... | |
| ); | |
| The function modifier is *NOT* consistent with Framework Acpi specification. The EFI_BOOTSERVICE modifier | |
| is removed from the function declaration. |