#pragma once

#include <attn/attn_config.hpp>

namespace attn
{

/** @brief Attention global status bits */
constexpr uint32_t SBE_ATTN         = 0x00000002;
constexpr uint32_t ANY_ATTN         = 0x80000000;
constexpr uint32_t CHECKSTOP_ATTN   = 0x40000000;
constexpr uint32_t SPECIAL_ATTN     = 0x20000000;
constexpr uint32_t RECOVERABLE_ATTN = 0x10000000;

/**
 * @brief The main attention handler logic
 *
 * Check each processor for active attentions of type SBE Vital (vital),
 * System Checkstop (checkstop) and Special Attention (special) and handle
 * each as follows:
 *
 * checkstop: Call hardware error analyzer
 * vital:     TBD
 * special:   Determine if the special attention is a Breakpoint (BP),
 *            Terminate Immediately (TI) or CoreCodeToSp (corecode). For each
 *            special attention type, do the following:
 *
 *            BP:          Notify Cronus
 *            TI:          Start host diagnostics mode systemd unit
 *            Corecode:    TBD
 *
 * @param i_config pointer to attention handler configuration object
 */
void attnHandler(Config* i_config);

} // namespace attn