Adjust TI root cause filtering to use flags instead of hard coded bits

Signed-off-by: Caleb Palmer <cnpalmer@us.ibm.com>
Change-Id: Ib0051df6cd265ff1a47b1a0ce203f793f42b1738
diff --git a/analyzer/filter-root-cause.cpp b/analyzer/filter-root-cause.cpp
index 21537c0..56d56af 100644
--- a/analyzer/filter-root-cause.cpp
+++ b/analyzer/filter-root-cause.cpp
@@ -272,75 +272,15 @@
 //------------------------------------------------------------------------------
 
 bool __findTiRootCause(const std::vector<libhei::Signature>& i_list,
-                       libhei::Signature& o_rootCause)
+                       libhei::Signature& o_rootCause,
+                       const RasDataParser& i_rasData)
 {
     using namespace util::pdbg;
-
-    using func = libhei::NodeId_t (*)(const std::string& i_str);
-    func __hash = libhei::hash<libhei::NodeId_t>;
-
-    // PROC registers
-    static const auto tp_local_fir = __hash("TP_LOCAL_FIR");
-    static const auto occ_fir = __hash("OCC_FIR");
-    static const auto pbao_fir = __hash("PBAO_FIR");
-    static const auto n0_local_fir = __hash("N0_LOCAL_FIR");
-    static const auto int_cq_fir = __hash("INT_CQ_FIR");
-    static const auto nx_cq_fir = __hash("NX_CQ_FIR");
-    static const auto nx_dma_eng_fir = __hash("NX_DMA_ENG_FIR");
-    static const auto vas_fir = __hash("VAS_FIR");
-    static const auto n1_local_fir = __hash("N1_LOCAL_FIR");
-    static const auto mcd_fir = __hash("MCD_FIR");
-    static const auto pb_station_fir_en_1 = __hash("PB_STATION_FIR_EN_1");
-    static const auto pb_station_fir_en_2 = __hash("PB_STATION_FIR_EN_2");
-    static const auto pb_station_fir_en_3 = __hash("PB_STATION_FIR_EN_3");
-    static const auto pb_station_fir_en_4 = __hash("PB_STATION_FIR_EN_4");
-    static const auto pb_station_fir_es_1 = __hash("PB_STATION_FIR_ES_1");
-    static const auto pb_station_fir_es_2 = __hash("PB_STATION_FIR_ES_2");
-    static const auto pb_station_fir_es_3 = __hash("PB_STATION_FIR_ES_3");
-    static const auto pb_station_fir_es_4 = __hash("PB_STATION_FIR_ES_4");
-    static const auto pb_station_fir_eq = __hash("PB_STATION_FIR_EQ");
-    static const auto psihb_fir = __hash("PSIHB_FIR");
-    static const auto pbaf_fir = __hash("PBAF_FIR");
-    static const auto lpc_fir = __hash("LPC_FIR");
-    static const auto eq_core_fir = __hash("EQ_CORE_FIR");
-    static const auto eq_l2_fir = __hash("EQ_L2_FIR");
-    static const auto eq_l3_fir = __hash("EQ_L3_FIR");
-    static const auto eq_ncu_fir = __hash("EQ_NCU_FIR");
-    static const auto eq_local_fir = __hash("EQ_LOCAL_FIR");
-    static const auto eq_qme_fir = __hash("EQ_QME_FIR");
-    static const auto iohs_local_fir = __hash("IOHS_LOCAL_FIR");
-    static const auto iohs_dlp_fir_oc = __hash("IOHS_DLP_FIR_OC");
-    static const auto iohs_dlp_fir_smp = __hash("IOHS_DLP_FIR_SMP");
-    static const auto mc_local_fir = __hash("MC_LOCAL_FIR");
-    static const auto mc_fir = __hash("MC_FIR");
-    static const auto mc_dstl_fir = __hash("MC_DSTL_FIR");
-    static const auto mc_ustl_fir = __hash("MC_USTL_FIR");
-    static const auto nmmu_cq_fir = __hash("NMMU_CQ_FIR");
-    static const auto nmmu_fir = __hash("NMMU_FIR");
-    static const auto mc_omi_dl = __hash("MC_OMI_DL");
-    static const auto pau_local_fir = __hash("PAU_LOCAL_FIR");
-    static const auto pau_ptl_fir = __hash("PAU_PTL_FIR");
-    static const auto pau_phy_fir = __hash("PAU_PHY_FIR");
-    static const auto pau_fir_0 = __hash("PAU_FIR_0");
-    static const auto pau_fir_2 = __hash("PAU_FIR_2");
-    static const auto pci_local_fir = __hash("PCI_LOCAL_FIR");
-    static const auto pci_iop_fir = __hash("PCI_IOP_FIR");
-    static const auto pci_nest_fir = __hash("PCI_NEST_FIR");
-
-    // OCMB registers
-    static const auto ocmb_lfir = __hash("OCMB_LFIR");
-    static const auto mmiofir = __hash("MMIOFIR");
-    static const auto srqfir = __hash("SRQFIR");
-    static const auto rdffir = __hash("RDFFIR");
-    static const auto tlxfir = __hash("TLXFIR");
-    static const auto omi_dl = __hash("OMI_DL");
+    using rdf = RasDataParser::RasDataFlags;
 
     for (const auto& signature : i_list)
     {
-        const auto targetType = getTrgtType(getTrgt(signature.getChip()));
         const auto attnType = signature.getAttnType();
-        const auto id = signature.getId();
-        const auto bit = signature.getBit();
 
         // Only looking for recoverable or unit checkstop attentions.
         if (libhei::ATTN_TYPE_RECOVERABLE != attnType &&
@@ -349,281 +289,13 @@
             continue;
         }
 
-        // Ignore attentions that should not be blamed as root cause of a TI.
-        // This would include informational only FIRs or correctable errors.
-        if (TYPE_PROC == targetType)
+        // Skip any signature with the 'recovered_error' or 'informational_only'
+        // flags.
+        if (i_rasData.isFlagSet(signature, rdf::RECOVERED_ERROR) ||
+            i_rasData.isFlagSet(signature, rdf::INFORMATIONAL_ONLY) ||
+            i_rasData.isFlagSet(signature, rdf::MNFG_INFORMATIONAL_ONLY))
         {
-            if (tp_local_fir == id &&
-                (0 == bit || 1 == bit || 2 == bit || 3 == bit || 4 == bit ||
-                 5 == bit || 7 == bit || 8 == bit || 9 == bit || 10 == bit ||
-                 11 == bit || 20 == bit || 22 == bit || 23 == bit ||
-                 24 == bit || 38 == bit || 40 == bit || 41 == bit ||
-                 46 == bit || 47 == bit || 48 == bit || 55 == bit ||
-                 56 == bit || 57 == bit || 58 == bit || 59 == bit))
-            {
-                continue;
-            }
-
-            if (occ_fir == id &&
-                (9 == bit || 10 == bit || 15 == bit || 20 == bit || 21 == bit ||
-                 22 == bit || 23 == bit || 32 == bit || 33 == bit ||
-                 34 == bit || 36 == bit || 42 == bit || 43 == bit ||
-                 46 == bit || 47 == bit || 48 == bit || 51 == bit ||
-                 52 == bit || 53 == bit || 54 == bit || 57 == bit))
-            {
-                continue;
-            }
-
-            if (pbao_fir == id &&
-                (0 == bit || 1 == bit || 2 == bit || 8 == bit || 11 == bit ||
-                 13 == bit || 15 == bit || 16 == bit || 17 == bit))
-            {
-                continue;
-            }
-
-            if ((n0_local_fir == id || n1_local_fir == id ||
-                 iohs_local_fir == id || mc_local_fir == id ||
-                 pau_local_fir == id || pci_local_fir == id) &&
-                (0 == bit || 1 == bit || 2 == bit || 3 == bit || 4 == bit ||
-                 5 == bit || 6 == bit || 7 == bit || 8 == bit || 9 == bit ||
-                 10 == bit || 11 == bit || 20 == bit || 21 == bit))
-            {
-                continue;
-            }
-
-            if (int_cq_fir == id &&
-                (0 == bit || 3 == bit || 5 == bit || 7 == bit || 36 == bit ||
-                 47 == bit || 48 == bit || 49 == bit || 50 == bit ||
-                 58 == bit || 59 == bit || 60 == bit))
-            {
-                continue;
-            }
-
-            if (nx_cq_fir == id &&
-                (1 == bit || 4 == bit || 18 == bit || 32 == bit || 33 == bit))
-            {
-                continue;
-            }
-
-            if (nx_dma_eng_fir == id &&
-                (4 == bit || 6 == bit || 9 == bit || 10 == bit || 11 == bit ||
-                 34 == bit || 35 == bit || 36 == bit || 37 == bit || 39 == bit))
-            {
-                continue;
-            }
-
-            if (vas_fir == id &&
-                (8 == bit || 9 == bit || 11 == bit || 12 == bit || 13 == bit))
-            {
-                continue;
-            }
-
-            if (mcd_fir == id && (0 == bit))
-            {
-                continue;
-            }
-
-            if ((pb_station_fir_en_1 == id || pb_station_fir_en_2 == id ||
-                 pb_station_fir_en_3 == id || pb_station_fir_en_4 == id ||
-                 pb_station_fir_es_1 == id || pb_station_fir_es_2 == id ||
-                 pb_station_fir_es_3 == id || pb_station_fir_es_4 == id ||
-                 pb_station_fir_eq == id) &&
-                (9 == bit))
-            {
-                continue;
-            }
-
-            if (psihb_fir == id && (0 == bit || 23 == bit))
-            {
-                continue;
-            }
-
-            if (pbaf_fir == id &&
-                (0 == bit || 1 == bit || 3 == bit || 4 == bit || 5 == bit ||
-                 6 == bit || 7 == bit || 8 == bit || 9 == bit || 10 == bit ||
-                 11 == bit || 19 == bit || 20 == bit || 21 == bit ||
-                 28 == bit || 29 == bit || 30 == bit || 31 == bit ||
-                 32 == bit || 33 == bit || 34 == bit || 35 == bit || 36 == bit))
-            {
-                continue;
-            }
-
-            if (lpc_fir == id && (5 == bit))
-            {
-                continue;
-            }
-
-            if (eq_core_fir == id &&
-                (0 == bit || 2 == bit || 4 == bit || 7 == bit || 9 == bit ||
-                 11 == bit || 13 == bit || 18 == bit || 21 == bit ||
-                 24 == bit || 29 == bit || 31 == bit || 37 == bit ||
-                 43 == bit || 56 == bit || 57 == bit))
-            {
-                continue;
-            }
-
-            if (eq_l2_fir == id &&
-                (0 == bit || 6 == bit || 11 == bit || 19 == bit || 36 == bit))
-            {
-                continue;
-            }
-
-            if (eq_l3_fir == id &&
-                (3 == bit || 4 == bit || 7 == bit || 10 == bit || 13 == bit))
-            {
-                continue;
-            }
-
-            if (eq_ncu_fir == id && (9 == bit))
-            {
-                continue;
-            }
-
-            if (eq_local_fir == id &&
-                (0 == bit || 1 == bit || 2 == bit || 3 == bit || 5 == bit ||
-                 6 == bit || 7 == bit || 8 == bit || 9 == bit || 10 == bit ||
-                 11 == bit || 12 == bit || 13 == bit || 14 == bit ||
-                 15 == bit || 16 == bit || 20 == bit || 21 == bit ||
-                 22 == bit || 23 == bit || 24 == bit || 25 == bit ||
-                 26 == bit || 27 == bit || 28 == bit || 29 == bit ||
-                 30 == bit || 31 == bit || 32 == bit || 33 == bit ||
-                 34 == bit || 35 == bit || 36 == bit || 37 == bit ||
-                 38 == bit || 39 == bit))
-            {
-                continue;
-            }
-
-            if (eq_qme_fir == id && (7 == bit || 25 == bit))
-            {
-                continue;
-            }
-
-            if (iohs_dlp_fir_oc == id &&
-                (6 == bit || 7 == bit || 8 == bit || 9 == bit || 10 == bit ||
-                 48 == bit || 49 == bit || 52 == bit || 53 == bit))
-            {
-                continue;
-            }
-
-            if (iohs_dlp_fir_smp == id &&
-                (6 == bit || 7 == bit || 14 == bit || 15 == bit || 16 == bit ||
-                 17 == bit || 38 == bit || 39 == bit || 44 == bit ||
-                 45 == bit || 50 == bit || 51 == bit))
-            {
-                continue;
-            }
-
-            if (mc_fir == id &&
-                (5 == bit || 8 == bit || 15 == bit || 16 == bit))
-            {
-                continue;
-            }
-
-            if (mc_dstl_fir == id &&
-                (0 == bit || 1 == bit || 2 == bit || 3 == bit || 4 == bit ||
-                 5 == bit || 6 == bit || 7 == bit || 14 == bit || 15 == bit))
-            {
-                continue;
-            }
-
-            if (mc_ustl_fir == id &&
-                (6 == bit || 20 == bit || 33 == bit || 34 == bit))
-            {
-                continue;
-            }
-
-            if (nmmu_cq_fir == id && (8 == bit || 11 == bit || 14 == bit))
-            {
-                continue;
-            }
-
-            if (nmmu_fir == id &&
-                (0 == bit || 3 == bit || 8 == bit || 9 == bit || 10 == bit ||
-                 11 == bit || 12 == bit || 13 == bit || 14 == bit ||
-                 15 == bit || 30 == bit || 31 == bit || 41 == bit))
-            {
-                continue;
-            }
-
-            if (mc_omi_dl == id && (2 == bit || 3 == bit || 6 == bit ||
-                                    7 == bit || 9 == bit || 10 == bit))
-            {
-                continue;
-            }
-
-            if (pau_ptl_fir == id && (5 == bit || 9 == bit))
-            {
-                continue;
-            }
-
-            if (pau_phy_fir == id &&
-                (2 == bit || 3 == bit || 6 == bit || 7 == bit || 15 == bit))
-            {
-                continue;
-            }
-
-            if (pau_fir_0 == id && (13 == bit || 30 == bit || 41 == bit))
-            {
-                continue;
-            }
-
-            if (pau_fir_2 == id && (19 == bit || 46 == bit || 49 == bit))
-            {
-                continue;
-            }
-
-            if (pci_iop_fir == id &&
-                (0 == bit || 2 == bit || 4 == bit || 6 == bit || 7 == bit ||
-                 8 == bit || 10 == bit))
-            {
-                continue;
-            }
-
-            if (pci_nest_fir == id && (2 == bit || 5 == bit))
-            {
-                continue;
-            }
-        }
-        else if (TYPE_OCMB == targetType)
-        {
-            if (ocmb_lfir == id &&
-                (0 == bit || 1 == bit || 2 == bit || 8 == bit || 23 == bit ||
-                 37 == bit || 63 == bit))
-            {
-                continue;
-            }
-
-            if (mmiofir == id && (2 == bit))
-            {
-                continue;
-            }
-
-            if (srqfir == id &&
-                (2 == bit || 4 == bit || 14 == bit || 15 == bit || 23 == bit ||
-                 25 == bit || 28 == bit))
-            {
-                continue;
-            }
-
-            if (rdffir == id &&
-                (0 == bit || 1 == bit || 2 == bit || 3 == bit || 4 == bit ||
-                 5 == bit || 6 == bit || 7 == bit || 8 == bit || 9 == bit ||
-                 18 == bit || 38 == bit || 40 == bit || 41 == bit ||
-                 45 == bit || 46 == bit))
-            {
-                continue;
-            }
-
-            if (tlxfir == id && (0 == bit || 9 == bit || 26 == bit))
-            {
-                continue;
-            }
-
-            if (omi_dl == id && (2 == bit || 3 == bit || 6 == bit || 7 == bit ||
-                                 9 == bit || 10 == bit))
-            {
-                continue;
-            }
+            continue;
         }
 
         // At this point, the attention has not been explicitly ignored. So
@@ -720,7 +392,7 @@
         // No system checkstop root cause attentions were found. Next, look for
         // any recoverable or unit checkstop attentions that could be associated
         // with a TI.
-        if (__findTiRootCause(list, o_rootCause))
+        if (__findTiRootCause(list, o_rootCause, i_rasData))
         {
             return true;
         }