summaryrefslogtreecommitdiffstats
path: root/src/usr/trace/tracedaemon.H
blob: 6c4006701c4b718f9e58293ce381c728177e2950 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
//  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 <sys/msg.h>
#include <targeting/common/target.H>

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
OpenPOWER on IntegriCloud