blob: ced828c000a145f90c2e51b3fdc9591ed3643a9b [file] [log] [blame]
#include <libpdbg.h>
#include <analyzer/analyzer_main.hpp>
#include <attn/attention.hpp>
#include <attn/attn_config.hpp>
#include <attn/attn_dump.hpp>
#include <attn/attn_handler.hpp>
#include <attn/attn_main.hpp>
#include <buildinfo.hpp>
#include <cli.hpp>
#include <hei_buildinfo.hpp>
#include <util/pdbg_callback.hpp>
/**
* @brief Attention handler application main()
*
* This is the main interface to the hardware diagnostics application. This
* application can be loaded as a daemon for monitoring the attention
* gpio or it can be loaded as an application to analyze hardware and
* diagnose hardware error conditions.
*
* Usage:
* --analyze: Analyze the hardware
* --daemon: Start the attention handler daemon
*
* @return 0 = success
*/
int main(int argc, char* argv[])
{
int rc = 0; // assume success
if (argc == 1)
{
printf("openpower-hw-diags <options>\n");
printf("options:\n");
printf(" --analyze: Analyze the hardware\n");
printf(" --daemon: Start the attn handler daemon\n");
printf("hwdiag: %s, hei: %s\n", BUILDINFO, libhei::getBuildInfo());
}
else
{
// set PDBG log callback function.
pdbg_set_logfunc(util::pdbg_log_callback);
// Pdbg targets should only be initialized once according to
// libpdbg documentation. Initializing them here will make sure
// they are initialized for the attention handler, invocation of
// the analyzer via attention handler and direct invocation of
// the analyzer via command line (--analyze).
pdbg_targets_init(nullptr); // nullptr == use default fdt
// Either analyze (application mode) or daemon mode
if (true == getCliOption(argv, argv + argc, "--analyze"))
{
// Analyze the host hardware.
// TODO: At the moment, we'll only do MANUAL analysis (no service
// actions). It may be possible in the future to allow command
// line options to change the analysis type, if needed.
attn::DumpParameters dumpParameters;
analyzer::analyzeHardware(analyzer::AnalysisType::MANUAL,
dumpParameters);
}
// daemon mode
else
{
if (true == getCliOption(argv, argv + argc, "--daemon"))
{
attn::Config attnConfig; // default config
// convert remaining cmd line args to config values
parseConfig(argv, argv + argc, &attnConfig);
attn::attnHandler(&attnConfig); // handle pending attentions
attn::attnDaemon(&attnConfig); // start daemon
}
}
}
return rc;
}