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  * @param[in] uint8_t - position in the pel_values table to read
39  */
40 std::string getValue(const uint8_t field, const pel_values::PELValues& values,
41                      const uint8_t position = pel_values::descriptionPos);
42 
43 /**
44  * @brief Helper function to get value vector from lookup tables.
45  *
46  * @param[in] value - the value to lookup
47  * @param[in] table - lookup table
48  *
49  * @return std::vector<std::string> - the value vector
50  */
51 std::vector<std::string> getValuesBitwise(uint16_t value,
52                                           const pel_values::PELValues& table);
53 /**
54  * @brief Find the desired entry in a PELValues table based on the
55  *        field value.
56  *
57  * @param[in] value - the PEL value to find
58  * @param[in] fields - the PEL values table to use
59  *
60  * @return PELValues::const_iterator - an iterator to the table entry
61  */
62 PELValues::const_iterator findByValue(uint32_t value, const PELValues& fields);
63 
64 /**
65  * @brief Find the desired entry in a PELValues table based on the
66  *        field message registry name.
67  *
68  * @param[in] name - the PEL message registry enum name
69  * @param[in] fields - the PEL values table to use
70  *
71  * @return PELValues::const_iterator - an iterator to the table entry
72  */
73 PELValues::const_iterator findByName(const std::string& name,
74                                      const PELValues& fields);
75 
76 /**
77  * @brief The values for the 'subsystem' field in the User Header
78  */
79 extern const PELValues subsystemValues;
80 
81 /**
82  * @brief The values for the 'severity' field in the User Header
83  */
84 extern const PELValues severityValues;
85 
86 /**
87  * @brief The values for the 'Event Type' field in the User Header
88  */
89 extern const PELValues eventTypeValues;
90 
91 /**
92  * @brief The values for the 'Event Scope' field in the User Header
93  */
94 extern const PELValues eventScopeValues;
95 
96 /**
97  * @brief The values for the 'Action Flags' field in the User Header
98  */
99 extern const PELValues actionFlagsValues;
100 
101 /**
102  * @brief The values for callout priorities in the SRC section
103  */
104 extern const PELValues calloutPriorityValues;
105 
106 /**
107  * @brief Map for section IDs
108  */
109 extern const std::map<std::string, std::string> sectionTitles;
110 
111 /**
112  * @brief Map for creator IDs
113  */
114 extern const std::map<std::string, std::string> creatorIDs;
115 
116 /**
117  * @brief Map for transmission states
118  */
119 extern const std::map<TransmissionState, std::string> transmissionStates;
120 
121 /**
122  * @brief Map for Procedure Descriptions
123  */
124 extern const std::map<std::string, std::string> procedureDesc;
125 
126 /**
127  * @brief Map for Callout Failing Component Types
128  */
129 extern const std::map<uint8_t, std::string> failingComponentType;
130 
131 /**
132  * @brief Map for Boolean value
133  */
134 extern const std::map<bool, std::string> boolString;
135 
136 /**
137  * @brief Map for maintenance procedures
138  */
139 extern const std::map<std::string, std::string> maintenanceProcedures;
140 
141 /**
142  * @brief Map for symbolic FRUs.
143  */
144 extern const std::map<std::string, std::string> symbolicFRUs;
145 
146 } // namespace pel_values
147 } // namespace pels
148 } // namespace openpower
149