dmi_memory_error_64

Synopsis

#include <opendmi/entity/memory-error-64.h>

typedef struct dmi_memory_error_64 {
    dmi_memory_error_type_t type;
    dmi_memory_error_granularity_t granularity;
    dmi_memory_error_operation_t operation;
    uint32_t vendor_syndrome;
    uint64_t array_address;
    uint64_t device_address;
    uint32_t resolution;
} dmi_memory_error_64_t;

Description

The dmi_memory_error_64_t structure holds the decoded 64-bit memory error information structure (type 33) of SMBIOS: the last error detected in a memory array or a memory device, for the systems whose error addresses need 64 bits. The physical memory array structures (type 16) and the memory device structures (type 17) refer to it by its handle. The 32-bit memory error information structure (type 18) is its counterpart for 32-bit addresses, see dmi_memory_error_32.

The structure is returned by dmi_entity_info for the structures of type DMI_TYPE(memory_error_64), and lives as long as the context it has been decoded in.

Fields

type

Kind of the error reported for the array or the device, DMI_MEMORY_ERROR_TYPE_OK if there is none. See dmi_memory_error_type.

granularity

Level the error can be tracked down to, e.g. a device or a partition. See dmi_memory_error_granularity.

operation

Memory access which caused the error. See dmi_memory_error_operation.

vendor_syndrome

Vendor-specific ECC syndrome or CRC data of the failed access. Zero if unknown.

array_address

Physical address of the error, as the bus the memory array is attached to addresses it. 0x8000000000000000 if unknown.

device_address

Physical address of the error, in bytes from the beginning of the failed memory device. 0x8000000000000000 if unknown.

resolution

Size of the range the error address is accurate to, in bytes. 0x80000000 if unknown.

Examples

dmi_registry_t        *registry = dmi_get_registry(context);
dmi_entity_t          *entity   = dmi_registry_lookup_first(registry,
                                      DMI_TYPE(memory_error_64), false);
dmi_memory_error_64_t *error    = dmi_entity_info(entity,
                                      DMI_TYPE(memory_error_64));

if ((error != nullptr) && (error->type != DMI_MEMORY_ERROR_TYPE_OK) &&
    (error->array_address != 0x8000000000000000u))
    printf("%s at 0x%016llx\n", dmi_memory_error_type_name(error->type),
           (unsigned long long)error->array_address);

Standards

DMTF SMBIOS Specification (DSP0134), version 2.3 or newer.