dmi_intel_fvi

Synopsis

#include <opendmi/entity/intel/fvi.h>

typedef struct dmi_intel_fvi {
    size_t item_count;
    dmi_intel_fvi_item_t *items;
} dmi_intel_fvi_t;

Description

The dmi_intel_fvi_t structure holds the decoded Intel firmware version information: the versions of the firmware components of a platform, as the Intel reference code knows them, e.g. the reference code modules, the microcode, the Management Engine firmware and the option ROMs.

Each module of the reference code adds a structure of its own, e.g. for the CPU, the Management Engine, the PCH or the System Agent, whose first item is the version of the reference code module itself, named Reference Code - <module>. The structures of a platform are often listed by a group association (type 14) named Firmware Version Info.

The structure is returned by dmi_entity_info for the structures decoded by dmi_intel_fvi_spec, of type DMI_TYPE(intel_fvi), declared in <opendmi/module/intel.h>, once the Intel extension module (dmi_intel_module) is enabled, which is done for any platform when the context has DMI_CONTEXT_FLAG_AUTO_MODULES. It lives as long as the context it has been decoded in.

The structures are found on Intel platforms whatever the vendor of the firmware is. The Intel reference code gives them type 221, but vendors who give that type to structures of their own place them elsewhere or not at all: Dell places them at type 205, or at type 237 on some platforms, e.g. Precision Tower 3620, and HP servers carry none. The type is checked against DMI_TYPE(intel_fvi) wherever the structure is placed, see dmi_entity_info.

Fields

item_count

Number of elements of items. Smaller than the number the structure declares when the data ends before the last item.

items

Versions of the firmware components, in the order of the structure, see dmi_intel_fvi_item. May be nullptr when item_count is 0.

Examples

dmi_registry_iter_t iter;
dmi_entity_t *entity;

dmi_registry_iter_initialize(&iter, dmi_get_registry(context), nullptr);

while ((entity = dmi_registry_iter_next(&iter)) != nullptr) {
    if (entity->spec != &dmi_intel_fvi_spec)
        continue;

    const dmi_intel_fvi_t *info = dmi_entity_info(entity, DMI_TYPE(intel_fvi));

    for (size_t i = 0; i < info->item_count; i++) {
        const dmi_intel_fvi_item_t *item = &info->items[i];

        printf("%s: %u.%u.%u.%u\n", item->component,
               item->major, item->minor, item->revision, item->build);
    }
}

Standards

Not part of the SMBIOS specification. Defined by the Intel reference code, whose firmware version information module gives the structures type 221 by default.