xref: /openbmc/ipmi-fru-parser/frup.hpp (revision 19c617b7dbbcb065b1a283e184310f60096ff180)
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