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/Makefile.am b/Makefile.am
index 728fe8a..b2116c9 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -118,6 +118,7 @@
libmanualcmdsdir = ${libdir}/ipmid-providers
libmanualcmds_LTLIBRARIES = libmanualcmds.la
libmanualcmds_la_SOURCES = \
+ ipmi/main_ipmi.cpp \
ipmi/manualcmds.cpp
libmanualcmds_la_LDFLAGS = \
$(SYSTEMD_LIBS) \
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