/**
* @file papi_vector.h
*/
#ifndef _PAPI_VECTOR_H
#define _PAPI_VECTOR_H
/** Sizes of structure private to each component
*/
typedef struct cmp_struct_sizes {
int context;
int control_state;
int reg_value;
int reg_alloc;
} cmp_struct_sizes_t;
/** Vector Table Stuff
* @internal */
typedef struct papi_vectors {
/** Component specific data structure @see papi.h */
PAPI_component_info_t cmp_info;
/** Component specific structure sizes*/
cmp_struct_sizes_t size;
/* List of exposed function pointers for this component */
void ( *dispatch_timer ) ( int, hwd_siginfo_t *, void * );
void * (*get_overflow_address) (int, char *, int); /**< */
int (*start) (hwd_context_t *, hwd_control_state_t *); /**< */
int (*stop) (hwd_context_t *, hwd_control_state_t *); /**< */
int (*read) (hwd_context_t *, hwd_control_state_t *, long long **, int); /**< */
int (*reset) (hwd_context_t *, hwd_control_state_t *); /**< */
int (*write) (hwd_context_t *, hwd_control_state_t *, long long[]); /**< */
int (*cleanup_eventset) ( hwd_control_state_t * ); /**< */
int (*stop_profiling) (ThreadInfo_t *, EventSetInfo_t *); /**< */
int (*init_component) (int); /**< */
int (*init_thread) (hwd_context_t *); /**< */
int (*init_control_state) (hwd_control_state_t * ptr); /**< */
int (*update_control_state) (hwd_control_state_t *, NativeInfo_t *, int, hwd_context_t *); /**< */
int (*ctl) (hwd_context_t *, int , _papi_int_option_t *); /**< */
int (*set_overflow) (EventSetInfo_t *, int, int); /**< */
int (*set_profile) (EventSetInfo_t *, int, int); /**< */
int (*set_domain) (hwd_control_state_t *, int); /**< */
int (*ntv_enum_events) (unsigned int *, int); /**< */
int (*ntv_name_to_code) (const char *, unsigned int *); /**< */
int (*ntv_code_to_name) (unsigned int, char *, int); /**< */
int (*ntv_code_to_descr) (unsigned int, char *, int); /**< */
int (*ntv_code_to_bits) (unsigned int, hwd_register_t *); /**< */
int (*ntv_code_to_info) (unsigned int, PAPI_event_info_t *);
int (*allocate_registers) (EventSetInfo_t *);
/**< called when an event is added. Should make
sure the new EventSet can map to hardware and
any conflicts are addressed */
int (*shutdown_thread) (hwd_context_t *); /**< */
int (*shutdown_component) (void); /**< */
int (*user) (int, void *, void *); /**< */
}papi_vector_t;
extern papi_vector_t *_papi_hwd[];
typedef struct papi_os_vectors {
long long (*get_real_cycles) (void); /**< */
long long (*get_virt_cycles) (void); /**< */
long long (*get_real_usec) (void); /**< */
long long (*get_virt_usec) (void); /**< */
long long (*get_real_nsec) (void); /**< */
long long (*get_virt_nsec) (void); /**< */
int (*update_shlib_info) (papi_mdi_t * mdi); /**< */
int (*get_system_info) (papi_mdi_t * mdi); /**< */
int (*get_memory_info) (PAPI_hw_info_t *, int); /**< */
int (*get_dmem_info) (PAPI_dmem_info_t *); /**< */
} papi_os_vector_t;
extern papi_os_vector_t _papi_os_vector;
/* Prototypes */
int _papi_hwi_innoculate_vector( papi_vector_t * v );
int _papi_hwi_innoculate_os_vector( papi_os_vector_t * v );
#endif /* _PAPI_VECTOR_H */