#pragma once

namespace attn
{

// number of seconds to wait for power fault handling
constexpr int POWER_FAULT_WAIT = 10;

/** @brief Attention handler return codes */
enum ReturnCodes
{
    RC_SUCCESS        = 0,
    RC_NOT_HANDLED    = 1,
    RC_ANALYZER_ERROR = 2,
    RC_CFAM_ERROR     = 3,
    RC_DBUS_ERROR     = 4
};

/** @brief Code seciton for error reporing */
enum class AttnSection
{
    reserved        = 0x0000,
    attnHandler     = 0x0100,
    tiHandler       = 0x0200,
    handlePhypTi    = 0x0300,
    handleHbTi      = 0x0400,
    addHbStatusRegs = 0x0500
};

/** @brief Attention handler error reason codes */
enum AttnCodes
{
    ATTN_NO_ERROR  = 0,
    ATTN_INFO_NULL = 1,
    ATTN_PDBG_CFAM = 2,
    ATTN_PDBG_SCOM = 3
};

/**
 * @brief Traces some regs for hostboot
 *
 * When we receive a Checkstop or special Attention Term Immediate,
 * hostboot wants some regs added to the error log. We will do this
 * by tracing them and then the traces will get added to the error
 * log later.
 *
 * @return nothing
 */
void addHbStatusRegs();

/**
 * @brief Check for recoverable errors present
 *
 * @return true if any recoverable errors are present, else false
 */
bool recoverableErrors();

/**
 * @brief sleep for n-seconds
 *
 * @param[in] seconds number of seconds to sleep
 */
void sleepSeconds(const unsigned int seconds);

} // namespace attn
