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