dmi_intel_rsd_fpga

Synopsis

#include <opendmi/entity/intel-rsd/fpga.h>
#include <opendmi/module/intel-rsd.h>

typedef struct dmi_intel_rsd_fpga {
    unsigned short index;
    dmi_intel_rsd_fpga_type_t type;
    dmi_intel_rsd_fpga_status_t status;
    unsigned short socket;
    const char *vendor;
    const char *family;
    const char *model;
    const char *bit_stream_version;
    unsigned short hps_core_count;
    dmi_intel_rsd_fpga_hps_isa_t hps_isa;
    dmi_intel_rsd_fpga_hssi_config_t hssi_config;
    unsigned short hssi_port_count;
    unsigned short hssi_port_speed;
    const char *hssi_side_band_config;
    unsigned short reconfig_slots;
    dmi_pci_slot_t pci_slot_id;
    uint8_t pci_bus_number;
    uint8_t pci_device_number;
    uint8_t pci_function_number;
    uint32_t tdp;
    dmi_intel_rsd_fpga_memory_tech_t memory_tech;
    uint32_t memory_capacity;
    uint16_t memory_speed;
} dmi_intel_rsd_fpga_t;

Description

The dmi_intel_rsd_fpga_t structure holds the decoded FPGA information structure (type 198) of Intel Rack Scale Design (RSD) firmware: one field-programmable gate array (FPGA) of the system, with its identity, its hard processor subsystem (HPS), its high-speed serial interfaces (HSSI), the place it is reached at on PCIe, and the memory attached to it. There is one structure for each FPGA, and none on platforms without FPGAs.

The structure is returned by dmi_entity_info for the structures of type DMI_TYPE(intel_rsd_fpga), once the Intel RSD extension module (dmi_intel_rsd_module, declared in <opendmi/module/intel-rsd.h>) has been enabled in the context with dmi_add_extension(). It lives as long as the context it has been decoded in.

Fields

index

One-based number of the FPGA on the platform. The value.range lint rule reports a structure which holds 0.

type

How the FPGA is attached: integrated into a processor package, or discrete (see dmi_intel_rsd_fpga_type).

status

Whether the FPGA is enabled (see dmi_intel_rsd_fpga_status).

socket

Processor socket the FPGA is integrated into. Meaningful for integrated FPGAs only, and not shown for the other ones.

vendor

Vendor of the FPGA, as a name or, for a discrete FPGA, as its PCI vendor identifier. nullptr if the structure does not carry it.

family

Family of the FPGA, nullptr if the structure does not carry it.

model

Model of the FPGA, nullptr if the structure does not carry it.

bit_stream_version

Version of the bit stream of the FPGA, nullptr if the structure does not carry it.

hps_core_count

Number of cores of the hard processor subsystem, if the FPGA has one.

hps_isa

Instruction set architecture of the cores of the hard processor subsystem (see dmi_intel_rsd_fpga_hps_isa).

hssi_config

Configuration the high-speed serial interfaces support: networking or PCIe (see dmi_intel_rsd_fpga_hssi_config).

hssi_port_count

Number of ports of that configuration: 2 for 2x10G or 2x40G networking, 2 for two x16 PCIe links, and so on. Like hssi_port_speed and hssi_side_band_config, it is not shown when the configuration is not available (DMI_INTEL_RSD_FPGA_HSSI_CONFIG_UNAVAILABLE), which the specification says to ignore them for, or is one the specification does not define.

hssi_port_speed

Speed of each port in Gbps for networking, or its number of lanes for PCIe: 10 for 2x10G, 40 for 2x40G, 16 for x16 PCIe, and so on.

hssi_side_band_config

Side-band mechanism the high-speed serial interfaces are configured through, such as "SPI", "I2C-0" or "SMBus". nullptr if the structure does not carry it.

reconfig_slots

Number of partial reconfiguration (PR) slots of the FPGA.

pci_slot_id

Physical number of the slot connected to the PCIe port the FPGA is reached through.

pci_bus_number

PCIe bus number the FPGA is reached at.

pci_device_number

PCIe device number the FPGA is reached at.

pci_function_number

PCIe function number the FPGA is reached at.

tdp

Thermal design power of the FPGA, in milliwatts.

memory_tech

Technology of the memory attached to the FPGA, if any (see dmi_intel_rsd_fpga_memory_tech).

memory_capacity

Capacity of the on-package memory, in mebibytes. The specification gives it in MB, which means 2^20 bytes, the way it does for the memory sizes of SMBIOS.

memory_speed

Speed of the memory, in MHz.

Examples

dmi_registry_t       *registry = dmi_get_registry(context);
dmi_entity_t         *entity   = dmi_registry_lookup_first(registry,
                                     DMI_TYPE(intel_rsd_fpga), true);
dmi_intel_rsd_fpga_t *fpga     = dmi_entity_info(entity,
                                                 DMI_TYPE(intel_rsd_fpga));

if ((fpga != nullptr) && (fpga->status == DMI_INTEL_RSD_FPGA_STATUS_ENABLED))
    printf("FPGA %u: %s, %u mW\n", fpga->index,
           (fpga->model != nullptr) ? fpga->model : "unknown model",
           (unsigned)fpga->tdp);

Standards

Not part of the SMBIOS specification. Defined by Intel Rack Scale Design (RSD) firmware.