summaryrefslogtreecommitdiffstats
path: root/src/usr/trace/daemonif.H
blob: 2fe45c43209d91dacd5ec87250b37e1e2d2ea332 (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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
/* IBM_PROLOG_BEGIN_TAG                                                   */
/* This is an automatically generated prolog.                             */
/*                                                                        */
/* $Source: src/usr/trace/daemonif.H $                                    */
/*                                                                        */
/* OpenPOWER HostBoot Project                                             */
/*                                                                        */
/* Contributors Listed Below - COPYRIGHT 2012,2016                        */
/* [+] International Business Machines Corp.                              */
/*                                                                        */
/*                                                                        */
/* Licensed under the Apache License, Version 2.0 (the "License");        */
/* you may not use this file except in compliance with the License.       */
/* You may obtain a copy of the License at                                */
/*                                                                        */
/*     http://www.apache.org/licenses/LICENSE-2.0                         */
/*                                                                        */
/* Unless required by applicable law or agreed to in writing, software    */
/* distributed under the License is distributed on an "AS IS" BASIS,      */
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or        */
/* implied. See the License for the specific language governing           */
/* permissions and limitations under the License.                         */
/*                                                                        */
/* IBM_PROLOG_END_TAG                                                     */
#ifndef __TRACE_DAEMON_H
#define __TRACE_DAEMON_H

#include <sys/msg.h>
#include <mbox/mbox_queues.H>

    // Forward declaration of Daemon class.
namespace TRACEDAEMON { class Daemon; }

namespace TRACE
{
    /** @class DaemonIf
     *
     *  Defines the interface between the client (front-end) interfaces and
     *  the daemon.
     *
     *  Since the daemon is in a separate extended module the client won't
     *  know when the daemon process is actually available.  This small
     *  interface class is used to provide an abstraction in the base module
     *  for clients.
     *
     */
    class DaemonIf
    {
        public:
            /** Default constructor.
             *
             *  Initializes class and sets daemon as not-running.
             */
            DaemonIf();
            /** Default destructor.
             *
             *  Ensures the daemon is shutdown if running.
             */
            ~DaemonIf();

            /** Allows the client to signal the daemon that work is ready.
             *
             *  @param[in] i_blocking - Indicates if this function should
             *                          block until the daemon satisfies the
             *                          request.
             */
            void signal(bool i_blocking = false);

            /** Allows the client to turn on/off continous mode.
             *
             *  @param[in] i_enable - Indicates if this function should enable
             *                        or disable continous mode
             */
            void continousMode(bool i_enable);

            friend class BufferTest;
            friend class TRACEDAEMON::Daemon;

        private:
                /** Queue to send messages to daemon on. */
            msg_q_t iv_queue;
                /** Indication if the daemon has already been signalled. */
            uint16_t iv_signalled;
                /** State of daemon process. */
            bool iv_running;

            enum MSG_TYPES
            {
                    /** Client work is ready to be performed; flush buffers. */
                TRACE_DAEMON_SIGNAL = MBOX::FIRST_UNSECURE_MSG | 0,
                    /** Flush continuous trace buffers. */
                TRACE_CONT_TRACE_FLUSH = TRACE_DAEMON_SIGNAL,
                    /** Daemon should shutdown. */
                TRACE_DAEMON_SHUTDOWN = MBOX::FIRST_SECURE_MSG | 1,
                    /** Modify continuous trace state. */
                TRACE_CONT_TRACE_STATE = MBOX::FIRST_UNSECURE_MSG | 2,
                    /** Reset trace buffers. */
                TRACE_RESET_BUFFERS = MBOX::FIRST_UNSECURE_MSG | 3,
                    /** Enable Debug state (TRACS mode). */
                TRACE_ENABLE_DEBUG = MBOX::FIRST_UNSECURE_MSG | 4,
                    /** Disable Debug state (TRACS mode). */
                TRACE_DISABLE_DEBUG = MBOX::FIRST_UNSECURE_MSG | 5,
                    /** Extract all buffers. */
                TRACE_EXTRACT_BUFFERS = MBOX::FIRST_UNSECURE_MSG | 6,
            };

            enum FSP_MSG_TYPES
            {
                TRACE_CONT_TRACE_BUFFER = 0,
                TRACE_BUFFER = 1,
            };

            // Since the below functions are only used by the daemon, they
            // are only implemented in the daemon module.

            /** Mark the daemon as 'running'. */
            void start();
            /** Block the daemon until a message is available. */
            msg_t* wait() { return msg_wait(iv_queue); }
            /** Clear the client signal. */
            void clearSignal();

    };
}

#endif
OpenPOWER on IntegriCloud