Attn: Add support for raw PEL creation

Attention handler needs to pass raw PEL's to phosphor logging in order
to submit PEL's on behalf of other components (e.g. hypervisor)

Signed-off-by: Ben Tyner <ben.tyner@ibm.com>
Change-Id: Id9a30728e7b463ac876b5dca023ca2627a25bb16
diff --git a/attn/ti_handler.cpp b/attn/ti_handler.cpp
index 35fb346..e1dce7c 100644
--- a/attn/ti_handler.cpp
+++ b/attn/ti_handler.cpp
@@ -1,6 +1,7 @@
 #include <attn/attn_common.hpp>
 #include <attn/attn_handler.hpp>
 #include <attn/attn_logging.hpp>
+#include <attn/pel/pel_common.hpp>
 #include <attn/ti_handler.hpp>
 #include <sdbusplus/bus.hpp>
 #include <sdbusplus/exception.hpp>
@@ -17,7 +18,7 @@
  * Use the TI info data area to determine if this is either a HB or a PHYP
  * TI event then handle the event.
  *
- * @param i_tiDataArea pointer to the TI infor data
+ * @param i_tiDataArea pointer to the TI info data
  */
 int tiHandler(TiDataArea* i_tiDataArea)
 {
@@ -84,10 +85,17 @@
     if (nullptr != i_tiDataArea)
     {
         parsePhypOpalTiInfo(tiAdditionalData, i_tiDataArea);
-        parseRawTiInfo(tiAdditionalData, i_tiDataArea);
     }
 
-    eventTerminate(tiAdditionalData); // generate PEL
+    tiAdditionalData["Subsystem"] =
+        std::to_string(static_cast<uint8_t>(pel::SubsystemID::hypervisor));
+
+    char srcChar[8];
+    memcpy(srcChar, &(i_tiDataArea->asciiData0), 4);
+    memcpy(&srcChar[4], &(i_tiDataArea->asciiData1), 4);
+    tiAdditionalData["SrcAscii"] = std::string{srcChar};
+
+    eventTerminate(tiAdditionalData, (char*)i_tiDataArea);
 }
 
 /**
@@ -207,42 +215,19 @@
     if (nullptr != i_tiDataArea)
     {
         parseHbTiInfo(tiAdditionalData, i_tiDataArea);
-        parseRawTiInfo(tiAdditionalData, i_tiDataArea);
     }
 
     if (true == generatePel)
     {
-        eventTerminate(tiAdditionalData); // generate PEL
-    }
-}
+        tiAdditionalData["Subsystem"] =
+            std::to_string(static_cast<uint8_t>(pel::SubsystemID::hostboot));
 
-/** @brief Parse the TI info data area into map as raw 32-bit fields */
-void parseRawTiInfo(std::map<std::string, std::string>& i_map,
-                    TiDataArea* i_buffer)
-{
-    if (nullptr == i_buffer)
-    {
-        return;
-    }
+        char srcChar[8];
+        memcpy(srcChar, &(i_tiDataArea->srcWord12HbWord0), 4);
+        memcpy(&srcChar[4], &(i_tiDataArea->asciiData1), 4);
+        tiAdditionalData["SrcAscii"] = std::string{srcChar};
 
-    uint32_t* tiDataArea = (uint32_t*)i_buffer;
-    std::stringstream ss;
-
-    ss << std::hex << std::setfill('0');
-    ss << "raw:";
-    while (tiDataArea <= (uint32_t*)((char*)i_buffer + sizeof(TiDataArea)))
-    {
-        ss << std::setw(8) << std::endl << be32toh(*tiDataArea);
-        tiDataArea++;
-    }
-
-    std::string key, value;
-    char delim = ':';
-
-    while (std::getline(ss, key, delim))
-    {
-        std::getline(ss, value, delim);
-        i_map[key] = value;
+        eventTerminate(tiAdditionalData, (char*)i_tiDataArea);
     }
 }