xref: /openbmc/openpower-hw-diags/main_nl.cpp (revision eea45427)
1 #include <libpdbg.h>
2 
3 #include <analyzer/analyzer_main.hpp>
4 #include <attn/attention.hpp>
5 #include <attn/attn_config.hpp>
6 #include <attn/attn_handler.hpp>
7 #include <attn/attn_main.hpp>
8 #include <buildinfo.hpp>
9 #include <cli.hpp>
10 
11 /**
12  * @brief Attention handler application main()
13  *
14  * This is the main interface to the hardware diagnostics application. This
15  * application can be loaded as a daemon for monitoring the attention
16  * gpio or it can be loaded as an application to analyze hardware and
17  * diagnose hardware error conditions.
18  *
19  *     Usage:
20  *        --analyze:              Analyze the hardware
21  *        --daemon:               Start the attention handler daemon
22  *
23  * @return 0 = success
24  */
25 int main(int argc, char* argv[])
26 {
27     int rc = 0; // assume success
28 
29     if (argc == 1)
30     {
31         printf("openpower-hw-diags <options>\n");
32         printf("options:\n");
33         printf("  --analyze:              Analyze the hardware\n");
34         printf("  --daemon:               Start the attn handler daemon\n");
35         printf("hwdiag: %s, hei: %s\n", BUILDINFO, analyzer::getBuildInfo());
36     }
37     else
38     {
39         // Pdbg targets should only be initialized once according to
40         // libpdbg documentation. Initializing them here will make sure
41         // they are initialized for the attention handler, invocation of
42         // the analyzer via attention handler and direct invocation of
43         // the analyzer via command line (--analyze).
44 
45         pdbg_targets_init(nullptr); // nullptr == use default fdt
46 
47         // Either analyze (application mode) or daemon mode
48         if (true == getCliOption(argv, argv + argc, "--analyze"))
49         {
50             rc = analyzer::analyzeHardware(); // analyze hardware
51         }
52         // daemon mode
53         else
54         {
55             if (true == getCliOption(argv, argv + argc, "--daemon"))
56             {
57                 attn::Config attnConfig; // default config
58 
59                 // convert remaining cmd line args to config values
60                 parseConfig(argv, argv + argc, &attnConfig);
61 
62                 attn::attnHandler(&attnConfig); // handle pending attentions
63 
64                 attn::attnDaemon(&attnConfig); // start daemon
65             }
66         }
67     }
68 
69     return rc;
70 }
71