Add startHost and vcsWorkaround stubs

Change-Id: Id696a7735930806373c214da50660ee0ee830598
Signed-off-by: Matt Spinler <spinler@us.ibm.com>
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..757923d
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,26 @@
+openpower-proc-control
+*.o
+*.lo
+*.la
+*.sw*
+Makefile
+Makefile.in
+configure
+.deps
+.libs
+aclocal.m4
+ar-lib
+*-libtool
+autom4te.cache/
+compile
+config.guess
+config.h
+config.h.in
+config.log
+config.status
+config.sub
+depcomp
+install-sh
+ltmain.sh
+missing
+stamp-h1
diff --git a/Makefile.am b/Makefile.am
new file mode 100644
index 0000000..28dee78
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,11 @@
+AM_DEFAULT_SOURCE_EXT = .cpp
+
+sbin_PROGRAMS = \
+	openpower-proc-control
+
+openpower_proc_control_SOURCES = \
+	proc_control.cpp \
+	p9_procedures.cpp
+
+openpower_proc_control_LDFLAGS = $(PHOSPHOR_LOGGING_LIBS)
+openpower_proc_control_CXXFLAGS = $(PHOSPHOR_LOGGING_CFLAGS)
diff --git a/bootstrap.sh b/bootstrap.sh
new file mode 100755
index 0000000..9941c73
--- /dev/null
+++ b/bootstrap.sh
@@ -0,0 +1,18 @@
+#!/bin/sh -xe
+
+AUTOCONF_FILES="Makefile.in aclocal.m4 ar-lib autom4te.cache compile \
+        config.guess config.h.in config.sub configure depcomp install-sh \
+        ltmain.sh missing *libtool test-driver"
+
+case $1 in
+    clean)
+        test -f Makefile && make maintainer-clean
+        for file in ${AUTOCONF_FILES}; do
+            find -name "$file" | xargs -r rm -rf
+        done
+        exit 0
+        ;;
+esac
+
+autoreconf -i
+echo 'Run "./configure ${CONFIGURE_FLAGS} && make"'
\ No newline at end of file
diff --git a/configure.ac b/configure.ac
new file mode 100644
index 0000000..7abbefb
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,22 @@
+AC_PREREQ([2.69])
+AC_INIT([openpower-proc-control], [1.0], [https://github.com/openbmc/openpower-proc-control/issues])
+AC_LANG([C++])
+AM_INIT_AUTOMAKE([subdir-objects -Wall -Werror foreign dist-xz])
+AM_SILENT_RULES([yes])
+
+# Checks for programs
+AC_PROG_CXX
+AC_PROG_INSTALL #Checks/sets the install variable to be used
+AC_PROG_MAKE_SET
+
+# Checks for typedefs, structures, and compiler characteristics.
+AX_CXX_COMPILE_STDCXX_14([noext])
+AX_APPEND_COMPILE_FLAGS([-Wall -Werror], [CXXFLAGS])
+
+# Checks for library functions
+LT_INIT
+
+PKG_CHECK_MODULES([PHOSPHOR_LOGGING], [phosphor-logging],, [AC_MSG_ERROR([Could not find phosphor-logging...openbmc/phosphor-logging package required])])
+
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
diff --git a/p9_procedures.cpp b/p9_procedures.cpp
new file mode 100644
index 0000000..37a3b10
--- /dev/null
+++ b/p9_procedures.cpp
@@ -0,0 +1,33 @@
+/**
+ * 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.
+ */
+namespace openpower
+{
+namespace p9
+{
+
+void startHost()
+{
+
+}
+
+
+void vcsWorkaround()
+{
+
+}
+
+}
+}
diff --git a/p9_procedures.hpp b/p9_procedures.hpp
new file mode 100644
index 0000000..2e7ff1a
--- /dev/null
+++ b/p9_procedures.hpp
@@ -0,0 +1,22 @@
+#pragma once
+
+namespace openpower
+{
+namespace p9
+{
+
+/**
+ * @brief Starts the self boot engine on P9 position 0 to kick off a boot.
+ * @return void
+ */
+void startHost();
+
+
+/**
+ * @brief Performs the 'VCS Workaround' on all P9s in the system.
+ * @return void
+ */
+void vcsWorkaround();
+
+}
+}
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;
+}