blob: 88a5a5f9126096bf59337b3ac2ef336651afae12 [file] [log] [blame]
Ben Tyner117af992020-05-22 13:32:11 -05001#include <libpdbg.h>
2
Ben Tynerd3cda742020-05-04 08:00:28 -05003#include <analyzer/analyzer_main.hpp>
Ben Tynerb1ebfcb2020-05-08 18:52:48 -05004#include <attn/attention.hpp>
Ben Tynerd3cda742020-05-04 08:00:28 -05005#include <attn/attn_config.hpp>
Ben Tynerb1ebfcb2020-05-08 18:52:48 -05006#include <attn/attn_handler.hpp>
Ben Tynerd3cda742020-05-04 08:00:28 -05007#include <attn/attn_main.hpp>
8#include <cli.hpp>
9
10/**
11 * @brief Attention handler application main()
12 *
13 * This is the main interface to the hardware diagnostics application. This
14 * application can be loaded as a daemon for monitoring the attention
15 * gpio or it can be loaded as an application to analyze hardware and
16 * diagnose hardware error conditions.
17 *
18 * Usage:
19 * --analyze: Analyze the hardware
20 * --daemon: Start the attention handler daemon
21 *
22 * @return 0 = success
23 */
24int main(int argc, char* argv[])
25{
26 int rc = 0; // assume success
27
28 if (argc == 1)
29 {
30 printf("openpower-hw-diags <options>\n");
31 printf("options:\n");
32 printf(" --analyze: Analyze the hardware\n");
33 printf(" --daemon: Start the attn handler daemon\n");
34 }
35 else
36 {
Ben Tyner87eabc62020-05-14 17:56:54 -050037 // Pdbg targets should only be initialized once according to
38 // libpdbg documentation. Initializing them here will make sure
39 // they are initialized for the attention handler, invocation of
40 // the analyzer via attention handler and direct invocation of
41 // the analyzer via command line (--analyze).
42
43 pdbg_targets_init(nullptr); // nullptr == use default fdt
44
Ben Tynerd3cda742020-05-04 08:00:28 -050045 // Either analyze (application mode) or daemon mode
46 if (true == getCliOption(argv, argv + argc, "--analyze"))
47 {
Ben Tynerb1ebfcb2020-05-08 18:52:48 -050048 // errors that were isolated
49 std::map<std::string, std::string> errors;
50
51 rc = analyzer::analyzeHardware(errors); // analyze hardware
52
Ben Tyner87eabc62020-05-14 17:56:54 -050053 printf("analyzer isolated %i error(s)\n", (int)errors.size());
Ben Tynerd3cda742020-05-04 08:00:28 -050054 }
55 // daemon mode
56 else
57 {
58 if (true == getCliOption(argv, argv + argc, "--daemon"))
59 {
60 attn::Config attnConfig; // default config
61
Ben Tynerd70033a2020-06-09 15:59:29 -050062 attn::attnHandler(&attnConfig); // handle pending attentions
Ben Tyner117af992020-05-22 13:32:11 -050063
Ben Tynerd3cda742020-05-04 08:00:28 -050064 attn::attnDaemon(&attnConfig); // start daemon
65 }
66 }
67 }
68
69 return rc;
70}