/* * Customer ID=11656; Build=0x5f626; Copyright (c) 2012 by Tensilica Inc. ALL RIGHTS RESERVED. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef __XT_PERFMON_H__ #define __XT_PERFMON_H__ #include #include #ifdef __cplusplus extern "C" { #endif typedef int counter_id_t; /* xt_perf_init Initialize the performance monitor library. Ordinarily, this function is called automatically via the .init section. If your environment does not support the .init section, you will need to call this function from your code. */ extern void xt_perf_init(void); /* xt_perf_enable Turn on the performance monitor. Ordinarily, counting is off by default. If you turn off performance monitor using xt_perf_disable or by call to a function that disables performance monitor, you can turn it on again via this function. */ extern void xt_perf_enable(void); /* xt_perf_disable Turn off the performance monitor. If you want to suspend counting events for a portion of your code, use this function and then call xt_perf_enable when you want to start again. */ extern void xt_perf_disable(void); /* xt_perf_clear Disable performance monitor and clear all initialized hardware counters. All counter ids are invalid after call to this function and all hardware counters available for initialization. */ extern void xt_perf_clear (void); /* xt_perf_counters_num Returns number of free hardware performance counters. After call to xt_perf_clear all counters are free and available for initialization. With each successful xt_perf_init_counter/xt_perf_init_event call this number is decreasing until no free counters available. */ extern int xt_perf_counters_num (void); /* xt_perf_init_counter32 Setup 32 bit performance counter. This function disables performance monitor if it was enabled. Returns zero based counter id on success or negative value if failed. This function may fail if there is insufficient number of free hardware counters or function arguments are invalid. The counter id returned on success can be used with xt_perf_reset_counter and xt_perf_counter32 functions. - events group, one of XTPERF_CNT constants defined in xt_perf_consts.h; - events mask for selected group. Mask bit fields for each selector defined with XTPERF_MASK prefix in xt_perf_consts.h; - specifies interrupt levels at which to count events; if trace_level is greater or equal to zero events are counted only at interrupt levels below or equal to trace_level; if trace_level is negative events are counted only at (-trace_level) interrupt level or higher. */ extern counter_id_t xt_perf_init_counter32 ( unsigned int selector, unsigned int mask, int trace_level); /* xt_perf_init_counter64 Setup 64 bit performance counter. Library emulates 64 bit counters by handling profiling interrupt and recording overflows of 32 bit hardware counters. This function disables performance monitor if it was enabled. Returns zero based counter id on success or negative value if failed. This function may fail if there is insufficient number of free hardware counters or function arguments are invalid. The counter id returned on success can be used with xt_perf_reset_counter and xt_perf_counter64 functions. - events group, one of XTPERF_CNT constants defined in xt_perf_consts.h; - events mask for selected group. Mask bit fields for each selector defined with XTPERF_MASK prefix in xt_perf_consts.h; - specifies interrupt levels at which to count events; if trace_level is greater or equal to zero events are counted only at interrupt levels below or equal to trace_level; if trace_level is negative events are counted only at (-trace_level) interrupt level or higher. */ extern counter_id_t xt_perf_init_counter64 ( unsigned int selector, unsigned int mask, int trace_level); /* xt_perf_reset_counter Reset counter value to 0. Returns zero on success or non zero if failed. */ extern int xt_perf_reset_counter (counter_id_t counter_id); /* xt_perf_counter32 Read 32 bit counter value. Returns zero if counter id is not valid. */ extern unsigned int xt_perf_counter32 (counter_id_t counter_id); /* xt_perf_counter64 Read 64 bit counter value. Counter must be initialized using xt_perf_init_counter64 function. Returns zero if counter id is not valid. */ extern unsigned long long xt_perf_counter64 (counter_id_t counter_id); /* xt_perf_overflow32 Read overflow flag of 32 bit counter. This flag is dropped when counter initialized or reset. Once counter overflows and wraps around the flag is set and stays set until counter reset. Returns negative value if counter id is invalid, zero if counter not overflowed, positive if in overflowed state. */ extern int xt_perf_overflow32 (counter_id_t counter_id); #ifdef __cplusplus } #endif #endif /* __XT_PERFMON_H__ */