/****************************/
/* THIS IS OPEN SOURCE CODE */
/****************************/
/**
* @file linux-IOunit.h
* @author Heike Jagode
* jagode@eecs.utk.edu
* Mods: < your name here >
* < your email address >
* BGPM / IOunit component
*
* 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 _PAPI_IOUNIT_H
#define _PAPI_IOUNIT_H
#include "papi.h"
#include "papi_internal.h"
#include "papi_vector.h"
#include "papi_memory.h"
#include "extras.h"
#include "../../../linux-bgq-common.h"
/************************* DEFINES SECTION ***********************************
*******************************************************************************/
/* this number assumes that there will never be more events than indicated */
#define IOUNIT_MAX_COUNTERS UPC_C_IOSRAM_NUM_COUNTERS
#define IOUNIT_MAX_EVENTS PEVT_IOUNIT_LAST_EVENT
#define OFFSET ( PEVT_L2UNIT_LAST_EVENT + 1 )
/** Structure that stores private information of each event */
typedef struct IOUNIT_register
{
unsigned int selector;
/* Signifies which counter slot is being used */
/* Indexed from 1 as 0 has a special meaning */
} IOUNIT_register_t;
typedef struct IOUNIT_reg_alloc
{
IOUNIT_register_t ra_bits;
} IOUNIT_reg_alloc_t;
typedef struct IOUNIT_overflow
{
int threshold;
int EventIndex;
} IOUNIT_overflow_t;
typedef struct IOUNIT_control_state
{
int EventGroup;
int overflow; // overflow enable
int overflow_count;
IOUNIT_overflow_t overflow_list[512];
long long counts[IOUNIT_MAX_COUNTERS];
} IOUNIT_control_state_t;
typedef struct IOUNIT_context
{
IOUNIT_control_state_t state;
} IOUNIT_context_t;
#endif /* _PAPI_IOUNIT_H */