// IBM_PROLOG_BEGIN_TAG // This is an automatically generated prolog. // // $Source: src/usr/trace/tracedaemon.H $ // // IBM CONFIDENTIAL // // COPYRIGHT International Business Machines Corp. 2012 // // p1 // // Object Code Only (OCO) source materials // Licensed Internal Code Source Materials // IBM HostBoot Licensed Internal Code // // The source code for this program is not published or other- // wise divested of its trade secrets, irrespective of what has // been deposited with the U.S. Copyright Office. // // Origin: 30 // // IBM_PROLOG_END #ifndef __TRACE_DAEMON_H #define __TRACE_DAEMON_H #include #include namespace TRACE { /** @class TraceDaemon * @brief Encapsulates the daemon functionality of trace. * * The main-line trace paths can send messages to this code to request * actions, such as buffer offload (by mailbox or signalling a scratch * register), to be done or (TODO) the FSP can send messages to it. */ class TraceDaemon { public: /** Default Constructor * * Initializes class and starts daemon thread. */ TraceDaemon(); /** Default Destructor * * Shuts down daemon thread and releases mailbox queue. */ ~TraceDaemon(); /** Message types supported by the trace daemon. */ enum SUPPORTED_MSG_TYPES { UPDATE_SCRATCH_REG, //< Update cont-trace scratch reg. SEND_TRACE_BUFFER, //< Send buffer to FSP. DAEMON_SHUTDOWN, //< Shutdown daemon thread. }; // Make trace class a friend so it can get the message queue. friend class Trace; protected: /** Message Queue */ msg_q_t iv_msgQ; private: /** Target for master processor */ TARGETING::Target* iv_pMaster; /** SCOM address of scratch register. */ static const uint32_t MB_SCRATCH_REGISTER_0 = 0x00050038; /** @brief Function to start daemon thread (using task_create). * @param[in] Pointer to self. */ static void start(void*); /** @brief Main daemon loop. */ void run(); /** @brief Update a scratch register with the desired value. * @param[in] i_value - Value to write to scratch register. */ void updateScratchReg(uint64_t i_value); }; }; #endif