]> git.proxmox.com Git - mirror_edk2.git/blob - EdkCompatibilityPkg/Foundation/Framework/Guid/DataHubRecords/DataHubSubClassMemory.h
a4b83c33d9670f6afee6d15f36b590ed0e485810
[mirror_edk2.git] / EdkCompatibilityPkg / Foundation / Framework / Guid / DataHubRecords / DataHubSubClassMemory.h
1 /*++
2
3 Copyright (c) 2004 - 2007, 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 } EFI_MEMORY_ARRAY_TYPE;
145
146 typedef struct {
147 UINT32 Reserved :1;
148 UINT32 Other :1;
149 UINT32 Unknown :1;
150 UINT32 FastPaged :1;
151 UINT32 StaticColumn :1;
152 UINT32 PseudoStatic :1;
153 UINT32 Rambus :1;
154 UINT32 Synchronous :1;
155 UINT32 Cmos :1;
156 UINT32 Edo :1;
157 UINT32 WindowDram :1;
158 UINT32 CacheDram :1;
159 UINT32 Nonvolatile :1;
160 UINT32 Reserved1 :19;
161 } EFI_MEMORY_TYPE_DETAIL;
162
163 typedef enum {
164 EfiMemoryStateEnabled =0,
165 EfiMemoryStateUnknown,
166 EfiMemoryStateUnsupported,
167 EfiMemoryStateError,
168 EfiMemoryStateAbsent,
169 EfiMemoryStateDisabled,
170 EfiMemoryStatePartial
171 } EFI_MEMORY_STATE;
172
173 typedef struct {
174 EFI_STRING_TOKEN MemoryDeviceLocator;
175 EFI_STRING_TOKEN MemoryBankLocator;
176 EFI_STRING_TOKEN MemoryManufacturer;
177 EFI_STRING_TOKEN MemorySerialNumber;
178 EFI_STRING_TOKEN MemoryAssetTag;
179 EFI_STRING_TOKEN MemoryPartNumber;
180 EFI_INTER_LINK_DATA MemoryArrayLink;
181 EFI_INTER_LINK_DATA MemorySubArrayLink;
182 UINT16 MemoryTotalWidth;
183 UINT16 MemoryDataWidth;
184 UINT64 MemoryDeviceSize;
185 EFI_MEMORY_FORM_FACTOR MemoryFormFactor;
186 UINT8 MemoryDeviceSet;
187 EFI_MEMORY_ARRAY_TYPE MemoryType;
188 EFI_MEMORY_TYPE_DETAIL MemoryTypeDetail;
189 UINT16 MemorySpeed;
190 EFI_MEMORY_STATE MemoryState;
191 UINT8 MemoryAttributes;
192 } EFI_MEMORY_ARRAY_LINK;
193
194
195 #define EFI_MEMORY_ARRAY_START_ADDRESS_RECORD_NUMBER 0x00000004
196
197 typedef struct {
198 EFI_PHYSICAL_ADDRESS MemoryArrayStartAddress;
199 EFI_PHYSICAL_ADDRESS MemoryArrayEndAddress;
200 EFI_INTER_LINK_DATA PhysicalMemoryArrayLink;
201 UINT16 MemoryArrayPartitionWidth;
202 } EFI_MEMORY_ARRAY_START_ADDRESS;
203
204
205 #define EFI_MEMORY_DEVICE_START_ADDRESS_RECORD_NUMBER 0x00000005
206
207 typedef struct {
208 EFI_PHYSICAL_ADDRESS MemoryDeviceStartAddress;
209 EFI_PHYSICAL_ADDRESS MemoryDeviceEndAddress;
210 EFI_INTER_LINK_DATA PhysicalMemoryDeviceLink;
211 EFI_INTER_LINK_DATA PhysicalMemoryArrayLink;
212 UINT8 MemoryDevicePartitionRowPosition;
213 UINT8 MemoryDeviceInterleavePosition;
214 UINT8 MemoryDeviceInterleaveDataDepth;
215 } EFI_MEMORY_DEVICE_START_ADDRESS;
216
217
218 //
219 // Memory. Channel Device Type - SMBIOS Type 37
220 //
221
222 #define EFI_MEMORY_CHANNEL_TYPE_RECORD_NUMBER 0x00000006
223
224 typedef enum _EFI_MEMORY_CHANNEL_TYPE {
225 EfiMemoryChannelTypeOther = 1,
226 EfiMemoryChannelTypeUnknown = 2,
227 EfiMemoryChannelTypeRambus = 3,
228 EfiMemoryChannelTypeSyncLink = 4
229 } EFI_MEMORY_CHANNEL_TYPE;
230
231 typedef struct {
232 EFI_MEMORY_CHANNEL_TYPE MemoryChannelType;
233 UINT8 MemoryChannelMaximumLoad;
234 UINT8 MemoryChannelDeviceCount;
235 } EFI_MEMORY_CHANNEL_TYPE_DATA;
236
237 #define EFI_MEMORY_CHANNEL_DEVICE_RECORD_NUMBER 0x00000007
238
239 typedef struct {
240 UINT8 DeviceId;
241 EFI_INTER_LINK_DATA DeviceLink;
242 UINT8 MemoryChannelDeviceLoad;
243 } EFI_MEMORY_CHANNEL_DEVICE_DATA;
244
245 //
246 // Memory. Controller Information - SMBIOS Type 5
247 //
248 #define EFI_MEMORY_CONTROLLER_INFORMATION_RECORD_NUMBER 0x00000008
249
250 typedef enum {
251 EfiErrorDetectingMethodOther = 1,
252 EfiErrorDetectingMethodUnknown = 2,
253 EfiErrorDetectingMethodNone = 3,
254 EfiErrorDetectingMethodParity = 4,
255 EfiErrorDetectingMethod32Ecc = 5,
256 EfiErrorDetectingMethod64Ecc = 6,
257 EfiErrorDetectingMethod128Ecc = 7,
258 EfiErrorDetectingMethodCrc = 8
259 } EFI_MEMORY_ERROR_DETECT_METHOD_TYPE;
260
261 typedef struct {
262 UINT8 Other :1;
263 UINT8 Unknown :1;
264 UINT8 None :1;
265 UINT8 SingleBitErrorCorrect :1;
266 UINT8 DoubleBitErrorCorrect :1;
267 UINT8 ErrorScrubbing :1;
268 UINT8 Reserved :2;
269 } EFI_MEMORY_ERROR_CORRECT_CAPABILITY;
270
271 typedef enum {
272 EfiMemoryInterleaveOther = 1,
273 EfiMemoryInterleaveUnknown = 2,
274 EfiMemoryInterleaveOneWay = 3,
275 EfiMemoryInterleaveTwoWay = 4,
276 EfiMemoryInterleaveFourWay = 5,
277 EfiMemoryInterleaveEightWay = 6,
278 EfiMemoryInterleaveSixteenWay = 7
279 } EFI_MEMORY_SUPPORT_INTERLEAVE_TYPE;
280
281 typedef struct {
282 UINT16 Other :1;
283 UINT16 Unknown :1;
284 UINT16 SeventyNs :1;
285 UINT16 SixtyNs :1;
286 UINT16 FiftyNs :1;
287 UINT16 Reserved :11;
288 } EFI_MEMORY_SPEED_TYPE;
289
290 typedef struct {
291 UINT16 Other :1;
292 UINT16 Unknown :1;
293 UINT16 Standard :1;
294 UINT16 FastPageMode :1;
295 UINT16 EDO :1;
296 UINT16 Parity :1;
297 UINT16 ECC :1;
298 UINT16 SIMM :1;
299 UINT16 DIMM :1;
300 UINT16 BurstEdo :1;
301 UINT16 SDRAM :1;
302 UINT16 Reserved :5;
303 } EFI_MEMORY_SUPPORTED_TYPE;
304
305 typedef struct {
306 UINT8 Five :1;
307 UINT8 There :1;
308 UINT8 Two :1;
309 UINT8 Reserved :5;
310 } EFI_MEMORY_MODULE_VOLTAGE_TYPE;
311
312 typedef struct {
313 EFI_MEMORY_ERROR_DETECT_METHOD_TYPE ErrorDetectingMethod;
314 EFI_MEMORY_ERROR_CORRECT_CAPABILITY ErrorCorrectingCapability;
315 EFI_MEMORY_SUPPORT_INTERLEAVE_TYPE MemorySupportedInterleave;
316 EFI_MEMORY_SUPPORT_INTERLEAVE_TYPE MemoryCurrentInterleave;
317 UINT8 MaxMemoryModuleSize;
318 EFI_MEMORY_SPEED_TYPE MemorySpeedType;
319 EFI_MEMORY_SUPPORTED_TYPE MemorySupportedType;
320 EFI_MEMORY_MODULE_VOLTAGE_TYPE MemoryModuleVoltage;
321 UINT8 NumberofMemorySlot;
322 EFI_MEMORY_ERROR_CORRECT_CAPABILITY EnabledCorrectingCapability;
323 UINT16 *MemoryModuleConfigHandles;
324 } EFI_MEMORY_CONTROLLER_INFORMATION;
325
326 //
327 // Memory. Error Information - SMBIOS Type 18
328 //
329 #define EFI_MEMORY_32BIT_ERROR_INFORMATION_RECORD_NUMBER 0x00000009
330
331 typedef enum {
332 EfiMemoryErrorOther = 1,
333 EfiMemoryErrorUnknown = 2,
334 EfiMemoryErrorOk = 3,
335 EfiMemoryErrorBadRead = 4,
336 EfiMemoryErrorParity = 5,
337 EfiMemoryErrorSigleBit = 6,
338 EfiMemoryErrorDoubleBit = 7,
339 EfiMemoryErrorMultiBit = 8,
340 EfiMemoryErrorNibble = 9,
341 EfiMemoryErrorChecksum = 10,
342 EfiMemoryErrorCrc = 11,
343 EfiMemoryErrorCorrectSingleBit = 12,
344 EfiMemoryErrorCorrected = 13,
345 EfiMemoryErrorUnCorrectable = 14
346 } EFI_MEMORY_ERROR_TYPE;
347
348 typedef enum {
349 EfiMemoryGranularityOther = 1,
350 EfiMemoryGranularityOtherUnknown = 2,
351 EfiMemoryGranularityDeviceLevel = 3,
352 EfiMemoryGranularityMemPartitionLevel = 4
353 } EFI_MEMORY_ERROR_GRANULARITY_TYPE;
354
355 typedef enum {
356 EfiMemoryErrorOperationOther = 1,
357 EfiMemoryErrorOperationUnknown = 2,
358 EfiMemoryErrorOperationRead = 3,
359 EfiMemoryErrorOperationWrite = 4,
360 EfiMemoryErrorOperationPartialWrite = 5
361 } EFI_MEMORY_ERROR_OPERATION_TYPE;
362
363 typedef struct {
364 EFI_MEMORY_ERROR_TYPE MemoryErrorType;
365 EFI_MEMORY_ERROR_GRANULARITY_TYPE MemoryErrorGranularity;
366 EFI_MEMORY_ERROR_OPERATION_TYPE MemoryErrorOperation;
367 UINT32 VendorSyndrome;
368 UINT32 MemoryArrayErrorAddress;
369 UINT32 DeviceErrorAddress;
370 UINT32 DeviceErrorResolution;
371 } EFI_MEMORY_32BIT_ERROR_INFORMATION;
372
373 //
374 // Memory. Error Information - SMBIOS Type 33
375 //
376 #define EFI_MEMORY_64BIT_ERROR_INFORMATION_RECORD_NUMBER 0x0000000A
377
378 typedef struct {
379 EFI_MEMORY_ERROR_TYPE MemoryErrorType;
380 EFI_MEMORY_ERROR_GRANULARITY_TYPE MemoryErrorGranularity;
381 EFI_MEMORY_ERROR_OPERATION_TYPE MemoryErrorOperation;
382 UINT32 VendorSyndrome;
383 UINT64 MemoryArrayErrorAddress;
384 UINT64 DeviceErrorAddress;
385 UINT32 DeviceErrorResolution;
386 } EFI_MEMORY_64BIT_ERROR_INFORMATION;
387
388
389 typedef union _EFI_MEMORY_SUBCLASS_RECORDS {
390 EFI_MEMORY_SIZE_DATA SizeData;
391 EFI_MEMORY_ARRAY_LOCATION_DATA ArrayLocationData;
392 EFI_MEMORY_ARRAY_LINK ArrayLink;
393 EFI_MEMORY_ARRAY_START_ADDRESS ArrayStartAddress;
394 EFI_MEMORY_DEVICE_START_ADDRESS DeviceStartAddress;
395 EFI_MEMORY_CHANNEL_TYPE_DATA ChannelTypeData;
396 EFI_MEMORY_CHANNEL_DEVICE_DATA ChannelDeviceData;
397 EFI_MEMORY_CONTROLLER_INFORMATION MemoryControllerInfo;
398 EFI_MEMORY_32BIT_ERROR_INFORMATION Memory32bitErrorInfo;
399 EFI_MEMORY_64BIT_ERROR_INFORMATION Memory64bitErrorInfo;
400 } EFI_MEMORY_SUBCLASS_RECORDS;
401
402 typedef struct {
403 EFI_SUBCLASS_TYPE1_HEADER Header;
404 EFI_MEMORY_SUBCLASS_RECORDS Record;
405 } EFI_MEMORY_SUBCLASS_DRIVER_DATA;
406
407
408
409 #endif