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 benullptrwhenitem_countis 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);
}
}