ipmi: split library constructor

Split out the library constuctor so that the code can be built into
separate library modules.

Signed-off-by: Patrick Venture <venture@google.com>
Change-Id: I70ac51aaea200d4634f9220a642b0e2bef6748bd
diff --git a/ipmi/main_ipmi.cpp b/ipmi/main_ipmi.cpp
new file mode 100644
index 0000000..6056464
--- /dev/null
+++ b/ipmi/main_ipmi.cpp
@@ -0,0 +1,38 @@
+/**
+ * Copyright 2017 Google Inc.
+ *
+ * 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 "manualcmds.hpp"
+
+#include <ipmid/iana.hpp>
+#include <ipmid/oemopenbmc.hpp>
+#include <ipmid/oemrouter.hpp>
+
+#include <cstdio>
+
+void setupGlobalOemFanControl() __attribute__((constructor));
+
+void setupGlobalOemFanControl()
+{
+    oem::Router* router = oem::mutableRouter();
+
+    std::fprintf(
+        stderr,
+        "Registering OEM:[%#08X], Cmd:[%#04X] for Manual Zone Control\n",
+        oem::obmcOemNumber, oem::Cmd::fanManualCmd);
+
+    router->registerHandler(oem::obmcOemNumber, oem::Cmd::fanManualCmd,
+                            pid_control::ipmi::manualModeControl);
+}
diff --git a/ipmi/manual_messages.hpp b/ipmi/manual_messages.hpp
new file mode 100644
index 0000000..5418d60
--- /dev/null
+++ b/ipmi/manual_messages.hpp
@@ -0,0 +1,31 @@
+#pragma once
+
+#include <cstdint>
+
+namespace pid_control
+{
+namespace ipmi
+{
+
+enum ManualSubCmd
+{
+    getControlState = 0,
+    setControlState = 1,
+    getFailsafeState = 2,
+};
+
+struct FanCtrlRequest
+{
+    uint8_t command;
+    uint8_t zone;
+} __attribute__((packed));
+
+struct FanCtrlRequestSet
+{
+    uint8_t command;
+    uint8_t zone;
+    uint8_t value;
+} __attribute__((packed));
+
+} // namespace ipmi
+} // namespace pid_control
diff --git a/ipmi/manualcmds.cpp b/ipmi/manualcmds.cpp
index f376d44..e11d49a 100644
--- a/ipmi/manualcmds.cpp
+++ b/ipmi/manualcmds.cpp
@@ -16,11 +16,10 @@
 
 #include "manualcmds.hpp"
 
+#include "manual_messages.hpp"
+
 #include <ipmid/api.h>
 
-#include <ipmid/iana.hpp>
-#include <ipmid/oemopenbmc.hpp>
-#include <ipmid/oemrouter.hpp>
 #include <sdbusplus/bus.hpp>
 #include <sdbusplus/message.hpp>
 
@@ -195,8 +194,8 @@
 }
 
 /* Three command packages: get, set true, set false */
-static ipmi_ret_t manualModeControl(ipmi_cmd_t cmd, const uint8_t* reqBuf,
-                                    uint8_t* replyCmdBuf, size_t* dataLen)
+ipmi_ret_t manualModeControl(ipmi_cmd_t cmd, const uint8_t* reqBuf,
+                             uint8_t* replyCmdBuf, size_t* dataLen)
 {
     // FanCtrlRequest is the smaller of the requests, so it's at a minimum.
     if (*dataLen < sizeof(struct FanCtrlRequest))
@@ -226,17 +225,3 @@
 
 } // namespace ipmi
 } // namespace pid_control
-
-void setupGlobalOemFanControl() __attribute__((constructor));
-
-void setupGlobalOemFanControl()
-{
-    oem::Router* router = oem::mutableRouter();
-
-    fprintf(stderr,
-            "Registering OEM:[%#08X], Cmd:[%#04X] for Manual Zone Control\n",
-            oem::obmcOemNumber, oem::Cmd::fanManualCmd);
-
-    router->registerHandler(oem::obmcOemNumber, oem::Cmd::fanManualCmd,
-                            pid_control::ipmi::manualModeControl);
-}
diff --git a/ipmi/manualcmds.hpp b/ipmi/manualcmds.hpp
index 5418d60..ac1513d 100644
--- a/ipmi/manualcmds.hpp
+++ b/ipmi/manualcmds.hpp
@@ -1,5 +1,7 @@
 #pragma once
 
+#include <ipmid/api.h>
+
 #include <cstdint>
 
 namespace pid_control
@@ -7,25 +9,8 @@
 namespace ipmi
 {
 
-enum ManualSubCmd
-{
-    getControlState = 0,
-    setControlState = 1,
-    getFailsafeState = 2,
-};
-
-struct FanCtrlRequest
-{
-    uint8_t command;
-    uint8_t zone;
-} __attribute__((packed));
-
-struct FanCtrlRequestSet
-{
-    uint8_t command;
-    uint8_t zone;
-    uint8_t value;
-} __attribute__((packed));
+ipmi_ret_t manualModeControl(ipmi_cmd_t cmd, const uint8_t* reqBuf,
+                             uint8_t* replyCmdBuf, size_t* dataLen);
 
 } // namespace ipmi
 } // namespace pid_control