#ifndef OPENBMC_IPMI_FRU_PARSER_H #define OPENBMC_IPMI_FRU_PARSER_H #include #include #include #include enum ipmi_fru_area_type { IPMI_FRU_AREA_INTERNAL_USE = 0x00, IPMI_FRU_AREA_CHASSIS_INFO, IPMI_FRU_AREA_BOARD_INFO, IPMI_FRU_AREA_PRODUCT_INFO, IPMI_FRU_AREA_MULTI_RECORD, IPMI_FRU_AREA_TYPE_MAX }; enum openbmc_vpd_key_id { OPENBMC_VPD_KEY_CHASSIS_TYPE = 1, /* not a type/len */ OPENBMC_VPD_KEY_CHASSIS_PART_NUM, OPENBMC_VPD_KEY_CHASSIS_SERIAL_NUM, OPENBMC_VPD_KEY_CHASSIS_CUSTOM1, OPENBMC_VPD_KEY_CHASSIS_CUSTOM2, OPENBMC_VPD_KEY_CHASSIS_CUSTOM3, OPENBMC_VPD_KEY_CHASSIS_CUSTOM4, OPENBMC_VPD_KEY_CHASSIS_CUSTOM5, OPENBMC_VPD_KEY_CHASSIS_CUSTOM6, OPENBMC_VPD_KEY_CHASSIS_CUSTOM7, OPENBMC_VPD_KEY_CHASSIS_CUSTOM8, OPENBMC_VPD_KEY_CHASSIS_MAX = OPENBMC_VPD_KEY_CHASSIS_CUSTOM8, /* TODO: chassis_custom_fields */ OPENBMC_VPD_KEY_BOARD_MFG_DATE, /* not a type/len */ OPENBMC_VPD_KEY_BOARD_MFR, OPENBMC_VPD_KEY_BOARD_NAME, OPENBMC_VPD_KEY_BOARD_SERIAL_NUM, OPENBMC_VPD_KEY_BOARD_PART_NUM, OPENBMC_VPD_KEY_BOARD_FRU_FILE_ID, OPENBMC_VPD_KEY_BOARD_CUSTOM1, OPENBMC_VPD_KEY_BOARD_CUSTOM2, OPENBMC_VPD_KEY_BOARD_CUSTOM3, OPENBMC_VPD_KEY_BOARD_CUSTOM4, OPENBMC_VPD_KEY_BOARD_CUSTOM5, OPENBMC_VPD_KEY_BOARD_CUSTOM6, OPENBMC_VPD_KEY_BOARD_CUSTOM7, OPENBMC_VPD_KEY_BOARD_CUSTOM8, OPENBMC_VPD_KEY_BOARD_MAX = OPENBMC_VPD_KEY_BOARD_CUSTOM8, /* TODO: board_custom_fields */ OPENBMC_VPD_KEY_PRODUCT_MFR, OPENBMC_VPD_KEY_PRODUCT_NAME, OPENBMC_VPD_KEY_PRODUCT_PART_MODEL_NUM, OPENBMC_VPD_KEY_PRODUCT_VER, OPENBMC_VPD_KEY_PRODUCT_SERIAL_NUM, OPENBMC_VPD_KEY_PRODUCT_ASSET_TAG, OPENBMC_VPD_KEY_PRODUCT_FRU_FILE_ID, OPENBMC_VPD_KEY_PRODUCT_CUSTOM1, OPENBMC_VPD_KEY_PRODUCT_CUSTOM2, OPENBMC_VPD_KEY_PRODUCT_CUSTOM3, OPENBMC_VPD_KEY_PRODUCT_CUSTOM4, OPENBMC_VPD_KEY_PRODUCT_CUSTOM5, OPENBMC_VPD_KEY_PRODUCT_CUSTOM6, OPENBMC_VPD_KEY_PRODUCT_CUSTOM7, OPENBMC_VPD_KEY_PRODUCT_CUSTOM8, OPENBMC_VPD_KEY_PRODUCT_MAX = OPENBMC_VPD_KEY_PRODUCT_CUSTOM8, OPENBMC_VPD_KEY_MAX, OPENBMC_VPD_KEY_CUSTOM_FIELDS_MAX=8, }; using IPMIFruInfo = std::array, OPENBMC_VPD_KEY_MAX>; using IPMIFruMetadata = std::string; using IPMIFruMetadataValue = std::string; using IPMIFruMap = std::map; using DbusProperty = std::string; using DbusPropertyMap = std::map; using DbusInterface = std::string; using DbusInterfaceMap = std::map; using FruInstancePath = std::string; using FruInstanceMap = std::map; using FruId = uint32_t; using FruMap = std::map; /* Parse an IPMI write fru data message into a dictionary containing name value pair of VPD entries.*/ int parse_fru (const void* msgbuf, sd_bus_message* vpdtbl); int parse_fru_area (const uint8_t area, const void* msgbuf, const size_t len, IPMIFruInfo& info); #endif