xref: /openbmc/openpower-vpd-parser/vpd-tool/include/tool_types.hpp (revision 36dba30ad1af598bc4b30d0b38f4911a3c8b93f5)
1 #pragma once
2 
3 #include <sdbusplus/message/types.hpp>
4 
5 #include <cstdint>
6 #include <tuple>
7 #include <unordered_map>
8 #include <variant>
9 #include <vector>
10 
11 namespace vpd
12 {
13 namespace types
14 {
15 using BinaryVector = std::vector<uint8_t>;
16 
17 // This covers mostly all the data type supported over DBus for a property.
18 // clang-format off
19 using DbusVariantType = std::variant<
20     std::vector<std::tuple<std::string, std::string, std::string>>,
21     std::vector<std::string>,
22     std::vector<double>,
23     std::string,
24     int64_t,
25     uint64_t,
26     double,
27     int32_t,
28     uint32_t,
29     int16_t,
30     uint16_t,
31     uint8_t,
32     bool,
33     BinaryVector,
34     std::vector<uint32_t>,
35     std::vector<uint16_t>,
36     sdbusplus::message::object_path,
37     std::tuple<uint64_t, std::vector<std::tuple<std::string, std::string, double, uint64_t>>>,
38     std::vector<std::tuple<std::string, std::string>>,
39     std::vector<std::tuple<uint32_t, std::vector<uint32_t>>>,
40     std::vector<std::tuple<uint32_t, size_t>>,
41     std::vector<std::tuple<sdbusplus::message::object_path, std::string,
42                            std::string, std::string>>
43  >;
44 
45 //IpzType contains tuple of <Record, Keyword>
46 using IpzType = std::tuple<std::string, std::string>;
47 
48 //ReadVpdParams either of IPZ or keyword format
49 using ReadVpdParams = std::variant<IpzType, std::string>;
50 
51 //KwData contains tuple of <keywordName, KeywordValue>
52 using KwData = std::tuple<std::string, BinaryVector>;
53 
54 //IpzData contains tuple of <RecordName, KeywordName, KeywordValue>
55 using IpzData = std::tuple<std::string, std::string, BinaryVector>;
56 
57 //WriteVpdParams either of IPZ or keyword format
58 using WriteVpdParams = std::variant<IpzData, KwData>;
59 // Return type of ObjectMapper GetObject API
60 using MapperGetObject = std::map<std::string,std::vector<std::string>>;
61 
62 // Table row data
63 using TableRowData = std::vector<std::string>;
64 
65 // Type used to populate table data
66 using TableInputData = std::vector<TableRowData>;
67 
68 // A table column name-size pair
69 using TableColumnNameSizePair = std::pair<std::string, std::size_t>;
70 
71 /* Map<Property, Value>*/
72 using PropertyMap = std::map<std::string, DbusVariantType>;
73 
74 enum UserOption
75 {
76     Exit,
77     UseBackupDataForAll,
78     UseSystemBackplaneDataForAll,
79     MoreOptions,
80     UseBackupDataForCurrent,
81     UseSystemBackplaneDataForCurrent,
82     NewValueOnBoth,
83     SkipCurrent
84 };
85 
86 using BiosAttributeCurrentValue =
87     std::variant<std::monostate, int64_t, std::string>;
88 using BiosAttributePendingValue = std::variant<int64_t, std::string>;
89 using BiosGetAttrRetType = std::tuple<std::string, BiosAttributeCurrentValue,
90                                       BiosAttributePendingValue>;
91 
92 // VPD keyword to BIOS attribute map
93 struct IpzKeyHash
94 {
operator ()vpd::types::IpzKeyHash95     std::size_t operator()(const IpzType& i_key) const
96     {
97         return std::hash<std::string>()(std::get<0>(i_key)) ^ std::hash<std::string>()(std::get<1>(i_key));
98     }
99 };
100 
101 struct IpzKeyEqual
102 {
operator ()vpd::types::IpzKeyEqual103     bool operator()(const IpzType& i_leftKey, const IpzType& i_rightKey) const
104     {
105         return std::get<0>(i_leftKey) == std::get<0>(i_rightKey) && std::get<1>(i_leftKey) == std::get<1>(i_rightKey);
106     }
107 };
108 
109 // Bios attribute metadata container : {attribute name, number of bits, starting bit position, enabled value, disabled value}
110 using BiosAttributeMetaData = std::tuple<std::string, uint8_t, std::optional<uint8_t>, std::optional<uint8_t>, std::optional<uint8_t>>;
111 
112 // IPZ keyword to BIOS attribute map
113 //{Record, Keyword} -> {attribute name, number of bits in keyword, starting bit
114 // position, enabled value, disabled value}
115 using BiosAttributeKeywordMap = std::unordered_map<IpzType,std::vector<BiosAttributeMetaData>,IpzKeyHash,IpzKeyEqual>;
116 } // namespace types
117 } // namespace vpd
118