1*711d51d8SMatt Spinler /**
2*711d51d8SMatt Spinler  * Copyright © 2019 IBM Corporation
3*711d51d8SMatt Spinler  *
4*711d51d8SMatt Spinler  * Licensed under the Apache License, Version 2.0 (the "License");
5*711d51d8SMatt Spinler  * you may not use this file except in compliance with the License.
6*711d51d8SMatt Spinler  * You may obtain a copy of the License at
7*711d51d8SMatt Spinler  *
8*711d51d8SMatt Spinler  *     http://www.apache.org/licenses/LICENSE-2.0
9*711d51d8SMatt Spinler  *
10*711d51d8SMatt Spinler  * Unless required by applicable law or agreed to in writing, software
11*711d51d8SMatt Spinler  * distributed under the License is distributed on an "AS IS" BASIS,
12*711d51d8SMatt Spinler  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*711d51d8SMatt Spinler  * See the License for the specific language governing permissions and
14*711d51d8SMatt Spinler  * limitations under the License.
15*711d51d8SMatt Spinler  */
16835a8693SMatt Spinler #include "pel_values.hpp"
17835a8693SMatt Spinler 
18835a8693SMatt Spinler #include <algorithm>
19835a8693SMatt Spinler 
20835a8693SMatt Spinler namespace openpower
21835a8693SMatt Spinler {
22835a8693SMatt Spinler namespace pels
23835a8693SMatt Spinler {
24835a8693SMatt Spinler namespace pel_values
25835a8693SMatt Spinler {
26835a8693SMatt Spinler 
27835a8693SMatt Spinler // Note: The description fields will be filled in as part of the
28835a8693SMatt Spinler //       PEL parser work.
29835a8693SMatt Spinler 
30835a8693SMatt Spinler /**
31835a8693SMatt Spinler  * The possible values for the subsystem field  in the User Header.
32835a8693SMatt Spinler  */
33835a8693SMatt Spinler const PELValues subsystemValues = {{0x10, "processor", "TODO"},
34835a8693SMatt Spinler                                    {0x11, "processor_fru", "TODO"},
35835a8693SMatt Spinler                                    {0x12, "processor_chip", "TODO"},
36835a8693SMatt Spinler                                    {0x13, "processor_unit", "TODO"},
37835a8693SMatt Spinler                                    {0x14, "processor_bus", "TODO"},
38835a8693SMatt Spinler 
39835a8693SMatt Spinler                                    {0x20, "memory", "TODO"},
40835a8693SMatt Spinler                                    {0x21, "memory_ctlr", "TODO"},
41835a8693SMatt Spinler                                    {0x22, "memory_bus", "TODO"},
42835a8693SMatt Spinler                                    {0x23, "memory_dimm", "TODO"},
43835a8693SMatt Spinler                                    {0x24, "memory_fru", "TODO"},
44835a8693SMatt Spinler                                    {0x25, "external_cache", "TODO"},
45835a8693SMatt Spinler 
46835a8693SMatt Spinler                                    {0x30, "io", "TODO"},
47835a8693SMatt Spinler                                    {0x31, "io_hub", "TODO"},
48835a8693SMatt Spinler                                    {0x32, "io_bridge", "TODO"},
49835a8693SMatt Spinler                                    {0x33, "io_bus", "TODO"},
50835a8693SMatt Spinler                                    {0x34, "io_processor", "TODO"},
51835a8693SMatt Spinler                                    {0x35, "io_hub_other", "TODO"},
52835a8693SMatt Spinler                                    {0x38, "phb", "TODO"},
53835a8693SMatt Spinler 
54835a8693SMatt Spinler                                    {0x40, "io_adapter", "TODO"},
55835a8693SMatt Spinler                                    {0x41, "io_adapter_comm", "TODO"},
56835a8693SMatt Spinler                                    {0x46, "io_device", "TODO"},
57835a8693SMatt Spinler                                    {0x47, "io_device_dasd", "TODO"},
58835a8693SMatt Spinler                                    {0x4C, "io_external_general", "TODO"},
59835a8693SMatt Spinler                                    {0x4D, "io_external_workstation", "TODO"},
60835a8693SMatt Spinler                                    {0x4E, "io_storage_mezz", "TODO"},
61835a8693SMatt Spinler 
62835a8693SMatt Spinler                                    {0x50, "cec_hardware", "TODO"},
63835a8693SMatt Spinler                                    {0x51, "cec_sp_a", "TODO"},
64835a8693SMatt Spinler                                    {0x52, "cec_sp_b", "TODO"},
65835a8693SMatt Spinler                                    {0x53, "cec_node_controller", "TODO"},
66835a8693SMatt Spinler                                    {0x55, "cec_vpd", "TODO"},
67835a8693SMatt Spinler                                    {0x56, "cec_i2c", "TODO"},
68835a8693SMatt Spinler                                    {0x57, "cec_chip_iface", "TODO"},
69835a8693SMatt Spinler                                    {0x58, "cec_clocks", "TODO"},
70835a8693SMatt Spinler                                    {0x59, "cec_op_panel", "TODO"},
71835a8693SMatt Spinler                                    {0x5A, "cec_tod", "TODO"},
72835a8693SMatt Spinler                                    {0x5B, "cec_storage_device", "TODO"},
73835a8693SMatt Spinler                                    {0x5C, "cec_sp_hyp_iface", "TODO"},
74835a8693SMatt Spinler                                    {0x5D, "cec_service_network", "TODO"},
75835a8693SMatt Spinler                                    {0x5E, "cec_sp_hostboot_iface", "TODO"},
76835a8693SMatt Spinler 
77835a8693SMatt Spinler                                    {0x60, "power", "TODO"},
78835a8693SMatt Spinler                                    {0x61, "power_supply", "TODO"},
79835a8693SMatt Spinler                                    {0x62, "power_control_hw", "TODO"},
8066d3036eSMatt Spinler                                    {0x63, "power_fans", "TODO"},
81835a8693SMatt Spinler                                    {0x64, "power_sequencer", "TODO"},
82835a8693SMatt Spinler 
83835a8693SMatt Spinler                                    {0x70, "others", "TODO"},
84835a8693SMatt Spinler                                    {0x71, "other_hmc", "TODO"},
85835a8693SMatt Spinler                                    {0x72, "other_test_tool", "TODO"},
86835a8693SMatt Spinler                                    {0x73, "other_media", "TODO"},
87835a8693SMatt Spinler                                    {0x74, "other_multiple_subsystems", "TODO"},
88835a8693SMatt Spinler                                    {0x75, "other_na", "TODO"},
89835a8693SMatt Spinler                                    {0x76, "other_info_src", "TODO"},
90835a8693SMatt Spinler 
91835a8693SMatt Spinler                                    {0x7A, "surv_hyp_lost_sp", "TODO"},
92835a8693SMatt Spinler                                    {0x7B, "surv_sp_lost_hyp", "TODO"},
93835a8693SMatt Spinler                                    {0x7C, "surv_sp_lost_hmc", "TODO"},
94835a8693SMatt Spinler                                    {0x7D, "surv_hmc_lost_lpar", "TODO"},
95835a8693SMatt Spinler                                    {0x7E, "surv_hmc_lost_bpa", "TODO"},
96835a8693SMatt Spinler                                    {0x7F, "surv_hmc_lost_hmc", "TODO"},
97835a8693SMatt Spinler 
98835a8693SMatt Spinler                                    {0x80, "platform_firmware", "TODO"},
99835a8693SMatt Spinler                                    {0x81, "sp_firmware", "TODO"},
100835a8693SMatt Spinler                                    {0x82, "hyp_firmware", "TODO"},
101835a8693SMatt Spinler                                    {0x83, "partition_firmware", "TODO"},
102835a8693SMatt Spinler                                    {0x84, "slic_firmware", "TODO"},
103835a8693SMatt Spinler                                    {0x85, "spcn_firmware", "TODO"},
104835a8693SMatt Spinler                                    {0x86, "bulk_power_firmware_side_a", "TODO"},
105835a8693SMatt Spinler                                    {0x87, "hmc_code_firmware", "TODO"},
106835a8693SMatt Spinler                                    {0x88, "bulk_power_firmware_side_b", "TODO"},
107835a8693SMatt Spinler                                    {0x89, "virtual_sp", "TODO"},
108835a8693SMatt Spinler                                    {0x8A, "hostboot", "TODO"},
109835a8693SMatt Spinler                                    {0x8B, "occ", "TODO"},
110835a8693SMatt Spinler                                    {0x8D, "bmc_firmware", "TODO"},
111835a8693SMatt Spinler 
112835a8693SMatt Spinler                                    {0x90, "software", "TODO"},
113835a8693SMatt Spinler                                    {0x91, "os_software", "TODO"},
114835a8693SMatt Spinler                                    {0x92, "xpf_software", "TODO"},
115835a8693SMatt Spinler                                    {0x93, "app_software", "TODO"},
116835a8693SMatt Spinler 
117835a8693SMatt Spinler                                    {0xA0, "ext_env", "TODO"},
118835a8693SMatt Spinler                                    {0xA1, "input_power_source", "TODO"},
119835a8693SMatt Spinler                                    {0xA2, "ambient_temp", "TODO"},
120835a8693SMatt Spinler                                    {0xA3, "user_error", "TODO"},
121835a8693SMatt Spinler                                    {0xA4, "corrosion", "TODO"}};
122835a8693SMatt Spinler 
123835a8693SMatt Spinler /**
124835a8693SMatt Spinler  * The possible values for the severity field in the User Header.
125835a8693SMatt Spinler  */
126835a8693SMatt Spinler const PELValues severityValues = {
127835a8693SMatt Spinler     {0x00, "non_error", "TODO"},
128835a8693SMatt Spinler 
129835a8693SMatt Spinler     {0x10, "recovered", "TODO"},
130835a8693SMatt Spinler     {0x20, "predictive", "TODO"},
131835a8693SMatt Spinler     {0x21, "predictive_degraded_perf", "TODO"},
132835a8693SMatt Spinler     {0x22, "predictive_reboot", "TODO"},
133835a8693SMatt Spinler     {0x23, "predictive_reboot_degraded", "TODO"},
134835a8693SMatt Spinler     {0x24, "predictive_redundancy_loss", "TODO"},
135835a8693SMatt Spinler 
136835a8693SMatt Spinler     {0x40, "unrecoverable", "TODO"},
137835a8693SMatt Spinler     {0x41, "unrecoverable_degraded_perf", "TODO"},
138835a8693SMatt Spinler     {0x44, "unrecoverable_redundancy_loss", "TODO"},
139835a8693SMatt Spinler     {0x45, "unrecoverable_redundancy_loss_perf", "TODO"},
140835a8693SMatt Spinler     {0x48, "unrecoverable_loss_of_function", "TODO"},
141835a8693SMatt Spinler 
142835a8693SMatt Spinler     {0x50, "critical", "TODO"},
143835a8693SMatt Spinler     {0x51, "critical_system_term", "TODO"},
144835a8693SMatt Spinler     {0x52, "critical_imminent_failure", "TODO"},
145835a8693SMatt Spinler     {0x53, "critical_partition_term", "TODO"},
146835a8693SMatt Spinler     {0x54, "critical_partition_imminent_failure", "TODO"},
147835a8693SMatt Spinler 
148835a8693SMatt Spinler     {0x60, "diagnostic_error", "TODO"},
149835a8693SMatt Spinler     {0x61, "diagnostic_error_incorrect_results", "TODO"},
150835a8693SMatt Spinler 
151835a8693SMatt Spinler     {0x71, "symptom_recovered", "TODO"},
152835a8693SMatt Spinler     {0x72, "symptom_predictive", "TODO"},
153835a8693SMatt Spinler     {0x74, "symptom_unrecoverable", "TODO"},
154835a8693SMatt Spinler     {0x75, "symptom_critical", "TODO"},
155835a8693SMatt Spinler     {0x76, "symptom_diag_err", "TODO"}};
156835a8693SMatt Spinler 
157835a8693SMatt Spinler /**
158835a8693SMatt Spinler  * The possible values for the Event Type field in the User Header.
159835a8693SMatt Spinler  */
160835a8693SMatt Spinler const PELValues eventTypeValues = {{0x00, "na", "TODO"},
161835a8693SMatt Spinler                                    {0x01, "misc_information_only", "TODO"},
162835a8693SMatt Spinler                                    {0x02, "tracing_event", "TODO"},
163835a8693SMatt Spinler                                    {0x08, "dump_notification", "TODO"}};
164835a8693SMatt Spinler 
165835a8693SMatt Spinler /**
166835a8693SMatt Spinler  * The possible values for the Event Scope field in the User Header.
167835a8693SMatt Spinler  */
168835a8693SMatt Spinler const PELValues eventScopeValues = {
169835a8693SMatt Spinler     {0x01, "single_partition", "TODO"},
170835a8693SMatt Spinler     {0x02, "multiple_partitions", "TODO"},
171835a8693SMatt Spinler     {0x03, "entire_platform", "TODO"},
172835a8693SMatt Spinler     {0x04, "possibly_multiple_platforms", "TODO"}};
173835a8693SMatt Spinler 
174835a8693SMatt Spinler /**
175835a8693SMatt Spinler  * The possible values for the Action Flags field in the User Header.
176835a8693SMatt Spinler  */
177835a8693SMatt Spinler const PELValues actionFlagsValues = {
178835a8693SMatt Spinler     {0x8000, "service_action", "TODO"}, {0x4000, "hidden", "TODO"},
179835a8693SMatt Spinler     {0x2000, "report", "TODO"},         {0x1000, "dont_report", "TODO"},
180835a8693SMatt Spinler     {0x0800, "call_home", "TODO"},      {0x0100, "termination", "TODO"}};
181835a8693SMatt Spinler 
182835a8693SMatt Spinler /**
183835a8693SMatt Spinler  * The possible values for the Callout Priority field in the SRC.
184835a8693SMatt Spinler  */
185835a8693SMatt Spinler const PELValues calloutPriorityValues = {
186835a8693SMatt Spinler     {'H', "high", "TODO"},           {'M', "medium", "TODO"},
187835a8693SMatt Spinler     {'A', "medium_group_a", "TODO"}, {'B', "medium_group_b", "TODO"},
188835a8693SMatt Spinler     {'C', "medium_group_c", "TODO"}, {'L', "low", "TODO"}};
189835a8693SMatt Spinler 
190835a8693SMatt Spinler PELValues::const_iterator findByValue(uint32_t value, const PELValues& fields)
191835a8693SMatt Spinler {
192835a8693SMatt Spinler     return std::find_if(fields.begin(), fields.end(),
193835a8693SMatt Spinler                         [value](const auto& entry) {
194835a8693SMatt Spinler                             return value == std::get<fieldValuePos>(entry);
195835a8693SMatt Spinler                         });
196835a8693SMatt Spinler }
197835a8693SMatt Spinler 
198835a8693SMatt Spinler PELValues::const_iterator findByName(const std::string& name,
199835a8693SMatt Spinler                                      const PELValues& fields)
200835a8693SMatt Spinler 
201835a8693SMatt Spinler {
202835a8693SMatt Spinler     return std::find_if(fields.begin(), fields.end(),
203835a8693SMatt Spinler                         [&name](const auto& entry) {
204835a8693SMatt Spinler                             return name == std::get<registryNamePos>(entry);
205835a8693SMatt Spinler                         });
206835a8693SMatt Spinler }
207835a8693SMatt Spinler 
208186ce8c9SAatir /**
209186ce8c9SAatir  * @brief Map for section IDs
210186ce8c9SAatir  */
211186ce8c9SAatir const std::map<std::string, std::string> sectionTitles = {
212835a8693SMatt Spinler 
213186ce8c9SAatir     {"PH", "Private Header"},
214186ce8c9SAatir     {"UH", "User Header"},
215186ce8c9SAatir     {"PS", "Primary SRC"},
216186ce8c9SAatir     {"SS", "Secondary SRC"},
217186ce8c9SAatir     {"EH", "Extended User Header"},
218186ce8c9SAatir     {"MT", "Failing MTMS"},
219186ce8c9SAatir     {"DH", "Dump Location"},
220186ce8c9SAatir     {"SW", "Firmware Error"},
221186ce8c9SAatir     {"LP", "Impacted Part"},
222186ce8c9SAatir     {"LR", "Logical Resource"},
223186ce8c9SAatir     {"HM", "HMC ID"},
224186ce8c9SAatir     {"EP", "EPOW"},
225186ce8c9SAatir     {"IE", "IO Event"},
226186ce8c9SAatir     {"MI", "MFG Info"},
227186ce8c9SAatir     {"CH", "Call Home"},
228186ce8c9SAatir     {"UD", "User Data"},
229186ce8c9SAatir     {"EI", "Env Info"},
230186ce8c9SAatir     {"ED", "Extended User Data"},
231186ce8c9SAatir };
232186ce8c9SAatir 
233186ce8c9SAatir } // namespace pel_values
234835a8693SMatt Spinler } // namespace pels
235835a8693SMatt Spinler } // namespace openpower
236