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