PEL: Get rid of the enum for a maint procedure

It simplifies the code to just use the string name of the procedure as defined
by the message registry schema, and make it be less maintenance to add
new procedures in the future, especially if they come from the registry
so the enum isn't even needed.

This will also make it the same as upcoming support for symbolic FRU
callouts, which will always just come from the registry or an external
user so would not need an enum.

Signed-off-by: Matt Spinler <spinler@us.ibm.com>
Change-Id: Ia8550235678ba1fc717a6b0875e2d7ff3888bfec
diff --git a/extensions/openpower-pels/fru_identity.cpp b/extensions/openpower-pels/fru_identity.cpp
index 7e9bf1b..8cf6382 100644
--- a/extensions/openpower-pels/fru_identity.cpp
+++ b/extensions/openpower-pels/fru_identity.cpp
@@ -17,6 +17,10 @@
 
 #include "pel_values.hpp"
 
+#include <phosphor-logging/log.hpp>
+
+using namespace phosphor::logging;
+
 namespace openpower
 {
 namespace pels
@@ -79,12 +83,12 @@
     _size = flattenedSize();
 }
 
-FRUIdentity::FRUIdentity(MaintProcedure procedure)
+FRUIdentity::FRUIdentity(const std::string& procedureFromRegistry)
 {
     _type = substructureType;
     _flags = maintenanceProc;
 
-    setMaintenanceProcedure(procedure);
+    setMaintenanceProcedure(procedureFromRegistry);
 
     _size = flattenedSize();
 }
@@ -203,15 +207,25 @@
     strncpy(_sn.data(), serialNumber.c_str(), _sn.size());
 }
 
-void FRUIdentity::setMaintenanceProcedure(MaintProcedure procedure)
+void FRUIdentity::setMaintenanceProcedure(
+    const std::string& procedureFromRegistry)
 {
     _flags |= maintProcSupplied;
     _flags &= ~pnSupplied;
 
-    auto proc = pel_values::getMaintProcedure(procedure);
-
-    strncpy(_pnOrProcedureID.data(), std::get<pel_values::mpNamePos>(*proc),
+    if (pel_values::maintenanceProcedures.count(procedureFromRegistry))
+    {
+        strncpy(
+            _pnOrProcedureID.data(),
+            pel_values::maintenanceProcedures.at(procedureFromRegistry).c_str(),
             _pnOrProcedureID.size());
+    }
+    else
+    {
+        log<level::ERR>("Invalid maintenance procedure",
+                        entry("PROCEDURE=%s", procedureFromRegistry.c_str()));
+        strncpy(_pnOrProcedureID.data(), "INVALID", _pnOrProcedureID.size());
+    }
 
     // ensure null terminated
     _pnOrProcedureID.back() = 0;