]> git.proxmox.com Git - mirror_edk2.git/blob - IntelFrameworkPkg/FrameworkSpecConformance.txt
Updated IntelFrameworkPkg\Include\Guid\DataHubRecords.h same with ECP definition
[mirror_edk2.git] / IntelFrameworkPkg / FrameworkSpecConformance.txt
1 ##
2 # This file is used to document mismatches between Intel Platform Innovation Framework specification
3 # (http://www.intel.com/technology/framework/spec.htm) and data structures defind at IntelFrameworkPkg
4 # package in EdkII Open Source Project (https://edk2.tianocore.org/source/browse/edk2/trunk/edk2/IntelFrameworkPkg)
5 ##
6
7 ##
8 # The general consideration about keeping the mismatches in EdkII:
9 # 1. Some definitions defined in Framework specification may bring a little complexity on implementation. EdkII
10 # makes changes on them from the view of code development.
11 # 2. Some definitions are NOT defined in Framework specification, but introduced in Edk. EdkII chooses to keep
12 # them for backward-compatibility.
13 # 3. The name of some definitions are NOT consistent with Framework specification. If the name doesn't bring
14 # misunderstanding literally, EdkII chooses to keep them for backward-compatibility.
15 # 4. Some defintitions don't exactly match Framework specification, some new field members are introduced in EdkII
16 # to reflect the latest industry standard.
17 #
18 # Note:
19 # The IntelFrameworkPkg contains Framework specification contents that were not adopted by UEFI/PI, and names may be
20 # changed (such as adding "FRAMEWORK_") to avoid name collisions with approved UEFI/PI specifications.
21 ##
22
23 ##
24 # Mismatch with Intel Platform Innovation Framework for DataHubSubclass Specification (Version 0.90)
25 ##
26 1. Guid/DataHubRecords.h
27 #define EFI_STRING_TOKEN UINT16
28
29 This macro named "EFI_STRING_TOKEN" is *NOT* defined in Framework specification. Keeping this inconsistency
30 for backward compatibility.
31
32 2. Guid/DataHubRecords.h
33 #pragma pack(1)
34 typedef struct {
35 UINT8 LastPciBus;
36 } EFI_MISC_LAST_PCI_BUS_DATA;
37 ...
38 typedef struct {
39 EFI_SUBCLASS_TYPE1_HEADER Header;
40 EFI_MISC_SUBCLASS_RECORDS Record;
41 } EFI_MISC_SUBCLASS_DRIVER_DATA;
42 #pragma pack()
43
44 Section "Alignment" in DataHubSubclass specification say "Fields in a data hub record should be aligned at their
45 natural boundaries". But in EdkII, the data structures above are packed.
46 Keeping this inconsistency for backward compatibility.
47
48 3. Guid/DataHubRecords.h
49 #define EFI_SUBCLASS_INSTANCE_RESERVED 0
50 #define EFI_SUBCLASS_INSTANCE_NON_APPLICABLE 0xFFFF
51
52 The symbols above are *NOT* defined in DataHubSubclass specification. But the values are defined and are meaningful.
53 According to DataHubSubclass spec, value 0 means Reserved and -1 means Not Applicable. EdkII introduces these macros
54 to faciliate user development.
55
56 ##
57 # Mismatch with Intel Platform Innovation Framework for CacheSubclass Specification (Version 0.90)
58 ##
59 1. Guid/DataHubRecords.h
60 typedef EFI_EXP_BASE2_DATA EFI_MAXIMUM_CACHE_SIZE_DATA;
61
62 The definition named "EFI_MAXIMUM_CACHE_SIZE_DATA" is *NOT* consistent with CacheSubclass specification, in which
63 the name should be EFI_CACHE_MAXIMUM_SIZE_DATA. Keeping this inconsistency for backward compatibility.
64
65 2. Guid/DataHubRecords.h
66 typedef struct {
67 UINT32 Level :3;
68 UINT32 Socketed :1;
69 UINT32 Reserved2 :1;
70 UINT32 Location :2;
71 UINT32 Enable :1;
72 UINT32 OperationalMode :2;
73 UINT32 Reserved1 :22;
74 } EFI_CACHE_CONFIGURATION_DATA;
75
76 The field type of the definition is *NOT* consistent with CacheSubclass specification. Specification defines
77 them as UINT16, which is incorrect and should be UINT32 because the total width of bit-fields is 32bits width.
78
79 3. Guid/DataHubRecords.h
80 typedef enum {
81 CacheSizeRecordType = 1,
82 MaximumSizeCacheRecordType = 2,
83 CacheSpeedRecordType = 3,
84 CacheSocketRecordType = 4,
85 CacheSramTypeRecordType = 5,
86 CacheInstalledSramTypeRecordType = 6,
87 CacheErrorTypeRecordType = 7,
88 CacheTypeRecordType = 8,
89 CacheAssociativityRecordType = 9,
90 CacheConfigRecordType = 10
91 } EFI_CACHE_VARIABLE_RECORD_TYPE;
92
93 The data structure and all enumeration fields are *NOT* defined in CacheSubclass specification, which only
94 defines the following macros to specify the record number of the data record:
95 #define EFI_CACHE_SIZE_RECORD_NUMBER 0x00000001
96 #define EFI_CACHE_MAXIMUM_SIZE_RECORD_NUMBER 0x00000002
97 #define EFI_CACHE_SPEED_RECORD_NUMBER 0x00000003
98 #define EFI_CACHE_SOCKET_RECORD_NUMBER 0x00000004
99 #define EFI_CACHE_SRAM_SUPPORT_RECORD_NUMBER 0x00000005
100 #define EFI_CACHE_SRAM_INSTALL_RECORD_NUMBER 0x00000006
101 #define EFI_CACHE_ERROR_SUPPORT_RECORD_NUMBER 0x00000007
102 #define EFI_CACHE_TYPE_RECORD_NUMBER 0x00000008
103 #define EFI_CACHE_ASSOCIATIVITY_RECORD_NUMBER 0x00000009
104 #define EFI_CACHE_CONFIGURATION_RECORD_NUMBER 0x0000000A
105 Keeping this inconsistency for backward compatibility.
106
107 4. Guid/DataHubRecords.h
108 typedef union {
109 EFI_CACHE_SIZE_DATA CacheSize;
110 ...
111 EFI_CACHE_ASSOCIATION_DATA CacheAssociation;
112 } EFI_CACHE_VARIABLE_RECORD;
113
114 typedef struct {
115 EFI_SUBCLASS_TYPE1_HEADER DataRecordHeader;
116 EFI_CACHE_VARIABLE_RECORD VariableRecord;
117 } EFI_CACHE_DATA_RECORD;
118
119 The definitions above are *NOT* defined in CacheSubclass specification. EdkII introduces them to simplify the
120 code logic. Therefore developer doesn't need to allocate memory dynamically to construct variable length data record.
121 Keeping this inconsistency for backward compatibility.
122
123 ##
124 # Mismatch with Intel Platform Innovation Framework for ProcSubclass Specification (Version 0.90)
125 ##
126 1. Guid/DataHubRecords.h
127 #define EFI_PROCESSOR_SUBCLASS_VERSION 0x00010000
128
129 The value of the definition is *NOT* consistent with ProcSubclass specification, in which the value is 0x0100.
130 Keeping this inconsistency from the perspective of binary consistency.
131
132 2. Guid/DataHubRecords.h
133 typedef struct {
134 UINT32 ProcessorBrandIndex :8;
135 UINT32 ProcessorClflush :8;
136 UINT32 ProcessorReserved :8;
137 UINT32 ProcessorDfltApicId :8;
138 } EFI_PROCESSOR_MISC_INFO;
139
140 The definition is *NOT* consistent with ProcSubclass specification, in which the name of third field is defined
141 as "LogicalProcessorCount" rather than "ProcessorReserved".
142 Keeping this inconsistency for backward compatibility.
143
144 3. Guid/DataHubRecords.h
145 typedef enum {
146 ...
147 EfiProcessorFamilyUltraSparcIIIi = 0x58,
148 ...
149 EfiProcessorFamilyIntelPentiumM = 0xB9,
150 EfiProcessorFamilyIntelCeleronD = 0xBA,
151 EfiProcessorFamilyIntelPentiumD = 0xBB,
152 EfiProcessorFamilyIntelPentiumEx = 0xBC,
153 EfiProcessorFamilyIntelCoreSolo = 0xBD,
154 EfiProcessorFamilyReserved = 0xBE,
155 EfiProcessorFamilyIntelCore2 = 0xBF,
156 ...
157 EfiProcessorFamilyG6 = 0xCB,
158 EfiProcessorFamilyzArchitectur = 0xCC,
159 EfiProcessorFamilyViaC7M = 0xD2,
160 EfiProcessorFamilyViaC7D = 0xD3,
161 EfiProcessorFamilyViaC7 = 0xD4,
162 EfiProcessorFamilyViaEden = 0xD5,
163 ...
164 EfiProcessorFamilyIndicatorFamily2 = 0xFE,
165 EfiProcessorFamilyReserved1 = 0xFF
166 } EFI_PROCESSOR_FAMILY_DATA;
167
168 a. In ProcSubclass specification 0.9, the field name whose value equals to 0x58 is "EfiProcessorFamilyUltraSparcIIi".
169 Due to the name has been defined in previous field, changing it to "EfiProcessorFamilyUltraSparcIIIi" to avoid
170 build break.
171 b. The other fields listed here are *NOT* defined in ProcSubclass specification 0.9. They are introduced to
172 support new processor family (type 4) defined in SmBios 2.6 specification.
173 Keeping this inconsistency to reflect the latest industry standard.
174
175 4. Guid/DataHubRecords.h
176 typedef enum {
177 ...
178 EfiProcessorSocket939 = 0x12,
179 EfiProcessorSocketmPGA604 = 0x13,
180 EfiProcessorSocketLGA771 = 0x14,
181 EfiProcessorSocketLGA775 = 0x15
182 } EFI_PROCESSOR_SOCKET_TYPE_DATA;
183
184 The fields listed here are *NOT* defined in ProcSubclass specification 0.9. They are introduced to support
185 new processor upgrade (type 4 offset 19h) defined in SmBios 2.6 specification.
186 Keeping this inconsistency to reflect the latest industry standard.
187
188 5. Guid/DataHubRecords.h
189 typedef EFI_INTER_LINK_DATA EFI_CACHE_ASSOCIATION_DATA;
190
191 The definition name "EFI_CACHE_ASSOCIATION_DATA" is *NOT* consistent with ProcSubclass specification 0.9, in which
192 the name should be "EFI_PROCESSOR_CACHE_ASSOCIATION_DATA". Keeping this inconsistency for backward compatibility.
193
194 6. Guid/DataHubRecords.h
195 typedef enum {
196 EfiProcessorHealthy = 1,
197 EfiProcessorPerfRestricted = 2,
198 EfiProcessorFuncRestricted = 3
199 } EFI_PROCESSOR_HEALTH_STATUS;
200
201 The structure name "EFI_PROCESSOR_HEALTH_STATUS" is *NOT* consistent with ProcSubclass specification 0.9, in which
202 the name should be "EFI_PROCESSOR_HEALTH_STATUS_DATA". Keeping this inconsistency for backward compatibility.
203
204 7. Guid/DataHubRecords.h
205 typedef enum {
206 ProcessorCoreFrequencyRecordType = 1,
207 ProcessorFsbFrequencyRecordType = 2,
208 ProcessorVersionRecordType = 3,
209 ProcessorManufacturerRecordType = 4,
210 ProcessorSerialNumberRecordType = 5,
211 ProcessorIdRecordType = 6,
212 ProcessorTypeRecordType = 7,
213 ProcessorFamilyRecordType = 8,
214 ProcessorVoltageRecordType = 9,
215 ProcessorApicBaseAddressRecordType = 10,
216 ProcessorApicIdRecordType = 11,
217 ProcessorApicVersionNumberRecordType = 12,
218 CpuUcodeRevisionDataRecordType = 13,
219 ProcessorStatusRecordType = 14,
220 ProcessorSocketTypeRecordType = 15,
221 ProcessorSocketNameRecordType = 16,
222 CacheAssociationRecordType = 17,
223 ProcessorMaxCoreFrequencyRecordType = 18,
224 ProcessorAssetTagRecordType = 19,
225 ProcessorMaxFsbFrequencyRecordType = 20,
226 ProcessorPackageNumberRecordType = 21,
227 ProcessorCoreFrequencyListRecordType = 22,
228 ProcessorFsbFrequencyListRecordType = 23,
229 ProcessorHealthStatusRecordType = 24,
230 ProcessorCoreCountRecordType = 25,
231 ProcessorEnabledCoreCountRecordType = 26,
232 ProcessorThreadCountRecordType = 27,
233 ProcessorCharacteristicsRecordType = 28,
234 ProcessorFamily2RecordType = 29,
235 ProcessorPartNumberRecordType = 30,
236 } EFI_CPU_VARIABLE_RECORD_TYPE;
237
238 The enumeration fields from ProcessorCoreFrequencyRecordType to ProcessorHealthStatusRecordType are *NOT* defined
239 in ProcSubclass specification 0.9, which only defines the following macros to specify the record number of the data record:
240 #define EFI_PROCESSOR_FREQUENCY_RECORD_NUMBER 0x00000001
241 #define EFI_PROCESSOR_BUS_FREQUENCY_RECORD_NUMBER 0x00000002
242 #define EFI_PROCESSOR_VERSION_RECORD_NUMBER 0x00000003
243 #define EFI_PROCESSOR_MANUFACTURER_RECORD_NUMBER 0x00000004
244 #define EFI_PROCESSOR_SERIAL_NUMBER_RECORD_NUMBER 0x00000005
245 #define EFI_PROCESSOR_ID_RECORD_NUMBER 0x00000006
246 #define EFI_PROCESSOR_TYPE_RECORD_NUMBER 0x00000007
247 #define EFI_PROCESSOR_FAMILY_RECORD_NUMBER 0x00000008
248 #define EFI_PROCESSOR_VOLTAGE_RECORD_NUMBER 0x00000009
249 #define EFI_PROCESSOR_APIC_BASE_ADDRESS_RECORD_NUMBER 0x0000000A
250 #define EFI_PROCESSOR_APIC_ID_RECORD_NUMBER 0x0000000B
251 #define EFI_PROCESSOR_APIC_VER_NUMBER_RECORD_NUMBER 0x0000000C
252 #define EFI_PROCESSOR_MICROCODE_REVISION_RECORD_NUMBER 0x0000000D
253 #define EFI_PROCESSOR_STATUS_RECORD_NUMBER 0x0000000E
254 #define EFI_PROCESSOR_SOCKET_TYPE_RECORD_NUMBER 0x0000000F
255 #define EFI_PROCESSOR_SOCKET_NAME_RECORD_NUMBER 0x00000010
256 #define EFI_PROCESSOR_CACHE_ASSOCIATION_RECORD_NUMBER 0x00000011
257 #define EFI_PROCESSOR_MAX_FREQUENCY_RECORD_NUMBER 0x00000012
258 #define EFI_PROCESSOR_ASSET_TAG_RECORD_NUMBER 0x00000013
259 #define EFI_PROCESSOR_MAX_FSB_FREQUENCY_RECORD_NUMBER 0x00000014
260 #define EFI_PROCESSOR_PACKAGE_NUMBER_RECORD_NUMBER 0x00000015
261 #define EFI_PROCESSOR_FREQUENCY_LIST_RECORD_NUMBER 0x00000016
262 #define EFI_PROCESSOR_FSB_FREQUENCY_LIST_RECORD_NUMBER 0x00000017
263 #define EFI_PROCESSOR_HEALTH_STATUS_RECORD_NUMBER 0x00000018
264 Keeping this inconsistency for backward compatibility.
265
266 The enumeration fields from ProcessorCoreCountRecordType to ProcessorPartNumberRecordType are *NOT* defined
267 in ProcSubclass specification 0.9.
268 They are introduced to support new fields for type 4 defined in SmBios 2.6 specification.
269 Keeping this inconsistency to reflect the latest industry standard.
270
271 8. Guid/DataHubRecords.h
272 typedef union {
273 EFI_PROCESSOR_CORE_FREQUENCY_LIST_DATA ProcessorCoreFrequencyList;
274 ...
275 EFI_PROCESSOR_FAMILY2_DATA ProcessorFamily2;
276 } EFI_CPU_VARIABLE_RECORD;
277
278 typedef struct {
279 EFI_SUBCLASS_TYPE1_HEADER DataRecordHeader;
280 EFI_CPU_VARIABLE_RECORD VariableRecord;
281 } EFI_CPU_DATA_RECORD;
282
283 The definitions above are *NOT* defined in ProcSubclass specification 0.9. EdkII introduces them to simplify the
284 code logic. Therefore developer doesn't need to allocate memory dynamically to construct variable length data record.
285 Keeping this inconsistency for backward compatibility.
286
287 9. Guid/DataHubRecords.h
288 typedef STRING_REF EFI_PROCESSOR_PART_NUMBER_DATA;
289
290 typedef enum {
291 EfiProcessorFamilySh3 = 0x104,
292 EfiProcessorFamilySh4 = 0x105,
293 EfiProcessorFamilyArm = 0x118,
294 EfiProcessorFamilyStrongArm = 0x119,
295 EfiProcessorFamily6x86 = 0x12C,
296 EfiProcessorFamilyMediaGx = 0x12D,
297 EfiProcessorFamilyMii = 0x12E,
298 EfiProcessorFamilyWinChip = 0x140,
299 EfiProcessorFamilyDsp = 0x15E,
300 EfiProcessorFamilyVideo = 0x1F4
301 } EFI_PROCESSOR_FAMILY2_DATA;
302
303 typedef UINT8 EFI_PROCESSOR_CORE_COUNT_DATA;
304
305 typedef UINT8 EFI_PROCESSOR_ENABLED_CORE_COUNT_DATA;
306
307 typedef UINT8 EFI_PROCESSOR_THREAD_COUNT_DATA;
308
309 typedef struct {
310 UINT16 Reserved :1;
311 UINT16 Unknown :1;
312 UINT16 Capable64Bit :1;
313 UINT16 Reserved2 :13;
314 } EFI_PROCESSOR_CHARACTERISTICS_DATA;
315
316 The fields listed here are *NOT* defined in ProcSubclass specification 0.9. They are introduced to support
317 new fields for type 4 defined in SmBios 2.6 specification.
318 Keeping this inconsistency to reflect the latest industry standard.
319
320 ##
321 # Mismatch with Intel Platform Innovation Framework for MemSubclass Specification (Version 0.90)
322 ##
323 1. Guid/DataHubRecords.h
324 typedef enum _EFI_MEMORY_FORM_FACTOR {
325 ...
326 EfiMemoryFormFactorFbDimm = 0x0F
327 } EFI_MEMORY_FORM_FACTOR;
328
329 typedef enum _EFI_MEMORY_ARRAY_TYPE {
330 ...
331 EfiMemoryTypeDdr2 = 0x13,
332 EfiMemoryTypeDdr2FbDimm = 0x14
333 } EFI_MEMORY_ARRAY_TYPE;
334
335 typedef enum {
336 ...
337 EfiMemoryStatePartial = 6
338 } EFI_MEMORY_STATE;
339
340 The fields listed above are *NOT* defined in MemSubclass specification 0.9. They are introduced to support
341 new memory device (type 17) defined in SmBios 2.6 specification.
342 Keeping this inconsistency to reflect the latest industry standard.
343
344 2. Guid/DataHubRecords.h
345 typedef struct {
346 ...
347 EFI_EXP_BASE10_DATA MemorySpeed;
348 ...
349 } EFI_MEMORY_ARRAY_LINK_DATA;
350
351 The field name "MemorySpeed" in the definition above is *NOT* consistent with MemSubclass specification 0.9,
352 in which it is defined as MemoryTypeSpeed. Keeping this inconsistency for backward compatibility.
353
354 3. Guid/DataHubRecords.h
355 #define EFI_MEMORY_CONTROLLER_INFORMATION_RECORD_NUMBER 0x00000008
356
357 typedef enum {
358 EfiErrorDetectingMethodOther = 1,
359 EfiErrorDetectingMethodUnknown = 2,
360 EfiErrorDetectingMethodNone = 3,
361 EfiErrorDetectingMethodParity = 4,
362 EfiErrorDetectingMethod32Ecc = 5,
363 EfiErrorDetectingMethod64Ecc = 6,
364 EfiErrorDetectingMethod128Ecc = 7,
365 EfiErrorDetectingMethodCrc = 8
366 } EFI_MEMORY_ERROR_DETECT_METHOD_TYPE;
367
368 typedef struct {
369 UINT8 Other :1;
370 UINT8 Unknown :1;
371 UINT8 None :1;
372 UINT8 SingleBitErrorCorrect :1;
373 UINT8 DoubleBitErrorCorrect :1;
374 UINT8 ErrorScrubbing :1;
375 UINT8 Reserved :2;
376 } EFI_MEMORY_ERROR_CORRECT_CAPABILITY;
377
378 typedef enum {
379 EfiMemoryInterleaveOther = 1,
380 EfiMemoryInterleaveUnknown = 2,
381 EfiMemoryInterleaveOneWay = 3,
382 EfiMemoryInterleaveTwoWay = 4,
383 EfiMemoryInterleaveFourWay = 5,
384 EfiMemoryInterleaveEightWay = 6,
385 EfiMemoryInterleaveSixteenWay = 7
386 } EFI_MEMORY_SUPPORT_INTERLEAVE_TYPE;
387
388 typedef struct {
389 UINT16 Other :1;
390 UINT16 Unknown :1;
391 UINT16 SeventyNs:1;
392 UINT16 SixtyNs :1;
393 UINT16 FiftyNs :1;
394 UINT16 Reserved :11;
395 } EFI_MEMORY_SPEED_TYPE;
396
397 typedef struct {
398 UINT16 Other :1;
399 UINT16 Unknown :1;
400 UINT16 Standard :1;
401 UINT16 FastPageMode:1;
402 UINT16 EDO :1;
403 UINT16 Parity :1;
404 UINT16 ECC :1;
405 UINT16 SIMM :1;
406 UINT16 DIMM :1;
407 UINT16 BurstEdo :1;
408 UINT16 SDRAM :1;
409 UINT16 Reserved :5;
410 } EFI_MEMORY_SUPPORTED_TYPE;
411
412 typedef struct {
413 UINT8 Five :1;
414 UINT8 Three :1;
415 UINT8 Two :1;
416 UINT8 Reserved:5;
417 } EFI_MEMORY_MODULE_VOLTAGE_TYPE;
418
419 typedef struct {
420 EFI_MEMORY_ERROR_DETECT_METHOD_TYPE ErrorDetectingMethod;
421 EFI_MEMORY_ERROR_CORRECT_CAPABILITY ErrorCorrectingCapability;
422 EFI_MEMORY_SUPPORT_INTERLEAVE_TYPE MemorySupportedInterleave;
423 EFI_MEMORY_SUPPORT_INTERLEAVE_TYPE MemoryCurrentInterleave;
424 UINT8 MaxMemoryModuleSize;
425 EFI_MEMORY_SPEED_TYPE MemorySpeedType;
426 EFI_MEMORY_SUPPORTED_TYPE MemorySupportedType;
427 EFI_MEMORY_MODULE_VOLTAGE_TYPE MemoryModuleVoltage;
428 UINT8 NumberofMemorySlot;
429 EFI_MEMORY_ERROR_CORRECT_CAPABILITY EnabledCorrectingCapability;
430 UINT16 *MemoryModuleConfigHandles;
431 } EFI_MEMORY_CONTROLLER_INFORMATION;
432
433 typedef struct {
434 EFI_MEMORY_ERROR_DETECT_METHOD_TYPE ErrorDetectingMethod;
435 EFI_MEMORY_ERROR_CORRECT_CAPABILITY ErrorCorrectingCapability;
436 EFI_MEMORY_SUPPORT_INTERLEAVE_TYPE MemorySupportedInterleave;
437 EFI_MEMORY_SUPPORT_INTERLEAVE_TYPE MemoryCurrentInterleave;
438 UINT8 MaxMemoryModuleSize;
439 EFI_MEMORY_SPEED_TYPE MemorySpeedType;
440 EFI_MEMORY_SUPPORTED_TYPE MemorySupportedType;
441 EFI_MEMORY_MODULE_VOLTAGE_TYPE MemoryModuleVoltage;
442 UINT8 NumberofMemorySlot;
443 EFI_MEMORY_ERROR_CORRECT_CAPABILITY EnabledCorrectingCapability;
444 EFI_INTER_LINK_DATA MemoryModuleConfig[1];
445 } EFI_MEMORY_CONTROLLER_INFORMATION_DATA;
446
447 The definitions above are *NOT* defined in MemSubclass specification 0.9. They are introduced to support
448 new memory controller information (type 5) defined in SmBios 2.6 specification.
449 Keeping this inconsistency to reflect the latest industry standard.
450
451 4. Guid/DataHubRecords.h
452 #define EFI_MEMORY_32BIT_ERROR_INFORMATION_RECORD_NUMBER 0x00000009
453
454 typedef enum {
455 EfiMemoryErrorOther = 1,
456 EfiMemoryErrorUnknown = 2,
457 EfiMemoryErrorOk = 3,
458 EfiMemoryErrorBadRead = 4,
459 EfiMemoryErrorParity = 5,
460 EfiMemoryErrorSigleBit = 6,
461 EfiMemoryErrorDoubleBit = 7,
462 EfiMemoryErrorMultiBit = 8,
463 EfiMemoryErrorNibble = 9,
464 EfiMemoryErrorChecksum = 10,
465 EfiMemoryErrorCrc = 11,
466 EfiMemoryErrorCorrectSingleBit = 12,
467 EfiMemoryErrorCorrected = 13,
468 EfiMemoryErrorUnCorrectable = 14
469 } EFI_MEMORY_ERROR_TYPE;
470
471 typedef enum {
472 EfiMemoryGranularityOther = 1,
473 EfiMemoryGranularityOtherUnknown = 2,
474 EfiMemoryGranularityDeviceLevel = 3,
475 EfiMemoryGranularityMemPartitionLevel = 4
476 } EFI_MEMORY_ERROR_GRANULARITY_TYPE;
477
478 typedef enum {
479 EfiMemoryErrorOperationOther = 1,
480 EfiMemoryErrorOperationUnknown = 2,
481 EfiMemoryErrorOperationRead = 3,
482 EfiMemoryErrorOperationWrite = 4,
483 EfiMemoryErrorOperationPartialWrite = 5
484 } EFI_MEMORY_ERROR_OPERATION_TYPE;
485
486 typedef struct {
487 EFI_MEMORY_ERROR_TYPE MemoryErrorType;
488 EFI_MEMORY_ERROR_GRANULARITY_TYPE MemoryErrorGranularity;
489 EFI_MEMORY_ERROR_OPERATION_TYPE MemoryErrorOperation;
490 UINT32 VendorSyndrome;
491 UINT32 MemoryArrayErrorAddress;
492 UINT32 DeviceErrorAddress;
493 UINT32 DeviceErrorResolution;
494 } EFI_MEMORY_32BIT_ERROR_INFORMATION;
495
496 The definitions above are *NOT* defined in MemSubclass specification 0.9. They are introduced to support
497 new 32-bit memory error information (type 18) defined in SmBios 2.6 specification.
498 Keeping this inconsistency to reflect the latest industry standard.
499
500 5. Guid/DataHubRecords.h
501 #define EFI_MEMORY_64BIT_ERROR_INFORMATION_RECORD_NUMBER 0x0000000A
502
503 typedef struct {
504 EFI_MEMORY_ERROR_TYPE MemoryErrorType;
505 EFI_MEMORY_ERROR_GRANULARITY_TYPE MemoryErrorGranularity;
506 EFI_MEMORY_ERROR_OPERATION_TYPE MemoryErrorOperation;
507 UINT32 VendorSyndrome;
508 UINT64 MemoryArrayErrorAddress;
509 UINT64 DeviceErrorAddress;
510 UINT32 DeviceErrorResolution;
511 } EFI_MEMORY_64BIT_ERROR_INFORMATION;
512
513 The definitions above are *NOT* defined in MemSubclass specification 0.9. They are introduced to support
514 new 64-bit memory error information (type 33) defined in SmBios 2.6 specification.
515 Keeping this inconsistency to reflect the latest industry standard.
516
517 6. Guid/DataHubRecords.h
518 typedef union _EFI_MEMORY_SUBCLASS_RECORDS {
519 EFI_MEMORY_SIZE_DATA SizeData;
520 ...
521 EFI_MEMORY_64BIT_ERROR_INFORMATION Memory64bitErrorInfo;
522 } EFI_MEMORY_SUBCLASS_RECORDS;
523
524 typedef struct {
525 EFI_SUBCLASS_TYPE1_HEADER Header;
526 EFI_MEMORY_SUBCLASS_RECORDS Record;
527 } EFI_MEMORY_SUBCLASS_DRIVER_DATA;
528
529 The definitions above are *NOT* defined in MemSubclass specification 0.9. EdkII introduces them to simplify the
530 code logic. Therefore developer doesn't need to allocate memory dynamically to construct variable length data record.
531 Keeping this inconsistency for backward compatibility.
532
533 ##
534 # Mismatch with Intel Platform Innovation Framework for MiscSubclass Specification (Version 0.90)
535 ##
536 1. Guid/DataHubRecords.h
537 #pragma pack(1)
538 typedef struct _USB_PORT_DEVICE_PATH {
539 ACPI_HID_DEVICE_PATH PciRootBridgeDevicePath;
540 PCI_DEVICE_PATH PciBusDevicePath;
541 EFI_DEVICE_PATH_PROTOCOL EndDevicePath;
542 } USB_PORT_DEVICE_PATH;
543
544 typedef struct _IDE_DEVICE_PATH {
545 ACPI_HID_DEVICE_PATH PciRootBridgeDevicePath;
546 PCI_DEVICE_PATH PciBusDevicePath;
547 EFI_DEVICE_PATH_PROTOCOL EndDevicePath;
548 } IDE_DEVICE_PATH;
549
550 typedef struct _RMC_CONN_DEVICE_PATH {
551 ACPI_HID_DEVICE_PATH PciRootBridgeDevicePath;
552 PCI_DEVICE_PATH PciBridgeDevicePath;
553 PCI_DEVICE_PATH PciBusDevicePath;
554 EFI_DEVICE_PATH_PROTOCOL EndDevicePath;
555 } RMC_CONN_DEVICE_PATH;
556
557 typedef struct _RIDE_DEVICE_PATH {
558 ACPI_HID_DEVICE_PATH PciRootBridgeDevicePath;
559 PCI_DEVICE_PATH PciBridgeDevicePath;
560 PCI_DEVICE_PATH PciBusDevicePath;
561 EFI_DEVICE_PATH_PROTOCOL EndDevicePath;
562 } RIDE_DEVICE_PATH;
563
564 typedef struct _GB_NIC_DEVICE_PATH {
565 ACPI_HID_DEVICE_PATH PciRootBridgeDevicePath;
566 PCI_DEVICE_PATH PciBridgeDevicePath;
567 PCI_DEVICE_PATH PciXBridgeDevicePath;
568 PCI_DEVICE_PATH PciXBusDevicePath;
569 EFI_DEVICE_PATH_PROTOCOL EndDevicePath;
570 } GB_NIC_DEVICE_PATH;
571
572 typedef struct _PS2_CONN_DEVICE_PATH {
573 ACPI_HID_DEVICE_PATH PciRootBridgeDevicePath;
574 PCI_DEVICE_PATH LpcBridgeDevicePath;
575 ACPI_HID_DEVICE_PATH LpcBusDevicePath;
576 EFI_DEVICE_PATH_PROTOCOL EndDevicePath;
577 } PS2_CONN_DEVICE_PATH;
578
579 typedef struct _SERIAL_CONN_DEVICE_PATH {
580 ACPI_HID_DEVICE_PATH PciRootBridgeDevicePath;
581 PCI_DEVICE_PATH LpcBridgeDevicePath;
582 ACPI_HID_DEVICE_PATH LpcBusDevicePath;
583 EFI_DEVICE_PATH_PROTOCOL EndDevicePath;
584 } SERIAL_CONN_DEVICE_PATH;
585
586 typedef struct _PARALLEL_CONN_DEVICE_PATH {
587 ACPI_HID_DEVICE_PATH PciRootBridgeDevicePath;
588 PCI_DEVICE_PATH LpcBridgeDevicePath;
589 ACPI_HID_DEVICE_PATH LpcBusDevicePath;
590 EFI_DEVICE_PATH_PROTOCOL EndDevicePath;
591 } PARALLEL_CONN_DEVICE_PATH;
592
593 typedef struct _FLOOPY_CONN_DEVICE_PATH {
594 ACPI_HID_DEVICE_PATH PciRootBridgeDevicePath;
595 PCI_DEVICE_PATH LpcBridgeDevicePath;
596 ACPI_HID_DEVICE_PATH LpcBusDevicePath;
597 EFI_DEVICE_PATH_PROTOCOL EndDevicePath;
598 } FLOOPY_CONN_DEVICE_PATH;
599
600 typedef union _EFI_MISC_PORT_DEVICE_PATH {
601 USB_PORT_DEVICE_PATH UsbDevicePath;
602 IDE_DEVICE_PATH IdeDevicePath;
603 RMC_CONN_DEVICE_PATH RmcConnDevicePath;
604 RIDE_DEVICE_PATH RideDevicePath;
605 GB_NIC_DEVICE_PATH GbNicDevicePath;
606 PS2_CONN_DEVICE_PATH Ps2ConnDevicePath;
607 SERIAL_CONN_DEVICE_PATH SerialConnDevicePath;
608 PARALLEL_CONN_DEVICE_PATH ParallelConnDevicePath;
609 FLOOPY_CONN_DEVICE_PATH FloppyConnDevicePath;
610 } EFI_MISC_PORT_DEVICE_PATH;
611 #pragma pack()
612
613 a. The definitions above are *NOT* defined in MiscSubclass specifications 0.9. EdkII introduces them to simplify the
614 code logic. Therefore developer doesn't need to allocate memory dynamically to construct variable length device
615 path for various device.
616 Keeping this inconsistency for backward compatibility.
617
618 b. The definitions above are packed. This way violates the rule of alignment defined in DataHubSubclass specification.
619 Section "Alignment" in DataHubSubclass specification say "Fields in a data hub record should be aligned at their
620 natural boundaries". Keeping this inconsistency for backward compatibility.
621
622 2. Guid/DataHubRecords.h
623 typedef struct {
624 ...
625 EFI_MISC_PORT_DEVICE_PATH PortPath;
626 } EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA;
627
628 The definition is *NOT* consistent with MiscSubclass specification, in which the type of last field is defined as
629 "EFI_DEVICE_PATH_PROTOCOL". The definition in Specification may bring a little complexity on implementation. User
630 have to allocate variable length memory to contain device path info and free them finially.
631 EdkII introduced an union type named EFI_MISC_PORT_DEVICE_PATH to avoid the logic above.
632
633 3. Guid/DataHubRecords.h
634 typedef struct {
635 ...
636 UINT8 BiosMajorRelease;
637 UINT8 BiosMinorRelease;
638 UINT8 BiosEmbeddedFirmwareMajorRelease;
639 UINT8 BiosEmbeddedFirmwareMinorRelease;
640 } EFI_MISC_BIOS_VENDOR_DATA;
641
642 The fields listed above are *NOT* defined in MiscSubclass specification 0.9. They are introduced to support
643 new bios information (type 0) defined in SmBios 2.6 specification.
644 Keeping this inconsistency to reflect the latest industry standard.
645
646 4. Guid/DataHubRecords.h
647 typedef struct {
648 ...
649 STRING_REF SystemSKUNumber;
650 STRING_REF SystemFamily;
651 } EFI_MISC_SYSTEM_MANUFACTURER_DATA;
652
653 The fields listed above are *NOT* defined in MiscSubclass specification 0.9. They are introduced to support
654 new system information (type 1) defined in SmBios 2.6 specification.
655 Keeping this inconsistency to reflect the latest industry standard.
656
657 5. Guid/DataHubRecords.h
658 typedef struct {
659 ...
660 EFI_INTER_LINK_DATA ManagementDeviceThresholdLink;
661 } EFI_MISC_MANAGEMENT_DEVICE_COMPONENT_DESCRIPTION_DATA;
662
663 The field listed above is *NOT* defined in MiscSubclass specification 0.9. It is introduced to support
664 new management device component (type 35) defined in SmBios 2.6 specification.
665 Keeping this inconsistency to reflect the latest industry standard.
666
667 6. Guid/DataHubRecords.h
668 typedef struct {
669 UINT32 ChassisType :16;
670 UINT32 ChassisLockPresent:1;
671 UINT32 Reserved :15;
672 } EFI_MISC_CHASSIS_STATUS;
673
674 The definition is *NOT* consistent with MiscSubclass specification 0.9, in which the first field is assigned a wrong field
675 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
676 field name again. EdkII changes its name to "ChassisType" to pass build.
677
678 7. Guid/DataHubRecords.h
679 typedef enum {
680 ...
681 EfiSlotTypeAgp2X = 0x10,
682 ...
683 EfiSlotTypePciExpress = 0xA5
684 } EFI_MISC_SLOT_TYPE;
685
686 a. The field name "EfiSlotTypeAgp2X" is *NOT* consistent with MiscSubclass specification 0.9, in which it is named
687 "EfiSlotTypeApg2X".
688 From its literal sense, this field represents a AGP type display card, so it should be named as "EfiSlotTypeAgp2X".
689 b. The "EfiSlotTypePciExpress" field is *NOT* defined in MiscSubclass specification 0.9. It isintroduced to support
690 new system slots (type 9) defined in SmBios 2.6 specification.
691 Keeping this inconsistency to reflect the latest industry standard.
692
693 8. Guid/DataHubRecords.h
694 typedef struct {
695 ...
696 EFI_MISC_ONBOARD_DEVICE_STATUS OnBoardDeviceStatus;
697 ...
698 } EFI_MISC_ONBOARD_DEVICE_DATA;
699
700 The definition is *NOT* consistent with MiscSubclass specification 0.9, in which the field "OnBoardDeviceStatus" is
701 named as "OnBoardDeviceType". Keeping this inconsistency for backward compatibility.
702
703 9. Guid/DataHubRecords.h
704 #define EFI_MISC_PORTABLE_BATTERY_RECORD_NUMBER 0x00000010
705
706 The name of the definition is *NOT* consistent with MiscSubclass specification 0.9, in which it is defined as
707 "EFI_MISC_BATTERY_LOCATION_RECORD_NUMBER". Keeping this inconsistency for backward compatibility.
708
709 10. Guid/DataHubRecords.h
710 typedef enum {
711 EfiPortableBatteryDeviceChemistryOther = 1,
712 EfiPortableBatteryDeviceChemistryUnknown = 2,
713 EfiPortableBatteryDeviceChemistryLeadAcid = 3,
714 EfiPortableBatteryDeviceChemistryNickelCadmium = 4,
715 EfiPortableBatteryDeviceChemistryNickelMetalHydride = 5,
716 EfiPortableBatteryDeviceChemistryLithiumIon = 6,
717 EfiPortableBatteryDeviceChemistryZincAir = 7,
718 EfiPortableBatteryDeviceChemistryLithiumPolymer = 8
719 } EFI_MISC_PORTABLE_BATTERY_DEVICE_CHEMISTRY;
720
721 The name of the definition is *NOT* consistent with MiscSubclass specification, in which it is defined as
722 "EFI_MISC_BATTERY_DEVICE_CHEMISTRY". And all field names have a redundant "Portable" string compared with MisSubclass
723 specification 0.9.
724 Keeping this inconsistency for backward compatibility.
725
726 11. Guid/DataHubRecords.h
727 typedef struct {
728 STRING_REF Location;
729 STRING_REF Manufacturer;
730 STRING_REF ManufactureDate;
731 STRING_REF SerialNumber;
732 STRING_REF DeviceName;
733 EFI_MISC_PORTABLE_BATTERY_DEVICE_CHEMISTRY DeviceChemistry;
734 UINT16 DesignCapacity;
735 UINT16 DesignVoltage;
736 STRING_REF SBDSVersionNumber;
737 UINT8 MaximumError;
738 UINT16 SBDSSerialNumber;
739 UINT16 SBDSManufactureDate;
740 STRING_REF SBDSDeviceChemistry;
741 UINT8 DesignCapacityMultiplier;
742 UINT32 OEMSpecific;
743 UINT8 BatteryNumber;
744 BOOLEAN Valid;
745 } EFI_MISC_PORTABLE_BATTERY;
746
747 The definition is *NOT* consistent with MiscSubclass specification 0.9, in which the structure name is defined as
748 "EFI_MISC_BATTERY_LOCATION_DATA". Moreover, the name and the order of all fields are also different with MiscSubclass
749 specification 0.9. Keeping this inconsistency for backward compatibility.
750
751 12. Guid/DataHubRecords.h
752 typedef enum {
753 ...
754 } EFI_MISC_BOOT_INFORMATION_STATUS_DATA_TYPE;
755
756 The name of the definition is *NOT* consistent with MiscSubclass specification 0.9, in which it is defined as
757 "EFI_MISC_BOOT_INFORMATION_STATUS_TYPE". Keeping this inconsistency for backward compatibility.
758
759 13. Guid/DataHubRecords.h
760 typedef struct {
761 EFI_MISC_BOOT_INFORMATION_STATUS_DATA_TYPE BootInformationStatus;
762 ...
763 } EFI_MISC_BOOT_INFORMATION_STATUS_DATA;
764
765 The definition is *NOT* consistent with MiscSubclass specification 0.9, in which the type of the first field is
766 "EFI_MISC_BOOT_INFORMATION_STATUS_TYPE". Keeping this inconsistency for backward compatibility.
767
768 14. Guid/DataHubRecords.h
769 typedef struct {
770 ...
771 } EFI_MISC_SYSTEM_POWER_SUPPLY_DATA;
772
773 The name of the definition is *NOT* consistent with MiscSubclass specification 0.9, in which it is defined as
774 "EFI_MISC_POWER_SUPPLY_UNIT_GROUP_DATA". Keeping this inconsistency for backward compatibility.
775
776 15. Guid/DataHubRecords.h
777 typedef struct {
778 ...
779 } SMBIOS_STRUCTURE_HDR;
780
781 The name of the definition is *NOT* consistent with MiscSubclass specification 0.9, in which the structure name
782 is defined as "EFI_SMBIOS_STRUCTURE_HDR". Due to this structure is commonly used by vendor to construct SmBios
783 type 0x80~0xFF table, Keeping this inconsistency for backward compatibility.
784
785 16. Guid/DataHubRecords.h
786 typedef struct {
787 SMBIOS_STRUCTURE_HDR Header;
788 ...
789 } EFI_MISC_SMBIOS_STRUCT_ENCAPSULATION_DATA;
790
791 The definition is *NOT* consistent with MiscSubclass specification 0.9, in which the type of the first field is
792 "EFI_SMBIOS_STRUCTURE_HDR". Keeping this inconsistency for backward compatibility.
793
794 17. Guid/DataHubRecords.h
795 typedef struct {
796 UINT16 PowerSupplyHotReplaceable:1;
797 UINT16 PowerSupplyPresent :1;
798 UINT16 PowerSupplyUnplugged :1;
799 UINT16 InputVoltageRangeSwitch :4;
800 UINT16 PowerSupplyStatus :3;
801 UINT16 PowerSupplyType :4;
802 UINT16 Reserved :2;
803 } EFI_MISC_POWER_SUPPLY_CHARACTERISTICS;
804
805 all field type in the definition are *NOT* consistent with MiscSubclass specification 0.9, in which it is defined as
806 "UINT32" and the total width of bit-fields is 32bits width.
807 Keeping this inconsistency for backward compatibility.
808
809 18. Guid/DataHubRecords.h
810 #define EFI_MISC_SYSTEM_EVENT_LOG_RECORD_NUMBER 0x00000020
811
812 typedef struct {
813 UINT16 LogAreaLength;
814 UINT16 LogHeaderStartOffset;
815 UINT16 LogDataStartOffset;
816 UINT8 AccessMethod;
817 UINT8 LogStatus;
818 UINT32 LogChangeToken;
819 UINT32 AccessMethodAddress;
820 UINT8 LogHeaderFormat;
821 UINT8 NumberOfSupportedLogType;
822 UINT8 LengthOfLogDescriptor;
823 } EFI_MISC_SYSTEM_EVENT_LOG_DATA;
824
825 #define ACCESS_INDEXIO_1INDEX8BIT_DATA8BIT 0x00
826 #define ACCESS_INDEXIO_2INDEX8BIT_DATA8BIT 0X01
827 #define ACCESS_INDEXIO_1INDEX16BIT_DATA8BIT 0X02
828 #define ACCESS_MEMORY_MAPPED 0x03
829 #define ACCESS_GPNV 0x04
830
831 The definitions listed above are *NOT* defined in MiscSubclass specification 0.9. It is introduced to support
832 new system event log (type 15) defined in SmBios 2.6 specification.
833 Keeping this inconsistency to reflect the latest industry standard.
834
835 19. Guid/DataHubRecords.h
836 #define EFI_MISC_MANAGEMENT_DEVICE_THRESHOLD_RECORD_NUMBER 0x00000021
837
838 typedef struct {
839 UINT16 LowerThresNonCritical;
840 UINT16 UpperThresNonCritical;
841 UINT16 LowerThresCritical;
842 UINT16 UpperThresCritical;
843 UINT16 LowerThresNonRecover;
844 UINT16 UpperThresNonRecover;
845 } EFI_MISC_MANAGEMENT_DEVICE_THRESHOLD;
846
847 The definitions listed above are *NOT* defined in MiscSubclass specification 0.9. It is introduced to support
848 new management device threshold data (type 36) defined in SmBios 2.6 specification.
849 Keeping this inconsistency to reflect the latest industry standard.
850
851 20. Guid/DataHubRecords.h
852 typedef union {
853 EFI_MISC_LAST_PCI_BUS_DATA LastPciBus;
854 ...
855 EFI_MISC_MANAGEMENT_DEVICE_THRESHOLD MiscManagementDeviceThreshold;
856 } EFI_MISC_SUBCLASS_RECORDS;
857
858 typedef struct {
859 EFI_SUBCLASS_TYPE1_HEADER Header;
860 EFI_MISC_SUBCLASS_RECORDS Record;
861 } EFI_MISC_SUBCLASS_DRIVER_DATA;
862
863 The definitions above are *NOT* defined in MemSubclass specification 0.9. EdkII introduces them to simplify the
864 code logic. Therefore developer doesn't need to allocate memory dynamically to construct variable length data record.
865 Keeping this inconsistency for backward compatibility.
866
867 21. Guid/DataHubRecords.h
868 typedef struct {
869 EFI_MISC_COOLING_DEVICE_TYPE CoolingDeviceType;
870 EFI_INTER_LINK_DATA CoolingDeviceTemperatureLink;
871 UINT8 CoolingDeviceUnitGroup;
872 UINT16 CoolingDeviceNominalSpeed;
873 UINT32 CoolingDeviceOemDefined;
874 } EFI_MISC_COOLING_DEVICE_TEMP_LINK_DATA;
875
876 The "CoolingDeviceUnitGroup" field and "CoolingDeviceNominalSpeed" field are *NOT* consistent with
877 MiscSubclass specification 0.9. These fields are aligned with SMBIOS 2.6 specification. And user can easily
878 assign any value to CoolingDeviceNominalSpeed.
879
880 ##
881 # Mismatch with Intel Platform Innovation Framework for Status Codes Specification (Version 0.92)
882 ##
883 1. Include/Framework/StatusCode.h
884 #define EFI_IOB_ATA_BUS_SMART_ENABLE (EFI_SUBCLASS_SPECIFIC | 0x00000000)
885 #define EFI_IOB_ATA_BUS_SMART_DISABLE (EFI_SUBCLASS_SPECIFIC | 0x00000001)
886 #define EFI_IOB_ATA_BUS_SMART_OVERTHRESHOLD (EFI_SUBCLASS_SPECIFIC | 0x00000002)
887 #define EFI_IOB_ATA_BUS_SMART_UNDERTHRESHOLD (EFI_SUBCLASS_SPECIFIC | 0x00000003)
888
889 #define EFI_IOB_ATA_BUS_SMART_NOTSUPPORTED (EFI_SUBCLASS_SPECIFIC | 0x00000000)
890 #define EFI_IOB_ATA_BUS_SMART_DISABLED (EFI_SUBCLASS_SPECIFIC | 0x00000001)
891
892 #define EFI_SW_DXE_BS_PC_BEGIN_CONNECTING_DRIVERS (EFI_SUBCLASS_SPECIFIC | 0x00000005)
893 #define EFI_SW_DXE_BS_PC_VERIFYING_PASSWORD (EFI_SUBCLASS_SPECIFIC | 0x00000006)
894
895 #define EFI_SW_DXE_RT_PC_S0 (EFI_SUBCLASS_SPECIFIC | 0x00000000)
896 #define EFI_SW_DXE_RT_PC_S1 (EFI_SUBCLASS_SPECIFIC | 0x00000001)
897 #define EFI_SW_DXE_RT_PC_S2 (EFI_SUBCLASS_SPECIFIC | 0x00000002)
898 #define EFI_SW_DXE_RT_PC_S3 (EFI_SUBCLASS_SPECIFIC | 0x00000003)
899 #define EFI_SW_DXE_RT_PC_S4 (EFI_SUBCLASS_SPECIFIC | 0x00000004)
900 #define EFI_SW_DXE_RT_PC_S5 (EFI_SUBCLASS_SPECIFIC | 0x00000005)
901
902 #define EFI_SW_CSM_LEGACY_ROM_INIT (EFI_SUBCLASS_SPECIFIC | 0x00000000)
903
904 The definitions above are *NOT* defined in Framework StatusCodes specification 0.92. But these subclass-specific error code
905 operations are needed for EdkII implementation.
906 Keeping this inconsistency for backward compatibility.
907
908 2. Include/Framework/StatusCode.h
909 typedef union {
910 CHAR8 *Ascii;
911 CHAR16 *Unicode;
912 ...
913 } EFI_STATUS_CODE_STRING;
914
915 The definition is *NOT* consistent with Framework SatausCodes specification 0.92, in which the first field is defined as "CHAR8 Ascii[]"
916 and the second field is defined as "CHAR16 Unicode[]". Keeping this inconsistency for backward compatibility.
917
918 3. Include/Framework/StatusCode.h
919 #define EFI_SW_EC_X64_DIVIDE_ERROR EXCEPT_X64_DIVIDE_ERROR
920 #define EFI_SW_EC_X64_DEBUG EXCEPT_X64_DEBUG
921 #define EFI_SW_EC_X64_NMI EXCEPT_X64_NMI
922 #define EFI_SW_EC_X64_BREAKPOINT EXCEPT_X64_BREAKPOINT
923 #define EFI_SW_EC_X64_OVERFLOW EXCEPT_X64_OVERFLOW
924 #define EFI_SW_EC_X64_BOUND EXCEPT_X64_BOUND
925 #define EFI_SW_EC_X64_INVALID_OPCODE EXCEPT_X64_INVALID_OPCODE
926 #define EFI_SW_EC_X64_DOUBLE_FAULT EXCEPT_X64_DOUBLE_FAULT
927 #define EFI_SW_EC_X64_INVALID_TSS EXCEPT_X64_INVALID_TSS
928 #define EFI_SW_EC_X64_SEG_NOT_PRESENT EXCEPT_X64_SEG_NOT_PRESENT
929 #define EFI_SW_EC_X64_STACK_FAULT EXCEPT_X64_STACK_FAULT
930 #define EFI_SW_EC_X64_GP_FAULT EXCEPT_X64_GP_FAULT
931 #define EFI_SW_EC_X64_PAGE_FAULT EXCEPT_X64_PAGE_FAULT
932 #define EFI_SW_EC_X64_FP_ERROR EXCEPT_X64_FP_ERROR
933 #define EFI_SW_EC_X64_ALIGNMENT_CHECK EXCEPT_X64_ALIGNMENT_CHECK
934 #define EFI_SW_EC_X64_MACHINE_CHECK EXCEPT_X64_MACHINE_CHECK
935 #define EFI_SW_EC_X64_SIMD EXCEPT_X64_SIMD
936
937 The definitions are *NOT* defined in Framework StatusCodes specification 0.92, in which IA32 and IPF exception subclass error code definitions
938 are defined but omit the corresponding definitions for X64. EdkII introduce these definitions for implementation.
939
940 ##
941 # Mismatch with Intel Platform Innovation Framework for EFI Boot Script Specification (Version 0.91)
942 ##
943 1. Include/Protocol/BootScriptSave.h
944 #define EFI_BOOT_SCRIPT_SAVE_PROTOCOL_GUID \
945 { \
946 0x470e1529, 0xb79e, 0x4e32, {0xa0, 0xfe, 0x6a, 0x15, 0x6d, 0x29, 0xf9, 0xb2 } \
947 }
948
949 The macro name "EFI_BOOT_SCRIPT_SAVE_PROTOCOL_GUID" is *NOT* consistent with Framework BootScript specification 0.91,
950 in which it's defined as "EFI_BOOT_SCRIPT_SAVE_GUID". Keeping this inconsistency for backward compatibility.
951
952 2. Include/Protocol/BootScriptSave.h
953 EFI_STATUS
954 EFI_BOOTSERVICE
955 (EFIAPI *EFI_BOOT_SCRIPT_WRITE) (
956 IN EFI_BOOT_SCRIPT_SAVE_PROTOCOL *This,
957 ...
958 );
959
960 The first parameter's type is *NOT* consistent with Framework BootScript specification 0.91, in which it's defined as
961 "struct _EFI_BOOT_SCRIPT_SAVE_PROTOCOL". Keeping this inconsistency for backward compatibility.
962
963 3. Include/Framework/BootScript.h
964 #define EFI_BOOT_SCRIPT_MEM_POLL_OPCODE 0x09
965 #define EFI_BOOT_SCRIPT_INFORMATION_OPCODE 0x0A
966 #define EFI_BOOT_SCRIPT_PCI_CONFIG2_WRITE_OPCODE 0x0B
967 #define EFI_BOOT_SCRIPT_PCI_CONFIG2_READ_WRITE_OPCODE 0x0C
968 #define EFI_BOOT_SCRIPT_DISPATCH_2_OPCODE 0x0D
969
970 The OPCODEs above are not defined in Framework BootScript Specification 0.91, but adopted by PI 1.0 Spec. And they
971 are needed for EdkII implementation.
972
973 4. Include/Framework/BootScript.h
974 #define EFI_BOOT_SCRIPT_TABLE_OPCODE 0xAA
975 #define EFI_BOOT_SCRIPT_TERMINATE_OPCODE 0xFF
976
977 The two OPCODEs are *NOT* defined in Framework BootScript specification 0.91. EdkII introduces them to indicate the start
978 or end of the boot script table.
979 Keeping this inconsistency for backward compatibility.
980
981 5. Include/Protocol/BootScriptSave.h
982 typedef
983 EFI_STATUS
984 (EFIAPI *EFI_BOOT_SCRIPT_CLOSE_TABLE) (
985 IN EFI_BOOT_SCRIPT_SAVE_PROTOCOL *This,
986 ...
987 );
988
989 The first parameter's type is *NOT* consistent with BootScript specification, in which it's defined as
990 "struct _EFI_BOOT_SCRIPT_SAVE_PROTOCOL". Keeping this inconsistency for backward compatibility.
991
992 6. Include/Include/BootScriptExecuter.h
993 typedef
994 EFI_STATUS
995 (EFIAPI *EFI_PEI_BOOT_SCRIPT_EXECUTE)(
996 IN EFI_PEI_SERVICES **PeiServices,
997 IN EFI_PEI_BOOT_SCRIPT_EXECUTER_PPI *This,
998 ...
999 );
1000
1001 The second parameter's type is *NOT* consistent with BootScript specification, in which it's defined as
1002 "struct _EFI_PEI_BOOT_SCRIPT_EXECUTER_PPI". Keeping this inconsistency for backward compatibility.
1003
1004 ##
1005 # Mismatch with Intel Platform Innovation Framework for EFI DXE CIS (Version 0.91)
1006 ##
1007 1. Include/Framework/DxeCis.h
1008 EFI_STATUS_CODE_ARCH_PROTOCOL is removed.
1009
1010 EdkII doesn't provide EFI_STATUS_CODE_ARCH_PROTOCOL definition due to ReportStatusCode() field has been
1011 removed from EFI Runtime Service Table of PI specification. EFI_STATUS_CODE_ARCH_PROTOCOL is *NOT* required,
1012 and is replaced with EFI_STATUS_CODE_RUNTIME_PROTOCOL.
1013
1014 ##
1015 # Mismatch with Intel Platform Innovation Framework for EFI Firmware Volume Specification (Version 0.9)
1016 ##
1017 1. Include/Framework/FirmwareVolumeImageFormat.h
1018 #define EFI_AGGREGATE_AUTH_STATUS_ALL 0x00000f
1019 #define EFI_LOCAL_AUTH_STATUS_ALL 0x0f0000
1020
1021 The two macros are *NOT* defined in Framework FV specification 0.9. EdkII introduces them as a mask to calculate the
1022 value of authentication status.
1023
1024 ##
1025 # Mismatch with Intel Platform Innovation Framework for EFI Human Interface Infrastructure Specification (Version 0.92)
1026 ##
1027 1. Include/Protocol/FrameworkHii.h
1028 #define EFI_HII_PROTOCOL_GUID \
1029 { \
1030 0xd7ad636e, 0xb997, 0x459b, {0xbf, 0x3f, 0x88, 0x46, 0x89, 0x79, 0x80, 0xe1} \
1031 }
1032
1033 The Framework HII specification 0.92 changed part of HII interfaces but did not update the protocol GUID.
1034 This change should cause a change of GUID in both of code and HII spec. EdkII updates the GUID in code,
1035 but the Framework HII specification 0.92 is not updated. This is a known issue.
1036
1037 2. Include/Protocol/FrameworkHii.h
1038 typedef struct {
1039 ...
1040 EFI_HANDLE COBExportHandle;
1041 } EFI_HII_HANDLE_PACK;
1042
1043 The last field "COBExportHandle" of EFI_HII_HANDLE_PACK is *NOT* defined in the Framework HII specification
1044 0.92. Keeping this inconsistency for backward compatibility.
1045
1046 3. Include/Protocol/FrameworkHii.h
1047 typedef struct {
1048 UINTN NumberOfPackages;
1049 EFI_GUID *GuidId;
1050 } EFI_HII_PACKAGES;
1051
1052 The definition is *NOT* consistent with Framework HII specification 0.92, in which a field "HandlePack" is defined.
1053 EdkII changes the EFI_HII_PACKAGES to contain various number of packages of different types just after the structure
1054 as inline data, which will bring the flexibility on development.
1055
1056 4. Include/Protocol/FrameworkHii.h
1057 struct _EFI_HII_PROTOCOL {
1058 ...
1059 EFI_HII_RESET_STRINGS ResetStrings;
1060 ...
1061 };
1062
1063 The field listed above is *NOT* defined in Framework HII specification 0.92. EdkII adds this field to provide
1064 an ability of removing any new strings that were added after the initial string export for this handle.
1065
1066 5. Include/Protocol/FrameworkHii.h
1067 typedef
1068 EFI_STATUS
1069 (EFIAPI *EFI_HII_GLYPH_TO_BLT)(
1070 ...
1071 IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL Foreground,
1072 IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL Background,
1073 ...
1074 IN OUT EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer
1075 );
1076
1077 The type of the parameters listed above are *NOT* consistent with Framework HII specification 0.92, in which
1078 the type of these parameters is EFI_UGA_PIXEL. Here the definition uses the EFI_GRAPHICS_OUTPUT_BLT_PIXEL which
1079 defined in UEFI2.1 spec. Keeping this inconsistency for backward compatibility.
1080
1081 6. Include/Protocol/FrameworkHii.h
1082 typedef struct {
1083 FRAMEWORK_EFI_IFR_OP_HEADER Header;
1084 UINT8 Flags;
1085 } EFI_IFR_SUPPRESS;
1086
1087 typedef struct {
1088 FRAMEWORK_EFI_IFR_OP_HEADER Header;
1089 UINT8 Flags;
1090 } EFI_IFR_GRAY_OUT;
1091
1092 typedef struct {
1093 FRAMEWORK_EFI_IFR_OP_HEADER Header;
1094 STRING_REF Popup;
1095 UINT8 Flags;
1096 } EFI_IFR_INCONSISTENT;
1097
1098 typedef struct {
1099 FRAMEWORK_EFI_IFR_OP_HEADER Header;
1100 UINT16 QuestionId;
1101 UINT8 Width;
1102 UINT16 Value;
1103 } FRAMEWORK_EFI_IFR_EQ_ID_VAL;
1104
1105 typedef struct {
1106 FRAMEWORK_EFI_IFR_OP_HEADER Header;
1107 UINT16 QuestionId;
1108 UINT8 Width;
1109 UINT16 ListLength;
1110 UINT16 ValueList[1];
1111 } FRAMEWORK_EFI_IFR_EQ_ID_LIST;
1112
1113 typedef struct {
1114 FRAMEWORK_EFI_IFR_OP_HEADER Header;
1115 UINT16 QuestionId1;
1116 UINT8 Width;
1117 UINT16 QuestionId2;
1118 } FRAMEWORK_EFI_IFR_EQ_ID_ID;
1119
1120 typedef struct {
1121 FRAMEWORK_EFI_IFR_OP_HEADER Header;
1122 UINT16 VariableId;
1123 UINT16 Value;
1124 } EFI_IFR_EQ_VAR_VAL;
1125
1126 The defintions are not complied with Framework HII spec 0.92. Keeping the inconsistent for implementation needed.
1127
1128 7. Include/Protocol/FrameworkFormCallback.h
1129 #define RESET_REQUIRED 1
1130 #define EXIT_REQUIRED 2
1131 #define SAVE_REQUIRED 4
1132 #define NV_CHANGED 8
1133 #define NV_NOT_CHANGED 16
1134
1135 These macros are *NOT* defined in the Framework HII specification 0.92. These Flags are introduced to describe
1136 the standard behavior of the browser after the callback.
1137 Keeping this inconsistency for backward compatibility.
1138
1139 8. Include/Protocol/FrameworkFormCallback.h
1140 typedef
1141 EFI_STATUS
1142 (EFIAPI *EFI_NV_WRITE)(
1143 ...
1144 IN UINT32 Attributes,
1145 ...
1146 );
1147
1148 The definition is *NOT* consistent with Framework HII specification 0.92, in which the type of Attributes
1149 parameter is defined as "UINT32 *". EdkII changes the type of Attributes from UINT32 * to UINT32 because
1150 the input paramter is not necessary to use pointer date type.
1151
1152 ##
1153 # Mismatch with Intel Platform Innovation Framework for PEI CIS Specification (Version 0.91)
1154 ##
1155 1. Include/Ppi/ReadOnlyVariable.h
1156 #define EFI_VARIABLE_READ_ONLY 0x00000008
1157
1158 In Framework PeiCis specification 0.91, neither the macro or its value is defined.
1159 Keeping this inconsistency for backward compatibility.
1160
1161 2. Include/Ppi/FindFv.h
1162 typedef
1163 EFI_STATUS
1164 (EFIAPI *EFI_PEI_FIND_FV_FINDFV)(
1165 IN EFI_PEI_FIND_FV_PPI *This,
1166 IN EFI_PEI_SERVICES **PeiServices,
1167 IN UINT8 *FvNumber,
1168 IN OUT EFI_FIRMWARE_VOLUME_HEADER **FVAddress
1169 );
1170
1171 The definition is *NOT* consistent with Framework PeiCis specification 0.91. Compared with spec, the order
1172 of the first and second parameters is reversed. Keeping this inconsistency for backward compatibility.
1173
1174 ##
1175 # Mismatch with Intel Platform Innovation Framework for EFI SMM CIS (Version 0.91)
1176 ##
1177 1. Include/Guid/SmramMemoryReserve.h
1178 typedef struct {
1179 UINT32 NumberOfSmmReservedRegions;
1180 ...
1181 } EFI_SMRAM_HOB_DESCRIPTOR_BLOCK;
1182
1183 1) The name of the definition is *NOT* consistent with Framework SmmCis specification 0.91, in which it's
1184 defined as "EFI_HOB_SMRAM_DESCRIPTOR_BLOCK" rather than "EFI_SMRAM_HOB_DESCRIPTOR_BLOCK".
1185 Keeping this inconsistency for backward compatibility.
1186
1187 2) The definition of NumberOfSmmReservedRegions is *NOT* consistent with Framework SmmCis specification 0.91,
1188 in which the type of this field is defined as UINTN. However, HOBs are supposed to be CPU neutral, so UINTN
1189 is incorrect and UINT32 should be used.
1190
1191 2. Include/Guid/SmramMemoryReserve.h
1192 typedef enum {
1193 ...
1194 IchnIoTrap3,
1195 IchnIoTrap2,
1196 IchnIoTrap1,
1197 IchnIoTrap0,
1198 IchnPciExpress,
1199 IchnMonitor,
1200 IchnSpi,
1201 IchnQRT,
1202 IchnGpioUnlock,
1203 ...
1204 } EFI_SMM_ICHN_SMI_TYPE;
1205
1206 The enumeration fields listed above are *NOT* defined in Framework SmmCis specification 0.91. EdkII introduces
1207 these fields to support new SMI types.
1208
1209 3. Include/Framework/SmmCis.h
1210 typedef union {
1211 ///
1212 /// The processor save-state information for IA-32 processors.
1213 ///
1214 EFI_SMI_CPU_SAVE_STATE Ia32SaveState;
1215 ///
1216 /// Note: Inconsistency with the Framework SMM CIS spec - Itanium save state not included.
1217 ///
1218 /// The processor save-state information for Itanium processors.
1219 ///
1220 /// EFI_PMI_SYSTEM_CONTEXT ItaniumSaveState;
1221 } EFI_SMM_CPU_SAVE_STATE;
1222
1223 ##
1224 # Mismatch with Intel Platform Innovation Framework for EFI S3 Resume Boot Path Specification (Version 0.9)
1225 ##
1226 1. Include/Protocol/AcpiS3Save.h
1227 typedef
1228 EFI_STATUS
1229 EFI_BOOTSERVICE
1230 (EFIAPI *EFI_ACPI_GET_LEGACY_MEMORY_SIZE) (
1231 IN EFI_ACPI_S3_SAVE_PROTOCOL *This,
1232 OUT UINTN *Size
1233 );
1234
1235 The first parameter's type is *NOT* consistent with Framework S3Resume specification, in which it's defined as
1236 "struct _EFI_ACPI_S3_SAVE_PROTOCOL". Keeping this inconsistency for backward compatibility.
1237
1238 2. Include/Protocol/AcpiS3Save.h
1239 typedef
1240 EFI_STATUS
1241 (EFIAPI *EFI_ACPI_S3_SAVE) (
1242 IN EFI_ACPI_S3_SAVE_PROTOCOL *This,
1243 IN VOID *LegacyMemoryAddress
1244 );
1245
1246 The first parameter's type is *NOT* consistent with Framework S3Resume specification, in which it's defined as
1247 "struct _EFI_ACPI_S3_SAVE_PROTOCOL". Also the EFI_BOOTSERVICE modifier is removed from the function declaration.
1248
1249 3. Include/Protocol/AcpiS3Save.h
1250 typedef
1251 EFI_STATUS
1252 (EFIAPI *EFI_ACPI_GET_LEGACY_MEMORY_SIZE)(
1253 IN EFI_ACPI_S3_SAVE_PROTOCOL *This,
1254 OUT UINTN *Size
1255 );
1256
1257 The first parameter's type is *NOT* consistent with Framework S3Resume specification, in which it's defined as
1258 "struct _EFI_ACPI_S3_SAVE_PROTOCOL". Also the EFI_BOOTSERVICE modifier is removed from the function declaration.
1259
1260 ##
1261 # Mismatch with Intel Platform Innovation Framework for EFI ACPI Specification (Version 0.91)
1262 ##
1263 1. Include/Protocol/AcpiSupport.h
1264 typedef
1265 EFI_STATUS
1266 (EFIAPI *EFI_ACPI_GET_ACPI_TABLE)(
1267 ...
1268 );
1269
1270 The function modifier is *NOT* consistent with Framework Acpi specification. The EFI_BOOTSERVICE modifier
1271 is removed from the function declaration.
1272
1273 2. Include/Protocol/AcpiSupport.h
1274 typedef
1275 EFI_STATUS
1276 (EFIAPI *EFI_ACPI_SET_ACPI_TABLE)(
1277 ...
1278 );
1279
1280 The function modifier is *NOT* consistent with Framework Acpi specification. The EFI_BOOTSERVICE modifier
1281 is removed from the function declaration.
1282
1283 3. Include/Protocol/AcpiSupport.h
1284 typedef
1285 EFI_STATUS
1286 (EFIAPI *EFI_ACPI_PUBLISH_TABLES)(
1287 ...
1288 );
1289
1290 The function modifier is *NOT* consistent with Framework Acpi specification. The EFI_BOOTSERVICE modifier
1291 is removed from the function declaration.