blob: 3f68acdd7e1a69ed2ae0ede3c288498973ee1196 [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>
Ratan Gupta6eed4032017-02-10 15:59:31 +05306#include <string>
7#include <map>
Patrick Williamsa71d0f12017-06-01 19:19:09 -05008#include <vector>
Chris Austenb45c4cb2015-11-01 06:34:56 -06009
Hariharasubramanian Ra032c772015-10-20 07:28:19 -050010enum ipmi_fru_area_type
Hariharasubramanian Rc2d79462015-10-16 06:47:56 -050011{
12 IPMI_FRU_AREA_INTERNAL_USE = 0x00,
13 IPMI_FRU_AREA_CHASSIS_INFO,
14 IPMI_FRU_AREA_BOARD_INFO,
15 IPMI_FRU_AREA_PRODUCT_INFO,
16 IPMI_FRU_AREA_MULTI_RECORD,
17 IPMI_FRU_AREA_TYPE_MAX
Hariharasubramanian Ra032c772015-10-20 07:28:19 -050018};
Hariharasubramanian R44473092015-10-15 08:25:28 -050019
Ratan Guptacb0d4e52016-12-22 19:05:57 +053020
21enum openbmc_vpd_key_id
22{
23 OPENBMC_VPD_KEY_CHASSIS_TYPE = 1, /* not a type/len */
24 OPENBMC_VPD_KEY_CHASSIS_PART_NUM,
25 OPENBMC_VPD_KEY_CHASSIS_SERIAL_NUM,
26 OPENBMC_VPD_KEY_CHASSIS_CUSTOM1,
27 OPENBMC_VPD_KEY_CHASSIS_CUSTOM2,
28 OPENBMC_VPD_KEY_CHASSIS_CUSTOM3,
29 OPENBMC_VPD_KEY_CHASSIS_CUSTOM4,
30 OPENBMC_VPD_KEY_CHASSIS_CUSTOM5,
31 OPENBMC_VPD_KEY_CHASSIS_CUSTOM6,
32 OPENBMC_VPD_KEY_CHASSIS_CUSTOM7,
33 OPENBMC_VPD_KEY_CHASSIS_CUSTOM8,
34 OPENBMC_VPD_KEY_CHASSIS_MAX = OPENBMC_VPD_KEY_CHASSIS_CUSTOM8,
35 /* TODO: chassis_custom_fields */
36
37 OPENBMC_VPD_KEY_BOARD_MFG_DATE, /* not a type/len */
38 OPENBMC_VPD_KEY_BOARD_MFR,
39 OPENBMC_VPD_KEY_BOARD_NAME,
40 OPENBMC_VPD_KEY_BOARD_SERIAL_NUM,
41 OPENBMC_VPD_KEY_BOARD_PART_NUM,
42 OPENBMC_VPD_KEY_BOARD_FRU_FILE_ID,
43 OPENBMC_VPD_KEY_BOARD_CUSTOM1,
44 OPENBMC_VPD_KEY_BOARD_CUSTOM2,
45 OPENBMC_VPD_KEY_BOARD_CUSTOM3,
46 OPENBMC_VPD_KEY_BOARD_CUSTOM4,
47 OPENBMC_VPD_KEY_BOARD_CUSTOM5,
48 OPENBMC_VPD_KEY_BOARD_CUSTOM6,
49 OPENBMC_VPD_KEY_BOARD_CUSTOM7,
50 OPENBMC_VPD_KEY_BOARD_CUSTOM8,
51 OPENBMC_VPD_KEY_BOARD_MAX = OPENBMC_VPD_KEY_BOARD_CUSTOM8,
52 /* TODO: board_custom_fields */
53
54 OPENBMC_VPD_KEY_PRODUCT_MFR,
55 OPENBMC_VPD_KEY_PRODUCT_NAME,
56 OPENBMC_VPD_KEY_PRODUCT_PART_MODEL_NUM,
57 OPENBMC_VPD_KEY_PRODUCT_VER,
58 OPENBMC_VPD_KEY_PRODUCT_SERIAL_NUM,
59 OPENBMC_VPD_KEY_PRODUCT_ASSET_TAG,
60 OPENBMC_VPD_KEY_PRODUCT_FRU_FILE_ID,
61 OPENBMC_VPD_KEY_PRODUCT_CUSTOM1,
62 OPENBMC_VPD_KEY_PRODUCT_CUSTOM2,
63 OPENBMC_VPD_KEY_PRODUCT_CUSTOM3,
64 OPENBMC_VPD_KEY_PRODUCT_CUSTOM4,
65 OPENBMC_VPD_KEY_PRODUCT_CUSTOM5,
66 OPENBMC_VPD_KEY_PRODUCT_CUSTOM6,
67 OPENBMC_VPD_KEY_PRODUCT_CUSTOM7,
68 OPENBMC_VPD_KEY_PRODUCT_CUSTOM8,
69 OPENBMC_VPD_KEY_PRODUCT_MAX = OPENBMC_VPD_KEY_PRODUCT_CUSTOM8,
70
71 OPENBMC_VPD_KEY_MAX,
72 OPENBMC_VPD_KEY_CUSTOM_FIELDS_MAX=8,
73
74};
75
76using IPMIFruInfo = std::array<std::pair<std::string,std::string>,
77 OPENBMC_VPD_KEY_MAX>;
78
Patrick Williamsaeb726d2017-06-01 19:00:43 -050079struct IPMIFruData
80{
81 std::string section;
82 std::string property;
83 std::string delimiter;
84};
Ratan Gupta6eed4032017-02-10 15:59:31 +053085
86using DbusProperty = std::string;
Ratan Guptac19c0542018-02-04 23:24:44 +053087using DbusPropertyVec = std::vector<std::pair<DbusProperty, IPMIFruData>>;
Ratan Gupta6eed4032017-02-10 15:59:31 +053088
89using DbusInterface = std::string;
Ratan Guptac19c0542018-02-04 23:24:44 +053090using DbusInterfaceVec = std::vector<std::pair<DbusInterface, DbusPropertyVec>>;
Ratan Gupta6eed4032017-02-10 15:59:31 +053091
92using FruInstancePath = std::string;
Ratan Guptac19c0542018-02-04 23:24:44 +053093
94struct FruInstance
95{
96 uint8_t entityID;
97 uint8_t entityInstance;
98 FruInstancePath path;
99 DbusInterfaceVec interfaces;
100};
101
102using FruInstanceVec = std::vector<FruInstance>;
Ratan Gupta6eed4032017-02-10 15:59:31 +0530103
104using FruId = uint32_t;
Ratan Guptac19c0542018-02-04 23:24:44 +0530105using FruMap = std::map<FruId, FruInstanceVec>;
Ratan Guptacb0d4e52016-12-22 19:05:57 +0530106
107/* Parse an IPMI write fru data message into a dictionary containing name value pair of VPD entries.*/
108int parse_fru (const void* msgbuf, sd_bus_message* vpdtbl);
109
110int parse_fru_area (const uint8_t area, const void* msgbuf,
111 const size_t len, IPMIFruInfo& info);
112
Hariharasubramanian R44473092015-10-15 08:25:28 -0500113#endif