Add startHost and vcsWorkaround stubs

Change-Id: Id696a7735930806373c214da50660ee0ee830598
Signed-off-by: Matt Spinler <spinler@us.ibm.com>
diff --git a/proc_control.cpp b/proc_control.cpp
new file mode 100644
index 0000000..8f6f86c
--- /dev/null
+++ b/proc_control.cpp
@@ -0,0 +1,74 @@
+/**
+ * Copyright © 2017 IBM Corporation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include <algorithm>
+#include <functional>
+#include <iostream>
+#include <phosphor-logging/log.hpp>
+#include "p9_procedures.hpp"
+
+constexpr auto procedures =
+{
+    std::make_tuple("startHost", openpower::p9::startHost),
+    std::make_tuple("vcsWorkaround", openpower::p9::vcsWorkaround)
+};
+
+void usage(char** argv)
+{
+    std::cerr << "Usage: " << argv[0] << " [action]\n";
+    std::cerr << "   actions:\n";
+
+    for (const auto& p : procedures)
+    {
+        std::cerr << "     " << std::get<0>(p) << "\n";
+    }
+}
+
+int main(int argc, char** argv)
+{
+    if (argc != 2)
+    {
+        usage(argv);
+        return -1;
+    }
+
+    std::string action{argv[1]};
+
+    auto finder = [&action](const auto& p)
+    {
+        return std::get<0>(p) == action;
+    };
+    auto procedure = std::find_if(procedures.begin(), procedures.end(), finder);
+
+    if (procedure == procedures.end())
+    {
+        usage(argv);
+        return -1;
+    }
+
+    auto function = std::get<1>(*procedure);
+    try
+    {
+        function();
+    }
+    catch (std::exception& e)
+    {
+        //TODO: commit an actual error that does a callout
+        phosphor::logging::log<phosphor::logging::level::ERR>(e.what());
+        return -1;
+    }
+
+    return 0;
+}