/**
 * @file op_pe_utils.h
 * Definitions and prototypes for tools using Linux Performance Events Subsystem.
 *
 * @remark Copyright 2013 OProfile authors
 * @remark Read the file COPYING
 *
 * Created on: May 21, 2013
 * @author Maynard Johnson
 * (C) Copyright IBM Corp. 2013
 *
 */


#ifndef OP_PE_UTILS_H_
#define OP_PE_UTILS_H_

#include <dirent.h>

#include <vector>

#include "op_cpu_type.h"

#define OP_APPNAME_LEN 1024
#define OP_MAX_EVENTS 24

/* A macro to be used for ppc64 architecture-specific code.  The '__powerpc__' macro
 * is defined for both ppc64 and ppc32 architectures, so we must further qualify by
 * including the 'HAVE_LIBPFM' macro, since that macro will be defined only for ppc64.
 */
#define PPC64_ARCH (HAVE_LIBPFM) && ((defined(__powerpc__) || defined(__powerpc64__)))

// Candidates for refactoring of operf
namespace op_pe_utils {

// prototypes
extern int op_check_perf_events_cap(bool use_cpu_minus_one);
extern int op_get_sys_value(const char * filename);
extern int op_get_cpu_for_perf_events_cap(void);
extern int op_validate_app_name(char ** app, char ** save_appname);
extern void op_get_default_event(void);
extern void op_process_events_list(std::vector<std::string> & passed_evts);
extern std::set<int> op_get_available_cpus(int max_num_cpus);
}


#endif /* OP_PE_UTILS_H_ */
