2009-09-24 20:02:18 +04:00
# ifndef __PERF_TRACE_EVENTS_H
# define __PERF_TRACE_EVENTS_H
2009-08-17 18:18:05 +04:00
2009-08-28 05:09:58 +04:00
# include "parse-events.h"
2009-08-17 18:18:05 +04:00
# define __unused __attribute__((unused))
# ifndef PAGE_MASK
# define PAGE_MASK (page_size - 1)
# endif
enum {
RINGBUF_TYPE_PADDING = 29 ,
RINGBUF_TYPE_TIME_EXTEND = 30 ,
RINGBUF_TYPE_TIME_STAMP = 31 ,
} ;
# ifndef TS_SHIFT
# define TS_SHIFT 27
# endif
# define NSECS_PER_SEC 1000000000ULL
# define NSECS_PER_USEC 1000ULL
enum format_flags {
FIELD_IS_ARRAY = 1 ,
FIELD_IS_POINTER = 2 ,
2009-10-06 10:09:50 +04:00
FIELD_IS_SIGNED = 4 ,
2009-10-06 10:09:52 +04:00
FIELD_IS_STRING = 8 ,
FIELD_IS_DYNAMIC = 16 ,
2009-08-17 18:18:05 +04:00
} ;
struct format_field {
struct format_field * next ;
char * type ;
char * name ;
int offset ;
int size ;
unsigned long flags ;
} ;
struct format {
int nr_common ;
int nr_fields ;
struct format_field * common_fields ;
struct format_field * fields ;
} ;
struct print_arg_atom {
char * atom ;
} ;
struct print_arg_string {
char * string ;
2009-08-31 08:45:21 +04:00
int offset ;
2009-08-17 18:18:05 +04:00
} ;
struct print_arg_field {
char * name ;
struct format_field * field ;
} ;
struct print_flag_sym {
struct print_flag_sym * next ;
char * value ;
char * str ;
} ;
struct print_arg_typecast {
char * type ;
struct print_arg * item ;
} ;
struct print_arg_flags {
struct print_arg * field ;
char * delim ;
struct print_flag_sym * flags ;
} ;
struct print_arg_symbol {
struct print_arg * field ;
struct print_flag_sym * symbols ;
} ;
struct print_arg ;
struct print_arg_op {
char * op ;
int prio ;
struct print_arg * left ;
struct print_arg * right ;
} ;
struct print_arg_func {
char * name ;
struct print_arg * args ;
} ;
enum print_arg_type {
PRINT_NULL ,
PRINT_ATOM ,
PRINT_FIELD ,
PRINT_FLAGS ,
PRINT_SYMBOL ,
PRINT_TYPE ,
PRINT_STRING ,
PRINT_OP ,
} ;
struct print_arg {
struct print_arg * next ;
enum print_arg_type type ;
union {
struct print_arg_atom atom ;
struct print_arg_field field ;
struct print_arg_typecast typecast ;
struct print_arg_flags flags ;
struct print_arg_symbol symbol ;
struct print_arg_func func ;
struct print_arg_string string ;
struct print_arg_op op ;
} ;
} ;
struct print_fmt {
char * format ;
struct print_arg * args ;
} ;
struct event {
struct event * next ;
char * name ;
int id ;
int flags ;
struct format format ;
struct print_fmt print_fmt ;
2009-10-06 10:09:51 +04:00
char * system ;
2009-08-17 18:18:05 +04:00
} ;
enum {
2009-10-14 23:43:39 +04:00
EVENT_FL_ISFTRACE = 0x01 ,
EVENT_FL_ISPRINT = 0x02 ,
EVENT_FL_ISBPRINT = 0x04 ,
EVENT_FL_ISFUNC = 0x08 ,
EVENT_FL_ISFUNCENT = 0x10 ,
EVENT_FL_ISFUNCRET = 0x20 ,
EVENT_FL_FAILED = 0x80000000
2009-08-17 18:18:05 +04:00
} ;
struct record {
unsigned long long ts ;
int size ;
void * data ;
} ;
struct record * trace_peek_data ( int cpu ) ;
struct record * trace_read_data ( int cpu ) ;
void parse_set_info ( int nr_cpus , int long_sz ) ;
2009-10-07 01:36:47 +04:00
void trace_report ( int fd ) ;
2009-08-17 18:18:05 +04:00
void * malloc_or_die ( unsigned int size ) ;
void parse_cmdlines ( char * file , int size ) ;
void parse_proc_kallsyms ( char * file , unsigned int size ) ;
void parse_ftrace_printk ( char * file , unsigned int size ) ;
void print_funcs ( void ) ;
void print_printk ( void ) ;
int parse_ftrace_file ( char * buf , unsigned long size ) ;
2009-10-06 10:09:51 +04:00
int parse_event_file ( char * buf , unsigned long size , char * sys ) ;
2009-08-17 18:18:05 +04:00
void print_event ( int cpu , void * data , int size , unsigned long long nsecs ,
char * comm ) ;
extern int file_bigendian ;
extern int host_bigendian ;
int bigendian ( void ) ;
static inline unsigned short __data2host2 ( unsigned short data )
{
unsigned short swap ;
if ( host_bigendian = = file_bigendian )
return data ;
swap = ( ( data & 0xffULL ) < < 8 ) |
( ( data & ( 0xffULL < < 8 ) ) > > 8 ) ;
return swap ;
}
static inline unsigned int __data2host4 ( unsigned int data )
{
unsigned int swap ;
if ( host_bigendian = = file_bigendian )
return data ;
swap = ( ( data & 0xffULL ) < < 24 ) |
( ( data & ( 0xffULL < < 8 ) ) < < 8 ) |
( ( data & ( 0xffULL < < 16 ) ) > > 8 ) |
( ( data & ( 0xffULL < < 24 ) ) > > 24 ) ;
return swap ;
}
static inline unsigned long long __data2host8 ( unsigned long long data )
{
unsigned long long swap ;
if ( host_bigendian = = file_bigendian )
return data ;
swap = ( ( data & 0xffULL ) < < 56 ) |
( ( data & ( 0xffULL < < 8 ) ) < < 40 ) |
( ( data & ( 0xffULL < < 16 ) ) < < 24 ) |
( ( data & ( 0xffULL < < 24 ) ) < < 8 ) |
( ( data & ( 0xffULL < < 32 ) ) > > 8 ) |
( ( data & ( 0xffULL < < 40 ) ) > > 24 ) |
( ( data & ( 0xffULL < < 48 ) ) > > 40 ) |
( ( data & ( 0xffULL < < 56 ) ) > > 56 ) ;
return swap ;
}
# define data2host2(ptr) __data2host2(*(unsigned short *)ptr)
# define data2host4(ptr) __data2host4(*(unsigned int *)ptr)
# define data2host8(ptr) __data2host8(*(unsigned long long *)ptr)
extern int header_page_ts_offset ;
extern int header_page_ts_size ;
extern int header_page_size_offset ;
extern int header_page_size_size ;
extern int header_page_data_offset ;
extern int header_page_data_size ;
2009-10-14 23:43:42 +04:00
extern int latency_format ;
2009-08-17 18:18:05 +04:00
int parse_header_page ( char * buf , unsigned long size ) ;
2009-09-11 14:12:54 +04:00
int trace_parse_common_type ( void * data ) ;
struct event * trace_find_event ( int id ) ;
2009-09-12 04:43:45 +04:00
unsigned long long
raw_field_value ( struct event * event , const char * name , void * data ) ;
void * raw_field_ptr ( struct event * event , const char * name , void * data ) ;
2009-08-17 18:18:05 +04:00
2009-11-21 19:31:26 +03:00
int read_tracing_data ( int fd , struct perf_event_attr * pattrs , int nb_events ) ;
2009-08-17 18:18:05 +04:00
2009-10-14 23:43:42 +04:00
/* taken from kernel/trace/trace.h */
enum trace_flag_type {
TRACE_FLAG_IRQS_OFF = 0x01 ,
TRACE_FLAG_IRQS_NOSUPPORT = 0x02 ,
TRACE_FLAG_NEED_RESCHED = 0x04 ,
TRACE_FLAG_HARDIRQ = 0x08 ,
TRACE_FLAG_SOFTIRQ = 0x10 ,
} ;
2009-09-24 20:02:18 +04:00
# endif /* __PERF_TRACE_EVENTS_H */