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
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 UINT8 MemoryAttributes
;
192 } EFI_MEMORY_ARRAY_LINK
;
195 #define EFI_MEMORY_ARRAY_START_ADDRESS_RECORD_NUMBER 0x00000004
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
;
205 #define EFI_MEMORY_DEVICE_START_ADDRESS_RECORD_NUMBER 0x00000005
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
;
219 // Memory. Channel Device Type - SMBIOS Type 37
222 #define EFI_MEMORY_CHANNEL_TYPE_RECORD_NUMBER 0x00000006
224 typedef enum _EFI_MEMORY_CHANNEL_TYPE
{
225 EfiMemoryChannelTypeOther
= 1,
226 EfiMemoryChannelTypeUnknown
= 2,
227 EfiMemoryChannelTypeRambus
= 3,
228 EfiMemoryChannelTypeSyncLink
= 4
229 } EFI_MEMORY_CHANNEL_TYPE
;
232 EFI_MEMORY_CHANNEL_TYPE MemoryChannelType
;
233 UINT8 MemoryChannelMaximumLoad
;
234 UINT8 MemoryChannelDeviceCount
;
235 } EFI_MEMORY_CHANNEL_TYPE_DATA
;
237 #define EFI_MEMORY_CHANNEL_DEVICE_RECORD_NUMBER 0x00000007
241 EFI_INTER_LINK_DATA DeviceLink
;
242 UINT8 MemoryChannelDeviceLoad
;
243 } EFI_MEMORY_CHANNEL_DEVICE_DATA
;
246 // Memory. Controller Information - SMBIOS Type 5
248 #define EFI_MEMORY_CONTROLLER_INFORMATION_RECORD_NUMBER 0x00000008
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
;
265 UINT8 SingleBitErrorCorrect
:1;
266 UINT8 DoubleBitErrorCorrect
:1;
267 UINT8 ErrorScrubbing
:1;
269 } EFI_MEMORY_ERROR_CORRECT_CAPABILITY
;
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
;
288 } EFI_MEMORY_SPEED_TYPE
;
294 UINT16 FastPageMode
:1;
303 } EFI_MEMORY_SUPPORTED_TYPE
;
310 } EFI_MEMORY_MODULE_VOLTAGE_TYPE
;
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
;
327 // Memory. Error Information - SMBIOS Type 18
329 #define EFI_MEMORY_32BIT_ERROR_INFORMATION_RECORD_NUMBER 0x00000009
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
;
349 EfiMemoryGranularityOther
= 1,
350 EfiMemoryGranularityOtherUnknown
= 2,
351 EfiMemoryGranularityDeviceLevel
= 3,
352 EfiMemoryGranularityMemPartitionLevel
= 4
353 } EFI_MEMORY_ERROR_GRANULARITY_TYPE
;
356 EfiMemoryErrorOperationOther
= 1,
357 EfiMemoryErrorOperationUnknown
= 2,
358 EfiMemoryErrorOperationRead
= 3,
359 EfiMemoryErrorOperationWrite
= 4,
360 EfiMemoryErrorOperationPartialWrite
= 5
361 } EFI_MEMORY_ERROR_OPERATION_TYPE
;
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
;
374 // Memory. Error Information - SMBIOS Type 33
376 #define EFI_MEMORY_64BIT_ERROR_INFORMATION_RECORD_NUMBER 0x0000000A
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
;
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
;
403 EFI_SUBCLASS_TYPE1_HEADER Header
;
404 EFI_MEMORY_SUBCLASS_RECORDS Record
;
405 } EFI_MEMORY_SUBCLASS_DRIVER_DATA
;