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>
2012-05-21 11:12:49 +04:00
# include "types.h"
2012-10-14 12:40:57 +04:00
# include "../../../include/uapi/linux/perf_event.h"
2012-04-05 20:26:25 +04:00
# include "types.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 ) ;
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 ) ;
extern int parse_events ( struct perf_evlist * evlist , const char * str ,
int unset ) ;
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)
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 ,
} ;
struct parse_events__term {
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 ;
} ;
2012-06-15 10:31:38 +04:00
struct parse_events_data__events {
struct list_head list ;
int idx ;
} ;
2012-06-15 10:31:40 +04:00
struct parse_events_data__terms {
struct list_head * terms ;
} ;
2012-03-15 23:09:16 +04:00
int parse_events__is_hardcoded_term ( struct parse_events__term * term ) ;
2012-04-25 20:24:57 +04:00
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 ) ;
2012-04-25 20:24:57 +04:00
int parse_events__term_str ( struct parse_events__term * * _term ,
int type_term , char * config , char * str ) ;
2012-06-15 10:31:41 +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 ) ;
2012-05-21 11:12:51 +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 ) ;
2012-05-21 11:12:51 +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 ) ;
2012-05-21 11:12:51 +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 ) ;
2012-05-21 11:12:51 +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 ) ;
2012-05-21 11:12:51 +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 ) ;
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-05-21 11:12:49 +04:00
int parse_events__test ( void ) ;
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 */