blob: 65c0ba96ab79a499bb3387d16cd42bc3145edf73 [file] [log] [blame]
Wolfgang Denkba94a1b2006-05-30 15:56:48 +02001/**
2 * @file IxPerfProfAcc.h
3 *
4 * @brief Header file for the IXP400 Perf Prof component (IxPerfProfAcc)
5 *
6 *
7 * @par
8 * IXP400 SW Release version 2.0
9 *
10 * -- Copyright Notice --
11 *
12 * @par
13 * Copyright 2001-2005, Intel Corporation.
14 * All rights reserved.
15 *
16 * @par
17 * Redistribution and use in source and binary forms, with or without
18 * modification, are permitted provided that the following conditions
19 * are met:
20 * 1. Redistributions of source code must retain the above copyright
21 * notice, this list of conditions and the following disclaimer.
22 * 2. Redistributions in binary form must reproduce the above copyright
23 * notice, this list of conditions and the following disclaimer in the
24 * documentation and/or other materials provided with the distribution.
25 * 3. Neither the name of the Intel Corporation nor the names of its contributors
26 * may be used to endorse or promote products derived from this software
27 * without specific prior written permission.
28 *
29 * @par
30 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
31 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
32 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
33 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
34 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
35 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
36 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
37 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
38 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
39 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
40 * SUCH DAMAGE.
41 *
42 * @par
43 * -- End of Copyright Notice --
44 */
45
46/**
47 * @defgroup IxPerfProfAcc IXP400 Performance Profiling (IxPerfProfAcc) API
48 *
49 * @brief IXP400 Performance Profiling Utility component Public API.
50 * @li NOTE: Xcycle measurement is not supported in Linux.
51 *
52 *
53 * @{
54 */
55#ifndef IXPERFPROFACC_H
56#define IXPERFPROFACC_H
57
58#include "IxOsal.h"
59
60#ifdef __linux
61#include <linux/proc_fs.h>
62#endif
63
64/*
65 * Section for #define
66 */
67/**
68 * @ingroup IxPerfProfAcc
69 *
70 * @def IX_PERFPROF_ACC_XSCALE_PMU_MAX_PROFILE_SAMPLES
71 *
72 * @brief This is the maximum number of profiling samples allowed, which can be
73 * modified according to the user's discretion
74 */
75#define IX_PERFPROF_ACC_XSCALE_PMU_MAX_PROFILE_SAMPLES 0xFFFF
76
77/**
78 * @ingroup IxPerfProfAcc
79 *
80 * @def IX_PERFPROF_ACC_BUS_PMU_MAX_PECS
81 *
82 * @brief This is the maximum number of Programmable Event Counters available.
83 * This is a hardware specific and fixed value. Do not change.
84 *
85 */
86#define IX_PERFPROF_ACC_BUS_PMU_MAX_PECS 7
87
88/**
89 * @ingroup IxPerfProfAcc
90 *
91 * @def IX_PERFPROF_ACC_XCYCLE_MAX_NUM_OF_MEASUREMENTS
92 *
93 * @brief Max number of measurement allowed. This constant is used when
94 * creating storage array for Xcycle. When run in continuous mode,
95 * Xcycle will wrap around and re-use buffer.
96 */
97#define IX_PERFPROF_ACC_XCYCLE_MAX_NUM_OF_MEASUREMENTS 600
98
99#ifdef __linux
100/**
101 * @ingroup IxPerfProfAcc
102 *
103 * @def IX_PERFPROF_ACC_XSCALE_PMU_SYMBOL_ACCURACY
104 *
105 * @brief Level of accuracy required for matching the PC Address to
106 * symbol address. This is used when the XScale PMU time/event
107 * sampling functions get the PC address and search for the
108 * corresponding symbol address.
109 */
110#define IX_PERFPROF_ACC_XSCALE_PMU_SYMBOL_ACCURACY 0xffff
111
112#endif /*__linux*/
113
114/**
115 * @ingroup IxPerfProfAcc
116 *
117 * @def IX_PERFPROF_ACC_LOG
118 *
119 * @brief Mechanism for logging a formatted message for the PerfProfAcc component
120 *
121 * @param level UINT32 [in] - trace level
122 * @param device UINT32 [in] - output device
123 * @param str char* [in] - format string, similar to printf().
124 * @param a UINT32 [in] - first argument to display
125 * @param b UINT32 [in] - second argument to display
126 * @param c UINT32 [in] - third argument to display
127 * @param d UINT32 [in] - fourth argument to display
128 * @param e UINT32 [in] - fifth argument to display
129 * @param f UINT32 [in] - sixth argument to display
130 *
131 * @return none
132 */
133#ifndef NDEBUG
134#define IX_PERFPROF_ACC_LOG(level, device, str, a, b, c, d, e, f)\
135 (ixOsalLog (level, device, str, a, b, c, d, e, f))
136#else /*do nothing*/
137#define IX_PERFPROF_ACC_LOG(level, device, str, a, b, c, d, e, f)
138#endif /*ifdef NDEBUG */
139
140/*
141 * Section for struct
142 */
143
144/**
145 * @brief contains summary of samples taken
146 *
147 * Structure contains all details of each program counter value - frequency
148 * that PC occurs
149 */
150typedef struct
151{
152 UINT32 programCounter; /**<the program counter value of the sample*/
153 UINT32 freq; /**<the frequency of the occurence of the sample*/
154} IxPerfProfAccXscalePmuSamplePcProfile;
155
156/**
157 * @brief contains results of a counter
158 *
159 * Structure contains the results of a counter, which are split into the lower
160 * and upper 32 bits of the final count
161 */
162typedef struct
163{
164 UINT32 lower32BitsEventCount; /**<lower 32bits value of the event counter*/
165 UINT32 upper32BitsEventCount; /**<upper 32bits value of the event counter*/
166} IxPerfProfAccXscalePmuEvtCnt;
167
168/**
169 * @brief contains results of counters and their overflow
170 *
171 * Structure contains all values of counters and associated overflows. The
172 * specific event and clock counters are determined by the user
173 */
174typedef struct
175{
176 UINT32 clk_value; /**<current value of clock counter*/
177 UINT32 clk_samples; /**<number of clock counter overflows*/
178 UINT32 event1_value; /**<current value of event 1 counter*/
179 UINT32 event1_samples; /**<number of event 1 counter overflows*/
180 UINT32 event2_value; /**<current value of event 2 counter*/
181 UINT32 event2_samples; /**<number of event 2 counter overflows*/
182 UINT32 event3_value; /**<current value of event 3 counter*/
183 UINT32 event3_samples; /**<number of event 3 counter overflows*/
184 UINT32 event4_value; /**<current value of event 4 counter*/
185 UINT32 event4_samples; /**<number of event 4 counter overflows*/
186} IxPerfProfAccXscalePmuResults;
187
188/**
189 *
190 * @brief Results obtained from Xcycle run
191 */
192typedef struct
193{
194 float maxIdlePercentage; /**<maximum percentage of Idle cycles*/
195 float minIdlePercentage; /**<minimum percentage of Idle cycles*/
196 float aveIdlePercentage; /**<average percentage of Idle cycles*/
197 UINT32 totalMeasurements; /**<total number of measurement made */
198} IxPerfProfAccXcycleResults;
199
200/**
201 *
202 * @brief Results obtained from running the Bus Pmu component. The results
203 * are obtained when the get functions is called.
204 *
205 */
206typedef struct
207{
208 UINT32 statsToGetLower27Bit[IX_PERFPROF_ACC_BUS_PMU_MAX_PECS]; /**<Lower 27 Bit of counter value */
209 UINT32 statsToGetUpper32Bit[IX_PERFPROF_ACC_BUS_PMU_MAX_PECS]; /**<Upper 32 Bit of counter value */
210} IxPerfProfAccBusPmuResults;
211
212/*
213 * Section for enum
214 */
215
216/**
217 * @ingroup IxPerfProfAcc
218 *
219 * @enum IxPerfProfAccBusPmuEventCounters1
220 *
221 * @brief Type of bus pmu events supported on PEC 1.
222 *
223 * Lists all bus pmu events.
224 */
225typedef enum
226{
227 IX_PERFPROF_ACC_BUS_PMU_PEC1_NORTH_NPEA_GRANT_SELECT = 1, /**< Select North NPEA grant on PEC1*/
228 IX_PERFPROF_ACC_BUS_PMU_PEC1_NORTH_NPEB_GRANT_SELECT, /**< Select North NPEB grant on PEC1*/
229 IX_PERFPROF_ACC_BUS_PMU_PEC1_NORTH_NPEC_GRANT_SELECT, /**< Select North NPEC grant on PEC1*/
230 IX_PERFPROF_ACC_BUS_PMU_PEC1_NORTH_BUS_IDLE_SELECT, /**< Select North bus idle on PEC1*/
231 IX_PERFPROF_ACC_BUS_PMU_PEC1_NORTH_NPEA_REQ_SELECT, /**< Select North NPEA req on PEC1*/
232 IX_PERFPROF_ACC_BUS_PMU_PEC1_NORTH_NPEB_REQ_SELECT, /**< Select North NPEB req on PEC1*/
233 IX_PERFPROF_ACC_BUS_PMU_PEC1_NORTH_NPEC_REQ_SELECT, /**< Select North NPEC req on PEC1*/
234
235 IX_PERFPROF_ACC_BUS_PMU_PEC1_SOUTH_GSKT_GRANT_SELECT, /**< Select south gasket grant on PEC1*/
236 IX_PERFPROF_ACC_BUS_PMU_PEC1_SOUTH_ABB_GRANT_SELECT, /**< Select south abb grant on PEC1*/
237 IX_PERFPROF_ACC_BUS_PMU_PEC1_SOUTH_PCI_GRANT_SELECT, /**< Select south pci grant on PEC1*/
238 IX_PERFPROF_ACC_BUS_PMU_PEC1_SOUTH_APB_GRANT_SELECT, /**< Select south apb grant on PEC1*/
239 IX_PERFPROF_ACC_BUS_PMU_PEC1_SOUTH_GSKT_REQ_SELECT, /**< Select south gasket request on PEC1*/
240 IX_PERFPROF_ACC_BUS_PMU_PEC1_SOUTH_ABB_REQ_SELECT, /**< Select south abb request on PEC1*/
241 IX_PERFPROF_ACC_BUS_PMU_PEC1_SOUTH_PCI_REQ_SELECT, /**< Select south pci request on PEC1*/
242 IX_PERFPROF_ACC_BUS_PMU_PEC1_SOUTH_APB_REQ_SELECT, /**< Select south apb request on PEC1*/
243
244 IX_PERFPROF_ACC_BUS_PMU_PEC1_SDR_0_HIT_SELECT, /**< Select sdram0 hit on PEC1*/
245 IX_PERFPROF_ACC_BUS_PMU_PEC1_SDR_1_HIT_SELECT, /**< Select sdram1 hit on PEC1*/
246 IX_PERFPROF_ACC_BUS_PMU_PEC1_SDR_2_HIT_SELECT, /**< Select sdram2 hit on PEC1*/
247 IX_PERFPROF_ACC_BUS_PMU_PEC1_SDR_3_HIT_SELECT, /**< Select sdram3 hit on PEC1*/
248 IX_PERFPROF_ACC_BUS_PMU_PEC1_SDR_4_MISS_SELECT, /**< Select sdram4 miss on PEC1*/
249 IX_PERFPROF_ACC_BUS_PMU_PEC1_SDR_5_MISS_SELECT, /**< Select sdram5 miss on PEC1*/
250 IX_PERFPROF_ACC_BUS_PMU_PEC1_SDR_6_MISS_SELECT, /**< Select sdram6 miss on PEC1*/
251 IX_PERFPROF_ACC_BUS_PMU_PEC1_SDR_7_MISS_SELECT /**< Select sdram7 miss on PEC1*/
252} IxPerfProfAccBusPmuEventCounters1;
253
254/**
255 * @ingroup IxPerfProfAcc
256 *
257 * @enum IxPerfProfAccBusPmuEventCounters2
258 *
259 * @brief Type of bus pmu events supported on PEC 2.
260 *
261 * Lists all bus pmu events.
262 */
263typedef enum
264{
265 IX_PERFPROF_ACC_BUS_PMU_PEC2_NORTH_NPEA_XFER_SELECT = 24, /**< Select North NPEA transfer on PEC2*/
266 IX_PERFPROF_ACC_BUS_PMU_PEC2_NORTH_NPEB_XFER_SELECT, /**< Select North NPEB transfer on PEC2*/
267 IX_PERFPROF_ACC_BUS_PMU_PEC2_NORTH_NPEC_XFER_SELECT, /**< Select North NPEC transfer on PEC2*/
268 IX_PERFPROF_ACC_BUS_PMU_PEC2_NORTH_BUS_WRITE_SELECT, /**< Select North bus write on PEC2*/
269 IX_PERFPROF_ACC_BUS_PMU_PEC2_NORTH_NPEA_OWN_SELECT, /**< Select North NPEA own on PEC2*/
270 IX_PERFPROF_ACC_BUS_PMU_PEC2_NORTH_NPEB_OWN_SELECT, /**< Select North NPEB own on PEC2*/
271 IX_PERFPROF_ACC_BUS_PMU_PEC2_NORTH_NPEC_OWN_SELECT, /**< Select North NPEC own on PEC2*/
272
273 IX_PERFPROF_ACC_BUS_PMU_PEC2_SOUTH_GSKT_XFER_SELECT, /**< Select South gasket transfer on PEC2*/
274 IX_PERFPROF_ACC_BUS_PMU_PEC2_SOUTH_ABB_XFER_SELECT, /**< Select South abb transfer on PEC2*/
275 IX_PERFPROF_ACC_BUS_PMU_PEC2_SOUTH_PCI_XFER_SELECT, /**< Select South pci transfer on PEC2*/
276 IX_PERFPROF_ACC_BUS_PMU_PEC2_SOUTH_APB_XFER_SELECT, /**< Select South apb transfer on PEC2*/
277 IX_PERFPROF_ACC_BUS_PMU_PEC2_SOUTH_GSKT_OWN_SELECT, /**< Select South gasket own on PEC2*/
278 IX_PERFPROF_ACC_BUS_PMU_PEC2_SOUTH_ABB_OWN_SELECT, /**< Select South abb own on PEC2*/
279 IX_PERFPROF_ACC_BUS_PMU_PEC2_SOUTH_PCI_OWN_SELECT, /**< Select South pci own on PEC2*/
280 IX_PERFPROF_ACC_BUS_PMU_PEC2_SOUTH_APB_OWN_SELECT, /**< Select South apb own transfer on PEC2*/
281
282 IX_PERFPROF_ACC_BUS_PMU_PEC2_SDR_1_HIT_SELECT, /**< Select sdram1 hit on PEC2*/
283 IX_PERFPROF_ACC_BUS_PMU_PEC2_SDR_2_HIT_SELECT, /**< Select sdram2 hit on PEC2*/
284 IX_PERFPROF_ACC_BUS_PMU_PEC2_SDR_3_HIT_SELECT, /**< Select sdram3 hit on PEC2*/
285 IX_PERFPROF_ACC_BUS_PMU_PEC2_SDR_4_HIT_SELECT, /**< Select sdram4 hit on PEC2*/
286 IX_PERFPROF_ACC_BUS_PMU_PEC2_SDR_5_MISS_SELECT, /**< Select sdram5 miss on PEC2*/
287 IX_PERFPROF_ACC_BUS_PMU_PEC2_SDR_6_MISS_SELECT, /**< Select sdram6 miss on PEC2*/
288 IX_PERFPROF_ACC_BUS_PMU_PEC2_SDR_7_MISS_SELECT, /**< Select sdram7 miss on PEC2*/
289 IX_PERFPROF_ACC_BUS_PMU_PEC2_SDR_0_MISS_SELECT /**< Select sdram0 miss on PEC2*/
290} IxPerfProfAccBusPmuEventCounters2;
291
292/**
293 * @ingroup IxPerfProfAcc
294 *
295 * @enum IxPerfProfAccBusPmuEventCounters3
296 *
297 * @brief Type of bus pmu events supported on PEC 3.
298 *
299 * Lists all bus pmu events.
300 */
301typedef enum
302{
303 IX_PERFPROF_ACC_BUS_PMU_PEC3_NORTH_NPEA_RETRY_SELECT = 47, /**< Select north NPEA retry on PEC3*/
304 IX_PERFPROF_ACC_BUS_PMU_PEC3_NORTH_NPEB_RETRY_SELECT, /**< Select north NPEB retry on PEC3*/
305 IX_PERFPROF_ACC_BUS_PMU_PEC3_NORTH_NPEC_RETRY_SELECT, /**< Select north NPEC retry on PEC3*/
306 IX_PERFPROF_ACC_BUS_PMU_PEC3_NORTH_BUS_READ_SELECT, /**< Select north bus read on PEC3*/
307 IX_PERFPROF_ACC_BUS_PMU_PEC3_NORTH_NPEA_WRITE_SELECT, /**< Select north NPEA write on PEC3*/
308 IX_PERFPROF_ACC_BUS_PMU_PEC3_NORTH_NPEB_WRITE_SELECT, /**< Select north NPEB write on PEC3*/
309 IX_PERFPROF_ACC_BUS_PMU_PEC3_NORTH_NPEC_WRITE_SELECT, /**< Select north NPEC wirte on PEC3*/
310
311 IX_PERFPROF_ACC_BUS_PMU_PEC3_SOUTH_GSKT_RETRY_SELECT, /**< Select south gasket retry on PEC3*/
312 IX_PERFPROF_ACC_BUS_PMU_PEC3_SOUTH_ABB_RETRY_SELECT, /**< Select south abb retry on PEC3*/
313 IX_PERFPROF_ACC_BUS_PMU_PEC3_SOUTH_PCI_RETRY_SELECT, /**< Select south pci retry on PEC3*/
314 IX_PERFPROF_ACC_BUS_PMU_PEC3_SOUTH_APB_RETRY_SELECT, /**< Select south apb retry on PEC3*/
315 IX_PERFPROF_ACC_BUS_PMU_PEC3_SOUTH_GSKT_WRITE_SELECT, /**< Select south gasket write on PEC3*/
316 IX_PERFPROF_ACC_BUS_PMU_PEC3_SOUTH_ABB_WRITE_SELECT, /**< Select south abb write on PEC3*/
317 IX_PERFPROF_ACC_BUS_PMU_PEC3_SOUTH_PCI_WRITE_SELECT, /**< Select south pci write on PEC3*/
318 IX_PERFPROF_ACC_BUS_PMU_PEC3_SOUTH_APB_WRITE_SELECT, /**< Select south apb write on PEC3*/
319
320 IX_PERFPROF_ACC_BUS_PMU_PEC3_SDR_2_HIT_SELECT, /**< Select sdram2 hit on PEC3*/
321 IX_PERFPROF_ACC_BUS_PMU_PEC3_SDR_3_HIT_SELECT, /**< Select sdram3 hit on PEC3*/
322 IX_PERFPROF_ACC_BUS_PMU_PEC3_SDR_4_HIT_SELECT, /**< Select sdram4 hit on PEC3*/
323 IX_PERFPROF_ACC_BUS_PMU_PEC3_SDR_5_HIT_SELECT, /**< Select sdram5 hit on PEC3*/
324 IX_PERFPROF_ACC_BUS_PMU_PEC3_SDR_6_MISS_SELECT, /**< Select sdram6 miss on PEC3*/
325 IX_PERFPROF_ACC_BUS_PMU_PEC3_SDR_7_MISS_SELECT, /**< Select sdram7 miss on PEC3*/
326 IX_PERFPROF_ACC_BUS_PMU_PEC3_SDR_0_MISS_SELECT, /**< Select sdram0 miss on PEC3*/
327 IX_PERFPROF_ACC_BUS_PMU_PEC3_SDR_1_MISS_SELECT /**< Select sdram1 miss on PEC3*/
328} IxPerfProfAccBusPmuEventCounters3;
329
330/**
331 * @ingroup IxPerfProfAcc
332 *
333 * @enum IxPerfProfAccBusPmuEventCounters4
334 *
335 * @brief Type of bus pmu events supported on PEC 4.
336 *
337 * Lists all bus pmu events.
338 */
339typedef enum
340{
341 IX_PERFPROF_ACC_BUS_PMU_PEC4_SOUTH_PCI_SPLIT_SELECT = 70, /**< Select south pci split on PEC4*/
342 IX_PERFPROF_ACC_BUS_PMU_PEC4_SOUTH_EXP_SPLIT_SELECT, /**< Select south expansion split on PEC4*/
343 IX_PERFPROF_ACC_BUS_PMU_PEC4_SOUTH_APB_GRANT_SELECT, /**< Select south apb grant on PEC4*/
344 IX_PERFPROF_ACC_BUS_PMU_PEC4_SOUTH_APB_XFER_SELECT, /**< Select south apb transfer on PEC4*/
345 IX_PERFPROF_ACC_BUS_PMU_PEC4_SOUTH_GSKT_READ_SELECT, /**< Select south gasket read on PEC4*/
346 IX_PERFPROF_ACC_BUS_PMU_PEC4_SOUTH_ABB_READ_SELECT, /**< Select south abb read on PEC4*/
347 IX_PERFPROF_ACC_BUS_PMU_PEC4_SOUTH_PCI_READ_SELECT, /**< Select south pci read on PEC4*/
348 IX_PERFPROF_ACC_BUS_PMU_PEC4_SOUTH_APB_READ_SELECT, /**< Select south apb read on PEC4*/
349
350 IX_PERFPROF_ACC_BUS_PMU_PEC4_NORTH_ABB_SPLIT_SELECT, /**< Select north abb split on PEC4*/
351 IX_PERFPROF_ACC_BUS_PMU_PEC4_NORTH_NPEA_REQ_SELECT, /**< Select north NPEA req on PEC4*/
352 IX_PERFPROF_ACC_BUS_PMU_PEC4_NORTH_NPEA_READ_SELECT, /**< Select north NPEA read on PEC4*/
353 IX_PERFPROF_ACC_BUS_PMU_PEC4_NORTH_NPEB_READ_SELECT, /**< Select north NPEB read on PEC4*/
354 IX_PERFPROF_ACC_BUS_PMU_PEC4_NORTH_NPEC_READ_SELECT, /**< Select north NPEC read on PEC4*/
355
356 IX_PERFPROF_ACC_BUS_PMU_PEC4_SDR_3_HIT_SELECT, /**< Select sdram3 hit on PEC4*/
357 IX_PERFPROF_ACC_BUS_PMU_PEC4_SDR_4_HIT_SELECT, /**< Select sdram4 hit on PEC4*/
358 IX_PERFPROF_ACC_BUS_PMU_PEC4_SDR_5_HIT_SELECT, /**< Select sdram5 hit on PEC4*/
359 IX_PERFPROF_ACC_BUS_PMU_PEC4_SDR_6_HIT_SELECT, /**< Select sdram6 hit on PEC4*/
360 IX_PERFPROF_ACC_BUS_PMU_PEC4_SDR_7_MISS_SELECT, /**< Select sdram7 miss on PEC4*/
361 IX_PERFPROF_ACC_BUS_PMU_PEC4_SDR_0_MISS_SELECT, /**< Select sdram0 miss on PEC4*/
362 IX_PERFPROF_ACC_BUS_PMU_PEC4_SDR_1_MISS_SELECT, /**< Select sdram1 miss on PEC4*/
363 IX_PERFPROF_ACC_BUS_PMU_PEC4_SDR_2_MISS_SELECT /**< Select sdram2 miss on PEC4*/
364} IxPerfProfAccBusPmuEventCounters4;
365
366/**
367 * @ingroup IxPerfProfAcc
368 *
369 * @enum IxPerfProfAccBusPmuEventCounters5
370 *
371 * @brief Type of bus pmu events supported on PEC 5.
372 *
373 * Lists all bus pmu events.
374 */
375typedef enum
376{
377 IX_PERFPROF_ACC_BUS_PMU_PEC5_SOUTH_ABB_GRANT_SELECT = 91, /**< Select south abb grant on PEC5*/
378 IX_PERFPROF_ACC_BUS_PMU_PEC5_SOUTH_ABB_XFER_SELECT, /**< Select south abb transfer on PEC5*/
379 IX_PERFPROF_ACC_BUS_PMU_PEC5_SOUTH_ABB_RETRY_SELECT, /**< Select south abb retry on PEC5*/
380 IX_PERFPROF_ACC_BUS_PMU_PEC5_SOUTH_EXP_SPLIT_SELECT, /**< Select south expansion split on PEC5*/
381 IX_PERFPROF_ACC_BUS_PMU_PEC5_SOUTH_ABB_REQ_SELECT, /**< Select south abb request on PEC5*/
382 IX_PERFPROF_ACC_BUS_PMU_PEC5_SOUTH_ABB_OWN_SELECT, /**< Select south abb own on PEC5*/
383 IX_PERFPROF_ACC_BUS_PMU_PEC5_SOUTH_BUS_IDLE_SELECT, /**< Select south bus idle on PEC5*/
384
385 IX_PERFPROF_ACC_BUS_PMU_PEC5_NORTH_NPEB_GRANT_SELECT, /**< Select north NPEB grant on PEC5*/
386 IX_PERFPROF_ACC_BUS_PMU_PEC5_NORTH_NPEB_XFER_SELECT, /**< Select north NPEB transfer on PEC5*/
387 IX_PERFPROF_ACC_BUS_PMU_PEC5_NORTH_NPEB_RETRY_SELECT, /**< Select north NPEB retry on PEC5*/
388 IX_PERFPROF_ACC_BUS_PMU_PEC5_NORTH_NPEB_REQ_SELECT, /**< Select north NPEB request on PEC5*/
389 IX_PERFPROF_ACC_BUS_PMU_PEC5_NORTH_NPEB_OWN_SELECT, /**< Select north NPEB own on PEC5*/
390 IX_PERFPROF_ACC_BUS_PMU_PEC5_NORTH_NPEB_WRITE_SELECT, /**< Select north NPEB write on PEC5*/
391 IX_PERFPROF_ACC_BUS_PMU_PEC5_NORTH_NPEB_READ_SELECT, /**< Select north NPEB read on PEC5*/
392
393 IX_PERFPROF_ACC_BUS_PMU_PEC5_SDR_4_HIT_SELECT, /**< Select north sdram4 hit on PEC5*/
394 IX_PERFPROF_ACC_BUS_PMU_PEC5_SDR_5_HIT_SELECT, /**< Select north sdram5 hit on PEC5*/
395 IX_PERFPROF_ACC_BUS_PMU_PEC5_SDR_6_HIT_SELECT, /**< Select north sdram6 hit on PEC5*/
396 IX_PERFPROF_ACC_BUS_PMU_PEC5_SDR_7_HIT_SELECT, /**< Select north sdram7 hit on PEC5*/
397 IX_PERFPROF_ACC_BUS_PMU_PEC5_SDR_0_MISS_SELECT, /**< Select north sdram0 miss on PEC5*/
398 IX_PERFPROF_ACC_BUS_PMU_PEC5_SDR_1_MISS_SELECT, /**< Select north sdram1 miss on PEC5*/
399 IX_PERFPROF_ACC_BUS_PMU_PEC5_SDR_2_MISS_SELECT, /**< Select north sdram2 miss on PEC5*/
400 IX_PERFPROF_ACC_BUS_PMU_PEC5_SDR_3_MISS_SELECT /**< Select north sdram3 miss on PEC5*/
401} IxPerfProfAccBusPmuEventCounters5;
402
403/**
404 * @ingroup IxPerfProfAcc
405 *
406 * @enum IxPerfProfAccBusPmuEventCounters6
407 *
408 * @brief Type of bus pmu events supported on PEC 6.
409 *
410 * Lists all bus pmu events.
411 */
412typedef enum
413{
414 IX_PERFPROF_ACC_BUS_PMU_PEC6_SOUTH_PCI_GRANT_SELECT = 113, /**< Select south pci grant on PEC6*/
415 IX_PERFPROF_ACC_BUS_PMU_PEC6_SOUTH_PCI_XFER_SELECT, /**< Select south pci transfer on PEC6*/
416 IX_PERFPROF_ACC_BUS_PMU_PEC6_SOUTH_PCI_RETRY_SELECT, /**< Select south pci retry on PEC6*/
417 IX_PERFPROF_ACC_BUS_PMU_PEC6_SOUTH_PCI_SPLIT_SELECT, /**< Select south pci split on PEC6*/
418 IX_PERFPROF_ACC_BUS_PMU_PEC6_SOUTH_PCI_REQ_SELECT, /**< Select south pci request on PEC6*/
419 IX_PERFPROF_ACC_BUS_PMU_PEC6_SOUTH_PCI_OWN_SELECT, /**< Select south pci own on PEC6*/
420 IX_PERFPROF_ACC_BUS_PMU_PEC6_SOUTH_BUS_WRITE_SELECT, /**< Select south pci write on PEC6*/
421
422 IX_PERFPROF_ACC_BUS_PMU_PEC6_NORTH_NPEC_GRANT_SELECT, /**< Select north NPEC grant on PEC6*/
423 IX_PERFPROF_ACC_BUS_PMU_PEC6_NORTH_NPEC_XFER_SELECT, /**< Select north NPEC transfer on PEC6*/
424 IX_PERFPROF_ACC_BUS_PMU_PEC6_NORTH_NPEC_RETRY_SELECT, /**< Select north NPEC retry on PEC6*/
425 IX_PERFPROF_ACC_BUS_PMU_PEC6_NORTH_NPEC_REQ_SELECT, /**< Select north NPEC request on PEC6*/
426 IX_PERFPROF_ACC_BUS_PMU_PEC6_NORTH_NPEC_OWN_SELECT, /**< Select north NPEC own on PEC6*/
427 IX_PERFPROF_ACC_BUS_PMU_PEC6_NORTH_NPEB_WRITE_SELECT, /**< Select north NPEB write on PEC6*/
428 IX_PERFPROF_ACC_BUS_PMU_PEC6_NORTH_NPEC_READ_SELECT, /**< Select north NPEC read on PEC6*/
429
430 IX_PERFPROF_ACC_BUS_PMU_PEC6_SDR_5_HIT_SELECT, /**< Select sdram5 hit on PEC6*/
431 IX_PERFPROF_ACC_BUS_PMU_PEC6_SDR_6_HIT_SELECT, /**< Select sdram6 hit on PEC6*/
432 IX_PERFPROF_ACC_BUS_PMU_PEC6_SDR_7_HIT_SELECT, /**< Select sdram7 hit on PEC6*/
433 IX_PERFPROF_ACC_BUS_PMU_PEC6_SDR_0_HIT_SELECT, /**< Select sdram0 hit on PEC6*/
434 IX_PERFPROF_ACC_BUS_PMU_PEC6_SDR_1_MISS_SELECT, /**< Select sdram1 miss on PEC6*/
435 IX_PERFPROF_ACC_BUS_PMU_PEC6_SDR_2_MISS_SELECT, /**< Select sdram2 miss on PEC6*/
436 IX_PERFPROF_ACC_BUS_PMU_PEC6_SDR_3_MISS_SELECT, /**< Select sdram3 miss on PEC6*/
437 IX_PERFPROF_ACC_BUS_PMU_PEC6_SDR_4_MISS_SELECT /**< Select sdram4 miss on PEC6*/
438} IxPerfProfAccBusPmuEventCounters6;
439
440/**
441 * @ingroup IxPerfProfAcc
442 *
443 * @enum IxPerfProfAccBusPmuEventCounters7
444 *
445 * @brief Type of bus pmu events supported on PEC 7.
446 *
447 * Lists all bus pmu events.
448 */
449typedef enum
450{
451 IX_PERFPROF_ACC_BUS_PMU_PEC7_SOUTH_APB_RETRY_SELECT = 135, /**< Select south apb retry on PEC7*/
452 IX_PERFPROF_ACC_BUS_PMU_PEC7_SOUTH_APB_REQ_SELECT, /**< Select south apb request on PEC7*/
453 IX_PERFPROF_ACC_BUS_PMU_PEC7_SOUTH_APB_OWN_SELECT, /**< Select south apb own on PEC7*/
454 IX_PERFPROF_ACC_BUS_PMU_PEC7_SOUTH_BUS_READ_SELECT, /**< Select south bus read on PEC7*/
455 IX_PERFPROF_ACC_BUS_PMU_PEC7_CYCLE_COUNT_SELECT /**< Select cycle count on PEC7*/
456} IxPerfProfAccBusPmuEventCounters7;
457
458/**
459 * @ingroup IxPerfProfAcc
460 *
461 * @enum IxPerfProfAccXscalePmuEvent
462 *
463 * @brief Type of xscale pmu events supported
464 *
465 * Lists all xscale pmu events. The maximum is a default value that the user
466 * should not exceed.
467 */
468typedef enum
469{
470 IX_PERFPROF_ACC_XSCALE_PMU_EVENT_CACHE_MISS=0, /**< cache miss*/
471 IX_PERFPROF_ACC_XSCALE_PMU_EVENT_CACHE_INSTRUCTION,/**< cache instruction*/
472 IX_PERFPROF_ACC_XSCALE_PMU_EVENT_STALL, /**< event stall*/
473 IX_PERFPROF_ACC_XSCALE_PMU_EVENT_INST_TLB_MISS, /**< instruction tlb miss*/
474 IX_PERFPROF_ACC_XSCALE_PMU_EVENT_DATA_TLB_MISS, /**< data tlb miss*/
475 IX_PERFPROF_ACC_XSCALE_PMU_EVENT_BRANCH_EXEC, /**< branch executed*/
476 IX_PERFPROF_ACC_XSCALE_PMU_EVENT_BRANCH_MISPREDICT, /**<branch mispredict*/
477 IX_PERFPROF_ACC_XSCALE_PMU_EVENT_INST_EXEC, /**< instruction executed*/
478 IX_PERFPROF_ACC_XSCALE_PMU_EVENT_FULL_EVERYCYCLE, /**<
479 *Stall - data cache
480 *buffers are full.
481 *This event occurs
482 *every cycle where
483 *condition present
484 */
485 IX_PERFPROF_ACC_XSCALE_PMU_EVENT_ONCE, /**<
486 *Stall - data cache buffers are
487 *full.This event occurs once
488 *for each contiguous sequence
489 */
490 IX_PERFPROF_ACC_XSCALE_PMU_EVENT_DATA_CACHE_ACCESS, /**< data cache access*/
491 IX_PERFPROF_ACC_XSCALE_PMU_EVENT_DATA_CACHE_MISS, /**< data cache miss*/
492 IX_PERFPROF_ACC_XSCALE_PMU_EVENT_DATA_CACHE_WRITEBACK, /**<data cache
493 *writeback
494 */
495 IX_PERFPROF_ACC_XSCALE_PMU_EVENT_SW_CHANGE_PC, /**< sw change pc*/
496 IX_PERFPROF_ACC_XSCALE_PMU_EVENT_MAX /**< max value*/
497} IxPerfProfAccXscalePmuEvent;
498
499/**
500 * @ingroup IxPerfProfAcc
501 *
502 * @enum IxPerfProfAccStatus
503 *
504 * @brief Invalid Status Definitions
505 *
506 * These status will be used by the APIs to return to the user.
507 */
508typedef enum
509{
510 IX_PERFPROF_ACC_STATUS_SUCCESS = IX_SUCCESS, /**< success*/
511 IX_PERFPROF_ACC_STATUS_FAIL = IX_FAIL, /**< fail*/
512 IX_PERFPROF_ACC_STATUS_ANOTHER_UTIL_IN_PROGRESS,/**<another utility in
513 *progress
514 */
515 IX_PERFPROF_ACC_STATUS_XCYCLE_MEASUREMENT_IN_PROGRESS, /**<measurement in
516 *progress
517 */
518 IX_PERFPROF_ACC_STATUS_XCYCLE_NO_BASELINE, /**<no baseline yet*/
519 IX_PERFPROF_ACC_STATUS_XCYCLE_MEASUREMENT_REQUEST_OUT_OF_RANGE, /**<
520 * Measurement chosen
521 * is out of range
522 */
523 IX_PERFPROF_ACC_STATUS_XCYCLE_PRIORITY_SET_FAIL, /**<
524 * Cannot set
525 * task priority
526 */
527 IX_PERFPROF_ACC_STATUS_XCYCLE_THREAD_CREATE_FAIL, /**<
528 * Fail create thread
529 */
530 IX_PERFPROF_ACC_STATUS_XCYCLE_PRIORITY_RESTORE_FAIL, /**<
531 *cannot restore
532 *priority
533 */
534 IX_PERFPROF_ACC_STATUS_XCYCLE_MEASUREMENT_NOT_RUNNING, /**< xcycle not running*/
535 IX_PERFPROF_ACC_STATUS_XSCALE_PMU_NUM_INVALID, /**< invalid number
536 *entered
537 */
538 IX_PERFPROF_ACC_STATUS_XSCALE_PMU_EVENT_INVALID, /**< invalid pmu event*/
539 IX_PERFPROF_ACC_STATUS_XSCALE_PMU_START_NOT_CALLED, /**<a start process
540 *was not called
541 *before attempting
542 *a stop or results
543 *get
544 */
545 IX_PERFPROF_ACC_STATUS_BUS_PMU_MODE_ERROR, /**< invalid mode*/
546 IX_PERFPROF_ACC_STATUS_BUS_PMU_PEC1_ERROR, /**< invalid pec1 entered*/
547 IX_PERFPROF_ACC_STATUS_BUS_PMU_PEC2_ERROR, /**< invalid pec2 entered*/
548 IX_PERFPROF_ACC_STATUS_BUS_PMU_PEC3_ERROR, /**< invalid pec3 entered*/
549 IX_PERFPROF_ACC_STATUS_BUS_PMU_PEC4_ERROR, /**< invalid pec4 entered*/
550 IX_PERFPROF_ACC_STATUS_BUS_PMU_PEC5_ERROR, /**< invalid pec5 entered*/
551 IX_PERFPROF_ACC_STATUS_BUS_PMU_PEC6_ERROR, /**< invalid pec6 entered*/
552 IX_PERFPROF_ACC_STATUS_BUS_PMU_PEC7_ERROR, /**< invalid pec7 entered*/
553 IX_PERFPROF_ACC_STATUS_BUS_PMU_START_NOT_CALLED, /**<a start process
554 *was not called
555 *before attempting
556 *a stop
557 */
558 IX_PERFPROF_ACC_STATUS_COMPONENT_NOT_SUPPORTED /**<Device or OS does not support component*/
559} IxPerfProfAccStatus;
560
561/**
562 * @ingroup IxPerfProfAcc
563 *
564 * @enum IxPerfProfAccBusPmuMode
565 *
566 * @brief State selection of counters.
567 *
568 * These states will be used to determine the counters whose values are to be
569 * read.
570 */
571typedef enum
572{
573 IX_PERFPROF_ACC_BUS_PMU_MODE_HALT=0, /**< halt state*/
574 IX_PERFPROF_ACC_BUS_PMU_MODE_SOUTH, /**< south state*/
575 IX_PERFPROF_ACC_BUS_PMU_MODE_NORTH, /**< north state*/
576 IX_PERFPROF_ACC_BUS_PMU_MODE_SDRAM /**< SDRAM state*/
577} IxPerfProfAccBusPmuMode;
578
579/*
580 * Section for prototypes interface functions
581 */
582
583/**
584 * @ingroup IxPerfProfAcc
585 *
586 * @fn ixPerfProfAccXscalePmuEventCountStart(
587 BOOL clkCntDiv,
588 UINT32 numEvents,
589 IxPerfProfAccXscalePmuEvent pmuEvent1,
590 IxPerfProfAccXscalePmuEvent pmuEvent2,
591 IxPerfProfAccXscalePmuEvent pmuEvent3,
592 IxPerfProfAccXscalePmuEvent pmuEvent4 )
593 *
594 * @brief This API will start the clock and event counting
595 *
596 * @param clkCntDiv BOOL [in] - enables/disables the clock divider. When
597 * true, the divider is enabled and the clock count will be incremented
598 * by one at each 64th processor clock cycle. When false, the divider
599 * is disabled and the clock count will be incremented at every
600 * processor clock cycle.
601 * @param numEvents UINT32 [in] - the number of PMU events that are to be
602 * monitored as specified by the user. For clock counting only, this
603 * is set to zero.
604 * @param pmuEvent1 @ref IxPerfProfAccXscalePmuEvent [in] - the specific PMU
605 * event to be monitored by counter 1
606 * @param pmuEvent2 @ref IxPerfProfAccXscalePmuEvent [in] - the specific PMU
607 * event to be monitored by counter 2
608 * @param pmuEvent3 @ref IxPerfProfAccXscalePmuEvent [in] - the specific PMU
609 * event to be monitored by counter 3
610 * @param pmuEvent4 @ref IxPerfProfAccXscalePmuEvent [in] - the specific PMU
611 * event to be monitored by counter 4
612 *
613 * This API will start the clock and xscale PMU event counting. Up to
614 * 4 events can be monitored simultaneously. This API has to be called before
615 * ixPerfProfAccXscalePmuEventCountStop can be called.
616 *
617 * @return
618 * - IX_PERFPROF_ACC_STATUS_SUCCESS if clock and events counting are
619 * started successfully
620 * - IX_PERFPROF_ACC_STATUS_FAIL if unable to start the counting
621 * - IX_PERFPROF_ACC_STATUS_XSCALE_PMU_NUM_INVALID if the number of events
622 * specified is out of the valid range
623 * - IX_PERFPROF_ACC_STATUS_XSCALE_PMU_EVENT_INVALID if the value of the PMU
624 * event specified does not exist
625 * - IX_PERFPROF_ACC_STATUS_ANOTHER_UTIL_IN_PROGRESS - another utility is
626 * running
627 *
628 * @li Reentrant : no
629 * @li ISR Callable : no
630 *
631 */
632PUBLIC IxPerfProfAccStatus
633ixPerfProfAccXscalePmuEventCountStart(
634 BOOL clkCntDiv,
635 UINT32 numEvents,
636 IxPerfProfAccXscalePmuEvent pmuEvent1,
637 IxPerfProfAccXscalePmuEvent pmuEvent2,
638 IxPerfProfAccXscalePmuEvent pmuEvent3,
639 IxPerfProfAccXscalePmuEvent pmuEvent4 );
640
641/**
642 * @ingroup IxPerfProfAcc
643 *
644 * @fn ixPerfProfAccXscalePmuEventCountStop (
645 IxPerfProfAccXscalePmuResults *eventCountStopResults)
646 *
647 * @brief This API will stop the clock and event counting
648 *
649 * @param *eventCountStopResults @ref IxPerfProfAccXscalePmuResults [out] - pointer
650 * to struct containing results of counters and their overflow. It is the
651 * users's responsibility to allocate the memory for this pointer.
652 *
653 * This API will stop the clock and xscale PMU events that are being counted.
654 * The results of the clock and events count will be stored in the pointer
655 * allocated by the user. It can only be called once
656 * IxPerfProfAccEventCountStart has been called.
657 *
658 * @return
659 * - IX_PERFPROF_ACC_STATUS_SUCCESS if clock and events counting are
660 * stopped successfully
661 * - IX_PERFPROF_ACC_STATUS_XSCALE_PMU_START_NOT_CALLED if
662 * ixPerfProfAccXscalePmuEventCountStart is not called first.
663 *
664 * @li Reentrant : no
665 * @li ISR Callable : no
666 *
667 */
668
669PUBLIC IxPerfProfAccStatus
670ixPerfProfAccXscalePmuEventCountStop(
671 IxPerfProfAccXscalePmuResults *eventCountStopResults);
672
673/**
674 * @ingroup IxPerfProfAcc
675 *
676 * @fn ixPerfProfAccXscalePmuTimeSampStart(
677 UINT32 samplingRate,
678 BOOL clkCntDiv)
679 *
680 * @brief Starts the time based sampling
681 *
682 * @param samplingRate UINT32 [in] - sampling rate is the number of
683 * clock counts before a counter overflow interrupt is generated,
684 * at which, a sample is taken; the rate specified cannot be greater
685 * than the counter size of 32bits or set to zero.
686 * @param clkCntDiv BOOL [in] - enables/disables the clock divider. When
687 * true, the divider is enabled and the clock count will be incremented
688 * by one at each 64th processor clock cycle. When false, the divider
689 * is disabled and the clock count will be incremented at every
690 * processor clock cycle.
691 *
692 * This API starts the time based sampling to determine the frequency with
693 * which lines of code are being executed. Sampling is done at the rate
694 * specified by the user. At each sample,the value of the program counter
695 * is determined. Each of these occurrences are recorded to determine the
696 * frequency with which the Xscale code is being executed. This API has to be
697 * called before ixPerfProfAccXscalePmuTimeSampStop can be called.
698 *
699 * @return
700 * - IX_PERFPROF_ACC_STATUS_SUCCESS if time based sampling is started
701 * successfully
702 * - IX_PERFPROF_ACC_STATUS_FAIL if unable to start the sampling
703 * - IX_PERFPROF_ACC_STATUS_ANOTHER_UTIL_IN_PROGRESS - another utility is
704 * running
705 *
706 * @li Reentrant : no
707 * @li ISR Callable : no
708 *
709 */
710PUBLIC IxPerfProfAccStatus
711ixPerfProfAccXscalePmuTimeSampStart(
712 UINT32 samplingRate,
713 BOOL clkCntDiv);
714
715/**
716 * @ingroup IxPerfProfAcc
717 *
718 * @fn ixPerfProfAccXscalePmuTimeSampStop(
719 IxPerfProfAccXscalePmuEvtCnt *clkCount,
720 IxPerfProfAccXscalePmuSamplePcProfile *timeProfile)
721 *
722 * @brief Stops the time based sampling
723 *
724 * @param *clkCount @ref IxPerfProfAccXscalePmuEvtCnt [out] - pointer to the
725 * struct containing the final clock count and its overflow. It is the
726 * user's responsibility to allocate the memory for this pointer.
727 * @param *timeProfile @ref IxPerfProfAccXscalePmuSamplePcProfile [out] -
728 * pointer to the array of profiles for each program counter value;
729 * the user should set the size of the array to
730 * IX_PERFPROF_ACC_XSCALE_PMU_MAX_PROFILE_SAMPLES. It is the user's
731 * responsibility to allocate the memory for this pointer.
732 *
733 * This API stops the time based sampling. The results are stored in the
734 * pointers allocated by the user. It can only be called once
735 * ixPerfProfAccXscalePmuTimeSampStart has been called.
736 *
737 * @return
738 * - IX_PERFPROF_ACC_STATUS_SUCCESS if time based sampling is stopped
739 * successfully
740 * - IX_PERFPROF_ACC_STATUS_XSCALE_PMU_START_NOT_CALLED if
741 * ixPerfProfAccXscalePmuTimeSampStart not called first
742 *
743 * @li Reentrant : no
744 * @li ISR Callable : no
745 *
746 */
747PUBLIC IxPerfProfAccStatus
748ixPerfProfAccXscalePmuTimeSampStop(
749 IxPerfProfAccXscalePmuEvtCnt *clkCount,
750 IxPerfProfAccXscalePmuSamplePcProfile *timeProfile);
751
752/**
753 * @ingroup IxPerfProfAcc
754 *
755 * @fn ixPerfProfAccXscalePmuEventSampStart(
756 UINT32 numEvents,
757 IxPerfProfAccXscalePmuEvent pmuEvent1,
758 UINT32 eventRate1,
759 IxPerfProfAccXscalePmuEvent pmuEvent2,
760 UINT32 eventRate2,
761 IxPerfProfAccXscalePmuEvent pmuEvent3,
762 UINT32 eventRate3,
763 IxPerfProfAccXscalePmuEvent pmuEvent4,
764 UINT32 eventRate4)
765 *
766 * @brief Starts the event based sampling
767 *
768 * @param numEvents UINT32 [in] - the number of PMU events that are
769 * to be monitored as specified by the user. The value should be
770 * between 1-4 events at a time.
771 * @param pmuEvent1 @ref IxPerfProfAccXscalePmuEvent [in] - the specific PMU
772 * event to be monitored by counter 1
773 * @param eventRate1 UINT32 [in] - sampling rate of counter 1. The rate is
774 * the number of events before a sample taken. If 0 is specified, the
775 * the full counter value (0xFFFFFFFF) is used. The rate must not be
776 * greater than the full counter value.
777 * @param pmuEvent2 @ref IxPerfProfAccXscalePmuEvent [in] - the specific PMU
778 * event to be monitored by counter 2
779 * @param eventRate2 UINT32 [in] - sampling rate of counter 2. The rate is
780 * the number of events before a sample taken. If 0 is specified, the
781 * full counter value (0xFFFFFFFF) is used. The rate must not be
782 * greater than the full counter value.
783 * @param pmuEvent3 @ref IxPerfProfAccXscalePmuEvent [in] - the specific PMU
784 * event to be monitored by counter 3
785 * @param eventRate3 UINT32 [in] - sampling rate of counter 3. The rate is
786 * the number of events before a sample taken. If 0 is specified, the
787 * full counter value (0xFFFFFFFF) is used. The rate must not be
788 * greater than the full counter value.
789 * @param pmuEvent4 @ref IxPerfProfAccXscalePmuEvent [in] - the specific PMU
790 * event to be monitored by counter 4
791 * @param eventRate4 UINT32 [in] - sampling rate of counter 4. The rate is
792 * the number of events before a sample taken. If 0 is specified, the
793 * full counter value (0xFFFFFFFF) is used. The rate must not be
794 * greater than the full counter value.
795 *
796 * Starts the event based sampling to determine the frequency with
797 * which events are being executed. The sampling rate is the number of events,
798 * as specified by the user, before a counter overflow interrupt is
799 * generated. A sample is taken at each counter overflow interrupt. At each
800 * sample,the value of the program counter determines the corresponding
801 * location in the code. Each of these occurrences are recorded to determine
802 * the frequency with which the Xscale code in each event is executed. This API
803 * has to be called before ixPerfProfAccXscalePmuEventSampStop can be called.
804 *
805 * @return
806 * - IX_PERFPROF_ACC_STATUS_SUCCESS if event based sampling is started
807 * successfully
808 * - IX_PERFPROF_ACC_STATUS_FAIL if unable to start the sampling
809 * - IX_PERFPROF_ACC_STATUS_XSCALE_PMU_NUM_INVALID if the number of events
810 * specified is out of the valid range
811 * - IX_PERFPROF_ACC_STATUS_XSCALE_PMU_EVENT_INVALID if the value of the
812 * PMU event specified does not exist
813 * - IX_PERFPROF_ACC_STATUS_ANOTHER_UTIL_IN_PROGRESS - another utility is
814 * running
815 *
816 * @li Reentrant : no
817 * @li ISR Callable : no
818 *
819 */
820PUBLIC IxPerfProfAccStatus
821ixPerfProfAccXscalePmuEventSampStart(
822 UINT32 numEvents,
823 IxPerfProfAccXscalePmuEvent pmuEvent1,
824 UINT32 eventRate1,
825 IxPerfProfAccXscalePmuEvent pmuEvent2,
826 UINT32 eventRate2,
827 IxPerfProfAccXscalePmuEvent pmuEvent3,
828 UINT32 eventRate3,
829 IxPerfProfAccXscalePmuEvent pmuEvent4,
830 UINT32 eventRate4);
831
832/**
833 * @ingroup IxPerfProfAcc
834 *
835 * @fn ixPerfProfAccXscalePmuEventSampStop(
836 IxPerfProfAccXscalePmuSamplePcProfile *eventProfile1,
837 IxPerfProfAccXscalePmuSamplePcProfile *eventProfile2,
838 IxPerfProfAccXscalePmuSamplePcProfile *eventProfile3,
839 IxPerfProfAccXscalePmuSamplePcProfile *eventProfile4)
840 *
841 * @brief Stops the event based sampling
842 *
843 * @param *eventProfile1 @ref IxPerfProfAccXscalePmuSamplePcProfile [out] -
844 * pointer to the array of profiles for each program counter value;
845 * the user should set the size of the array to
846 * IX_PERFPROF_ACC_XSCALE_PMU_MAX_PROFILE_SAMPLES. It is the
847 * users's responsibility to allocate memory for this pointer.
848 * @param *eventProfile2 @ref IxPerfProfAccXscalePmuSamplePcProfile [out] -
849 * pointer to the array of profiles for each program counter value;
850 * the user should set the size of the array to
851 * IX_PERFPROF_ACC_XSCALE_PMU_MAX_PROFILE_SAMPLES. It is the
852 * users's responsibility to allocate memory for this pointer.
853 * @param *eventProfile3 @ref IxPerfProfAccXscalePmuSamplePcProfile [out] -
854 * pointer to the array of profiles for each program counter value;
855 * the user should set the size of the array to
856 * IX_PERFPROF_ACC_XSCALE_PMU_MAX_PROFILE_SAMPLES. It is the
857 * users's responsibility to allocate memory for this pointer.
858 * @param *eventProfile4 @ref IxPerfProfAccXscalePmuSamplePcProfile [out] -
859 * pointer to the array of profiles for each program counter value;
860 * the user should set the size of the array to
861 * IX_PERFPROF_ACC_XSCALE_PMU_MAX_PROFILE_SAMPLES. It is the
862 * users's responsibility to allocate memory for this pointer.
863 *
864 * This API stops the event based sampling. The results are stored in the
865 * pointers allocated by the user. It can only be called once
866 * ixPerfProfAccEventSampStart has been called.
867 *
868 * @return
869 * - IX_PERFPROF_ACC_STATUS_SUCCESS if event based sampling is stopped
870 * successfully
871 * - IX_PERFPROF_ACC_STATUS_XSCALE_PMU_START_NOT_CALLED if
872 * ixPerfProfAccEventSampStart not called first.
873 *
874 * @li Reentrant : no
875 * @li ISR Callable : no
876 *
877 */
878PUBLIC IxPerfProfAccStatus
879ixPerfProfAccXscalePmuEventSampStop(
880 IxPerfProfAccXscalePmuSamplePcProfile *eventProfile1,
881 IxPerfProfAccXscalePmuSamplePcProfile *eventProfile2,
882 IxPerfProfAccXscalePmuSamplePcProfile *eventProfile3,
883 IxPerfProfAccXscalePmuSamplePcProfile *eventProfile4);
884
885/**
886 * @ingroup IxPerfProfAcc
887 *
888 * @fn ixPerfProfAccXscalePmuResultsGet(IxPerfProfAccXscalePmuResults *results)
889 *
890 * @brief Reads the current value of the counters and their overflow
891 *
892 * @param *results @ref IxPerfProfAccXscalePmuResults [out] - pointer to the
893 results struct. It is the user's responsibility to allocate memory
894 for this pointer
895 *
896 * This API reads the value of all four event counters and the clock counter,
897 * and the associated overflows. It does not give results associated with
898 * sampling, i.e. PC and their frequencies. This API can be called at any time
899 * once a process has been started. If it is called before a process has started
900 * the user should be aware that the values it contains are default values and
901 * might be meaningless. The values of the counters are stored in the pointer
902 * allocated by the client.
903 *
904 * @return - none
905 *
906 * @li Reentrant : no
907 * @li ISR Callable : no
908 *
909 */
910PUBLIC void
911ixPerfProfAccXscalePmuResultsGet(IxPerfProfAccXscalePmuResults *results);
912
913/**
914 * @ingroup IxPerfProfAcc
915 *
916 * @fn ixPerfProfAccBusPmuStart(
917 IxPerfProfAccBusPmuMode mode,
918 IxPerfProfAccBusPmuEventCounters1 pecEvent1,
919 IxPerfProfAccBusPmuEventCounters2 pecEvent2,
920 IxPerfProfAccBusPmuEventCounters3 pecEvent3,
921 IxPerfProfAccBusPmuEventCounters4 pecEvent4,
922 IxPerfProfAccBusPmuEventCounters5 pecEvent5,
923 IxPerfProfAccBusPmuEventCounters6 pecEvent6,
924 IxPerfProfAccBusPmuEventCounters7 pecEvent7)
925 * @brief Initializes all the counters and selects events to be monitored.
926 *
927 * Function initializes all the counters and assigns the events associated
928 * with the counters. Users send in the mode and events they want to count.
929 * This API verifies if the combination chosen is appropriate
930 * and sets all the registers accordingly. Selecting HALT mode will result
931 * in an error. User should use ixPerfProfAccBusPmuStop() to HALT.
932 *
933 *
934 * @param mode @ref IxPerfProfAccStateBusPmuMode [in] - Mode selection.
935 * @param pecEvent1 @ref IxPerfProfAccBusPmuEventCounters1 [in] - Event for PEC1.
936 * @param pecEvent2 @ref IxPerfProfAccBusPmuEventCounters2 [in] - Event for PEC2.
937 * @param pecEvent3 @ref IxPerfProfAccBusPmuEventCounters3 [in] - Event for PEC3.
938 * @param pecEvent4 @ref IxPerfProfAccBusPmuEventCounters4 [in] - Event for PEC4.
939 * @param pecEvent5 @ref IxPerfProfAccBusPmuEventCounters5 [in] - Event for PEC5.
940 * @param pecEvent6 @ref IxPerfProfAccBusPmuEventCounters6 [in] - Event for PEC6.
941 * @param pecEvent7 @ref IxPerfProfAccBusPmuEventCounters7 [in] - Event for PEC7.
942 *
943 * @return
944 * - IX_PERFPROF_ACC_STATUS_SUCCESS - Initialization executed
945 * successfully.
946 * - IX_PERFPROF_ACC_STATUS_BUS_PMU_MODE_ERROR - Error in selection of
947 * mode. Only NORTH, SOUTH and SDRAM modes are allowed.
948 * - IX_PERFPROF_ACC_STATUS_BUS_PMU_PEC1_ERROR - Error in selection of
949 * event for PEC1
950 * - IX_PERFPROF_ACC_STATUS_BUS_PMU_PEC2_ERROR - Error in selection of
951 * event for PEC2
952 * - IX_PERFPROF_ACC_STATUS_BUS_PMU_PEC3_ERROR - Error in selection of
953 * event for PEC3
954 * - IX_PERFPROF_ACC_STATUS_BUS_PMU_PEC4_ERROR - Error in selection of
955 * event for PEC4
956 * - IX_PERFPROF_ACC_STATUS_BUS_PMU_PEC5_ERROR - Error in selection of
957 * event for PEC5
958 * - IX_PERFPROF_ACC_STATUS_BUS_PMU_PEC6_ERROR - Error in selection of
959 * event for PEC6
960 * - IX_PERFPROF_ACC_STATUS_BUS_PMU_PEC7_ERROR - Error in selection of
961 * event for PEC7
962 * - IX_PERFPROF_ACC_STATUS_ANOTHER_UTIL_IN_PROGRESS - another utility
963 * is running
964 * - IX_PERFPROF_ACC_STATUS_FAIL - Failed to start because interrupt
965 * service routine fails to bind.
966 *
967 * @li Reentrant : no
968 * @li ISR Callable : no
969 *
970 **/
971PUBLIC
972IxPerfProfAccStatus ixPerfProfAccBusPmuStart (
973 IxPerfProfAccBusPmuMode mode,
974 IxPerfProfAccBusPmuEventCounters1 pecEvent1,
975 IxPerfProfAccBusPmuEventCounters2 pecEvent2,
976 IxPerfProfAccBusPmuEventCounters3 pecEvent3,
977 IxPerfProfAccBusPmuEventCounters4 pecEvent4,
978 IxPerfProfAccBusPmuEventCounters5 pecEvent5,
979 IxPerfProfAccBusPmuEventCounters6 pecEvent6,
980 IxPerfProfAccBusPmuEventCounters7 pecEvent7);
981
982/**
983 * @ingroup IxPerfProfAcc
984 *
985 * @fn ixPerfProfAccBusPmuStop(void)
986 * @brief Stops all counters.
987 *
988 * This function stops all the PECs by setting the halt bit in the ESR.
989 *
990 *
991 * @return
992 * - IX_PERFPROF_ACC_STATUS_SUCCESS - Counters successfully halted.
993 * - IX_PERFPROF_ACC_STATUS_FAIL - Counters could'nt be halted.
994 * - IX_PERFPROF_ACC_STATUS_BUS_PMU_START_NOT_CALLED - the
995 * ixPerfProfAccBusPmuStart() function is not called.
996 *
997 * @li Reentrant : no
998 * @li ISR Callable : no
999 *
1000 **/
1001PUBLIC IxPerfProfAccStatus
1002ixPerfProfAccBusPmuStop (void);
1003
1004/**
1005 * @ingroup IxPerfProfAcc
1006 *
1007 * @fn ixPerfProfAccBusPmuResultsGet (
1008 IxPerfProfAccBusPmuResults *busPmuResults)
1009 * @brief Gets values of all counters
1010 *
1011 * This function is responsible for getting all the counter values from the
1012 * lower API and putting it into an array for the user.
1013 *
1014 * @param *busPmuResults @ref IxPerfProfAccBusPmuResults [out]
1015 * - Pointer to a structure of arrays to store all counter values.
1016 *
1017 * @return none
1018 *
1019 * @li Reentrant : no
1020 * @li ISR Callable : no
1021 *
1022 **/
1023PUBLIC void
1024ixPerfProfAccBusPmuResultsGet (IxPerfProfAccBusPmuResults *BusPmuResults);
1025
1026/**
1027 * @ingroup IxPerfProfAcc
1028 *
1029 * @fn ixPerfProfAccBusPmuPMSRGet (
1030 UINT32 *pmsrValue)
1031 * @brief Get values of PMSR
1032 *
1033 * This API gets the Previous Master Slave Register
1034 * value and returns it to the calling function. This value indicates
1035 * which master or slave accessed the north, south bus or sdram last.
1036 * The value returned by this function is a 32 bit value and is read
1037 * from location of an offset 0x0024 of the base value.
1038 *
1039 * The PMSR value returned indicate the following:
1040 * <pre>
1041 *
1042 * *************************************************************************************
1043 * * Bit * Name * Description *
1044 * * *
1045 * *************************************************************************************
1046 * * [31:18] *Reserved* *
1047 * *************************************************************************************
1048 * * [17:12] * PSS * Indicates which of the slaves on *
1049 * * * * ARBS was previously *
1050 * * * * accessed by the AHBS. *
1051 * * * * [000001] Expansion Bus *
1052 * * * * [000010] SDRAM Controller *
1053 * * * * [000100] PCI *
1054 * * * * [001000] Queue Manager *
1055 * * * * [010000] AHB-APB Bridge *
1056 * * * * [100000] Reserved *
1057 * *************************************************************************************
1058 * * [11:8] * PSN * Indicates which of the Slaves on *
1059 * * * * ARBN was previously *
1060 * * * * accessed the AHBN. *
1061 * * * * [0001] SDRAM Controller *
1062 * * * * [0010] AHB-AHB Bridge *
1063 * * * * [0100] Reserved *
1064 * * * * [1000] Reserved *
1065 * *************************************************************************************
1066 * * [7:4] * PMS * Indicates which of the Masters on *
1067 * * * * ARBS was previously *
1068 * * * * accessing the AHBS. *
1069 * * * * [0001] Gasket *
1070 * * * * [0010] AHB-AHB Bridge *
1071 * * * * [0100] PCI *
1072 * * * * [1000] APB *
1073 * *************************************************************************************
1074 * * [3:0] * PMN * Indicates which of the Masters on *
1075 * * * * ARBN was previously *
1076 * * * * accessing the AHBN. *
1077 * * * * [0001] NPEA *
1078 * * * * [0010] NPEB *
1079 * * * * [0100] NPEC *
1080 * * * * [1000] Reserved *
1081 * *************************************************************************************
1082 * </pre>
1083 *
1084 * @param *pmsrValue UINT32 [out] - Pointer to return PMSR value. Users need to
1085 * allocate storage for psmrValue.
1086 *
1087 * @return none
1088 *
1089 * @li Reentrant : no
1090 * @li ISR Callable : no
1091 *
1092 **/
1093PUBLIC void
1094ixPerfProfAccBusPmuPMSRGet (
1095UINT32 *pmsrValue);
1096
1097
1098/**
1099 * The APIs below are specifically used for Xcycle module.
1100 **/
1101
1102/**
1103 * @ingroup IxPerfProfAcc
1104 *
1105 * @fn ixPerfProfAccXcycleBaselineRun (
1106 UINT32 *numBaselineCycle)
1107 *
1108 * @brief Perform baseline for Xcycle
1109 *
1110 * @param *numBaselineCycle UINT32 [out] - pointer to baseline value after
1111 * calibration. Calling function are responsible for
1112 * allocating memory space for this pointer.
1113 *
1114 * Global Data :
1115 * - None.
1116 *
1117 * This function MUST be run before the Xcycle tool can be used. This
1118 * function must be run immediately when the OS boots up with no other
1119 * addition programs running.
1120 * Addition note : This API will measure the time needed to perform
1121 * a fix amount of CPU instructions (~ 1 second worth of loops) as a
1122 * highest priority task and with interrupt disabled. The time measured
1123 * is known as the baseline - interpreted as the shortest time
1124 * needed to complete the amount of CPU instructions. The baseline is
1125 * returned as unit of time in 66Mhz clock tick.
1126 *
1127 * @return
1128 * - IX_PERFPROF_ACC_STATUS_SUCCESS - successful run, result is returned
1129 * - IX_PERFPROF_ACC_STATUS_XCYCLE_PRIORITY_SET_FAIL - failed to change
1130 * task priority
1131 * - IX_PERFPROF_ACC_STATUS_XCYCLE_PRIORITY_RESTORE_FAIL - failed to
1132 * restore task priority
1133 * - IX_PERFPROF_ACC_STATUS_ANOTHER_UTIL_IN_PROGRESS - another utility
1134 * is running
1135 * - IX_PERFPROF_ACC_STATUS_XCYCLE_MEASUREMENT_IN_PROGRESS - Xcycle
1136 * tool has already started
1137 *
1138 * @li Reentrant : no
1139 * @li ISR Callable : no
1140 *
1141 */
1142PUBLIC IxPerfProfAccStatus
1143ixPerfProfAccXcycleBaselineRun(
1144 UINT32 *numBaselineCycle);
1145
1146/**
1147 * @ingroup IxPerfProfAcc
1148 *
1149 * @fn ixPerfProfAccXcycleStart(
1150 UINT32 numMeasurementsRequested);
1151 *
1152 * @brief Start the measurement
1153 *
1154 * @param numMeasurementsRequested UINT32 [in] - number of measurements
1155 * to perform. Value can be 0 to
1156 * IX_PERFPROF_ACC_XCYCLE_MAX_NUM_OF_MEASUREMENTS.
1157 * 0 indicate continuous measurement.
1158 *
1159 * Global Data :
1160 * - None.
1161 *
1162 *
1163 * Start the measurements immediately.
1164 * numMeasurementsRequested specifies number of measurements to run.
1165 * If numMeasurementsRequested is set to 0, the measurement will
1166 * be performed continuously until IxPerfProfAccXcycleStop()
1167 * is called.
1168 * It is estimated that 1 measurement takes approximately 1 second during
1169 * low CPU utilization, therefore 128 measurement takes approximately 128 sec.
1170 * When CPU utilization is high, the measurement will take longer.
1171 * This function spawn a task the perform the measurement and returns.
1172 * The measurement may continue even if this function returns.
1173 *
1174 * IMPORTANT: Under heavy CPU utilization, the task spawn by this
1175 * function may starve and fail to respond to stop command. User
1176 * may need to kill the task manually in this case.
1177 *
1178 * There are only IX_PERFPROF_ACC_XCYCLE_MAX_NUM_OF_MEASUREMENTS
1179 * storage available so storing is wrapped around if measurements are
1180 * more than IX_PERFPROF_ACC_XCYCLE_MAX_NUM_OF_MEASUREMENTS.
1181 *
1182 *
1183 * @return
1184 * - IX_PERFPROF_ACC_STATUS_SUCCESS - successful start, a thread is created
1185 * in the background to perform measurement.
1186 * - IX_PERFPROF_ACC_STATUS_XCYCLE_PRIORITY_SET_FAIL - failed to set
1187 * task priority
1188 * - IX_PERFPROF_ACC_STATUS_XCYCLE_THREAD_CREATE_FAIL - failed to create
1189 * thread to perform measurement.
1190 * - IX_PERFPROF_ACC_STATUS_XCYCLE_NO_BASELINE - baseline is not available
1191 * - IX_PERFPROF_ACC_STATUS_XCYCLE_MEASUREMENT_REQUEST_OUT_OF_RANGE -
1192 * value is larger than IX_PERFPROF_ACC_XCYCLE_MAX_NUM_OF_MEASUREMENTS
1193 * - IX_PERFPROF_ACC_STATUS_XCYCLE_MEASUREMENT_IN_PROGRESS - Xcycle tool
1194 * has already started
1195 * - IX_PERFPROF_ACC_STATUS_ANOTHER_UTIL_IN_PROGRESS - another utility is
1196 * running
1197 *
1198 * @li Reentrant : no
1199 * @li ISR Callable : no
1200 *
1201 */
1202PUBLIC IxPerfProfAccStatus
1203ixPerfProfAccXcycleStart (
1204 UINT32 numMeasurementsRequested);
1205
1206/**
1207 * @ingroup IxPerfProfAcc
1208 *
1209 * @fn ixPerfProfAccXcycleStop(void);
1210 *
1211 * @brief Stop the Xcycle measurement
1212 *
1213 * @param None
1214 *
1215 * Global Data :
1216 * - None.
1217 *
1218 * Stop Xcycle measurements immediately. If the measurements have stopped
1219 * or not started, return IX_PERFPROF_STATUS_XCYCLE_MEASUREMENT_NOT_RUNNING.
1220 * Note: This function does not stop measurement cold. The measurement thread
1221 * may need a few seconds to complete the last measurement. User needs to use
1222 * ixPerfProfAccXcycleInProgress() to determine if measurement is indeed
1223 * completed.
1224 *
1225 * @return
1226 * - IX_PERFPROF_ACC_STATUS_SUCCESS - successful measurement is stopped
1227 * - IX_PERFPROF_STATUS_XCYCLE_MEASUREMENT_NOT_RUNNING - no measurement running
1228 *
1229 * @li Reentrant : no
1230 * @li ISR Callable : no
1231 *
1232 */
1233PUBLIC IxPerfProfAccStatus
1234ixPerfProfAccXcycleStop(void);
1235
1236/**
1237 * @ingroup IxPerfProfAcc
1238 *
1239 * @fn ixPerfProfAccXcycleResultsGet(
1240 IxPerfProfAccXcycleResults *xcycleResult )
1241 *
1242 * @brief Get the results of Xcycle measurement
1243 *
1244 * @param *xcycleResult @ref IxPerfProfAccXcycleResults [out] - Pointer to
1245 * results of last measurements. Calling function are
1246 * responsible for allocating memory space for this pointer.
1247 *
1248 * Global Data :
1249 * - None.
1250 *
1251 * Retrieve the results of last measurement. User should use
1252 * ixPerfProfAccXcycleInProgress() to check if measurement is completed
1253 * before getting the results.
1254 *
1255 * @return
1256 * - IX_PERFPROF_ACC_STATUS_SUCCESS - successful
1257 * - IX_PERFPROF_ACC_STATUS_FAIL - result is not complete.
1258 * - IX_PERFPROF_ACC_STATUS_XCYCLE_NO_BASELINE - baseline is performed
1259 * - IX_PERFPROF_ACC_STATUS_XCYCLE_MEASUREMENT_IN_PROGRESS - Xcycle
1260 * tool is still running
1261 *
1262 * @li Reentrant : no
1263 * @li ISR Callable : no
1264 *
1265 */
1266PUBLIC IxPerfProfAccStatus
1267ixPerfProfAccXcycleResultsGet (
1268 IxPerfProfAccXcycleResults *xcycleResult);
1269
1270/**
1271 * @ingroup IxPerfProfAcc
1272 *
1273 * @fn ixPerfProfAccXcycleInProgress (void)
1274 *
1275 * @brief Check if Xcycle is running
1276 *
1277 * @param None
1278 * Global Data :
1279 * - None.
1280 *
1281 * Check if Xcycle measuring task is running.
1282 *
1283 * @return
1284 * - TRUE - Xcycle is running
1285 * - FALSE - Xcycle is not running
1286 *
1287 * @li Reentrant : no
1288 * @li ISR Callable : no
1289 *
1290 */
1291PUBLIC BOOL
1292ixPerfProfAccXcycleInProgress(void);
1293
1294#ifdef __linux
1295/**
1296 * @ingroup IxPerfProfAcc
1297 *
1298 * @fn ixPerfProfAccXscalePmuTimeSampCreateProcFile
1299 *
1300 * @brief Enables proc file to call module function
1301 *
1302 * @param None
1303 *
1304 * Global Data :
1305 * - None.
1306 *
1307 * This function is declared globally to enable /proc directory system to call
1308 * and execute the function when the registered file is called. This function is not meant to
1309 * be called by the user.
1310 *
1311 * @return
1312 * - Length of data written to file.
1313 *
1314 * @li Reentrant : no
1315 * @li ISR Callable : no
1316 *
1317 */
1318int
1319ixPerfProfAccXscalePmuTimeSampCreateProcFile (char *buf, char **start, off_t offset,
1320 int count, int *eof, void *data);
1321
1322/**
1323 * @ingroup IxPerfProfAcc
1324 *
1325 * @fn ixPerfProfAccXscalePmuEventSampCreateProcFile
1326 *
1327 * @brief Enables proc file to call module function
1328 *
1329 * @param None
1330 *
1331 * Global Data :
1332 * - None.
1333 *
1334 * This function is declared globally to enable /proc directory system to call
1335 * and execute the function when the registered file is called. This function is not meant to
1336 * be called by the user.
1337 *
1338 * @return
1339 * - Length of data written to file.
1340 *
1341 * @li Reentrant : no
1342 * @li ISR Callable : no
1343 *
1344 */
1345int
1346ixPerfProfAccXscalePmuEventSampCreateProcFile (char *buf, char **start, off_t offset,
1347 int count, int *eof, void *data);
1348
1349
1350#endif /* ifdef __linux */
1351
1352#endif /* ndef IXPERFPROFACC_H */
1353
1354/**
1355 *@} defgroup IxPerfProfAcc
1356 */
1357
1358