PEL: Support MfgSeverity & MfgAction flags PEL reg fields

This is specifically for manufacturing mode.
Look for mfgSeverity and mfgAction flags being set in incoming PELs and
if it is then check for dbus property for QuiesceOnHwError and if it is
found then override the severity value with mfg value.

Signed-off-by: Sumit Kumar <sumit_kumar@in.ibm.com>
Change-Id: Icd590b0e2732df8aa9c2935078528dda8fd4f996
diff --git a/extensions/openpower-pels/data_interface.cpp b/extensions/openpower-pels/data_interface.cpp
index faf035d..2ef99f4 100644
--- a/extensions/openpower-pels/data_interface.cpp
+++ b/extensions/openpower-pels/data_interface.cpp
@@ -35,6 +35,7 @@
 constexpr auto objectMapper = "xyz.openbmc_project.ObjectMapper";
 constexpr auto vpdManager = "com.ibm.VPD.Manager";
 constexpr auto ledGroupManager = "xyz.openbmc_project.LED.GroupManager";
+constexpr auto logSetting = "xyz.openbmc_project.Settings";
 } // namespace service_name
 
 namespace object_path
@@ -52,6 +53,7 @@
 constexpr auto enableHostPELs =
     "/xyz/openbmc_project/logging/send_event_logs_to_host";
 constexpr auto vpdManager = "/com/ibm/VPD/Manager";
+constexpr auto logSetting = "/xyz/openbmc_project/logging/settings";
 } // namespace object_path
 
 namespace interface
@@ -76,6 +78,7 @@
 constexpr auto ledGroup = "xyz.openbmc_project.Led.Group";
 constexpr auto operationalStatus =
     "xyz.openbmc_project.State.Decorator.OperationalStatus";
+constexpr auto logSetting = "xyz.openbmc_project.Logging.Settings";
 } // namespace interface
 
 using namespace sdbusplus::xyz::openbmc_project::State::Boot::server;
@@ -519,5 +522,34 @@
     return std::get<std::vector<std::string>>(names);
 }
 
+bool DataInterface::getQuiesceOnError() const
+{
+    bool ret = false;
+
+    try
+    {
+        auto service =
+            getService(object_path::logSetting, interface::logSetting);
+        if (!service.empty())
+        {
+            DBusValue value;
+            getProperty(service, object_path::logSetting, interface::logSetting,
+                        "QuiesceOnHwError", value);
+
+            ret = std::get<bool>(value);
+        }
+    }
+    catch (const std::exception& e)
+    {
+        log<level::WARNING>(
+            fmt::format("Failed reading QuiesceOnHwError property from "
+                        "Interface: {} exception: {}",
+                        interface::logSetting, e.what())
+                .c_str());
+    }
+
+    return ret;
+}
+
 } // namespace pels
 } // namespace openpower