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