xref: /openbmc/openpower-hw-diags/attn/bp_handler.cpp (revision bfa831a88626ec522815c698dc1220f2a3983bc9)
1b8335568SBen Tyner #include <attn/attn_common.hpp>
2b797b3e1SBen Tyner #include <attn/attn_logging.hpp>
39ae5ca41SBen Tyner #include <sdbusplus/bus.hpp>
4*bfa831a8Saustinfcui #include <util/trace.hpp>
59ae5ca41SBen Tyner 
69ae5ca41SBen Tyner namespace attn
79ae5ca41SBen Tyner {
89ae5ca41SBen Tyner 
99ae5ca41SBen Tyner /**
109ae5ca41SBen Tyner  * @brief Notify Cronus over dbus interface
119ae5ca41SBen Tyner  *
129ae5ca41SBen Tyner  * When the special attention is due to a breakpoint condition we will notify
139ae5ca41SBen Tyner  * Cronus over the dbus interface.
149ae5ca41SBen Tyner  */
bpHandler()15fe15649eSBen Tyner int bpHandler()
169ae5ca41SBen Tyner {
17fe15649eSBen Tyner     int rc = RC_SUCCESS; // assume success
18fe15649eSBen Tyner 
199ae5ca41SBen Tyner     // trace message
20*bfa831a8Saustinfcui     trace::inf("Notify Cronus");
219ae5ca41SBen Tyner 
229ae5ca41SBen Tyner     // notify Cronus over dbus
23fe15649eSBen Tyner     try
24fe15649eSBen Tyner     {
259ae5ca41SBen Tyner         auto bus = sdbusplus::bus::new_system();
269ae5ca41SBen Tyner         auto msg = bus.new_signal("/", "org.openbmc.cronus", "Brkpt");
279ae5ca41SBen Tyner 
289ae5ca41SBen Tyner         // Cronus will figure out proc, core, thread so just send 0,0,0
299ae5ca41SBen Tyner         std::array<uint32_t, 3> params{0, 0, 0};
309ae5ca41SBen Tyner         msg.append(params);
319ae5ca41SBen Tyner 
329ae5ca41SBen Tyner         msg.signal_send();
33fe15649eSBen Tyner     }
34fe15649eSBen Tyner     catch (const sdbusplus::exception::SdBusError& e)
35fe15649eSBen Tyner     {
36*bfa831a8Saustinfcui         trace::inf("bpHandler() exception");
37*bfa831a8Saustinfcui         trace::err(e.what());
38fe15649eSBen Tyner         rc = RC_NOT_HANDLED;
39fe15649eSBen Tyner     }
409ae5ca41SBen Tyner 
41fe15649eSBen Tyner     return rc;
429ae5ca41SBen Tyner }
439ae5ca41SBen Tyner 
449ae5ca41SBen Tyner } // namespace attn
45