X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=IntelFrameworkPkg%2FFrameworkSpecConformance.txt;fp=IntelFrameworkPkg%2FFrameworkSpecConformance.txt;h=0000000000000000000000000000000000000000;hp=f5e601e3344b82c24d7c51c25127ba45ecb7cb43;hb=87fc0601fa9a98d5f86a81fc20d2cc8ef936e064;hpb=aa7fc1c11c3d57d82842dbede50d064639671a98 diff --git a/IntelFrameworkPkg/FrameworkSpecConformance.txt b/IntelFrameworkPkg/FrameworkSpecConformance.txt deleted file mode 100644 index f5e601e334..0000000000 --- a/IntelFrameworkPkg/FrameworkSpecConformance.txt +++ /dev/null @@ -1,1342 +0,0 @@ -## -# 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.