xref: /openbmc/openpower-hw-diags/attn/attn_main.cpp (revision c7aacfaf677a9ac4acfcec7306e6090b291eb875)
1b797b3e1SBen Tyner #include <attn/attn_monitor.hpp>
2ef320154SBen Tyner 
30205f3b3SBen Tyner namespace attn
4970fd4fbSBen Tyner {
5970fd4fbSBen Tyner 
6ef320154SBen Tyner /**
7ef320154SBen Tyner  * @brief Attention handler application main()
8ef320154SBen Tyner  */
attnDaemon(Config * i_config)93fb52e53SBen Tyner int attnDaemon(Config* i_config)
10ef320154SBen Tyner {
110205f3b3SBen Tyner     int rc = 0;                 // assume success
12ef320154SBen Tyner 
1373ac368aSBen Tyner     gpiod_line* line;           // gpio line to monitor
1473ac368aSBen Tyner 
150577c013SEd Tanous     boost::asio::io_context io; // async io monitoring service
1673ac368aSBen Tyner 
1773ac368aSBen Tyner     // GPIO line configuration (falling edge, active low)
18*c7aacfafSPatrick Williams     struct gpiod_line_request_config config{
19*c7aacfafSPatrick Williams         "attention", GPIOD_LINE_REQUEST_EVENT_FALLING_EDGE, 0};
2073ac368aSBen Tyner 
2173ac368aSBen Tyner     // get handle to attention GPIO line
22117af99bSBen Tyner     line = gpiod_line_find("checkstop");
2373ac368aSBen Tyner 
2473ac368aSBen Tyner     if (nullptr == line)
2573ac368aSBen Tyner     {
2673ac368aSBen Tyner         rc = 1; // error
2773ac368aSBen Tyner     }
2873ac368aSBen Tyner     else
2973ac368aSBen Tyner     {
3073ac368aSBen Tyner         // Creating a vector of one gpio to monitor
3173ac368aSBen Tyner         std::vector<std::unique_ptr<attn::AttnMonitor>> gpios;
323fb52e53SBen Tyner         gpios.push_back(
333fb52e53SBen Tyner             std::make_unique<attn::AttnMonitor>(line, config, io, i_config));
3473ac368aSBen Tyner 
3573ac368aSBen Tyner         io.run(); // start GPIO monitor
36117af99bSBen Tyner 
37117af99bSBen Tyner         // done with line, manually close chip (per gpiod api comments)
38117af99bSBen Tyner         gpiod_line_close_chip(line);
3973ac368aSBen Tyner     }
4073ac368aSBen Tyner 
41ef320154SBen Tyner     return rc;
42ef320154SBen Tyner }
430205f3b3SBen Tyner 
440205f3b3SBen Tyner } // namespace attn
45