uboot/cpu/ixp/npe/include/IxPerfProfAcc.h
<<
>>
Prefs
   1/**
   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
1359