1 #pragma once
2 
3 #include <attn/attn_config.hpp>
4 
5 namespace attn
6 {
7 
8 /** @brief Attention handler return codes */
9 enum ReturnCodes
10 {
11     RC_SUCCESS        = 0,
12     RC_NOT_HANDLED    = 1,
13     RC_ANALYZER_ERROR = 2,
14     RC_CFAM_ERROR     = 3,
15     RC_DBUS_ERROR     = 4
16 };
17 
18 /** @brief Code seciton for error reporing */
19 enum class AttnSection
20 {
21     reserved     = 0x0000,
22     attnHandler  = 0x0100,
23     tiHandler    = 0x0200,
24     handlePhypTi = 0x0300,
25     handleHbTi   = 0x0400
26 };
27 
28 /** @brief Attention handler error reason codes */
29 enum AttnCodes
30 {
31     ATTN_NO_ERROR  = 0,
32     ATTN_INFO_NULL = 1,
33     ATTN_PDBG_CFAM = 2
34 };
35 
36 /** @brief Attention global status bits */
37 constexpr uint32_t SBE_ATTN       = 0x00000002;
38 constexpr uint32_t CHECKSTOP_ATTN = 0x40000000;
39 constexpr uint32_t SPECIAL_ATTN   = 0x20000000;
40 
41 // Need to add defaultOpalTiInfo with SRC BB821410 (ascii)
42 
43 constexpr uint8_t defaultPhypTiInfo[0x58] = {
44     0x01, 0xa1, 0x02, 0xa8, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00,
45     0x09, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
46     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
47     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
48     0x00, 0x00, 0x00, 0x00, 0x42, 0x37, 0x30, 0x30, 0x46, 0x46, 0x46,
49     0x46, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
50     0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
51     0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
52 
53 constexpr uint8_t defaultHbTiInfo[0x58] = {
54     0x01, 0xa1, 0x02, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
55     0x09, 0x01, 0x00, 0x00, 0x00, 0xbc, 0x80, 0x1b, 0x99, 0x00, 0x00,
56     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
57     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
58     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
59     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
60     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
61     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
62 
63 /**
64  * @brief The main attention handler logic
65  *
66  * Check each processor for active attentions of type SBE Vital (vital),
67  * System Checkstop (checkstop) and Special Attention (special) and handle
68  * each as follows:
69  *
70  * checkstop: Call hardware error analyzer
71  * vital:     TBD
72  * special:   Determine if the special attention is a Breakpoint (BP),
73  *            Terminate Immediately (TI) or CoreCodeToSp (corecode). For each
74  *            special attention type, do the following:
75  *
76  *            BP:          Notify Cronus
77  *            TI:          Start host diagnostics mode systemd unit
78  *            Corecode:    TBD
79  *
80  * @param i_config pointer to attention handler configuration object
81  */
82 void attnHandler(Config* i_config);
83 
84 } // namespace attn
85