#pragma once

#include <cstdarg>
namespace openpower
{
namespace pel
{
namespace detail
{

/**
 * @brief Process debug traces
 *
 * Function adds debug traces to the list so that it will be added to the
 * PEL upon failure
 *
 * @param[in] private_data - pointer to private data, unused now
 * @param[in] fmt - format for variable list arguments
 * @param[in] ap - object of va_list, holds information needed to retrieve
 *                 the additional arguments
 */

void processLogTraceCallback(void* private_data, const char* fmt, va_list ap);

/**
 * @brief Process boot failure/success status
 *
 * If status is success log traces are cleared else used in the
 * creation of failure
 *
 * @param[in] status - Boot execution status
 */
void processBootErrorCallback(bool status);

/**
 * @brief Reset trace log list
 */
void reset();
} // namespace detail

/**
 * @brief Add callbacks for debug traces and boot errors
 *
 * This function adds callback for debug traces and for boot
 * errors
 */
void addBootErrorCallbacks();
} // namespace pel
} // namespace openpower
