2009-06-06 14:24:17 +04:00
/*
* builtin - list . c
*
* Builtin list command : list all event types
*
* Copyright ( C ) 2009 , Thomas Gleixner < tglx @ linutronix . de >
* Copyright ( C ) 2008 - 2009 , Red Hat Inc , Ingo Molnar < mingo @ redhat . com >
2011-02-17 20:38:58 +03:00
* Copyright ( C ) 2011 , Red Hat Inc , Arnaldo Carvalho de Melo < acme @ redhat . com >
2009-06-06 14:24:17 +04:00
*/
# include "builtin.h"
# include "perf.h"
# include "util/parse-events.h"
2009-08-12 21:44:59 +04:00
# include "util/cache.h"
2013-04-20 22:02:29 +04:00
# include "util/pmu.h"
2013-10-30 20:28:29 +04:00
# include "util/parse-options.h"
2009-06-06 14:24:17 +04:00
2012-09-11 02:15:03 +04:00
int cmd_list ( int argc , const char * * argv , const char * prefix __maybe_unused )
2009-06-06 14:24:17 +04:00
{
2013-10-30 20:15:06 +04:00
int i ;
2014-12-31 06:36:55 +03:00
bool raw_dump = false ;
struct option list_options [ ] = {
OPT_BOOLEAN ( 0 , " raw-dump " , & raw_dump , " Dump raw events " ) ,
2013-10-30 20:28:29 +04:00
OPT_END ( )
} ;
const char * const list_usage [ ] = {
" perf list [hw|sw|cache|tracepoint|pmu|event_glob] " ,
NULL
} ;
2014-12-31 06:36:55 +03:00
set_option_flag ( list_options , 0 , " raw-dump " , PARSE_OPT_HIDDEN ) ;
2013-10-30 20:28:29 +04:00
argc = parse_options ( argc , argv , list_options , list_usage ,
PARSE_OPT_STOP_AT_NON_OPTION ) ;
2013-10-30 20:15:06 +04:00
2009-08-12 21:44:59 +04:00
setup_pager ( ) ;
2011-02-17 20:38:58 +03:00
2015-02-13 16:11:55 +03:00
if ( ! raw_dump )
printf ( " \n List of pre-defined events (to be used in -e): \n \n " ) ;
2013-10-30 20:28:29 +04:00
if ( argc = = 0 ) {
2015-02-27 13:21:28 +03:00
print_events ( NULL , raw_dump ) ;
2013-10-30 20:15:06 +04:00
return 0 ;
}
2011-02-17 20:38:58 +03:00
2013-10-30 20:28:29 +04:00
for ( i = 0 ; i < argc ; + + i ) {
2015-02-27 13:21:26 +03:00
if ( strcmp ( argv [ i ] , " tracepoint " ) = = 0 )
2015-02-27 13:21:28 +03:00
print_tracepoint_events ( NULL , NULL , raw_dump ) ;
2013-10-30 20:15:06 +04:00
else if ( strcmp ( argv [ i ] , " hw " ) = = 0 | |
strcmp ( argv [ i ] , " hardware " ) = = 0 )
2015-02-27 13:21:27 +03:00
print_symbol_events ( NULL , PERF_TYPE_HARDWARE ,
2015-02-27 13:21:28 +03:00
event_symbols_hw , PERF_COUNT_HW_MAX , raw_dump ) ;
2013-10-30 20:15:06 +04:00
else if ( strcmp ( argv [ i ] , " sw " ) = = 0 | |
strcmp ( argv [ i ] , " software " ) = = 0 )
2015-02-27 13:21:27 +03:00
print_symbol_events ( NULL , PERF_TYPE_SOFTWARE ,
2015-02-27 13:21:28 +03:00
event_symbols_sw , PERF_COUNT_SW_MAX , raw_dump ) ;
2013-10-30 20:15:06 +04:00
else if ( strcmp ( argv [ i ] , " cache " ) = = 0 | |
strcmp ( argv [ i ] , " hwcache " ) = = 0 )
2015-02-27 13:21:28 +03:00
print_hwcache_events ( NULL , raw_dump ) ;
2013-10-30 20:15:06 +04:00
else if ( strcmp ( argv [ i ] , " pmu " ) = = 0 )
2015-02-27 13:21:28 +03:00
print_pmu_events ( NULL , raw_dump ) ;
2013-10-30 20:15:06 +04:00
else {
char * sep = strchr ( argv [ i ] , ' : ' ) , * s ;
int sep_idx ;
2011-02-17 20:38:58 +03:00
2013-10-30 20:15:06 +04:00
if ( sep = = NULL ) {
2015-02-27 13:21:28 +03:00
print_events ( argv [ i ] , raw_dump ) ;
2013-10-30 20:15:06 +04:00
continue ;
2011-02-17 20:38:58 +03:00
}
2013-10-30 20:15:06 +04:00
sep_idx = sep - argv [ i ] ;
s = strdup ( argv [ i ] ) ;
if ( s = = NULL )
return - 1 ;
s [ sep_idx ] = ' \0 ' ;
2015-02-27 13:21:28 +03:00
print_tracepoint_events ( s , s + sep_idx + 1 , raw_dump ) ;
2013-10-30 20:15:06 +04:00
free ( s ) ;
2011-02-17 20:38:58 +03:00
}
}
2009-06-06 14:24:17 +04:00
return 0 ;
}