| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- /*
- * 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 <xtensa/config/core.h>
- #include <xtensa/xt_perf_consts.h>
- #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.
- <selector> - events group, one of XTPERF_CNT constants defined in
- xt_perf_consts.h;
- <mask> - events mask for selected group. Mask bit fields for each
- selector defined with XTPERF_MASK prefix in xt_perf_consts.h;
- <trace_level> - 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.
- <selector> - events group, one of XTPERF_CNT constants defined in
- xt_perf_consts.h;
- <mask> - events mask for selected group. Mask bit fields for each
- selector defined with XTPERF_MASK prefix in xt_perf_consts.h;
- <trace_level> - 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__ */
|