/****************************/ /* THIS IS OPEN SOURCE CODE */ /****************************/ /** * @file linux-bgq.h * CVS: $Id$ * @author Heike Jagode * jagode@eecs.utk.edu * Mods: < your name here > * < your email address > * Blue Gene/Q CPU component: BGPM / Punit * * Tested version of bgpm (early access) * * @brief * This file has the source code for a component that enables PAPI-C to * access hardware monitoring counters for BG/Q through the BGPM library. */ #ifndef _LINUX_BGQ_H #define _LINUX_BGQ_H #include #include #include #include #include #include #include #include #include #include #include #include //#include #include "linux-bgq-common.h" /* Header required to obtain BGQ personality */ #include "process_impl.h" #include "linux-context.h" /* this number assumes that there will never be more events than indicated */ #define BGQ_PUNIT_MAX_COUNTERS UPC_P_NUM_COUNTERS #define BGQ_PUNIT_MAX_EVENTS PEVT_PUNIT_LAST_EVENT #define MAX_COUNTER_TERMS BGQ_PUNIT_MAX_COUNTERS // keep a large enough gap between actual BGPM events and our local opcode events #define OPCODE_BUF ( MAX_COUNTERS + MAX_COUNTERS ) #include "papi.h" #include "papi_preset.h" typedef struct { int preset; /* Preset code */ int derived; /* Derived code */ char *( findme[MAX_COUNTER_TERMS] ); /* Strings to look for, more than 1 means derived */ char *operation; /* PostFix operations between terms */ char *note; /* In case a note is included with a preset */ } bgq_preset_search_entry_t; // Context structure not used... typedef struct bgq_context { int reserved; } bgq_context_t; typedef struct bgq_overflow { int threshold; int EventIndex; } bgq_overflow_t; // Control state structure... Holds local copy of read counters... typedef struct bgq_control_state { int EventGroup; int EventGroup_local[512]; int count; long_long counters[BGQ_PUNIT_MAX_COUNTERS]; int muxOn; // multiplexing on or off flag int overflow; // overflow enable int overflow_count; bgq_overflow_t overflow_list[512]; int bgpm_eventset_applied; // BGPM eventGroup applied yes or no flag } bgq_control_state_t; // Register allocation structure typedef struct bgq_reg_alloc { //_papi_hwd_bgq_native_event_id_t id; } bgq_reg_alloc_t; // Register structure not used... typedef struct bgq_register { /* This is used by the framework.It likes it to be !=0 to do something */ unsigned int selector; /* This is the information needed to locate a BGPM / Punit event */ unsigned eventID; } bgq_register_t; /** This structure is used to build the table of events */ typedef struct bgq_native_event_entry { bgq_register_t resources; char name[PAPI_MAX_STR_LEN]; char description[PAPI_2MAX_STR_LEN]; } bgq_native_event_entry_t; /* Override void* definitions from PAPI framework layer */ /* with typedefs to conform to PAPI component layer code. */ #undef hwd_reg_alloc_t #undef hwd_register_t #undef hwd_control_state_t #undef hwd_context_t typedef bgq_reg_alloc_t hwd_reg_alloc_t; typedef bgq_register_t hwd_register_t; typedef bgq_control_state_t hwd_control_state_t; typedef bgq_context_t hwd_context_t; extern void _papi_hwd_lock( int ); extern void _papi_hwd_unlock( int ); /* Signal handling functions */ //#undef hwd_siginfo_t //#undef hwd_ucontext_t //typedef int hwd_siginfo_t; //typedef ucontext_t hwd_ucontext_t; #endif