2009-09-24 20:02:18 +04:00
# ifndef __PERF_PARSE_EVENTS_H
# define __PERF_PARSE_EVENTS_H
2009-05-26 11:17:18 +04:00
/*
* Parse symbolic events / counts passed in as options :
*/
2012-05-21 11:12:49 +04:00
# include <linux/list.h>
2012-04-05 20:26:25 +04:00
# include <stdbool.h>
2014-04-25 23:31:02 +04:00
# include <linux/types.h>
2012-11-20 02:21:03 +04:00
# include <linux/perf_event.h>
2011-01-03 21:39:04 +03:00
struct list_head ;
struct perf_evsel ;
2011-07-14 13:25:32 +04:00
struct perf_evlist ;
2011-01-03 21:39:04 +03:00
2009-07-21 22:16:29 +04:00
struct option ;
2009-08-28 05:09:58 +04:00
struct tracepoint_path {
char * system ;
char * name ;
struct tracepoint_path * next ;
} ;
extern struct tracepoint_path * tracepoint_id_to_path ( u64 config ) ;
2013-06-26 11:14:05 +04:00
extern struct tracepoint_path * tracepoint_name_to_path ( const char * name ) ;
2011-01-23 00:12:38 +03:00
extern bool have_tracepoints ( struct list_head * evlist ) ;
2009-08-28 05:09:58 +04:00
2011-03-10 08:23:28 +03:00
const char * event_type ( int type ) ;
2009-05-26 13:10:09 +04:00
2011-07-14 13:25:32 +04:00
extern int parse_events_option ( const struct option * opt , const char * str ,
int unset ) ;
2013-01-15 17:39:51 +04:00
extern int parse_events ( struct perf_evlist * evlist , const char * str ) ;
2012-06-15 10:31:40 +04:00
extern int parse_events_terms ( struct list_head * terms , const char * str ) ;
2009-10-15 07:22:07 +04:00
extern int parse_filter ( const struct option * opt , const char * str , int unset ) ;
2009-05-26 13:10:09 +04:00
# define EVENTS_HELP_MAX (128*1024)
2014-10-07 19:08:50 +04:00
enum perf_pmu_event_symbol_type {
PMU_EVENT_SYMBOL_ERR , /* not a PMU EVENT */
PMU_EVENT_SYMBOL , /* normal style PMU event */
PMU_EVENT_SYMBOL_PREFIX , /* prefix of pre-suf style event */
PMU_EVENT_SYMBOL_SUFFIX , /* suffix of pre-suf style event */
} ;
struct perf_pmu_event_symbol {
char * symbol ;
enum perf_pmu_event_symbol_type type ;
} ;
2012-03-15 23:09:16 +04:00
enum {
2012-04-25 20:24:57 +04:00
PARSE_EVENTS__TERM_TYPE_NUM ,
PARSE_EVENTS__TERM_TYPE_STR ,
} ;
enum {
PARSE_EVENTS__TERM_TYPE_USER ,
2012-03-15 23:09:16 +04:00
PARSE_EVENTS__TERM_TYPE_CONFIG ,
PARSE_EVENTS__TERM_TYPE_CONFIG1 ,
PARSE_EVENTS__TERM_TYPE_CONFIG2 ,
2012-05-21 11:12:53 +04:00
PARSE_EVENTS__TERM_TYPE_NAME ,
2012-03-15 23:09:16 +04:00
PARSE_EVENTS__TERM_TYPE_SAMPLE_PERIOD ,
PARSE_EVENTS__TERM_TYPE_BRANCH_SAMPLE_TYPE ,
} ;
2013-01-18 23:29:49 +04:00
struct parse_events_term {
2012-03-15 23:09:16 +04:00
char * config ;
union {
char * str ;
2012-08-07 21:43:13 +04:00
u64 num ;
2012-03-15 23:09:16 +04:00
} val ;
2012-04-25 20:24:57 +04:00
int type_val ;
int type_term ;
2012-03-15 23:09:16 +04:00
struct list_head list ;
} ;
2013-01-18 23:56:57 +04:00
struct parse_events_evlist {
2012-06-15 10:31:38 +04:00
struct list_head list ;
int idx ;
2013-01-22 13:09:29 +04:00
int nr_groups ;
2012-06-15 10:31:38 +04:00
} ;
2013-01-18 23:56:57 +04:00
struct parse_events_terms {
2012-06-15 10:31:40 +04:00
struct list_head * terms ;
} ;
2013-01-18 23:29:49 +04:00
int parse_events__is_hardcoded_term ( struct parse_events_term * term ) ;
int parse_events_term__num ( struct parse_events_term * * _term ,
2012-08-07 21:43:13 +04:00
int type_term , char * config , u64 num ) ;
2013-01-18 23:29:49 +04:00
int parse_events_term__str ( struct parse_events_term * * _term ,
2012-04-25 20:24:57 +04:00
int type_term , char * config , char * str ) ;
2013-01-18 23:29:49 +04:00
int parse_events_term__sym_hw ( struct parse_events_term * * term ,
2012-10-10 16:53:17 +04:00
char * config , unsigned idx ) ;
2013-01-18 23:29:49 +04:00
int parse_events_term__clone ( struct parse_events_term * * new ,
struct parse_events_term * term ) ;
2012-03-15 23:09:16 +04:00
void parse_events__free_terms ( struct list_head * terms ) ;
2012-08-08 14:21:54 +04:00
int parse_events__modifier_event ( struct list_head * list , char * str , bool add ) ;
2012-08-08 14:14:14 +04:00
int parse_events__modifier_group ( struct list_head * list , char * event_mod ) ;
2012-08-16 23:10:21 +04:00
int parse_events_name ( struct list_head * list , char * name ) ;
2013-07-02 23:27:25 +04:00
int parse_events_add_tracepoint ( struct list_head * list , int * idx ,
2012-03-15 23:09:15 +04:00
char * sys , char * event ) ;
2013-07-02 23:27:25 +04:00
int parse_events_add_numeric ( struct list_head * list , int * idx ,
2012-08-07 21:43:13 +04:00
u32 type , u64 config ,
2012-03-15 23:09:16 +04:00
struct list_head * head_config ) ;
2013-07-02 23:27:25 +04:00
int parse_events_add_cache ( struct list_head * list , int * idx ,
2012-03-15 23:09:15 +04:00
char * type , char * op_result1 , char * op_result2 ) ;
2013-07-02 23:27:25 +04:00
int parse_events_add_breakpoint ( struct list_head * list , int * idx ,
2012-03-15 23:09:15 +04:00
void * ptr , char * type ) ;
2013-07-02 23:27:25 +04:00
int parse_events_add_pmu ( struct list_head * list , int * idx ,
2012-03-15 23:09:18 +04:00
char * pmu , struct list_head * head_config ) ;
2014-10-07 19:08:50 +04:00
enum perf_pmu_event_symbol_type
perf_pmu__parse_check ( const char * name ) ;
2012-08-14 23:35:48 +04:00
void parse_events__set_leader ( char * name , struct list_head * list ) ;
2012-03-20 22:15:40 +04:00
void parse_events_update_lists ( struct list_head * list_event ,
struct list_head * list_all ) ;
2012-06-15 10:31:39 +04:00
void parse_events_error ( void * data , void * scanner , char const * msg ) ;
2012-03-15 23:09:15 +04:00
2012-08-09 18:31:52 +04:00
void print_events ( const char * event_glob , bool name_only ) ;
2011-02-17 20:38:58 +03:00
void print_events_type ( u8 type ) ;
2012-08-09 18:31:52 +04:00
void print_tracepoint_events ( const char * subsys_glob , const char * event_glob ,
bool name_only ) ;
int print_hwcache_events ( const char * event_glob , bool name_only ) ;
2011-01-03 19:50:45 +03:00
extern int is_valid_tracepoint ( const char * event_string ) ;
2009-05-26 13:10:09 +04:00
2009-07-21 22:16:29 +04:00
extern int valid_debugfs_mount ( const char * debugfs ) ;
2009-09-24 20:02:18 +04:00
# endif /* __PERF_PARSE_EVENTS_H */