1 #pragma once
2 
3 #include "pel_types.hpp"
4 
5 #include <map>
6 #include <string>
7 #include <tuple>
8 #include <vector>
9 
10 namespace openpower
11 {
12 namespace pels
13 {
14 namespace pel_values
15 {
16 
17 // The actual value as it shows up in the PEL
18 const int fieldValuePos = 0;
19 
20 // The name of the value as specified in the message registry
21 const int registryNamePos = 1;
22 
23 // The description of the field, used by PEL parsers
24 const int descriptionPos = 2;
25 
26 using PELFieldValue = std::tuple<uint32_t, const char*, const char*>;
27 using PELValues = std::vector<PELFieldValue>;
28 
29 const std::string sectionVer = "Section Version";
30 const std::string subSection = "Sub-section type";
31 const std::string createdBy = "Created by";
32 
33 /**
34  * @brief Helper function to get values from lookup tables.
35  * @return std::string - the value
36  * @param[in] uint8_t - field to get value for
37  * @param[in] PELValues - lookup table
38  */
39 std::string getValue(const uint8_t field, const pel_values::PELValues& values);
40 
41 /**
42  * @brief Helper function to get value vector from lookup tables.
43  *
44  * @param[in] value - the value to lookup
45  * @param[in] table - lookup table
46  *
47  * @return std::vector<std::string> - the value vector
48  */
49 std::vector<std::string> getValuesBitwise(uint16_t value,
50                                           const pel_values::PELValues& table);
51 /**
52  * @brief Find the desired entry in a PELValues table based on the
53  *        field value.
54  *
55  * @param[in] value - the PEL value to find
56  * @param[in] fields - the PEL values table to use
57  *
58  * @return PELValues::const_iterator - an iterator to the table entry
59  */
60 PELValues::const_iterator findByValue(uint32_t value, const PELValues& fields);
61 
62 /**
63  * @brief Find the desired entry in a PELValues table based on the
64  *        field message registry name.
65  *
66  * @param[in] name - the PEL message registry enum name
67  * @param[in] fields - the PEL values table to use
68  *
69  * @return PELValues::const_iterator - an iterator to the table entry
70  */
71 PELValues::const_iterator findByName(const std::string& name,
72                                      const PELValues& fields);
73 
74 /**
75  * @brief The values for the 'subsystem' field in the User Header
76  */
77 extern const PELValues subsystemValues;
78 
79 /**
80  * @brief The values for the 'severity' field in the User Header
81  */
82 extern const PELValues severityValues;
83 
84 /**
85  * @brief The values for the 'Event Type' field in the User Header
86  */
87 extern const PELValues eventTypeValues;
88 
89 /**
90  * @brief The values for the 'Event Scope' field in the User Header
91  */
92 extern const PELValues eventScopeValues;
93 
94 /**
95  * @brief The values for the 'Action Flags' field in the User Header
96  */
97 extern const PELValues actionFlagsValues;
98 
99 /**
100  * @brief The values for callout priorities in the SRC section
101  */
102 extern const PELValues calloutPriorityValues;
103 
104 /**
105  * @brief Map for section IDs
106  */
107 extern const std::map<std::string, std::string> sectionTitles;
108 
109 /**
110  * @brief Map for creator IDs
111  */
112 extern const std::map<std::string, std::string> creatorIDs;
113 
114 /**
115  * @brief Map for transmission states
116  */
117 extern const std::map<TransmissionState, std::string> transmissionStates;
118 
119 /**
120  * @brief Map for Procedure Descriptions
121  */
122 extern const std::map<std::string, std::string> procedureDesc;
123 
124 /**
125  * @brief Map for Callout Failing Component Types
126  */
127 extern const std::map<uint8_t, std::string> failingComponentType;
128 
129 /**
130  * @brief Map for Boolean value
131  */
132 extern const std::map<bool, std::string> boolString;
133 
134 /**
135  * @brief Map for maintenance procedures
136  */
137 extern const std::map<std::string, std::string> maintenanceProcedures;
138 
139 /**
140  * @brief Map for symbolic FRUs.
141  */
142 extern const std::map<std::string, std::string> symbolicFRUs;
143 
144 } // namespace pel_values
145 } // namespace pels
146 } // namespace openpower
147