PEL: Add CalloutsWhenNoADMatch msg reg support

There is a new use case where we need to do one callout in the message
registry based on the value of an AdditionalData field value, and
another callout in all other cases.

To support this, this commit is adding a new 'CalloutsWhenNoADMatch'
field in the PEL message registry that allows one to add callouts when
there is no match on the 'ADValue' field.  This behaves like an 'else'
leg to the 'if AdValue == X' structure in the message registry.

Example:
{
    "ADName": "PROC_NUM",
    "CalloutsWithTheirADValues":
    [
        {
            "ADValue": "0",
            "Callouts":
            [
                // callouts when PROC_NUM == 0
            ]
        },
        {
            "ADValue": "1",
            "Callouts":
            [
                // callouts when PROC_NUM == 1
            ]
        }
    ],
    "CalloutsWhenNoADMatch": [
        {
            // callouts when PROC_NUM != 0 or 1
        }
    ]
}

Signed-off-by: Matt Spinler <spinler@us.ibm.com>
Change-Id: Ib8e208ff950a643302e856c7dd2b7474fec61b26
diff --git a/extensions/openpower-pels/registry.cpp b/extensions/openpower-pels/registry.cpp
index a37bb6e..578a67e 100644
--- a/extensions/openpower-pels/registry.cpp
+++ b/extensions/openpower-pels/registry.cpp
@@ -562,7 +562,14 @@
     if (it == callouts.end())
     {
         // This can happen if not all possible values were in the
-        // message registry and that's fine.
+        // message registry and that's fine.  There may be a
+        // "CalloutsWhenNoADMatch" section that contains callouts
+        // to use in this case.
+        if (json.contains("CalloutsWhenNoADMatch"))
+        {
+            return getCalloutsWithoutAD(json["CalloutsWhenNoADMatch"],
+                                        systemNames);
+        }
         return std::vector<RegistryCallout>{};
     }