summaryrefslogtreecommitdiffstats
path: root/src/usr/diag/attn/test/attnrandsource.H
blob: a3ac88aef6596556ded21c60ed32ef0024449f4d (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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
/*  IBM_PROLOG_BEGIN_TAG
 *  This is an automatically generated prolog.
 *
 *  $Source: src/usr/diag/attn/test/attnrandsource.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_TAG
 */
#ifndef __TEST_ATTNRANDSOURCE_H
#define __TEST_ATTNRANDSOURCE_H

/**
 * @file attnrandsource.H
 *
 * @brief HBATTN Random attention source class definitions.
 */

#include "attntest.H"
#include "sys/task.h"

namespace ATTN
{

/**
 * @brief RandSource
 *
 * Random attention generator testcase.
 */
class RandSource
{
    public:

        /**
         * @brief start Start the testcase thread.
         *
         * @retval[true] Testcase thread started succesfully.
         * @retval[false] Testcase thread failed to start.
         */
        bool start();

        /**
         * @brief wait Wait for the testcase to run to completion.
         *
         * @post All resources reclaimed.
         *
         * @retval[true] Testcase succesfully ran to completion.
         * @retval[false] Testcase did not run succesfully to completion.
         */
        bool wait();

        /**
         * @brief ctor
         *
         * @param[in] i_iterations The number of attentions to inject.
         * @param[in] i_maxAttnsPerIteration The upper bound on the number
         *               of attentions to inject per iteration.
         * @param[in] i_injectSink The hardware on which to inject attentions.
         * @param[in] i_first The start of the range from which to
         *                         generate attentions.
         * @param[in] i_last The end of the range from which to
         *                         generate attentions.
         */
        RandSource(
                uint64_t i_iterations,
                uint64_t i_maxAttnsPerIteration,
                InjectSink & i_injectSink,
                TARGETING::TargetHandle_t * i_rangeStart,
                TARGETING::TargetHandle_t * i_rangeEnd);

        /**
         * @brief run Execute the testcase.
         */
        void run();

        /**
         * @brief dtor
         */
        ~RandSource();

    private:

        /**
         * @brief main Static wrapper for run.
         *
         * @param[in] i_source The source on which to call run.
         */
        static void* main(void * i_source);

        /**
         * @brief iv_mutex Shared data access serialization.
         */
        mutex_t iv_mutex;

        /**
         * @brief iv_tid Testcase thread number.
         */
        tid_t iv_tid;

        /**
         * @brief iv_iterations The number of attentions to inject.
         */
        uint64_t iv_iterations;

        /**
         * @brief iv_max The upper bound on the number of attentions
         *               to inject per iteration.
         */
        uint64_t iv_max;

        /**
         * @brief iv_injectSink The system on which attentions are injected.
         */
        InjectSink * iv_injectSink;

        /**
         * @brief iv_rangeStart The start of the range from which to
         *                      generate attentions.
         */
        TARGETING::TargetHandle_t * iv_first;

        /**
         * @brief iv_rangeEnd The end of the range from which to
         *                      generate attentions.
         */
        TARGETING::TargetHandle_t * iv_last;

        /**
         * @brief copy disabled
         */
        RandSource(const RandSource &);

        /**
         * @brief assignment disabled
         */
        RandSource &operator=(const RandSource &);
};
}
#endif
OpenPOWER on IntegriCloud