Home | History | Annotate | Download | only in DataHubRecords
      1 /*++
      2 
      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
      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   EfiMemoryTypeDdr3                           = 0x18,
    145   EfiMemoryTypeFbd2                           = 0x19
    146 } EFI_MEMORY_ARRAY_TYPE;
    147 
    148 typedef struct {
    149   UINT32                      Reserved        :1;
    150   UINT32                      Other           :1;
    151   UINT32                      Unknown         :1;
    152   UINT32                      FastPaged       :1;
    153   UINT32                      StaticColumn    :1;
    154   UINT32                      PseudoStatic    :1;
    155   UINT32                      Rambus          :1;
    156   UINT32                      Synchronous     :1;
    157   UINT32                      Cmos            :1;
    158   UINT32                      Edo             :1;
    159   UINT32                      WindowDram      :1;
    160   UINT32                      CacheDram       :1;
    161   UINT32                      Nonvolatile     :1;
    162   UINT32                      Reserved1       :19;
    163 } EFI_MEMORY_TYPE_DETAIL;
    164 
    165 typedef enum {
    166   EfiMemoryStateEnabled =0,
    167   EfiMemoryStateUnknown,
    168   EfiMemoryStateUnsupported,
    169   EfiMemoryStateError,
    170   EfiMemoryStateAbsent,
    171   EfiMemoryStateDisabled,
    172   EfiMemoryStatePartial
    173 } EFI_MEMORY_STATE;
    174 
    175 typedef struct {
    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;
    191   UINT16                      MemorySpeed;
    192   EFI_MEMORY_STATE            MemoryState;
    193   UINT8                       MemoryAttributes;
    194   UINT8                       MemoryBankConnections;
    195   UINT8                       MemoryErrorStatus;
    196 } EFI_MEMORY_ARRAY_LINK;
    197 
    198 
    199 #define EFI_MEMORY_ARRAY_START_ADDRESS_RECORD_NUMBER  0x00000004
    200 
    201 typedef struct {
    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;
    207 
    208 
    209 #define EFI_MEMORY_DEVICE_START_ADDRESS_RECORD_NUMBER 0x00000005
    210 
    211 typedef struct {
    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;
    220 
    221 
    222 //
    223 //  Memory. Channel Device Type -  SMBIOS Type 37
    224 //
    225 
    226 #define EFI_MEMORY_CHANNEL_TYPE_RECORD_NUMBER         0x00000006
    227 
    228 typedef enum _EFI_MEMORY_CHANNEL_TYPE {
    229   EfiMemoryChannelTypeOther                   = 1,
    230   EfiMemoryChannelTypeUnknown                 = 2,
    231   EfiMemoryChannelTypeRambus                  = 3,
    232   EfiMemoryChannelTypeSyncLink                = 4
    233 } EFI_MEMORY_CHANNEL_TYPE;
    234 
    235 typedef struct {
    236   EFI_MEMORY_CHANNEL_TYPE     MemoryChannelType;
    237   UINT8                       MemoryChannelMaximumLoad;
    238   UINT8                       MemoryChannelDeviceCount;
    239 } EFI_MEMORY_CHANNEL_TYPE_DATA;
    240 
    241 #define EFI_MEMORY_CHANNEL_DEVICE_RECORD_NUMBER       0x00000007
    242 
    243 typedef struct {
    244   UINT8                       DeviceId;
    245   EFI_INTER_LINK_DATA         DeviceLink;
    246   UINT8                       MemoryChannelDeviceLoad;
    247 } EFI_MEMORY_CHANNEL_DEVICE_DATA;
    248 
    249 //
    250 //  Memory. Controller Information - SMBIOS Type 5
    251 //
    252 #define EFI_MEMORY_CONTROLLER_INFORMATION_RECORD_NUMBER 0x00000008
    253 
    254 typedef enum {
    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;
    264 
    265 typedef struct {
    266   UINT8  Other                 :1;
    267   UINT8  Unknown               :1;
    268   UINT8  None                  :1;
    269   UINT8  SingleBitErrorCorrect :1;
    270   UINT8  DoubleBitErrorCorrect :1;
    271   UINT8  ErrorScrubbing        :1;
    272   UINT8  Reserved              :2;
    273 } EFI_MEMORY_ERROR_CORRECT_CAPABILITY;
    274 
    275 typedef enum {
    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;
    284 
    285 typedef struct {
    286   UINT16  Other                 :1;
    287   UINT16  Unknown               :1;
    288   UINT16  SeventyNs             :1;
    289   UINT16  SixtyNs               :1;
    290   UINT16  FiftyNs               :1;
    291   UINT16  Reserved              :11;
    292 } EFI_MEMORY_SPEED_TYPE;
    293 
    294 typedef struct {
    295   UINT16  Other                 :1;
    296   UINT16  Unknown               :1;
    297   UINT16  Standard              :1;
    298   UINT16  FastPageMode          :1;
    299   UINT16  EDO                   :1;
    300   UINT16  Parity                :1;
    301   UINT16  ECC                   :1;
    302   UINT16  SIMM                  :1;
    303   UINT16  DIMM                  :1;
    304   UINT16  BurstEdo              :1;
    305   UINT16  SDRAM                 :1;
    306   UINT16  Reserved              :5;
    307 } EFI_MEMORY_SUPPORTED_TYPE;
    308 
    309 typedef struct {
    310   UINT8  Five                  :1;
    311   UINT8  Three                 :1;
    312   UINT8  Two                   :1;
    313   UINT8  Reserved              :5;
    314 } EFI_MEMORY_MODULE_VOLTAGE_TYPE;
    315 
    316 //
    317 //  EFI_MEMORY_CONTROLLER_INFORMATION is obsolete
    318 //  Use EFI_MEMORY_CONTROLLER_INFORMATION_DATA instead
    319 //
    320 typedef struct {
    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;
    333 
    334 typedef struct {
    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;
    347 
    348 //
    349 //  Memory. Error Information - SMBIOS Type 18
    350 //
    351 #define EFI_MEMORY_32BIT_ERROR_INFORMATION_RECORD_NUMBER 0x00000009
    352 
    353 typedef enum {
    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;
    369 
    370 typedef enum {
    371   EfiMemoryGranularityOther               = 1,
    372   EfiMemoryGranularityOtherUnknown        = 2,
    373   EfiMemoryGranularityDeviceLevel         = 3,
    374   EfiMemoryGranularityMemPartitionLevel   = 4
    375 } EFI_MEMORY_ERROR_GRANULARITY_TYPE;
    376 
    377 typedef enum {
    378   EfiMemoryErrorOperationOther            = 1,
    379   EfiMemoryErrorOperationUnknown          = 2,
    380   EfiMemoryErrorOperationRead             = 3,
    381   EfiMemoryErrorOperationWrite            = 4,
    382   EfiMemoryErrorOperationPartialWrite     = 5
    383 } EFI_MEMORY_ERROR_OPERATION_TYPE;
    384 
    385 typedef struct {
    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;
    394 
    395 //
    396 //  Memory. Error Information - SMBIOS Type 33
    397 //
    398 #define EFI_MEMORY_64BIT_ERROR_INFORMATION_RECORD_NUMBER 0x0000000A
    399 
    400 typedef struct {
    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;
    409 
    410 
    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;
    423 
    424 typedef struct {
    425   EFI_SUBCLASS_TYPE1_HEADER             Header;
    426   EFI_MEMORY_SUBCLASS_RECORDS           Record;
    427 } EFI_MEMORY_SUBCLASS_DRIVER_DATA;
    428 
    429 
    430 
    431 #endif
    432