xref: /openbmc/openpower-hw-diags/attn/attention.hpp (revision 27dd6368d4e6b1fd03610503356f24eb08a16c02)
1  #pragma once
2  
3  #include <libpdbg.h>
4  
5  #include <attn/attn_config.hpp>
6  
7  #include <bitset>
8  
9  namespace attn
10  {
11  
12  /** @brief attention handler configuration flags */
13  inline constexpr uint32_t enableBreakpoints = 1;
14  
15  /**
16   * @brief These objects contain information about an active attention.
17   *
18   * An Attention object is created for each active attention. These objects
19   * carry with them various configuration and status information as well
20   * the attention handler function to call for handling the attention. Each
21   * Attention object also carries a priority value. This priority is used
22   * to determine which attention event(s) to handle when there are more than
23   * one active event.
24   */
25  class Attention
26  {
27    public:
28      /** @brief types of attentions to be handled (by priority low to high) */
29      enum AttentionType
30      {
31          Special = 0,
32          Checkstop = 1,
33          Vital = 2
34      };
35  
36      /** @brief Default constructor. */
37      Attention() = delete;
38  
39      /** @brief Main constructors */
40      Attention(AttentionType i_type, int (*i_handler)(Attention*),
41                pdbg_target* i_target, Config* i_config);
42  
43      /** @brief Destructor */
44      ~Attention() = default;
45  
46      /** @brief Get attention priority */
47      int getPriority() const;
48  
49      /* @brief Get config object */
50      Config* getConfig() const;
51  
52      /* @brief Call attention handler function */
53      int handle();
54  
55      /* @brief Get attention handler target */
56      pdbg_target* getTarget() const;
57  
58      /** @brief Copy constructor. */
59      Attention(const Attention&) = default;
60  
61      /** @brief Assignment operator. */
62      Attention& operator=(const Attention&) = default;
63  
64      /** @brief less than operator */
65      bool operator<(const Attention& right) const;
66  
67    private:
68      AttentionType iv_type;         // attention type
69      int (*iv_handler)(Attention*); // handler function
70      pdbg_target* iv_target;        // handler function target
71      Config* iv_config;             // configuration flags
72  };
73  
74  } // namespace attn
75