| 
									
										
										
										
											2011-01-03 16:39:04 -02:00
										 |  |  | #ifndef __PERF_EVSEL_H
 | 
					
						
							|  |  |  | #define __PERF_EVSEL_H 1
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <linux/list.h>
 | 
					
						
							| 
									
										
										
										
											2011-01-03 17:45:52 -02:00
										 |  |  | #include <stdbool.h>
 | 
					
						
							| 
									
										
										
										
											2011-01-04 16:30:01 +02:00
										 |  |  | #include "../../../include/linux/perf_event.h"
 | 
					
						
							| 
									
										
										
										
											2011-01-03 16:39:04 -02:00
										 |  |  | #include "types.h"
 | 
					
						
							|  |  |  | #include "xyarray.h"
 | 
					
						
							| 
									
										
										
										
											2011-01-03 17:45:52 -02:00
										 |  |  |   | 
					
						
							|  |  |  | struct perf_counts_values { | 
					
						
							|  |  |  | 	union { | 
					
						
							|  |  |  | 		struct { | 
					
						
							|  |  |  | 			u64 val; | 
					
						
							|  |  |  | 			u64 ena; | 
					
						
							|  |  |  | 			u64 run; | 
					
						
							|  |  |  | 		}; | 
					
						
							|  |  |  | 		u64 values[3]; | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct perf_counts { | 
					
						
							|  |  |  | 	s8		   	  scaled; | 
					
						
							|  |  |  | 	struct perf_counts_values aggr; | 
					
						
							|  |  |  | 	struct perf_counts_values cpu[]; | 
					
						
							|  |  |  | }; | 
					
						
							| 
									
										
										
										
											2011-01-03 16:39:04 -02:00
										 |  |  | 
 | 
					
						
							|  |  |  | struct perf_evsel { | 
					
						
							|  |  |  | 	struct list_head	node; | 
					
						
							|  |  |  | 	struct perf_event_attr	attr; | 
					
						
							|  |  |  | 	char			*filter; | 
					
						
							|  |  |  | 	struct xyarray		*fd; | 
					
						
							| 
									
										
										
										
											2011-01-03 17:45:52 -02:00
										 |  |  | 	struct perf_counts	*counts; | 
					
						
							| 
									
										
										
										
											2011-01-03 16:39:04 -02:00
										 |  |  | 	int			idx; | 
					
						
							|  |  |  | 	void			*priv; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-01-03 23:09:46 -02:00
										 |  |  | struct cpu_map; | 
					
						
							|  |  |  | struct thread_map; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-01-07 11:11:09 +08:00
										 |  |  | struct perf_evsel *perf_evsel__new(struct perf_event_attr *attr, int idx); | 
					
						
							| 
									
										
										
										
											2011-01-03 16:39:04 -02:00
										 |  |  | void perf_evsel__delete(struct perf_evsel *evsel); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | int perf_evsel__alloc_fd(struct perf_evsel *evsel, int ncpus, int nthreads); | 
					
						
							| 
									
										
										
										
											2011-01-03 17:45:52 -02:00
										 |  |  | int perf_evsel__alloc_counts(struct perf_evsel *evsel, int ncpus); | 
					
						
							| 
									
										
										
										
											2011-01-03 16:39:04 -02:00
										 |  |  | void perf_evsel__free_fd(struct perf_evsel *evsel); | 
					
						
							| 
									
										
										
										
											2011-01-03 17:45:52 -02:00
										 |  |  | void perf_evsel__close_fd(struct perf_evsel *evsel, int ncpus, int nthreads); | 
					
						
							| 
									
										
										
										
											2011-01-03 16:39:04 -02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-01-03 23:09:46 -02:00
										 |  |  | int perf_evsel__open_per_cpu(struct perf_evsel *evsel, struct cpu_map *cpus); | 
					
						
							|  |  |  | int perf_evsel__open_per_thread(struct perf_evsel *evsel, struct thread_map *threads); | 
					
						
							|  |  |  | int perf_evsel__open(struct perf_evsel *evsel,  | 
					
						
							|  |  |  | 		     struct cpu_map *cpus, struct thread_map *threads); | 
					
						
							| 
									
										
										
										
											2011-01-03 17:48:12 -02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-01-03 16:49:44 -02:00
										 |  |  | #define perf_evsel__match(evsel, t, c)		\
 | 
					
						
							|  |  |  | 	(evsel->attr.type == PERF_TYPE_##t &&	\ | 
					
						
							|  |  |  | 	 evsel->attr.config == PERF_COUNT_##c) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-01-03 17:45:52 -02:00
										 |  |  | int __perf_evsel__read_on_cpu(struct perf_evsel *evsel, | 
					
						
							|  |  |  | 			      int cpu, int thread, bool scale); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * perf_evsel__read_on_cpu - Read out the results on a CPU and thread | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @evsel - event selector to read value | 
					
						
							|  |  |  |  * @cpu - CPU of interest | 
					
						
							|  |  |  |  * @thread - thread of interest | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | static inline int perf_evsel__read_on_cpu(struct perf_evsel *evsel, | 
					
						
							|  |  |  | 					  int cpu, int thread) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	return __perf_evsel__read_on_cpu(evsel, cpu, thread, false); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * perf_evsel__read_on_cpu_scaled - Read out the results on a CPU and thread, scaled | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @evsel - event selector to read value | 
					
						
							|  |  |  |  * @cpu - CPU of interest | 
					
						
							|  |  |  |  * @thread - thread of interest | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | static inline int perf_evsel__read_on_cpu_scaled(struct perf_evsel *evsel, | 
					
						
							|  |  |  | 						 int cpu, int thread) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	return __perf_evsel__read_on_cpu(evsel, cpu, thread, true); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | int __perf_evsel__read(struct perf_evsel *evsel, int ncpus, int nthreads, | 
					
						
							|  |  |  | 		       bool scale); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * perf_evsel__read - Read the aggregate results on all CPUs | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @evsel - event selector to read value | 
					
						
							|  |  |  |  * @ncpus - Number of cpus affected, from zero | 
					
						
							|  |  |  |  * @nthreads - Number of threads affected, from zero | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | static inline int perf_evsel__read(struct perf_evsel *evsel, | 
					
						
							|  |  |  | 				    int ncpus, int nthreads) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	return __perf_evsel__read(evsel, ncpus, nthreads, false); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * perf_evsel__read_scaled - Read the aggregate results on all CPUs, scaled | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @evsel - event selector to read value | 
					
						
							|  |  |  |  * @ncpus - Number of cpus affected, from zero | 
					
						
							|  |  |  |  * @nthreads - Number of threads affected, from zero | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | static inline int perf_evsel__read_scaled(struct perf_evsel *evsel, | 
					
						
							|  |  |  | 					  int ncpus, int nthreads) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	return __perf_evsel__read(evsel, ncpus, nthreads, true); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-01-03 16:39:04 -02:00
										 |  |  | #endif /* __PERF_EVSEL_H */
 |