]> git.proxmox.com Git - mirror_edk2.git/blob - EdkCompatibilityPkg/Foundation/Framework/Guid/DataHubRecords/DataHubSubClassMemory.h
Sync all bug fixes between EDK1.04 and EDK1.06 into EdkCompatibilityPkg.
[mirror_edk2.git] / EdkCompatibilityPkg / Foundation / Framework / Guid / DataHubRecords / DataHubSubClassMemory.h
1 /*++
2
3 Copyright (c) 2004 - 2010, Intel Corporation. All rights reserved.<BR>
4 This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution. The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
8
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
11
12 Module Name:
13
14 DataHubSubClassMemory.h
15
16 Abstract:
17
18 Definitions for memory sub class data records
19
20 Revision History
21
22 --*/
23
24 #ifndef _DATAHUB_SUBCLASS_MEMORY_H_
25 #define _DATAHUB_SUBCLASS_MEMORY_H_
26
27 #include EFI_GUID_DEFINITION (DataHubRecords)
28
29
30 #define EFI_MEMORY_SUBCLASS_GUID \
31 {0x4E8F4EBB, 0x64B9, 0x4e05, {0x9B, 0x18, 0x4C, 0xFE, 0x49, 0x23, 0x50, 0x97}}
32
33 #define EFI_MEMORY_SUBCLASS_VERSION 0x0100
34
35
36 #define EFI_MEMORY_SIZE_RECORD_NUMBER 0x00000001
37
38 typedef enum _EFI_MEMORY_REGION_TYPE {
39 EfiMemoryRegionMemory = 0x01,
40 EfiMemoryRegionReserved = 0x02,
41 EfiMemoryRegionAcpi = 0x03,
42 EfiMemoryRegionNvs = 0x04
43 } EFI_MEMORY_REGION_TYPE;
44
45 typedef struct {
46 UINT32 ProcessorNumber;
47 UINT16 StartBusNumber;
48 UINT16 EndBusNumber;
49 EFI_MEMORY_REGION_TYPE MemoryRegionType;
50 EFI_EXP_BASE2_DATA MemorySize;
51 EFI_PHYSICAL_ADDRESS MemoryStartAddress;
52 } EFI_MEMORY_SIZE_DATA;
53
54
55 #define EFI_MEMORY_ARRAY_LOCATION_RECORD_NUMBER 0x00000002
56
57 typedef enum _EFI_MEMORY_ARRAY_LOCATION {
58 EfiMemoryArrayLocationOther = 0x01,
59 EfiMemoryArrayLocationUnknown = 0x02,
60 EfiMemoryArrayLocationSystemBoard = 0x03,
61 EfiMemoryArrayLocationIsaAddonCard = 0x04,
62 EfiMemoryArrayLocationEisaAddonCard = 0x05,
63 EfiMemoryArrayLocationPciAddonCard = 0x06,
64 EfiMemoryArrayLocationMcaAddonCard = 0x07,
65 EfiMemoryArrayLocationPcmciaAddonCard = 0x08,
66 EfiMemoryArrayLocationProprietaryAddonCard = 0x09,
67 EfiMemoryArrayLocationNuBus = 0x0A,
68 EfiMemoryArrayLocationPc98C20AddonCard = 0xA0,
69 EfiMemoryArrayLocationPc98C24AddonCard = 0xA1,
70 EfiMemoryArrayLocationPc98EAddonCard = 0xA2,
71 EfiMemoryArrayLocationPc98LocalBusAddonCard = 0xA3
72 } EFI_MEMORY_ARRAY_LOCATION;
73
74 typedef enum _EFI_MEMORY_ARRAY_USE {
75 EfiMemoryArrayUseOther = 0x01,
76 EfiMemoryArrayUseUnknown = 0x02,
77 EfiMemoryArrayUseSystemMemory = 0x03,
78 EfiMemoryArrayUseVideoMemory = 0x04,
79 EfiMemoryArrayUseFlashMemory = 0x05,
80 EfiMemoryArrayUseNonVolatileRam = 0x06,
81 EfiMemoryArrayUseCacheMemory = 0x07
82 } EFI_MEMORY_ARRAY_USE;
83
84 typedef enum _EFI_MEMORY_ERROR_CORRECTION {
85 EfiMemoryErrorCorrectionOther = 0x01,
86 EfiMemoryErrorCorrectionUnknown = 0x02,
87 EfiMemoryErrorCorrectionNone = 0x03,
88 EfiMemoryErrorCorrectionParity = 0x04,
89 EfiMemoryErrorCorrectionSingleBitEcc = 0x05,
90 EfiMemoryErrorCorrectionMultiBitEcc = 0x06,
91 EfiMemoryErrorCorrectionCrc = 0x07
92 } EFI_MEMORY_ERROR_CORRECTION;
93
94 typedef struct {
95 EFI_MEMORY_ARRAY_LOCATION MemoryArrayLocation;
96 EFI_MEMORY_ARRAY_USE MemoryArrayUse;
97 EFI_MEMORY_ERROR_CORRECTION MemoryErrorCorrection;
98 UINT32 MaximumMemoryCapacity;
99 UINT16 NumberMemoryDevices;
100 } EFI_MEMORY_ARRAY_LOCATION_DATA;
101
102
103 #define EFI_MEMORY_ARRAY_LINK_RECORD_NUMBER 0x00000003
104
105 typedef enum _EFI_MEMORY_FORM_FACTOR {
106 EfiMemoryFormFactorOther = 0x01,
107 EfiMemoryFormFactorUnknown = 0x02,
108 EfiMemoryFormFactorSimm = 0x03,
109 EfiMemoryFormFactorSip = 0x04,
110 EfiMemoryFormFactorChip = 0x05,
111 EfiMemoryFormFactorDip = 0x06,
112 EfiMemoryFormFactorZip = 0x07,
113 EfiMemoryFormFactorProprietaryCard = 0x08,
114 EfiMemoryFormFactorDimm = 0x09,
115 EfiMemoryFormFactorTsop = 0x0A,
116 EfiMemoryFormFactorRowOfChips = 0x0B,
117 EfiMemoryFormFactorRimm = 0x0C,
118 EfiMemoryFormFactorSodimm = 0x0D,
119 EfiMemoryFormFactorSrimm = 0x0E,
120 EfiMemoryFormFactorFbDimm = 0x0F
121 } EFI_MEMORY_FORM_FACTOR;
122
123 typedef enum _EFI_MEMORY_ARRAY_TYPE {
124 EfiMemoryTypeOther = 0x01,
125 EfiMemoryTypeUnknown = 0x02,
126 EfiMemoryTypeDram = 0x03,
127 EfiMemoryTypeEdram = 0x04,
128 EfiMemoryTypeVram = 0x05,
129 EfiMemoryTypeSram = 0x06,
130 EfiMemoryTypeRam = 0x07,
131 EfiMemoryTypeRom = 0x08,
132 EfiMemoryTypeFlash = 0x09,
133 EfiMemoryTypeEeprom = 0x0A,
134 EfiMemoryTypeFeprom = 0x0B,
135 EfiMemoryTypeEprom = 0x0C,
136 EfiMemoryTypeCdram = 0x0D,
137 EfiMemoryType3Dram = 0x0E,
138 EfiMemoryTypeSdram = 0x0F,
139 EfiMemoryTypeSgram = 0x10,
140 EfiMemoryTypeRdram = 0x11,
141 EfiMemoryTypeDdr = 0x12,
142 EfiMemoryTypeDdr2 = 0x13,
143 EfiMemoryTypeDdr2FbDimm = 0x14,
144 EfiMemoryTypeDdr3 = 0x18,
145 EfiMemoryTypeFbd2 = 0x19
146 } EFI_MEMORY_ARRAY_TYPE;
147
148 typedef struct {
149 UINT32 Reserved :1;
150 UINT32 Other :1;
151 UINT32 Unknown :1;
152 UINT32 FastPaged :1;
153 UINT32 StaticColumn :1;
154 UINT32 PseudoStatic :1;
155 UINT32 Rambus :1;
156 UINT32 Synchronous :1;
157 UINT32 Cmos :1;
158 UINT32 Edo :1;
159 UINT32 WindowDram :1;
160 UINT32 CacheDram :1;
161 UINT32 Nonvolatile :1;
162 UINT32 Reserved1 :19;
163 } EFI_MEMORY_TYPE_DETAIL;
164
165 typedef enum {
166 EfiMemoryStateEnabled =0,
167 EfiMemoryStateUnknown,
168 EfiMemoryStateUnsupported,
169 EfiMemoryStateError,
170 EfiMemoryStateAbsent,
171 EfiMemoryStateDisabled,
172 EfiMemoryStatePartial
173 } EFI_MEMORY_STATE;
174
175 typedef struct {
176 EFI_STRING_TOKEN MemoryDeviceLocator;
177 EFI_STRING_TOKEN MemoryBankLocator;
178 EFI_STRING_TOKEN MemoryManufacturer;
179 EFI_STRING_TOKEN MemorySerialNumber;
180 EFI_STRING_TOKEN MemoryAssetTag;
181 EFI_STRING_TOKEN MemoryPartNumber;
182 EFI_INTER_LINK_DATA MemoryArrayLink;
183 EFI_INTER_LINK_DATA MemorySubArrayLink;
184 UINT16 MemoryTotalWidth;
185 UINT16 MemoryDataWidth;
186 UINT64 MemoryDeviceSize;
187 EFI_MEMORY_FORM_FACTOR MemoryFormFactor;
188 UINT8 MemoryDeviceSet;
189 EFI_MEMORY_ARRAY_TYPE MemoryType;
190 EFI_MEMORY_TYPE_DETAIL MemoryTypeDetail;
191 UINT16 MemorySpeed;
192 EFI_MEMORY_STATE MemoryState;
193 UINT8 MemoryAttributes;
194 UINT8 MemoryBankConnections;
195 UINT8 MemoryErrorStatus;
196 } EFI_MEMORY_ARRAY_LINK;
197
198
199 #define EFI_MEMORY_ARRAY_START_ADDRESS_RECORD_NUMBER 0x00000004
200
201 typedef struct {
202 EFI_PHYSICAL_ADDRESS MemoryArrayStartAddress;
203 EFI_PHYSICAL_ADDRESS MemoryArrayEndAddress;
204 EFI_INTER_LINK_DATA PhysicalMemoryArrayLink;
205 UINT16 MemoryArrayPartitionWidth;
206 } EFI_MEMORY_ARRAY_START_ADDRESS;
207
208
209 #define EFI_MEMORY_DEVICE_START_ADDRESS_RECORD_NUMBER 0x00000005
210
211 typedef struct {
212 EFI_PHYSICAL_ADDRESS MemoryDeviceStartAddress;
213 EFI_PHYSICAL_ADDRESS MemoryDeviceEndAddress;
214 EFI_INTER_LINK_DATA PhysicalMemoryDeviceLink;
215 EFI_INTER_LINK_DATA PhysicalMemoryArrayLink;
216 UINT8 MemoryDevicePartitionRowPosition;
217 UINT8 MemoryDeviceInterleavePosition;
218 UINT8 MemoryDeviceInterleaveDataDepth;
219 } EFI_MEMORY_DEVICE_START_ADDRESS;
220
221
222 //
223 // Memory. Channel Device Type - SMBIOS Type 37
224 //
225
226 #define EFI_MEMORY_CHANNEL_TYPE_RECORD_NUMBER 0x00000006
227
228 typedef enum _EFI_MEMORY_CHANNEL_TYPE {
229 EfiMemoryChannelTypeOther = 1,
230 EfiMemoryChannelTypeUnknown = 2,
231 EfiMemoryChannelTypeRambus = 3,
232 EfiMemoryChannelTypeSyncLink = 4
233 } EFI_MEMORY_CHANNEL_TYPE;
234
235 typedef struct {
236 EFI_MEMORY_CHANNEL_TYPE MemoryChannelType;
237 UINT8 MemoryChannelMaximumLoad;
238 UINT8 MemoryChannelDeviceCount;
239 } EFI_MEMORY_CHANNEL_TYPE_DATA;
240
241 #define EFI_MEMORY_CHANNEL_DEVICE_RECORD_NUMBER 0x00000007
242
243 typedef struct {
244 UINT8 DeviceId;
245 EFI_INTER_LINK_DATA DeviceLink;
246 UINT8 MemoryChannelDeviceLoad;
247 } EFI_MEMORY_CHANNEL_DEVICE_DATA;
248
249 //
250 // Memory. Controller Information - SMBIOS Type 5
251 //
252 #define EFI_MEMORY_CONTROLLER_INFORMATION_RECORD_NUMBER 0x00000008
253
254 typedef enum {
255 EfiErrorDetectingMethodOther = 1,
256 EfiErrorDetectingMethodUnknown = 2,
257 EfiErrorDetectingMethodNone = 3,
258 EfiErrorDetectingMethodParity = 4,
259 EfiErrorDetectingMethod32Ecc = 5,
260 EfiErrorDetectingMethod64Ecc = 6,
261 EfiErrorDetectingMethod128Ecc = 7,
262 EfiErrorDetectingMethodCrc = 8
263 } EFI_MEMORY_ERROR_DETECT_METHOD_TYPE;
264
265 typedef struct {
266 UINT8 Other :1;
267 UINT8 Unknown :1;
268 UINT8 None :1;
269 UINT8 SingleBitErrorCorrect :1;
270 UINT8 DoubleBitErrorCorrect :1;
271 UINT8 ErrorScrubbing :1;
272 UINT8 Reserved :2;
273 } EFI_MEMORY_ERROR_CORRECT_CAPABILITY;
274
275 typedef enum {
276 EfiMemoryInterleaveOther = 1,
277 EfiMemoryInterleaveUnknown = 2,
278 EfiMemoryInterleaveOneWay = 3,
279 EfiMemoryInterleaveTwoWay = 4,
280 EfiMemoryInterleaveFourWay = 5,
281 EfiMemoryInterleaveEightWay = 6,
282 EfiMemoryInterleaveSixteenWay = 7
283 } EFI_MEMORY_SUPPORT_INTERLEAVE_TYPE;
284
285 typedef struct {
286 UINT16 Other :1;
287 UINT16 Unknown :1;
288 UINT16 SeventyNs :1;
289 UINT16 SixtyNs :1;
290 UINT16 FiftyNs :1;
291 UINT16 Reserved :11;
292 } EFI_MEMORY_SPEED_TYPE;
293
294 typedef struct {
295 UINT16 Other :1;
296 UINT16 Unknown :1;
297 UINT16 Standard :1;
298 UINT16 FastPageMode :1;
299 UINT16 EDO :1;
300 UINT16 Parity :1;
301 UINT16 ECC :1;
302 UINT16 SIMM :1;
303 UINT16 DIMM :1;
304 UINT16 BurstEdo :1;
305 UINT16 SDRAM :1;
306 UINT16 Reserved :5;
307 } EFI_MEMORY_SUPPORTED_TYPE;
308
309 typedef struct {
310 UINT8 Five :1;
311 UINT8 Three :1;
312 UINT8 Two :1;
313 UINT8 Reserved :5;
314 } EFI_MEMORY_MODULE_VOLTAGE_TYPE;
315
316 //
317 // EFI_MEMORY_CONTROLLER_INFORMATION is obsolete
318 // Use EFI_MEMORY_CONTROLLER_INFORMATION_DATA instead
319 //
320 typedef struct {
321 EFI_MEMORY_ERROR_DETECT_METHOD_TYPE ErrorDetectingMethod;
322 EFI_MEMORY_ERROR_CORRECT_CAPABILITY ErrorCorrectingCapability;
323 EFI_MEMORY_SUPPORT_INTERLEAVE_TYPE MemorySupportedInterleave;
324 EFI_MEMORY_SUPPORT_INTERLEAVE_TYPE MemoryCurrentInterleave;
325 UINT8 MaxMemoryModuleSize;
326 EFI_MEMORY_SPEED_TYPE MemorySpeedType;
327 EFI_MEMORY_SUPPORTED_TYPE MemorySupportedType;
328 EFI_MEMORY_MODULE_VOLTAGE_TYPE MemoryModuleVoltage;
329 UINT8 NumberofMemorySlot;
330 EFI_MEMORY_ERROR_CORRECT_CAPABILITY EnabledCorrectingCapability;
331 UINT16 *MemoryModuleConfigHandles;
332 } EFI_MEMORY_CONTROLLER_INFORMATION;
333
334 typedef struct {
335 EFI_MEMORY_ERROR_DETECT_METHOD_TYPE ErrorDetectingMethod;
336 EFI_MEMORY_ERROR_CORRECT_CAPABILITY ErrorCorrectingCapability;
337 EFI_MEMORY_SUPPORT_INTERLEAVE_TYPE MemorySupportedInterleave;
338 EFI_MEMORY_SUPPORT_INTERLEAVE_TYPE MemoryCurrentInterleave;
339 UINT8 MaxMemoryModuleSize;
340 EFI_MEMORY_SPEED_TYPE MemorySpeedType;
341 EFI_MEMORY_SUPPORTED_TYPE MemorySupportedType;
342 EFI_MEMORY_MODULE_VOLTAGE_TYPE MemoryModuleVoltage;
343 UINT8 NumberofMemorySlot;
344 EFI_MEMORY_ERROR_CORRECT_CAPABILITY EnabledCorrectingCapability;
345 EFI_INTER_LINK_DATA MemoryModuleConfig[1];
346 } EFI_MEMORY_CONTROLLER_INFORMATION_DATA;
347
348 //
349 // Memory. Error Information - SMBIOS Type 18
350 //
351 #define EFI_MEMORY_32BIT_ERROR_INFORMATION_RECORD_NUMBER 0x00000009
352
353 typedef enum {
354 EfiMemoryErrorOther = 1,
355 EfiMemoryErrorUnknown = 2,
356 EfiMemoryErrorOk = 3,
357 EfiMemoryErrorBadRead = 4,
358 EfiMemoryErrorParity = 5,
359 EfiMemoryErrorSigleBit = 6,
360 EfiMemoryErrorDoubleBit = 7,
361 EfiMemoryErrorMultiBit = 8,
362 EfiMemoryErrorNibble = 9,
363 EfiMemoryErrorChecksum = 10,
364 EfiMemoryErrorCrc = 11,
365 EfiMemoryErrorCorrectSingleBit = 12,
366 EfiMemoryErrorCorrected = 13,
367 EfiMemoryErrorUnCorrectable = 14
368 } EFI_MEMORY_ERROR_TYPE;
369
370 typedef enum {
371 EfiMemoryGranularityOther = 1,
372 EfiMemoryGranularityOtherUnknown = 2,
373 EfiMemoryGranularityDeviceLevel = 3,
374 EfiMemoryGranularityMemPartitionLevel = 4
375 } EFI_MEMORY_ERROR_GRANULARITY_TYPE;
376
377 typedef enum {
378 EfiMemoryErrorOperationOther = 1,
379 EfiMemoryErrorOperationUnknown = 2,
380 EfiMemoryErrorOperationRead = 3,
381 EfiMemoryErrorOperationWrite = 4,
382 EfiMemoryErrorOperationPartialWrite = 5
383 } EFI_MEMORY_ERROR_OPERATION_TYPE;
384
385 typedef struct {
386 EFI_MEMORY_ERROR_TYPE MemoryErrorType;
387 EFI_MEMORY_ERROR_GRANULARITY_TYPE MemoryErrorGranularity;
388 EFI_MEMORY_ERROR_OPERATION_TYPE MemoryErrorOperation;
389 UINT32 VendorSyndrome;
390 UINT32 MemoryArrayErrorAddress;
391 UINT32 DeviceErrorAddress;
392 UINT32 DeviceErrorResolution;
393 } EFI_MEMORY_32BIT_ERROR_INFORMATION;
394
395 //
396 // Memory. Error Information - SMBIOS Type 33
397 //
398 #define EFI_MEMORY_64BIT_ERROR_INFORMATION_RECORD_NUMBER 0x0000000A
399
400 typedef struct {
401 EFI_MEMORY_ERROR_TYPE MemoryErrorType;
402 EFI_MEMORY_ERROR_GRANULARITY_TYPE MemoryErrorGranularity;
403 EFI_MEMORY_ERROR_OPERATION_TYPE MemoryErrorOperation;
404 UINT32 VendorSyndrome;
405 UINT64 MemoryArrayErrorAddress;
406 UINT64 DeviceErrorAddress;
407 UINT32 DeviceErrorResolution;
408 } EFI_MEMORY_64BIT_ERROR_INFORMATION;
409
410
411 typedef union _EFI_MEMORY_SUBCLASS_RECORDS {
412 EFI_MEMORY_SIZE_DATA SizeData;
413 EFI_MEMORY_ARRAY_LOCATION_DATA ArrayLocationData;
414 EFI_MEMORY_ARRAY_LINK ArrayLink;
415 EFI_MEMORY_ARRAY_START_ADDRESS ArrayStartAddress;
416 EFI_MEMORY_DEVICE_START_ADDRESS DeviceStartAddress;
417 EFI_MEMORY_CHANNEL_TYPE_DATA ChannelTypeData;
418 EFI_MEMORY_CHANNEL_DEVICE_DATA ChannelDeviceData;
419 EFI_MEMORY_CONTROLLER_INFORMATION MemoryControllerInfo;
420 EFI_MEMORY_32BIT_ERROR_INFORMATION Memory32bitErrorInfo;
421 EFI_MEMORY_64BIT_ERROR_INFORMATION Memory64bitErrorInfo;
422 } EFI_MEMORY_SUBCLASS_RECORDS;
423
424 typedef struct {
425 EFI_SUBCLASS_TYPE1_HEADER Header;
426 EFI_MEMORY_SUBCLASS_RECORDS Record;
427 } EFI_MEMORY_SUBCLASS_DRIVER_DATA;
428
429
430
431 #endif