Combine attn handler and openpower hwdiags
The main binary is now openpower-hw-diags. This application will take a
command line option --daemon to load it as a daemon. As a daemon it will
register the attention handler portion of application as the attention
gpio event handler. If the application is not loaded as a daemon it will
operate as a stand alone application which accepts command line options
for requesting hardware analyses and diagnostics operations.
Change-Id: I6210b744cb320873d74a0757928f904ca6296846
Signed-off-by: Ben Tyner <ben.tyner@ibm.com>
diff --git a/attn/attn_handler.cpp b/attn/attn_handler.cpp
index 0463837..ec600e5 100644
--- a/attn/attn_handler.cpp
+++ b/attn/attn_handler.cpp
@@ -1,5 +1,6 @@
#include <libpdbg.h>
+#include <analyzer/analyzer_main.hpp>
#include <phosphor-logging/log.hpp>
#include <sdbusplus/bus.hpp>
@@ -157,12 +158,7 @@
ss << "[ATTN] checkstop" << std::endl;
log<level::INFO>(ss.str().c_str());
- if (0 != rc)
- {
- std::stringstream ss; // log message stream
- ss << "[ATTN] checkstop NOT handled" << std::endl;
- log<level::INFO>(ss.str().c_str());
- }
+ analyzer::analyzeHardware();
// TODO recoverable errors?
diff --git a/attn/attn_handler.service b/attn/attn_handler.service
index 42bbf34..43d3db7 100644
--- a/attn/attn_handler.service
+++ b/attn/attn_handler.service
@@ -5,7 +5,7 @@
After=mapper-wait@-xyz-openbmc_project-logging.service
[Service]
-ExecStart=/usr/bin/attn_handler
+ExecStart=/usr/bin/openpower-hw-diags --daemon
Restart=on-failure
[Install]
diff --git a/attn/attn_main.cpp b/attn/attn_main.cpp
index c0e2451..492531b 100644
--- a/attn/attn_main.cpp
+++ b/attn/attn_main.cpp
@@ -1,66 +1,19 @@
-#include <libpdbg.h>
+#include <../attn/attn_monitor.hpp>
-#include <attn_handler.hpp>
-#include <attn_monitor.hpp>
-
-#include <algorithm>
-
-/*
- * @brief Search the command line arguments for an option
- *
- * @param i_begin command line args vector begin
- * @param i_end command line args vector end
- * @param i_option configuration option to look for
- *
- * @return true = option found on command line
- */
-bool getCliOption(char** i_begin, char** i_end, const std::string& i_option)
+namespace attn
{
- return (i_end != std::find(i_begin, i_end, i_option));
-}
-
-/*
- * @brief Search the command line arguments for a setting value
- *
- * @param i_begin command line args vector begin
- * @param i_end command line args vectory end
- * @param i_setting configuration setting to look for
- *
- * @return value of the setting or 0 if setting not found or value not given
- */
-char* getCliSetting(char** i_begin, char** i_end, const std::string& i_setting)
-{
- char** value = std::find(i_begin, i_end, i_setting);
- if (value != i_end && ++value != i_end)
- {
- return *value;
- }
- return 0; // nullptr
-}
/**
* @brief Attention handler application main()
- *
- * This is the main interface to the Attention handler application, it will
- * initialize the libgpd targets and start a gpio mointor.
- *
- * Command line arguments:
- *
- * breakpoints - enables breakpoint special attn handling
- *
- * @return 0 = success
*/
-int main(int argc, char* argv[])
+int attnDaemon(bool i_breakpoints)
{
- int rc = 0; // return code
+ int rc = 0; // assume success
gpiod_line* line; // gpio line to monitor
boost::asio::io_service io; // async io monitoring service
- // initialize pdbg targets
- pdbg_targets_init(nullptr);
-
// GPIO line configuration (falling edge, active low)
struct gpiod_line_request_config config
{
@@ -76,16 +29,15 @@
}
else
{
- // Check command line args for breakpoint handling enable option
- bool bp_enable = getCliOption(argv, argv + argc, "-breakpoints");
-
// Creating a vector of one gpio to monitor
std::vector<std::unique_ptr<attn::AttnMonitor>> gpios;
- gpios.push_back(
- std::make_unique<attn::AttnMonitor>(line, config, io, bp_enable));
+ gpios.push_back(std::make_unique<attn::AttnMonitor>(line, config, io,
+ i_breakpoints));
io.run(); // start GPIO monitor
}
return rc;
}
+
+} // namespace attn
diff --git a/attn/attn_main.hpp b/attn/attn_main.hpp
new file mode 100644
index 0000000..4403b45
--- /dev/null
+++ b/attn/attn_main.hpp
@@ -0,0 +1,18 @@
+#pragma once
+
+namespace attn
+{
+
+/**
+ * @brief Load the attention handler as a gpio monitor
+ *
+ * Request the attention gpio for monitoring and attach the attention handler
+ * as the gpio event handler.
+ *
+ * @param i_breakpoints enables breakpoint special attn handling
+ *
+ * @return 0 == success
+ */
+int attnDaemon(bool i_breakpoints);
+
+} // namespace attn
diff --git a/attn/meson.build b/attn/meson.build
index c715dce..dfa1ce9 100644
--- a/attn/meson.build
+++ b/attn/meson.build
@@ -28,8 +28,10 @@
dependency('systemd').get_pkgconfig_variable(
'systemdsystemunitdir')
)
-executable('attn_handler',
+
+attn = static_library('attn_handler',
'attn_main.cpp', 'attn_handler.cpp', 'attn_monitor.cpp',
+ include_directories : incdir,
dependencies : [whole_archive, libpdbg,
no_whole_archive, sdbusplus, libgpiod],
cpp_args : boost_args,