1*c1f5ed6fSDhruvaraj Subhashchandran ## This file is a template. The comment below is emitted 2*c1f5ed6fSDhruvaraj Subhashchandran ## into the rendered file; feel free to edit this file. 3*c1f5ed6fSDhruvaraj Subhashchandran // !!! WARNING: This is a GENERATED Code..Please do NOT Edit !!! 4*c1f5ed6fSDhruvaraj Subhashchandran #include "dump_types.hpp" 5*c1f5ed6fSDhruvaraj Subhashchandran 6*c1f5ed6fSDhruvaraj Subhashchandran #include <phosphor-logging/elog-errors.hpp> 7*c1f5ed6fSDhruvaraj Subhashchandran #include <phosphor-logging/elog.hpp> 8*c1f5ed6fSDhruvaraj Subhashchandran #include <phosphor-logging/lg2.hpp> 9*c1f5ed6fSDhruvaraj Subhashchandran #include <xyz/openbmc_project/Common/error.hpp> 10*c1f5ed6fSDhruvaraj Subhashchandran 11*c1f5ed6fSDhruvaraj Subhashchandran namespace phosphor 12*c1f5ed6fSDhruvaraj Subhashchandran { 13*c1f5ed6fSDhruvaraj Subhashchandran namespace dump 14*c1f5ed6fSDhruvaraj Subhashchandran { 15*c1f5ed6fSDhruvaraj Subhashchandran 16*c1f5ed6fSDhruvaraj Subhashchandran DUMP_TYPE_TABLE dumpTypeTable = { 17*c1f5ed6fSDhruvaraj Subhashchandran % for item in DUMP_TYPE_TABLE: 18*c1f5ed6fSDhruvaraj Subhashchandran % for key, values in item.items(): 19*c1f5ed6fSDhruvaraj Subhashchandran {"${key}", {DumpTypes::${values[0].upper()}, "${values[1]}"}}, 20*c1f5ed6fSDhruvaraj Subhashchandran % endfor 21*c1f5ed6fSDhruvaraj Subhashchandran % endfor 22*c1f5ed6fSDhruvaraj Subhashchandran }; 23*c1f5ed6fSDhruvaraj Subhashchandran 24*c1f5ed6fSDhruvaraj Subhashchandran DUMP_TYPE_TO_STRING_MAP dumpTypeToStringMap = { 25*c1f5ed6fSDhruvaraj Subhashchandran % for item in DUMP_TYPE_TABLE: 26*c1f5ed6fSDhruvaraj Subhashchandran % for key, values in item.items(): 27*c1f5ed6fSDhruvaraj Subhashchandran {DumpTypes::${values[0].upper()}, "${values[0]}"}, 28*c1f5ed6fSDhruvaraj Subhashchandran % endfor 29*c1f5ed6fSDhruvaraj Subhashchandran % endfor 30*c1f5ed6fSDhruvaraj Subhashchandran }; 31*c1f5ed6fSDhruvaraj Subhashchandran 32*c1f5ed6fSDhruvaraj Subhashchandran std::optional<std::string> dumpTypeToString(const DumpTypes& dumpType) 33*c1f5ed6fSDhruvaraj Subhashchandran { 34*c1f5ed6fSDhruvaraj Subhashchandran auto it = dumpTypeToStringMap.find(dumpType); 35*c1f5ed6fSDhruvaraj Subhashchandran if (it != dumpTypeToStringMap.end()) 36*c1f5ed6fSDhruvaraj Subhashchandran { 37*c1f5ed6fSDhruvaraj Subhashchandran return it->second; 38*c1f5ed6fSDhruvaraj Subhashchandran } 39*c1f5ed6fSDhruvaraj Subhashchandran return std::nullopt; 40*c1f5ed6fSDhruvaraj Subhashchandran } 41*c1f5ed6fSDhruvaraj Subhashchandran 42*c1f5ed6fSDhruvaraj Subhashchandran std::optional<DumpTypes> stringToDumpType(const std::string& str) 43*c1f5ed6fSDhruvaraj Subhashchandran { 44*c1f5ed6fSDhruvaraj Subhashchandran auto it = std::ranges::find_if(dumpTypeToStringMap, 45*c1f5ed6fSDhruvaraj Subhashchandran [&str](const auto& pair) { 46*c1f5ed6fSDhruvaraj Subhashchandran return pair.second == str; 47*c1f5ed6fSDhruvaraj Subhashchandran }); 48*c1f5ed6fSDhruvaraj Subhashchandran 49*c1f5ed6fSDhruvaraj Subhashchandran if (it != dumpTypeToStringMap.end()) 50*c1f5ed6fSDhruvaraj Subhashchandran { 51*c1f5ed6fSDhruvaraj Subhashchandran return it->first; 52*c1f5ed6fSDhruvaraj Subhashchandran } 53*c1f5ed6fSDhruvaraj Subhashchandran return std::nullopt; 54*c1f5ed6fSDhruvaraj Subhashchandran } 55*c1f5ed6fSDhruvaraj Subhashchandran 56*c1f5ed6fSDhruvaraj Subhashchandran DumpTypes validateDumpType(const std::string& type, const std::string& category) 57*c1f5ed6fSDhruvaraj Subhashchandran { 58*c1f5ed6fSDhruvaraj Subhashchandran using namespace phosphor::logging; 59*c1f5ed6fSDhruvaraj Subhashchandran using InvalidArgument = 60*c1f5ed6fSDhruvaraj Subhashchandran sdbusplus::xyz::openbmc_project::Common::Error::InvalidArgument; 61*c1f5ed6fSDhruvaraj Subhashchandran using Argument = xyz::openbmc_project::Common::InvalidArgument; 62*c1f5ed6fSDhruvaraj Subhashchandran // Dump type user will be return if type is empty 63*c1f5ed6fSDhruvaraj Subhashchandran DumpTypes dumpType = DumpTypes::USER; 64*c1f5ed6fSDhruvaraj Subhashchandran if (type.empty()) 65*c1f5ed6fSDhruvaraj Subhashchandran { 66*c1f5ed6fSDhruvaraj Subhashchandran return dumpType; 67*c1f5ed6fSDhruvaraj Subhashchandran } 68*c1f5ed6fSDhruvaraj Subhashchandran 69*c1f5ed6fSDhruvaraj Subhashchandran // Find any matching dump collection type for the category 70*c1f5ed6fSDhruvaraj Subhashchandran auto it = std::find_if(dumpTypeTable.begin(), dumpTypeTable.end(), 71*c1f5ed6fSDhruvaraj Subhashchandran [&](const auto& pair) { 72*c1f5ed6fSDhruvaraj Subhashchandran return pair.first == type && pair.second.second == category; 73*c1f5ed6fSDhruvaraj Subhashchandran }); 74*c1f5ed6fSDhruvaraj Subhashchandran 75*c1f5ed6fSDhruvaraj Subhashchandran if (it != dumpTypeTable.end()) 76*c1f5ed6fSDhruvaraj Subhashchandran { 77*c1f5ed6fSDhruvaraj Subhashchandran dumpType = it->second.first; 78*c1f5ed6fSDhruvaraj Subhashchandran } 79*c1f5ed6fSDhruvaraj Subhashchandran else 80*c1f5ed6fSDhruvaraj Subhashchandran { 81*c1f5ed6fSDhruvaraj Subhashchandran lg2::error("An invalid dump type: {TYPE} passed", "TYPE", type); 82*c1f5ed6fSDhruvaraj Subhashchandran elog<InvalidArgument>(Argument::ARGUMENT_NAME("BMC_DUMP_TYPE"), 83*c1f5ed6fSDhruvaraj Subhashchandran Argument::ARGUMENT_VALUE(type.c_str())); 84*c1f5ed6fSDhruvaraj Subhashchandran } 85*c1f5ed6fSDhruvaraj Subhashchandran return dumpType; 86*c1f5ed6fSDhruvaraj Subhashchandran } 87*c1f5ed6fSDhruvaraj Subhashchandran 88*c1f5ed6fSDhruvaraj Subhashchandran } // namespace dump 89*c1f5ed6fSDhruvaraj Subhashchandran } // namespace phosphor 90