2012-03-15 23:09:17 +04:00
# ifndef __PMU_H
# define __PMU_H
2014-04-25 23:31:02 +04:00
# include <linux/bitmap.h>
2012-11-20 02:21:03 +04:00
# include <linux/perf_event.h>
2013-04-20 22:02:29 +04:00
# include <stdbool.h>
2012-03-15 23:09:17 +04:00
enum {
PERF_PMU_FORMAT_VALUE_CONFIG ,
PERF_PMU_FORMAT_VALUE_CONFIG1 ,
PERF_PMU_FORMAT_VALUE_CONFIG2 ,
} ;
# define PERF_PMU_FORMAT_BITS 64
2014-07-31 10:00:49 +04:00
struct perf_event_attr ;
2012-03-15 23:09:17 +04:00
struct perf_pmu {
char * name ;
__u32 type ;
2014-07-31 10:00:49 +04:00
struct perf_event_attr * default_config ;
2012-09-10 11:53:50 +04:00
struct cpu_map * cpus ;
2014-08-15 11:26:14 +04:00
struct list_head format ; /* HEAD struct perf_pmu_format -> list */
struct list_head aliases ; /* HEAD struct perf_pmu_alias -> list */
struct list_head list ; /* ELEM */
2012-03-15 23:09:17 +04:00
} ;
2014-09-24 18:04:06 +04:00
struct perf_pmu_info {
const char * unit ;
double scale ;
} ;
2014-10-07 19:08:50 +04:00
# define UNIT_MAX_LEN 31 /* max length for event unit name */
struct perf_pmu_alias {
char * name ;
struct list_head terms ; /* HEAD struct parse_events_term -> list */
struct list_head list ; /* ELEM */
char unit [ UNIT_MAX_LEN + 1 ] ;
double scale ;
} ;
2013-07-04 17:20:25 +04:00
struct perf_pmu * perf_pmu__find ( const char * name ) ;
2012-03-15 23:09:17 +04:00
int perf_pmu__config ( struct perf_pmu * pmu , struct perf_event_attr * attr ,
struct list_head * head_terms ) ;
2012-11-10 04:46:50 +04:00
int perf_pmu__config_terms ( struct list_head * formats ,
struct perf_event_attr * attr ,
2014-07-31 10:00:49 +04:00
struct list_head * head_terms ,
bool zero ) ;
2013-11-12 20:58:49 +04:00
int perf_pmu__check_alias ( struct perf_pmu * pmu , struct list_head * head_terms ,
2014-09-24 18:04:06 +04:00
struct perf_pmu_info * info ) ;
2012-06-15 10:31:41 +04:00
struct list_head * perf_pmu__alias ( struct perf_pmu * pmu ,
2013-01-18 23:54:00 +04:00
struct list_head * head_terms ) ;
2012-03-15 23:09:17 +04:00
int perf_pmu_wrap ( void ) ;
void perf_pmu_error ( struct list_head * list , char * name , char const * msg ) ;
int perf_pmu__new_format ( struct list_head * list , char * name ,
int config , unsigned long * bits ) ;
void perf_pmu__set_format ( unsigned long * bits , long from , long to ) ;
2012-11-10 04:46:50 +04:00
int perf_pmu__format_parse ( char * dir , struct list_head * head ) ;
2012-03-15 23:09:17 +04:00
2012-08-16 23:10:24 +04:00
struct perf_pmu * perf_pmu__scan ( struct perf_pmu * pmu ) ;
2013-04-20 22:02:29 +04:00
void print_pmu_events ( const char * event_glob , bool name_only ) ;
2013-08-22 03:47:26 +04:00
bool pmu_have_event ( const char * pname , const char * name ) ;
2013-04-20 22:02:29 +04:00
2014-07-31 10:00:50 +04:00
int perf_pmu__scan_file ( struct perf_pmu * pmu , const char * name , const char * fmt ,
. . . ) __attribute__ ( ( format ( scanf , 3 , 4 ) ) ) ;
2012-03-15 23:09:17 +04:00
int perf_pmu__test ( void ) ;
2014-07-31 10:00:49 +04:00
struct perf_event_attr * perf_pmu__get_default_config ( struct perf_pmu * pmu ) ;
2012-03-15 23:09:17 +04:00
# endif /* __PMU_H */