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