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
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 } EFI_MEMORY_ARRAY_TYPE
;
151 UINT32 StaticColumn
:1;
152 UINT32 PseudoStatic
:1;
154 UINT32 Synchronous
:1;
157 UINT32 WindowDram
:1;
159 UINT32 Nonvolatile
:1;
160 UINT32 Reserved1
:19;
161 } EFI_MEMORY_TYPE_DETAIL
;
164 EfiMemoryStateEnabled
=0,
165 EfiMemoryStateUnknown
,
166 EfiMemoryStateUnsupported
,
168 EfiMemoryStateAbsent
,
169 EfiMemoryStateDisabled
,
170 EfiMemoryStatePartial
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
;
190 EFI_MEMORY_STATE MemoryState
;
191 } EFI_MEMORY_ARRAY_LINK
;
194 #define EFI_MEMORY_ARRAY_START_ADDRESS_RECORD_NUMBER 0x00000004
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
;
204 #define EFI_MEMORY_DEVICE_START_ADDRESS_RECORD_NUMBER 0x00000005
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
;
218 // Memory. Channel Device Type - SMBIOS Type 37
221 #define EFI_MEMORY_CHANNEL_TYPE_RECORD_NUMBER 0x00000006
223 typedef enum _EFI_MEMORY_CHANNEL_TYPE
{
224 EfiMemoryChannelTypeOther
= 1,
225 EfiMemoryChannelTypeUnknown
= 2,
226 EfiMemoryChannelTypeRambus
= 3,
227 EfiMemoryChannelTypeSyncLink
= 4
228 } EFI_MEMORY_CHANNEL_TYPE
;
231 EFI_MEMORY_CHANNEL_TYPE MemoryChannelType
;
232 UINT8 MemoryChannelMaximumLoad
;
233 UINT8 MemoryChannelDeviceCount
;
234 } EFI_MEMORY_CHANNEL_TYPE_DATA
;
236 #define EFI_MEMORY_CHANNEL_DEVICE_RECORD_NUMBER 0x00000007
240 EFI_INTER_LINK_DATA DeviceLink
;
241 UINT8 MemoryChannelDeviceLoad
;
242 } EFI_MEMORY_CHANNEL_DEVICE_DATA
;
245 // Memory. Controller Information - SMBIOS Type 5
247 #define EFI_MEMORY_CONTROLLER_INFORMATION_RECORD_NUMBER 0x00000008
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
;
264 UINT8 SingleBitErrorCorrect
:1;
265 UINT8 DoubleBitErrorCorrect
:1;
266 UINT8 ErrorScrubbing
:1;
268 } EFI_MEMORY_ERROR_CORRECT_CAPABILITY
;
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
;
287 } EFI_MEMORY_SPEED_TYPE
;
293 UINT16 FastPageMode
:1;
302 } EFI_MEMORY_SUPPORTED_TYPE
;
309 } EFI_MEMORY_MODULE_VOLTAGE_TYPE
;
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
;
326 // Memory. Error Information - SMBIOS Type 18
328 #define EFI_MEMORY_32BIT_ERROR_INFORMATION_RECORD_NUMBER 0x00000009
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
;
348 EfiMemoryGranularityOther
= 1,
349 EfiMemoryGranularityOtherUnknown
= 2,
350 EfiMemoryGranularityDeviceLevel
= 3,
351 EfiMemoryGranularityMemPartitionLevel
= 4
352 } EFI_MEMORY_ERROR_GRANULARITY_TYPE
;
355 EfiMemoryErrorOperationOther
= 1,
356 EfiMemoryErrorOperationUnknown
= 2,
357 EfiMemoryErrorOperationRead
= 3,
358 EfiMemoryErrorOperationWrite
= 4,
359 EfiMemoryErrorOperationPartialWrite
= 5
360 } EFI_MEMORY_ERROR_OPERATION_TYPE
;
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
;
373 // Memory. Error Information - SMBIOS Type 33
375 #define EFI_MEMORY_64BIT_ERROR_INFORMATION_RECORD_NUMBER 0x0000000A
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
;
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
;
402 EFI_SUBCLASS_TYPE1_HEADER Header
;
403 EFI_MEMORY_SUBCLASS_RECORDS Record
;
404 } EFI_MEMORY_SUBCLASS_DRIVER_DATA
;