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
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.
14 DataHubSubClassMemory.h
18 Definitions for memory sub class data records
24 #ifndef _DATAHUB_SUBCLASS_MEMORY_H_
25 #define _DATAHUB_SUBCLASS_MEMORY_H_
27 #include EFI_GUID_DEFINITION (DataHubRecords)
30 #define EFI_MEMORY_SUBCLASS_GUID \
31 {0x4E8F4EBB, 0x64B9, 0x4e05, {0x9B, 0x18, 0x4C, 0xFE, 0x49, 0x23, 0x50, 0x97}}
33 #define EFI_MEMORY_SUBCLASS_VERSION 0x0100
36 #define EFI_MEMORY_SIZE_RECORD_NUMBER 0x00000001
38 typedef enum _EFI_MEMORY_REGION_TYPE
{
39 EfiMemoryRegionMemory
= 0x01,
40 EfiMemoryRegionReserved
= 0x02,
41 EfiMemoryRegionAcpi
= 0x03,
42 EfiMemoryRegionNvs
= 0x04
43 } EFI_MEMORY_REGION_TYPE
;
46 UINT32 ProcessorNumber
;
47 UINT16 StartBusNumber
;
49 EFI_MEMORY_REGION_TYPE MemoryRegionType
;
50 EFI_EXP_BASE2_DATA MemorySize
;
51 EFI_PHYSICAL_ADDRESS MemoryStartAddress
;
52 } EFI_MEMORY_SIZE_DATA
;
55 #define EFI_MEMORY_ARRAY_LOCATION_RECORD_NUMBER 0x00000002
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
;
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
;
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
;
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
;
103 #define EFI_MEMORY_ARRAY_LINK_RECORD_NUMBER 0x00000003
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
;
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
;
153 UINT32 StaticColumn
:1;
154 UINT32 PseudoStatic
:1;
156 UINT32 Synchronous
:1;
159 UINT32 WindowDram
:1;
161 UINT32 Nonvolatile
:1;
162 UINT32 Reserved1
:19;
163 } EFI_MEMORY_TYPE_DETAIL
;
166 EfiMemoryStateEnabled
=0,
167 EfiMemoryStateUnknown
,
168 EfiMemoryStateUnsupported
,
170 EfiMemoryStateAbsent
,
171 EfiMemoryStateDisabled
,
172 EfiMemoryStatePartial
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
;
192 EFI_MEMORY_STATE MemoryState
;
193 UINT8 MemoryAttributes
;
194 UINT8 MemoryBankConnections
;
195 UINT8 MemoryErrorStatus
;
196 } EFI_MEMORY_ARRAY_LINK
;
199 #define EFI_MEMORY_ARRAY_START_ADDRESS_RECORD_NUMBER 0x00000004
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
;
209 #define EFI_MEMORY_DEVICE_START_ADDRESS_RECORD_NUMBER 0x00000005
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
;
223 // Memory. Channel Device Type - SMBIOS Type 37
226 #define EFI_MEMORY_CHANNEL_TYPE_RECORD_NUMBER 0x00000006
228 typedef enum _EFI_MEMORY_CHANNEL_TYPE
{
229 EfiMemoryChannelTypeOther
= 1,
230 EfiMemoryChannelTypeUnknown
= 2,
231 EfiMemoryChannelTypeRambus
= 3,
232 EfiMemoryChannelTypeSyncLink
= 4
233 } EFI_MEMORY_CHANNEL_TYPE
;
236 EFI_MEMORY_CHANNEL_TYPE MemoryChannelType
;
237 UINT8 MemoryChannelMaximumLoad
;
238 UINT8 MemoryChannelDeviceCount
;
239 } EFI_MEMORY_CHANNEL_TYPE_DATA
;
241 #define EFI_MEMORY_CHANNEL_DEVICE_RECORD_NUMBER 0x00000007
245 EFI_INTER_LINK_DATA DeviceLink
;
246 UINT8 MemoryChannelDeviceLoad
;
247 } EFI_MEMORY_CHANNEL_DEVICE_DATA
;
250 // Memory. Controller Information - SMBIOS Type 5
252 #define EFI_MEMORY_CONTROLLER_INFORMATION_RECORD_NUMBER 0x00000008
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
;
269 UINT8 SingleBitErrorCorrect
:1;
270 UINT8 DoubleBitErrorCorrect
:1;
271 UINT8 ErrorScrubbing
:1;
273 } EFI_MEMORY_ERROR_CORRECT_CAPABILITY
;
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
;
292 } EFI_MEMORY_SPEED_TYPE
;
298 UINT16 FastPageMode
:1;
307 } EFI_MEMORY_SUPPORTED_TYPE
;
314 } EFI_MEMORY_MODULE_VOLTAGE_TYPE
;
317 // EFI_MEMORY_CONTROLLER_INFORMATION is obsolete
318 // Use EFI_MEMORY_CONTROLLER_INFORMATION_DATA instead
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
;
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
;
349 // Memory. Error Information - SMBIOS Type 18
351 #define EFI_MEMORY_32BIT_ERROR_INFORMATION_RECORD_NUMBER 0x00000009
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
;
371 EfiMemoryGranularityOther
= 1,
372 EfiMemoryGranularityOtherUnknown
= 2,
373 EfiMemoryGranularityDeviceLevel
= 3,
374 EfiMemoryGranularityMemPartitionLevel
= 4
375 } EFI_MEMORY_ERROR_GRANULARITY_TYPE
;
378 EfiMemoryErrorOperationOther
= 1,
379 EfiMemoryErrorOperationUnknown
= 2,
380 EfiMemoryErrorOperationRead
= 3,
381 EfiMemoryErrorOperationWrite
= 4,
382 EfiMemoryErrorOperationPartialWrite
= 5
383 } EFI_MEMORY_ERROR_OPERATION_TYPE
;
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
;
396 // Memory. Error Information - SMBIOS Type 33
398 #define EFI_MEMORY_64BIT_ERROR_INFORMATION_RECORD_NUMBER 0x0000000A
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
;
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
;
425 EFI_SUBCLASS_TYPE1_HEADER Header
;
426 EFI_MEMORY_SUBCLASS_RECORDS Record
;
427 } EFI_MEMORY_SUBCLASS_DRIVER_DATA
;