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_OKif there is none. Seedmi_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.
0x8000000000000000if unknown. device_address-
Physical address of the error, in bytes from the beginning of the failed memory device.
0x8000000000000000if unknown. resolution-
Size of the range the error address is accurate to, in bytes.
0x80000000if 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);