1*19c617b7SRatan Gupta #ifndef OPENBMC_IPMI_FRU_PARSER_H 2*19c617b7SRatan Gupta #define OPENBMC_IPMI_FRU_PARSER_H 3*19c617b7SRatan Gupta 4*19c617b7SRatan Gupta #include <systemd/sd-bus.h> 5*19c617b7SRatan Gupta #include <array> 6*19c617b7SRatan Gupta 7*19c617b7SRatan Gupta 8*19c617b7SRatan Gupta enum ipmi_fru_area_type 9*19c617b7SRatan Gupta { 10*19c617b7SRatan Gupta IPMI_FRU_AREA_INTERNAL_USE = 0x00, 11*19c617b7SRatan Gupta IPMI_FRU_AREA_CHASSIS_INFO, 12*19c617b7SRatan Gupta IPMI_FRU_AREA_BOARD_INFO, 13*19c617b7SRatan Gupta IPMI_FRU_AREA_PRODUCT_INFO, 14*19c617b7SRatan Gupta IPMI_FRU_AREA_MULTI_RECORD, 15*19c617b7SRatan Gupta IPMI_FRU_AREA_TYPE_MAX 16*19c617b7SRatan Gupta }; 17*19c617b7SRatan Gupta 18*19c617b7SRatan Gupta 19*19c617b7SRatan Gupta enum openbmc_vpd_key_id 20*19c617b7SRatan Gupta { 21*19c617b7SRatan Gupta OPENBMC_VPD_KEY_CHASSIS_TYPE = 1, /* not a type/len */ 22*19c617b7SRatan Gupta OPENBMC_VPD_KEY_CHASSIS_PART_NUM, 23*19c617b7SRatan Gupta OPENBMC_VPD_KEY_CHASSIS_SERIAL_NUM, 24*19c617b7SRatan Gupta OPENBMC_VPD_KEY_CHASSIS_CUSTOM1, 25*19c617b7SRatan Gupta OPENBMC_VPD_KEY_CHASSIS_CUSTOM2, 26*19c617b7SRatan Gupta OPENBMC_VPD_KEY_CHASSIS_CUSTOM3, 27*19c617b7SRatan Gupta OPENBMC_VPD_KEY_CHASSIS_CUSTOM4, 28*19c617b7SRatan Gupta OPENBMC_VPD_KEY_CHASSIS_CUSTOM5, 29*19c617b7SRatan Gupta OPENBMC_VPD_KEY_CHASSIS_CUSTOM6, 30*19c617b7SRatan Gupta OPENBMC_VPD_KEY_CHASSIS_CUSTOM7, 31*19c617b7SRatan Gupta OPENBMC_VPD_KEY_CHASSIS_CUSTOM8, 32*19c617b7SRatan Gupta OPENBMC_VPD_KEY_CHASSIS_MAX = OPENBMC_VPD_KEY_CHASSIS_CUSTOM8, 33*19c617b7SRatan Gupta /* TODO: chassis_custom_fields */ 34*19c617b7SRatan Gupta 35*19c617b7SRatan Gupta OPENBMC_VPD_KEY_BOARD_MFG_DATE, /* not a type/len */ 36*19c617b7SRatan Gupta OPENBMC_VPD_KEY_BOARD_MFR, 37*19c617b7SRatan Gupta OPENBMC_VPD_KEY_BOARD_NAME, 38*19c617b7SRatan Gupta OPENBMC_VPD_KEY_BOARD_SERIAL_NUM, 39*19c617b7SRatan Gupta OPENBMC_VPD_KEY_BOARD_PART_NUM, 40*19c617b7SRatan Gupta OPENBMC_VPD_KEY_BOARD_FRU_FILE_ID, 41*19c617b7SRatan Gupta OPENBMC_VPD_KEY_BOARD_CUSTOM1, 42*19c617b7SRatan Gupta OPENBMC_VPD_KEY_BOARD_CUSTOM2, 43*19c617b7SRatan Gupta OPENBMC_VPD_KEY_BOARD_CUSTOM3, 44*19c617b7SRatan Gupta OPENBMC_VPD_KEY_BOARD_CUSTOM4, 45*19c617b7SRatan Gupta OPENBMC_VPD_KEY_BOARD_CUSTOM5, 46*19c617b7SRatan Gupta OPENBMC_VPD_KEY_BOARD_CUSTOM6, 47*19c617b7SRatan Gupta OPENBMC_VPD_KEY_BOARD_CUSTOM7, 48*19c617b7SRatan Gupta OPENBMC_VPD_KEY_BOARD_CUSTOM8, 49*19c617b7SRatan Gupta OPENBMC_VPD_KEY_BOARD_MAX = OPENBMC_VPD_KEY_BOARD_CUSTOM8, 50*19c617b7SRatan Gupta /* TODO: board_custom_fields */ 51*19c617b7SRatan Gupta 52*19c617b7SRatan Gupta OPENBMC_VPD_KEY_PRODUCT_MFR, 53*19c617b7SRatan Gupta OPENBMC_VPD_KEY_PRODUCT_NAME, 54*19c617b7SRatan Gupta OPENBMC_VPD_KEY_PRODUCT_PART_MODEL_NUM, 55*19c617b7SRatan Gupta OPENBMC_VPD_KEY_PRODUCT_VER, 56*19c617b7SRatan Gupta OPENBMC_VPD_KEY_PRODUCT_SERIAL_NUM, 57*19c617b7SRatan Gupta OPENBMC_VPD_KEY_PRODUCT_ASSET_TAG, 58*19c617b7SRatan Gupta OPENBMC_VPD_KEY_PRODUCT_FRU_FILE_ID, 59*19c617b7SRatan Gupta OPENBMC_VPD_KEY_PRODUCT_CUSTOM1, 60*19c617b7SRatan Gupta OPENBMC_VPD_KEY_PRODUCT_CUSTOM2, 61*19c617b7SRatan Gupta OPENBMC_VPD_KEY_PRODUCT_CUSTOM3, 62*19c617b7SRatan Gupta OPENBMC_VPD_KEY_PRODUCT_CUSTOM4, 63*19c617b7SRatan Gupta OPENBMC_VPD_KEY_PRODUCT_CUSTOM5, 64*19c617b7SRatan Gupta OPENBMC_VPD_KEY_PRODUCT_CUSTOM6, 65*19c617b7SRatan Gupta OPENBMC_VPD_KEY_PRODUCT_CUSTOM7, 66*19c617b7SRatan Gupta OPENBMC_VPD_KEY_PRODUCT_CUSTOM8, 67*19c617b7SRatan Gupta OPENBMC_VPD_KEY_PRODUCT_MAX = OPENBMC_VPD_KEY_PRODUCT_CUSTOM8, 68*19c617b7SRatan Gupta 69*19c617b7SRatan Gupta OPENBMC_VPD_KEY_MAX, 70*19c617b7SRatan Gupta OPENBMC_VPD_KEY_CUSTOM_FIELDS_MAX=8, 71*19c617b7SRatan Gupta 72*19c617b7SRatan Gupta }; 73*19c617b7SRatan Gupta 74*19c617b7SRatan Gupta using IPMIFruInfo = std::array<std::pair<std::string,std::string>, 75*19c617b7SRatan Gupta OPENBMC_VPD_KEY_MAX>; 76*19c617b7SRatan Gupta 77*19c617b7SRatan Gupta 78*19c617b7SRatan Gupta /* Parse an IPMI write fru data message into a dictionary containing name value pair of VPD entries.*/ 79*19c617b7SRatan Gupta int parse_fru (const void* msgbuf, sd_bus_message* vpdtbl); 80*19c617b7SRatan Gupta 81*19c617b7SRatan Gupta int parse_fru_area (const uint8_t area, const void* msgbuf, 82*19c617b7SRatan Gupta const size_t len, IPMIFruInfo& info); 83*19c617b7SRatan Gupta 84*19c617b7SRatan Gupta #endif 85