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