1e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/* 2e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * builtin-list.c 3e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * 4e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * Builtin list command: list all event types 5e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * 6e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * Copyright (C) 2009, Thomas Gleixner <tglx@linutronix.de> 7e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * Copyright (C) 2008-2009, Red Hat Inc, Ingo Molnar <mingo@redhat.com> 8e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * Copyright (C) 2011, Red Hat Inc, Arnaldo Carvalho de Melo <acme@redhat.com> 9e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng */ 10e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include "builtin.h" 11e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 12e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include "perf.h" 13e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 14e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include "util/parse-events.h" 15e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include "util/cache.h" 16e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 17e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengint cmd_list(int argc, const char **argv, const char *prefix __used) 18e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{ 19e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng setup_pager(); 20e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 21e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng if (argc == 1) 22e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng print_events(NULL); 23e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng else { 24e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng int i; 25e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 26e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng for (i = 1; i < argc; ++i) { 27e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng if (i > 1) 28e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng putchar('\n'); 29e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng if (strncmp(argv[i], "tracepoint", 10) == 0) 30e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng print_tracepoint_events(NULL, NULL); 31e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng else if (strcmp(argv[i], "hw") == 0 || 32e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng strcmp(argv[i], "hardware") == 0) 33e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng print_events_type(PERF_TYPE_HARDWARE); 34e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng else if (strcmp(argv[i], "sw") == 0 || 35e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng strcmp(argv[i], "software") == 0) 36e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng print_events_type(PERF_TYPE_SOFTWARE); 37e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng else if (strcmp(argv[i], "cache") == 0 || 38e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng strcmp(argv[i], "hwcache") == 0) 39e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng print_hwcache_events(NULL); 40e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng else { 41e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng char *sep = strchr(argv[i], ':'), *s; 42e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng int sep_idx; 43e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 44e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng if (sep == NULL) { 45e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng print_events(argv[i]); 46e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng continue; 47e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng } 48e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng sep_idx = sep - argv[i]; 49e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng s = strdup(argv[i]); 50e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng if (s == NULL) 51e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng return -1; 52e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 53e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng s[sep_idx] = '\0'; 54e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng print_tracepoint_events(s, s + sep_idx + 1); 55e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng free(s); 56e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng } 57e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng } 58e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng } 59e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng return 0; 60e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng} 61