dmi_hpe_dimm_location

Synopsis

#include <opendmi/entity/hpe/dimm-location.h>

typedef struct dmi_hpe_dimm_location {
    dmi_handle_t device_handle;
    uint8_t board;
    uint8_t dimm;
    uint8_t processor;
    uint8_t logical_dimm;
    const char *uefi_device_path;
    const char *uefi_device_name;
    const char *device_name;
    uint8_t controller;
    uint8_t channel;
    uint8_t ie_dimm;
    uint8_t ie_pldm_id;
    uint16_t vendor_id;
    uint16_t device_id;
    uint16_t controller_vendor_id;
    uint16_t controller_device_id;
    uint8_t interleave;
    const char *part_number;
    uint8_t channel_index;
    bool is_system_board;
    bool has_ie;
    bool has_channel_index;
} dmi_hpe_dimm_location_t;

Description

The dmi_hpe_dimm_location_t structure holds the decoded HP/HPE DIMM location record, which tells where the DIMM socket of a memory device (type 17) is: the memory board, the processor and the channel it belongs to. There is a record for each socket, including the ones of the memory boards which are not installed.

The structure is returned by dmi_entity_info for the structures decoded by dmi_hpe_dimm_location_spec, of type DMI_TYPE(hpe_dimm_location), declared in <opendmi/module/hpe.h>, once the HPE extension module (dmi_hpe_module) is enabled, which it is for HP and HPE servers. It lives as long as the context it has been decoded in.

The structure has grown with the generations of the servers: fields the data ends before are set to the values they have when not specified, and strings to nullptr.

Fields

device_handle

Handle of the memory device structure (type 17).

board

1-based number of the memory board. Set to UINT8_MAX for the sockets of the system board, and not shown then.

dimm

1-based number of the DIMM.

processor

1-based number of the processor. Set to UINT8_MAX when not shown.

logical_dimm

1-based logical number of the DIMM, as ACPI numbers it, zero if unspecified.

uefi_device_path

UEFI device path.

uefi_device_name

UEFI device structured name.

device_name

Device name.

controller

1-based number of the memory controller, zero if unknown.

channel

1-based number of the memory channel, as the silk screen names it, zero if unknown.

ie_dimm

0-based number of the DIMM, as the Innovation Engine reports it. Set to UINT8_MAX when not supported. Reserved from Gen12 onwards, and not shown then.

ie_pldm_id

Sensor ID of the Innovation Engine. Set to UINT8_MAX when not supported. Reserved from Gen12 onwards, and not shown then.

vendor_id

Manufacturer ID code of the module, as the SPD gives it.

device_id

Product ID code of the module, NVDIMMs only.

controller_vendor_id

Manufacturer ID code of the controller, NVDIMMs only, as the SPD gives it: the number of continuation codes in the low byte, whose bit 7 is a parity bit, and the JEP106 code in the high byte.

controller_device_id

Product ID code of the controller, NVDIMMs only.

interleave

1-based interleave set within the processor, zero if unknown.

part_number

HPE part number, from the OEM area of the SPD.

channel_index

0-based index of the DIMM within its channel. Set to UINT8_MAX when the structure holds none.

is_system_board

Whether the socket is one of the system board, which board of UINT8_MAX tells.

has_ie

Whether ie_dimm and ie_pldm_id are shown, which they are up to Gen11.

has_channel_index

Whether the structure holds channel_index, which the structures shorter than 28 bytes leave out.

Standards

Not part of the SMBIOS specification. Defined by HP and HPE for their servers; the layout is the one dmidecode documents.