15a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng/** 25a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * @file opd_extended.h 35a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * OProfile Extended Feature 45a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * 55a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * @remark Copyright 2007-2009 OProfile authors 65a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * @remark Read the file COPYING 75a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * 85a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * @author Suravee Suthikulpanit <suravee.suthikulpanit@amd.com> 95a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * Copyright (c) 2009 Advanced Micro Devices, Inc. 105a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng */ 115a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 125a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng#ifndef OPD_EXTENDED_H 135a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng#define OPD_EXTENDED_H 145a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 155a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng#include "opd_trans.h" 165a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng#include "odb.h" 175a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 185a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng#include <stdlib.h> 195a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng#include <stdint.h> 205a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 215a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 225a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng/** 235a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * OProfile Extended Feature Table Entry 245a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng */ 255a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Chengstruct opd_ext_feature { 265a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng // Feature name 275a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng const char* feature; 285a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng // Feature handlers 295a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng struct opd_ext_handlers * handlers; 305a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng}; 315a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 325a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng/** 335a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * OProfile Extended handlers 345a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng */ 355a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Chengstruct opd_ext_handlers { 365a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng // Extended init 375a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng int (*ext_init)(char const *); 387a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown // Extended deinit 397a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown int (*ext_deinit)(); 405a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng // Extended statistics 415a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng int (*ext_print_stats)(); 425a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng // Extended sfile handlers 435a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng struct opd_ext_sfile_handlers * ext_sfile; 445a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng}; 455a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 465a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng/** 475a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * OProfile Extended sub-handlers (sfile) 485a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng */ 495a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Chengstruct opd_ext_sfile_handlers { 505a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng int (*create)(struct sfile *); 515a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng int (*dup)(struct sfile *, struct sfile *); 525a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng int (*close)(struct sfile *); 535a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng int (*sync)(struct sfile *); 545a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng odb_t * (*get)(struct transient const *, int); 555a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng struct opd_event * (*find_counter_event)(unsigned long); 565a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng}; 575a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 585a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng/** 595a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * @param value: commandline input option string 605a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * 615a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * Parse the specified extended feature 625a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng */ 635a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Chengextern int opd_ext_initialize(char const * value); 645a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 655a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng/** 667a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown * @param value: commandline input option string 677a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown * 687a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown * Deinitialize 697a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown */ 707a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brownextern int opd_ext_deinitialize(); 717a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 727a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown/** 735a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * Print out extended feature statistics in oprofiled.log file 745a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng */ 755a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Chengextern void opd_ext_print_stats(); 765a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 775a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng/** 785a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * opd_sfile extended sfile handling functions 795a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng */ 805a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Chengextern void opd_ext_sfile_create(struct sfile * sf); 815a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Chengextern void opd_ext_sfile_dup (struct sfile * to, struct sfile * from); 825a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Chengextern void opd_ext_sfile_close(struct sfile * sf); 835a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Chengextern void opd_ext_sfile_sync(struct sfile * sf); 845a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Chengextern odb_t * opd_ext_sfile_get(struct transient const * trans, int is_cg); 855a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 865a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng/** 875a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * @param counter: counter index 885a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * 895a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * Get event struct opd_event from the counter index value. 905a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng */ 915a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Chengextern struct opd_event * opd_ext_find_counter_event(unsigned long counter); 925a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 935a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 945a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng#endif 95