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