#ifndef MULTIPLEX_H
#define MULTIPLEX_H
#define PAPI_MAX_SW_MPX_EVENTS 32
/* Structure contained in the EventSet structure that
holds information about multiplexing. */
typedef enum
{ MPX_STOPPED, MPX_RUNNING } MPX_status;
/** Structure contained in the EventSet structure that
holds information about multiplexing.
@internal */
typedef struct _MPX_EventSet {
MPX_status status;
/** Pointer to this thread's structure */
struct _threadlist *mythr;
/** Pointers to this EventSet's MPX entries in the master list for this thread */
struct _masterevent *(mev[PAPI_MAX_SW_MPX_EVENTS]);
/** Number of entries in above list */
int num_events;
/** Not sure... */
long long start_c, stop_c;
long long start_values[PAPI_MAX_SW_MPX_EVENTS];
long long stop_values[PAPI_MAX_SW_MPX_EVENTS];
long long start_hc[PAPI_MAX_SW_MPX_EVENTS];
} MPX_EventSet;
typedef struct EventSetMultiplexInfo {
MPX_EventSet *mpx_evset;
int ns;
int flags;
} EventSetMultiplexInfo_t;
int mpx_check( int EventSet );
int mpx_init( int );
int mpx_add_event( MPX_EventSet **, int EventCode, int domain,
int granularity );
int mpx_remove_event( MPX_EventSet **, int EventCode );
int MPX_add_events( MPX_EventSet ** mpx_events, int *event_list, int num_events,
int domain, int granularity );
int MPX_stop( MPX_EventSet * mpx_events, long long *values );
int MPX_cleanup( MPX_EventSet ** mpx_events );
void MPX_shutdown( void );
int MPX_reset( MPX_EventSet * mpx_events );
int MPX_read( MPX_EventSet * mpx_events, long long *values, int called_by_stop );
int MPX_start( MPX_EventSet * mpx_events );
#endif /* MULTIPLEX_H */