/* Various definitions */
/* This is arbitrary. Typically you can add up to ~1000 before */
/* you run out of fds */
#define PERF_EVENT_MAX_MPX_COUNTERS 384
/* We really don't need fancy definitions for these */
typedef struct
{
int group_leader_fd; /* fd of group leader */
int event_fd; /* fd of event */
int event_opened; /* event successfully opened */
int profiling; /* event is profiling */
int sampling; /* event is a sampling event */
uint32_t nr_mmap_pages; /* number pages in the mmap buffer */
void *mmap_buf; /* used for control/profiling */
uint64_t tail; /* current read location in mmap buffer */
uint64_t mask; /* mask used for wrapping the pages */
int cpu; /* cpu associated with this event */
struct perf_event_attr attr; /* perf_event config structure */
} pe_event_info_t;
typedef struct {
int num_events; /* number of events in control state */
unsigned int domain; /* control-state wide domain */
unsigned int granularity; /* granularity */
unsigned int multiplexed; /* multiplexing enable */
unsigned int overflow; /* overflow enable */
unsigned int inherit; /* inherit enable */
unsigned int overflow_signal; /* overflow signal */
int cidx; /* current component */
int cpu; /* which cpu to measure */
pid_t tid; /* thread we are monitoring */
pe_event_info_t events[PERF_EVENT_MAX_MPX_COUNTERS];
long long counts[PERF_EVENT_MAX_MPX_COUNTERS];
} pe_control_t;
typedef struct {
int initialized; /* are we initialized? */
int state; /* are we opened and/or running? */
int cidx; /* our component id */
struct native_event_table_t *event_table; /* our event table */
} pe_context_t;