PEL: OpenBMC event log sev to PEL sev helper

Add a function to map the OpenBMC event log severity values to PEL
severity values.

When creating a PEL from an OpenBMC event log, the event log will have
its own severity property, and if the PEL message registry entry for
that error doesn't supply its own severity (it's optional), use this
function to come up with the PEL severity value to use.

Signed-off-by: Matt Spinler <spinler@us.ibm.com>
Change-Id: I66aa001265d8acadb165de874e4ade03a8e28007
diff --git a/extensions/openpower-pels/severity.cpp b/extensions/openpower-pels/severity.cpp
new file mode 100644
index 0000000..1911c12
--- /dev/null
+++ b/extensions/openpower-pels/severity.cpp
@@ -0,0 +1,54 @@
+#include "severity.hpp"
+
+namespace openpower
+{
+namespace pels
+{
+
+using LogSeverity = phosphor::logging::Entry::Level;
+
+/**
+ * @brief The major types of severity values, based on the
+ *        the left nibble of the severity value.
+ */
+enum class PELSeverityType : uint8_t
+{
+    nonError = 0x00,
+    recovered = 0x10,
+    predictive = 0x20,
+    unrecoverable = 0x40,
+    critical = 0x50,
+    diagnostic = 0x60,
+    symptom = 0x70
+};
+
+uint8_t convertOBMCSeverityToPEL(LogSeverity severity)
+{
+    uint8_t pelSeverity = static_cast<uint8_t>(PELSeverityType::unrecoverable);
+    switch (severity)
+    {
+        case (LogSeverity::Notice):
+        case (LogSeverity::Informational):
+        case (LogSeverity::Debug):
+            pelSeverity = static_cast<uint8_t>(PELSeverityType::nonError);
+            break;
+
+        case (LogSeverity::Warning):
+            pelSeverity = static_cast<uint8_t>(PELSeverityType::predictive);
+            break;
+
+        case (LogSeverity::Critical):
+            pelSeverity = static_cast<uint8_t>(PELSeverityType::critical);
+            break;
+
+        case (LogSeverity::Emergency):
+        case (LogSeverity::Alert):
+        case (LogSeverity::Error):
+            pelSeverity = static_cast<uint8_t>(PELSeverityType::unrecoverable);
+            break;
+    }
+
+    return pelSeverity;
+}
+} // namespace pels
+} // namespace openpower